Saturday, May 9, 2026
Three product surfaces locked their wedges. Mode 0.5 codified. The journal moved into the neil-hub. gl-options started.
Worked on
- Journal hub — consolidated journal.godfreylabs.com under neil.godfreylabs.com/journal (audience-first hierarchy)
- Public-surface scrubs — public terminology pass; tightened bio entries
- Outcome cards — single source of truth for display rules + human-readable titles
- Ideal Day operating system — JSON canon, Obsidian MD mirror, Python CLI (now / today / week / compare)
- gl-academy — wiped Astro umbrella, rescaffolded as Next.js + FastAPI mirror of gl-elevatedaily
- Mode 0.5 ProductDiscovery — CLI, 3 declarative LLM modules, principle doc, 2 durable rules
- gl-defi — Mode 0.5 wedge lock (dogfood path), Mode 1c structural alignment, Mode 1 Morning Cockpit spec drafted
- gl-options — new repo scaffolded; wedge discovery locked
- gl-elevatedaily — status pass + parent submodule bump
Shipped
- https://neil.godfreylabs.com/journal — journal lives inside the neil-hub now (no separate subdomain in the nav)
- 7 gl-neil commits — corpus scrubs, audience-first hub, outcome-card title fix, single-source display rules
- Ideal Day shipped end-to-end — `ideal-day.json` + `ideal-day.md` + a Python CLI (smoke-tested all four commands)
- gl-academy rescaffold — Next.js 15 / React 19 / Tailwind 4 build green, 6 static pages, /ilts coming-soon preserved
- Mode 0.5 in the toolbox — discovery procedure, three declarative LLM modules, principle doc with citations
- 2 durable rules locked — discovery required before architecture, falsification-driven over rubric-driven
- gl-defi structurally identical to gl-elevatedaily — folder-per-epic / file-per-story, 4 epics + 17 stories, 9 ADRs flat, lakehouse epic deleted
- Morning Cockpit spec drafted — public-address wallet read, position-aware simulator (not recommender), SSE + Web Push, multi-tenant from day 1
- gl-options repo scaffolded — api / brain / web / database / docs / mobile / tests + Dockerfile + dev.sh; wedge discovery doc locked
Got stuck
- Rubric-loop on the gl-academy wedge — 4 reframes (ILTS → IEP/sped → homeschool marketplace → tools-only) before naming it. Sign: every wedge recommendation got rejected on a freshly-surfaced constraint. Diagnosis: scoring matrix was the wrong tool for the front-end of discovery — switch to falsification before running another scan. Codified.
- Almost dispatched a capital scan on an EdTech wedge — caught the scope violation before the call. Capital research and product research are different jobs and want different tools. Saved as memory.
- Initial gl-defi scaffold left legacy
docs/{lakehouse,web,database,desktop}/in place under a Strangler Fig flag. Pushed back on it: when matching a standard, do the migration; don't half-do it with "kept in place" comments. - Closed-beta scope thinking — initially too conservative. Closed beta = product-validation milestone, not architecture-readiness milestone. Reframed to "v1 of every surface, hardened version for public launch."
Tomorrow
- gl-academy Phase 1 constraints lock — `discovery.py --start gl-academy 2026-05-wedge` (six-category questioning, no rubric)
- gl-defi Morning Cockpit — resolve 4 spec TODOs, run `requirements.py --lock`, then Mode 2 Architect pass
- gl-options — push initial commit; commit gl-academy rescaffold (uncommitted as of wrap)
- Wire `ideal_day.now` into the morning brief and end-of-day wrap
Notes
Three product surfaces converged on the same shape today — gl-defi, gl-options, gl-academy all scaffolded as Next.js + FastAPI mirrors of gl-elevatedaily. That's not coincidence; it's the canonical layout becoming load-bearing. When the fourth project lands the structure question is already answered.
The pattern of the day was discovery before scaffold, falsification before rubric. The wide EdTech scan rebounded four times — that's the rubric loop, and rubrics can't tell you whether the constraints they're scoring against are the right constraints. Discovery cuts in upstream of architecture: generate broadly, design 7-day cheap experiments with commitment-shaped thresholds, let data pick. Skipping discovery on an unlocked wedge is now a named anti-pattern.
gl-defi locked via the dogfood override — if the dashboard is worth building into a product I'd use it myself. Validation comes from my own morning routine before it comes from a customer. A valid path through the same gate; not skipping it.
Journal hub move: journal.godfreylabs.com is now neil.godfreylabs.com/journal.
Audience-first hierarchy — visitors land on the person, then the body of work,
not a separate subdomain that asks them to context-switch. The DNS still
resolves; the canonical link in the nav doesn't.
