lab3120 Publishing Platform — Architecture (living)
Forming, not final. The operator named lab3120 as a mutating state. This doc captures the shared frame so the design stops living only in chat — claude design’s SDK work and the webmaster’s publish-pipeline work both hang off it. Update as the picture sharpens. Authored by Gor Hajus (webmaster) from the operator’s 2026-06-26 framing.
The one-liner
lab3120.earth functions as a publishing platform for ecosystem3120’s documentation — agent/system docs, a definitions wiki, a CC PDF library, position/white papers, and real guides — authored in Obsidian, backed by git, published read-only to the web. The Obsidian vault acts as the CMS; the web front end stays read-only (visitors read, never edit).
The model — three layers (operator’s words)
- Author locally — write in the lab3120 Obsidian vault.
~filesand~directoriesmark staging. - Back up via remote — a git repo (
lab3120@git) holds the durable copy. Off-machine recovery. - Publish via the Obsidian surface — a build engine turns the vault into the static lab3120.earth
site.
~-staged + tagged content filters up to the public site. No front-end editing.
Routing convention (prefix + tag)
- Filename prefixes serve Obsidian-side hygiene + the eye:
~= staging,_= infra / unpublished,!= an alternative that renders,.= hidden (Obsidian AND most build engines ignore it). - The publish gate rides frontmatter (
publish: true+ routing tags), NOT the filename — so a tree reorganization never silently un-publishes. “Judicious tagging routes” (operator). Use both.
Content classes (what flows through the pipe)
| class | examples | notes |
|---|---|---|
| Structured templated docs | skills, agent profiles, sub-agent profiles, code releases | each from a template; all sync to the repo |
| Shared thinking-forms | splats, reflections, plans | the local forms, shared outward — valuable to others |
| Definitions / terms wiki | glossary, concept notes | everything cross-linked, surfaced via lab3120 |
| PDF library — “the stacks” | public-domain / CC share-alike PDFs | a different asset class: files + index, not markdown pipe |
| Standalone pages | position papers, white papers | long-form, authored |
| Guides | real, substantive guides | explicitly NOT medium pablum |
| Agent blogging | agent-authored posts | LATER stage; Bluesky + other-tool integration |
The keystone — one publish engine
Everything above reduces to a single act: markdown-in-vault → rendered-page-out, gated by ~/tags.
Get the engine right and the content classes become content, not seven separate builds.
- Candidate: Quartz — built to publish an Obsidian vault. Native wikilinks (→ the wiki), frontmatter publish-flags (→ the routing gate), markdown (→ every doc form), and a graph view (the operator wants a graph, deferred to a claude-design loop). Maps near 1:1 onto the described model.
- Alternative: custom build (Eleventy / Astro) — more control, more work.
- Decision deferred — evaluate against the SDK + page design claude design produces.
Current state (verified 2026-06-26)
- lab3120.earth — LIVE on Cloudflare Pages (project
lab3120), a single hand-builtindex.html. NOT yet vault-fed. Carries a Cloudflare Web Analytics beacon. - analytics.lab3120.earth/<slug> — LIVE, a server-rendered dashboard (Pages project
lab3120-analytics) reading the Web Analytics GraphQL feed behind an unguessable path. - Recovery — both pieces + a cloud-config map captured in
github.com/artificer3120/lab3120-web. - The publish engine does not exist yet — today’s page reads from a code folder, not the vault. Standing up the engine = the gap between today and the model.
Open seams (named, not solved)
- Engine choice ↔ graph — Quartz ships the graph the operator wants; a custom build re-implements it. Couple the decision to the claude-design loop.
- Two halves, one handoff — the SDK + lab3120 pages claude design builds = the front-end skin; the publish engine = the pipe that fills it. Define the handoff (theme/template contract).
- PDF “stacks” as a side rail — served as files + an index, CC-licensed, alongside the markdown pipe, not through it.
lab3120@gitrepo — likely the public-facing chassis (operator3120) since it shares docs openly; distinct from the privateartificer3120/lab3120-webrecovery repo.- Templates — the structured-doc classes need authored templates (skill / agent-profile / sub-agent / code-release) before the pipe can enforce shape. The lab3120 vault has no TEMPLATES folder yet.
- Agent blogging + Bluesky — explicitly a later stage; park it.
What comes next (sequence, not commitment)
- claude design: SDK now → lab3120 pages.
- webmaster: when the operator gives the word — spike the publish engine (likely Quartz) against this
vault, prove one
~-staged note routes through to a preview deploy, define the theme/template handoff. - then: author the doc templates, wire the PDF index, layer the wiki.