Architecture

graph LR
    browser[Browser] --> content[content-adapter-htmx]
    content -->|Content port| markdown[content-markdown]
    markdown --> files[(docs/**.md)]
    browser -->|HTMX| catalog[catalog-adapter-htmx]
    catalog -->|Catalog port| ts[(registry_crates)]
    browser -->|HTMX| showcase[showcase-adapter-htmx]
    showcase -->|Showcase port| apps[(showcase_apps)]

The slices

docs-v2/
crates/content-contract/contractPages, navigation, search, Content and PageRepository
crates/content-markdown/implementationMarkdown files as the page store
crates/content-adapter-htmx/adapterShell, routes, markdown to HTML, search
crates/catalog-contract/contractCrate entries and the catalog view
crates/catalog-timescale/implementationregistry_crates over TimescaleDB
crates/catalog-adapter-htmx/adapterThe crate catalog fragment
crates/showcase-contract/contractApplication entries and the showcase view
crates/showcase-timescale/implementationshowcase_apps over TimescaleDB
crates/showcase-adapter-htmx/adapterThe application showcase fragment
servers/web/compositionProviders, migrate/seed, router merge, assets

Reading the wiring

Adapters never import implementation slices: the catalog fragment is fetched by HTMX from the catalog adapter's own endpoint, so the content shell and both registries stay independent. The page you are reading is markdown served by the content slice; the cards that led you here came from showcase-contract → showcase-timescale.