🦄 Unicorn.Land ▸ docs/superpowers/specs/2026-07-23-unicorn-land-hub-design.md
updated 2026-07-23

Unicorn.Land Hub — Design Spec

Date: 2026-07-23 Status: Approved design, ready for implementation planning Owner: Joshua

Purpose

A single, password-protected website at hub.unicorn.land that renders the markdown docs from across all of Joshua’s projects into one browsable, branded HTML system.

The goal, in Joshua’s words: “When we’re working on something, I can go in and see what the latest status is, what’s outstanding, and then look at the various component files.” The hub is a reading/status surface, not an editor.

Background

The overnight repo already contains tools/mdsite.py — a Python script that renders a fixed set of markdown files into a branded, sidebar-navigation HTML site (the “Launch HQ” page). It uses the Unicorn.Land brand (opal #56dbd0 / teal / warm-stone, Outfit + JetBrains Mono) and the python-markdown library (v3.3.7, already installed) with the tables, fenced_code, toc, sane_lists, smarty extensions.

This project generalizes mdsite.py into a multi-project hub builder. It is an evolution of working code, not a from-scratch build.

Non-Goals (YAGNI)

Architecture

Approach

A single Python aggregator script walks ~/Projects, applies include/exclude rules, attributes each doc to a project, and renders one static _site/ directory. That output is deployed to hub.unicorn.land (Cloudflare Pages) and locked behind Cloudflare Access.

~/Projects/*/**.md  ──►  hub builder (Python)  ──►  hub/_site/  ──►  wrangler deploy  ──►  hub.unicorn.land (CF Access)

Location

Components

1. Discovery (smart auto-include)

Scan roots: - Every top-level folder in ~/Projects. - Nested sub-projects one level inside Unicorn.Land/ (e.g. bold-little-oracle, muse, whealthy, recipe-box, kugy-tracker, even, katseye-game).

Include per project: - Top-level *.md files. - Everything under signal folders: docs/, vega-overnight/, and (for the overnight repo) overnight/ and the root MORNING-LAUNCH.md.

Hard excludes (never scanned): - node_modules, .git, .claude, _site, .deploy, dist, build, .expo, Pods, ios/Pods, .wrangler, vendor. - Dependency/library READMEs (any .md living inside an excluded dir above).

Excluded tracks (kept as separate systems): - Obadiah/workspace/dirty — the “dirty” track. - All Oannes folders: oannes, oannes-engine, oannescode-site, and any overnight/oannes-dossier stream.

Guardrails: cap scan depth (e.g. docs no deeper than a few levels below a project root) so deeply nested noise never leaks in.

2. Project attribution

Each discovered markdown file is assigned to exactly one project group. Default attribution is the top-level project folder. A mapping in hub.toml overrides this so overnight sprint streams fold into the project they belong to:

The mapping is a small, explicit table so new streams are easy to route. Anything not in the table falls back to its containing top-level folder.

3. Status pinning

Within each project group, docs whose filename (case-insensitive, any extension of .md) matches a pin list are sorted to the top of that project’s nav and highlighted:

This makes “latest status / what’s outstanding” the first thing visible per project.

4. Rendering

5. Landing page — activity dashboard

The hub index (/) is a dashboard oriented around “what’s happening”:

6. Deploy

7. Auth

Data Flow

  1. build.py reads hub.toml.
  2. Walks scan roots, applying hard excludes and excluded-track rules.
  3. Attributes each surviving .md to a project group via the mapping.
  4. Sorts docs within each group (pins first).
  5. Renders each doc → HTML page; collects mtimes and titles.
  6. Renders the dashboard index from the collected metadata.
  7. Writes everything to hub/_site/.
  8. wrangler pages deploy publishes _site/ to hub.unicorn.land.

Error Handling

Testing

Open Questions / Deferred