Skip to content

Architecture ​

Vue 3 + Vite explorations app. Each protocol change gets a self-contained folder; routes come from REGISTRY.ts with lazy-loaded widgets.

When briefing an agent, internalize this model first — taxonomies and reuse rules matter more than stack details.

Content model ​

Explorations ​

The core unit: an interactive widget for an EIP, ERC, or research topic.

src/explorations/eip-7883/
├── canonical.ts    # Source of truth (website + MCP)
├── info.ts         # Website chrome (path, HTML, images)
├── MyC.vue         # Widget
├── examples.ts     # Presets
└── tests.spec.ts   # Tests

Schema for all explorations: src/explorations/canonicalTypes.ts. Agent contract: eip-canonical-data.mdc. Replicate twin metadata into engine modules and MCP docs; website wins on that conflict. Lab lineage, introductions, and encoding live in the engine.

MCP twin (no orphan explorations) ​

Every live exploration needs a matching MCP usage story — at minimum mcp-docs/use/eips/eip-NNNN (Runnable or Planned). The exploration is the textbook slice; MCP is the superset lab. Full path: round-trip skill (optional Bro & Bruh comic after MCP). Brief first: brief-protocol-change skill.

Landing on mainnet does not retire the exploration or the twin. Fork role may move from preview → current → historical; advertised twins stay until a later explicit cleanup. Retire an exploration only with an explicit removal (not because the fork activated). docsStatus: sunset is for no honest lab shape, not for “already on mainnet.”

REGISTRY.ts assembles all explorations into routes — no manual route registration.

Topics ​

Strategic pillars — static curated set, not added with regular explorations. Each exploration has exactly one topic in canonical.ts (ProtocolChangeTaxonomy). Valid IDs live in TOPICS.ts / topicIds.ts.

IDTitleDescription
scalingScalingData availability, throughput, L2 enablement
privacyPrivacyZK-proofs, homomorphic encryption, private mempools
uxUXAccount abstraction, wallet infrastructure, signature schemes
securitySecurityValidator incentives, cryptographic agility, MEV mitigations
robustnessRobustnessGas cost accuracy, EVM semantics hardening, spec clarity
interoperabilityInteroperabilityCross-chain standards, bridge infrastructure

When instructing an agent: pick the topic that best reflects the primary concern of the change.

Timeline ​

Forks that have explorations — ids in TIMELINE.ts match the MCP lineage catalog (fusaka, glamsterdam, …). From Shapella on, the combined upgrade name is canonical; the EL city name is an alias. Website nav is this subset only (do not add empty historical forks). Role is historical | current | preview (same as MCP namedForks[].role). Upgrade mascots (EIP-8066) live in forkCatalog.ts FORK_MASCOT_EMOJI (keep in sync with engine forks/mascots.ts) and surface on timeline pills, toggles, and MCP probe/provenance. Add a row when an exploration for that fork ships. Keep the row and the explorations after that fork is live on mainnet — role may later become historical; do not delete on activation.

Tags ​

Reusable technical concepts (max 3–4 per exploration). Tags can grow when rules are met:

RuleExample
Reusable beyond one explorationEVM yes — EIP-7883 no
Short form preferredEVM yes — Ethereum Virtual Machine no
No redundancy with existing tagsdon't add Gas if GasCosts exists
Prefer the generic conceptGasCosts yes — Gas Increases no

Valid values: TAGS.ts enum (alphabetical, lint-enforced).

E-Components ​

Reusable Ethereum-domain widgets in src/eComponents/<name>EC/. Each packages a recurring pattern (precompile interface, bytecode stepper, …). The exploration supplies execution (EVM, run callbacks); the E-Component supplies chrome and shared UI.

Brief agents: check Available E-Components before custom UI. One primary E-Component per exploration today — see E-Components for composition direction.

Design decisions ​

Folder-per-exploration — isolated deps; one REGISTRY.ts import to publish.

Dynamic views — ExplorationView.vue loads the right MyC.vue; no static per-EIP view files.

Lazy loading — each exploration is its own chunk; users download only what they visit.

Testing — Vitest for units (including e2eCatalog vs REGISTRY); Cypress is layered (shell, browse, catalog visit-all, one play path per family, layout representatives). See .cursor/rules/testing.mdc.

Video pipeline ​

Short-form exploration videos live in the isolated video/ package (sibling of og/), with a rendering layer under src/video/ activated by ?fyp-video=1. Authoring is agent-driven — see the video-short skill and video/README.md in the repo.

Structural base v0.1.3 — latest docs always apply. See changelog for history.