Rendered from the repository — the file stays the source of truth.
Docs site — project history
Status: Snapshot as of 2026-08-18, written by session C4. Covers
apps/docsthrough sessions C3 (PR #14) and C4 (PR #22). Later sessions append below rather than rewriting. Sources: PR descriptions,handovers/.Update (2026-08-18, session C8): coverage extended through the full merged board — sessions C5, C6, C7, and C8 itself in the catch-up section below.
What was built
- 2026-08-17 — Astro scaffold (PR #1): create-astro minimal template + Tailwind.
- 2026-08-17 — The documentation site, session C2
(PR #9). Ten static
pages: home, product scope, UI research, the feasibility study as the
architecture decision record, the roadmap, and the chronological session
log with one page per handover. Header, sticky sidebar, prose pages;
mobile nav is a no-JS
<details>disclosure. - 2026-08-18 — Legal pages, session C3
(PR #14):
/impressum/and/datenschutz/(with the/privacyredirect) and the footer legal nav, mirroring the marketing site — seeproduct/history/marketing.mdfor the shared story. - 2026-08-18 — This History section, session C4
(PR #22). A
historycontent collection pointed atproduct/history/and one page per package — the pages you are reading now.
Decisions and why
- Render, don’t copy. The site’s founding rule (session C2): content
collections point Astro’s content-layer
globloaders at the repo-rootproduct/andhandovers/directories (base: "../../product"), so the canonical markdown files are rendered in place. Nothing is copied intoapps/docs, no source file is ever edited from here, and presentation fixes are CSS-only (wide tables and code fences scroll inside their ownoverflow-xboxes). The C4 history section follows the same pattern — the canonical pages live inproduct/history/. - The provenance card. Every rendered document opens with its canonical repo path as a marker-yellow chip linking to the file on GitHub, plus “Rendered from the repository — the file stays the source of truth.” The site’s one rule made visible; it doubles as the citation mechanism the whole product is about.
- Marginalia identity reused, not imported (session C2). Same
paper/ink/marker-yellow tokens and type stack as the marketing site, but
the fontsource packages were added in this workspace with
bun add— the repo convention is to keep the two apps in sync by copying token changes, never by cross-workspace imports. - No docs framework, no search, no versioning, no theme toggle.
Hand-rolled was simpler at this page count (YAGNI); Shiki is pinned to
github-lightto match the single paper theme. The footer carries the same non-affiliation line as the marketing site. - Chronology-safe session URLs. Session pages live at
/sessions/<full-file-slug>/— the date-prefixed handover filename — so URLs sort chronologically and never collide. Titles and dates are recovered from each handover’s H1, because the handover files have no frontmatter (and adding some would violate render-don’t-copy).
Problems and how they were dealt with
- Canonical files have no frontmatter. Astro content collections
usually lean on frontmatter for titles and ordering; the handovers and
product docs are plain markdown owned by other conventions. Resolved in
C2 by recovering title and date from each file’s H1
(
# Session X — Topic (date)) at build time rather than annotating the sources (PR #9). - Handover assets aren’t published. Screenshot binaries under
handovers/assets/are not part of the build; nothing in the markdown embeds them today, so no image handling was needed — but the C2 handover records that if a future handover embeds an image, the docs build needs a strategy (e.g. a passthrough copy). Consciously deferred. - The sessions sidebar won’t scale forever. C2 noted that at ~15+ sessions the per-session sidebar group should collapse to just the “Session log” link. Still open; the count is at ten.
- Zero external requests, verified not assumed. The C2 review grepped
dist/for external<script>/<link>tags andurl()references — the only URLs in the output are content anchors inside rendered documents. The same check is repeated by later sessions touching the static sites (C3, C4).
Where the docs site stands
Update (2026-08-18, session C8): superseded — see the catch-up section that follows; the site now also lives at
docs.mrgnl.eu(B4).
Live at the Scaleway bucket endpoint since B2’s deploy
(PR #13), rendering
product docs, decisions, roadmap, session log, legal pages — and now this
history. Open items: the sidebar-scaling note above and the shared-package
dedup for legal content (see product/history/marketing.md).
Catch-up: sessions C5–C8 (appended 2026-08-18, session C8)
Written by session C8 from the session handovers and PR descriptions
(#28, #34, #41). Since C4, the site also gained its custom domain —
https://docs.mrgnl.eu, an Edge Services pipeline in front of the same
bucket (session B4, PR
#45,
product/history/infrastructure.md).
What was built
- 2026-08-18 — Architecture section, session C5
(PR #28). The
Kruchten 4+1 views, canonical in
product/architecture/and rendered through a newarchitecturecontent collection — written code-first from the merged source, with seven UML diagrams (class, sequence, component, deployment, use-case). Unlike/history/, the section’s overview renders the canonicalindex.md(the render-don’t-copy rule applied to the index itself). - 2026-08-18 — Dependency rationale, D-10, and the FAQ, session C6
(PR #34). The
development view gained the per-dependency rationale tables, feasibility
gained D-10 (the deliberate Scaleway-over-AWS decision with its
interchange map), and
/faq/renders the newproduct/faq.md— eleven reviewer questions, each answer routing into the deep docs. - 2026-08-18 — Scope status badges, session C7
(PR #41). Zero
docs-app source changes: the insert-only annotations in
product/scope.md(36 status badges + summary table) render through the existing product collection, blockquotes appearing as styled callouts — verified in the built output. - 2026-08-18 — History/architecture catch-up, session C8
(PR #54;
handover
handovers/2026-08-18-session-c8-history-latest.md). Docs-app change: the sidebar became independently scrollable (owner request mid-session) — the sticky nav gets its ownmax-height+overflow-y, so long navigation no longer requires scrolling the whole page.
Decisions and why
- Diagrams: PlantUML sources rendered to committed SVGs (session C5,
revised mid-session on owner review — the first iteration used
hand-authored ASCII; the owner directed UML instead). The
.pumlsources are canonical inproduct/architecture/diagrams/; committed SVGs are regenerated bydiagrams/render.shusing the official PlantUML Docker image, so neither Java nor Graphviz joinsmise.tomlor CI. Rendering is commit-time, never build- or page-load-time: the site stays free of client-side rendering and external requests (client-side mermaid.js and the headless-browserrehype-mermaidstayed rejected), and the images render on GitHub too. passthroughImageService()(session C5): Astro’s content-layer markdown images otherwise invoke the default sharp service, which is not installed (the build failed) — and the only images are pre-rendered SVGs needing no raster transforms, so passthrough avoids a native dependency.- Canonical-link rewriting as a Sätteri hast plugin (session C6,
src/canonical-links.mjs). The FAQ links sibling docs with repo-relative markdown links (GitHub-navigable); Astro 7’s default processor takes no rehype plugins, so a hast plugin rewrites known repo-relative.mdlinks to the site routes rendering the same files — such links previously 404’d on the site. This added the site’s one new dependency since C2 (@astrojs/markdown-satteri, explicit rather than transitive).
Problems and how they were dealt with
- Graphviz spreads deployment diagrams horizontally (session C5): the topology diagram needed coarser artifact granularity plus hidden layout edges to fit the docs column (1854 → 1432 px).
product/security.mdhas no rendered route (session C6): the FAQ links SEC topics via the logical/physical views instead; if a security page is ever added,canonical-links.mjsneeds a rule for it. Still open.- The sessions sidebar keeps growing (C2’s scaling note): the count passed fifteen with this session’s handover. C8 made the sidebar independently scrollable, which removes the immediate pain; collapsing the per-session group remains the recorded long-term option.
Where the docs site stands (2026-08-18, after C8)
Live at https://docs.mrgnl.eu, rendering the product docs, decisions
(D-1…D-10), FAQ, scope with status badges, architecture views with UML
diagrams, per-package history (these pages), and the full session log —
all canonical files rendered in place, zero external requests. Open: the
security-register route question and the legal-content dedup
(product/history/marketing.md).