docHub

docHub rebuilt as FreshCards-style SPA (v3)

Status: ✅ Rebuilt + redeployed at https://57663de0.docshub-1pi.pages.dev (latest). Awaiting operator Cloudflare Access config.

TL;DR

Replaced the static-file-renderer docHub with a single-page-application (SPA) shell inspired by the FreshCards substrate visual chrome:

What was wrong before (v2)

The previous static-site renderer had these issues:

  1. Tables rendered as raw pipe-text (| Step | What | Why | |---|---|---|)
  2. Numbered lists rendered as one run-on paragraph (1. Fetch ... 2. Read ...)
  3. No card grid — single-column, no sidebar, no badges
  4. README referenced two faces (dev/user), but the actual design is three faces (user/dev/mavis)
  5. No visual chrome — just headings + paragraphs
  6. Plain HTML pages instead of SPA

The operator pointed this out after I shipped v2. Took screenshots of the original shared-docs hub (https://07bf6f81.shared-docs-4v2.pages.dev/) and the actual FVS FreshCards module (avidtech6/freshvibestudio/studio/modules/freshcards/) for reference.

Architecture (v3)

SPA shell (site/index.html)

Visual chrome (site/style.css)

Based on FreshCards substrate visual primitives:

Markdown renderer (in build-site.mjs)

Replaced the thin parser with a proper block-level parser:

Manifest generator (build.mjs)

Added a summary field per doc — extracted from the first non-heading, non-empty, non-blockquote paragraph, with leading **Foo:** prefix stripped, capped at ~180 chars.

Build & deploy (build-site.mjs, deploy.sh)

Mobile-friendly

FreshCards substrate alignment

The visual chrome mirrors FreshCards substrate primitives:

FreshCards pactdocHub v3
cards.geometry.base.001 (min 280×120).freshcard { min-height: 120px }
cards.geometry.padding.001 (4/8/12/16/24)14px padding (between 12 and 16)
cards.geometry.border.001 (1px, radius 6/8/12)border: 1px solid; border-radius: 8px
cards.lifecycle.* (status badges).badge-status.complete/in-progress/planned/blocked
cards.semantic.role.001-006 (focus/action/navigation/status/filter/info).badge-type.{doctrine,decision,report,plan,lane,dangerous,reference,project,concept,user-doc,bootstrap,prompt}
FreshCards Workspace (header + card list + active display)docHub sidebar (face nav + section nav + quick links) + main content (face cards + detail)

FreshCards branch state (verified)

The feat-freshcards-module branch is diverged from main by 73 commits behind, 1 commit ahead. The 1-ahead commit (e1b61bf5 "feat(fix): viewport fill + card overflow + mobile doctrine Stages A/B/C") is already on main — the branch is stale, no merge action possible without rebasing first.

The actual FreshCards substrate work shipped to main via these commits:

So FreshCards is canonical at studio/modules/freshcards/ as a substrate (per D-056). docHub v3 uses the visual chrome of that substrate, adapted for static docs.

Open questions

Operator action

  1. Cloudflare Access — email allowlist on /dev/* and /mavis/* (5 min, instructions in dev/deploy-access.md)
  2. Cards Mavis Region Schema sign-off (OQ-1) — operator action
  3. Embed <doc-hub> in an FVS app to test the embeddable face
  4. (Optional) FVS module wrapper at studio/modules/docshub/ — the canonical export of docHub as a FreshCards-style substrate, post-deploy

Memory updates

Updated agent memory:

Files of note

Screenshots


← back to Mavis workshop