DidiDecks promoted to its own repo, ai-labs gets its first splash
Two related moves on the same day: the slide-deck work that was mis-parented under astro-knots became a first-class child of ai-labs (new repo, new specs, two client engagements re-attached as nested submodules), and ai-labs itself grew a splash page — three-mode + two-tier tokens, mono-forward bench aesthetic, rolled-up changelog + context-v across all three active children.
DidiDecks promoted to its own repo, ai-labs gets its first splash
Why Care?
This is what the pseudomonorepo discipline looks like when it actually pays off. A folder full of specs at ai-labs/context-v/specs/ plus two client engagements that were mis-parented under astro-knots/sites/ got collapsed into the right shape: a first-class child of ai-labs/ with its own GitHub repo, its own three-tier branches, its own context-v/ and changelog/, its own splash page on day one — and the two client sites re-attached as nested submodules in their right home.
In the same session, ai-labs/ got its own splash page — public face for the pseudomonorepo, three current products on display (Context Vigilance, MemoPop AI, DidiDecks AI), rolling up the changelog and context-v from every child. The narrative parent now matches the git parent at every level of the tree, and someone landing cold can see what we're building without needing to clone anything.
The deck-as-code paradigm is what lossless-group/dididecks-ai is for — receiving-side Due-Diligence-grade slide decks, code-first, AI-authored, white-label-publishable. Today's work didn't ship that product. It built the substrate the product will sit on.
What's New?
lossless-group/dididecks-ai exists
New public repo at github.com/lossless-group/dididecks-ai, three branches at parity (development default, main, master). Inside:
context-v/specs/— three living specs migrated fromai-labs/context-v/specs/:Dididecks-AI-Slide-Decks-as-Code.md— the parent spec; Due-Diligence framing, two North Stars, seven Design Principles, system map.Dididecks-AI-DD-Ready-Citation-and-Source-Access.md— sibling spec; every claim backable, source-access protocol, archive-on-cite.Dididecks-AI-Visual-and-Diagram-Component-Library.md— sibling spec; reusable AI-composable visual primitives.
context-v/explorations/Dididecks-AI-Business-Model.md— option-space for the OSS / hosted / Forward-Deployed motion.context-v/plans/Init-DidiDecks-as-core-Submodule-of-AI-Labs.md— the plan-of-record we executed today.splash/— Astro Knots splash, builds locally, base/dididecks-ai/. Hero leads with the DD framing; the three sibling specs are surfaced as cards.client-sites/calmstorm-decks(tracksdevelopment) andclient-sites/reach-edu-hub(tracksmain) — the two driving client engagements, re-parented fromastro-knots/sites/. Site repos themselves untouched on GitHub; only the parent reference flipped. Vercel deploys remain wired to each site's own repo and are unaffected.changelog/2026-05-11_01.md— DidiDecks's own init entry.
All relative wikilinks in the migrated context-v files were rewritten for the new nesting depth (../../../../astro-knots/... and ../../client-sites/calmstorm-decks/...).
ai-labs/.gitmodules now carries:
[submodule "dididecks-ai"]
path = dididecks-ai
url = https://github.com/lossless-group/dididecks-ai.git
branch = developmentThe corresponding entries in astro-knots/.gitmodules for sites/calmstorm-decks and sites/reach-edu-hub are removed (committed in astro-knots, push deferred per the no-auto-bump-parents discipline).
ai-labs splash
New splash at ai-labs/splash/, Astro 6, base /ai-labs/. Sticks the landing on the three-mode + one-theme + two-tier token contract from the theme-system skill:
<html data-mode="…">— three first-class modes:dark("bench" — default)light("field notebook")vibrant("signal / demo"; dark-based per theme-system)
Pre-paint inline script in
BaseLayoutresolves persisted mode fromlocalStoragebefore first paint — no FOUC.Two-tier tokens in
src/styles/theme.css: Tier 1 named (--color__sodium,--color__cyan-trace,--color__plum, …), Tier 2 semantic (--color-bg,--color-accent,--color-thread, …) rebound per mode. Components read Tier 2 only.Visual posture deliberately divergent from sibling Lossless splashes (memopop dark+sans+radial-mesh, content-farm similar, lfm light+serif+paper-grain):
Mono-forward type — Space Grotesk display, Inter Tight body, JetBrains Mono dominant for eyebrows, metadata, labels, status pills, every number.
Bench-card chrome — hairline border + mono label-tab clipped to top-left like a hand-labelled drawer.
Blueprint-grid background — pure CSS, 8px fine + 32px major, masked to fade below the fold.
Brand spine — sodium amber + electric cyan trace + plum-magenta signal.
Content surfaces:
Hero with a live readout of the latest changelog entries (proves the rollup mechanism is current).
Roster of the three active products — Context Vigilance Kit, MemoPop AI, DidiDecks AI.
"Where prior work landed" strip — Content Farm, image-gin, lossless-skills, the orchestrator-into-MemoPop fold.
Discipline strip —
context-v·changelog· branch tiers.Studies row — the three pinned reading lists.
pnpm rollup:sync walks each child submodule's locally-checked-out changelog/ + context-v/ and writes them into splash/src/rollup/ with from + from_path provenance frontmatter. The build then reads the union of parent + rollup. Current state:
| parent | rolled up | |
| changelog | 2 | 5 (3 + 1 + 1) |
| context-v | 9 | 21 (2 + 14 + 5) |
Build emits 39 routes. pnpm build clean from a fresh pnpm install --ignore-workspace.
DESIGN.md + OG image set
splash/DESIGN.mdauthored per the Google Stitch open spec — full YAML frontmatter (colors / typography / rounded / spacing / components / modes / imagery), eight prose sections in canonical order, with the off-specimagery:extension slotted before Do's and Don'ts per themaintain-design-mdskill.Seven OG image deliverables generated via Ideogram v3 using the
generate-consistent-og-imagesskill:public/ogimage__AI-Labs--Default.png ← style_reference for re-upload public/ogimage__AI-Labs--Default.jpg public/ogimage__AI-Labs--Banner.jpg ← 16x9 OG / Twitter / Slack public/ogimage__AI-Labs--BannerTall.jpg ← 3x4 WhatsApp / iMessage public/ogimage__AI-Labs--BannerTallMax.jpg ← 2x3 dramatic tall public/ogimage__AI-Labs--Portrait.jpg ← 4x5 LinkedIn / IG feed public/ogimage__AI-Labs--PortraitTall.jpg ← 9x16 Stories / Reels public/ogimage__AI-Labs--Square.jpg ← 1x1 avatarsAll seven read as the same scene from different angles — three small instrument modules in a row on a dark matte bench surface, empty dark wall above with subtle overhead spotlight. The seed (16×9) was generated with the prompt driving the aesthetic; the six variants uploaded that PNG as
style_reference_imagesfor family-cohesion.
A small skill lesson worth saving
For the seed pass (no style reference yet), the color_palette parameter dominated the composition — Ideogram painted the brand spine as rainbow stripes on every available surface regardless of negative_prompt: rainbow, vibrant, saturated. The fix was to bypass the palette entirely for the seed (--no-palette flag added to the wrapper script) and let the prompt drive aesthetic. Once we had a dark, modular reference image, re-enabling the palette for the six variants was safe because the reference image dominated. The generate-consistent-og-images skill's Example B says "generate a one-off using only color_palette + style_type=AUTO" — but for the ai-labs aesthetic that produced rainbow disasters and dropping the palette was the right move. Worth noting back to the skill.
How children talk to the parent now
ai-labs/ # this pseudomonorepo
├── memopop-ai/ # active product (tracks main)
├── dididecks-ai/ # active product (tracks development) ← NEW
│ ├── client-sites/
│ │ ├── calmstorm-decks/ # ← moved here from astro-knots/sites/
│ │ └── reach-edu-hub/ # ← moved here from astro-knots/sites/
│ ├── context-v/{specs,explorations,plans}/
│ └── changelog/
├── context-vigilance-kit/ # experiment becoming a product
├── studies/ # three pinned reading lists
├── packages/ # vendored AI tooling
├── apis/ scripts/ utils/ # sandbox
├── context-v/ # parent-level cross-cutting docs
├── changelog/ # ← this entry lives here
└── splash/ # ← NEW — Astro Knots, three modes, rolls up childrenThe narrative parent matches the git parent at every level. Each child carries its own three-tier branches; each rolls up to the parent splash; the parent splash will eventually roll up further to lossless-monorepo. The discipline scales.
Deferred (next ship)
Pagefind search on the ai-labs splash (skill's default; intentionally deferred to keep the first ship tight).
.github/workflows/pages.ymlto deploysplash/on push tomain.Wiring the canonical
og:imagepaths intoBaseLayout's<MetaTags>so the new image set actually surfaces on unfurl.Bump
lossless-monorepo's gitlink forai-labsandastro-knotswhen you're ready — held back per the "parents tidied deliberately, not auto-bumped" preference.
