โ Update 2026-05-14 โ ALL 7 fixes shipped
Every item from the original audit is done. #1 staleness pills + Today's Brief auto-refresh viabuild_dashboard.py (anchored values: days_to_demo, days_to_annex_b, fresh pill from git mtime, latest brief). #2 active-now widget on /projects + 8 scratch dirs moved to projects/_archive/. #3 mobile pass: collapsible-on-mobile banners (tap to expand), responsive snapshot pill on drum/machine viewers, tighter KPI grid + hub h2 typography on small screens. #4 global Cmd+K search across 28 surfaces. #5 closed without code โ concluded /sand-separator (project hub) and /clients/rubisco2.html (client overview) serve different levels, not actual dups. #6 recently-shipped widget auto-populates from git log. #7 nav split: content stays top-level, Tools dropdown now holds Sessions/Voice/Workers/CAD/Search, Knowledge dropdown holds Vision/Brand/Tech/UX-Audit.
1
The staleness UI is lying โ fix or remove
Tier 1 ยท observableThe staleness pills + Today's Brief + Active alerts are all visually present but un-maintained, which is worse than not having them.
dashboard.htmlshows "Fresh ยท 1d" pill butdata-last-reviewed="2026-05-12"is 2 days old and the content body references "2026-04-28" (16 days old).- Today's Brief is dated 2026-04-27 โ 17 days stale โ sitting in the most-visible card on the dashboard.
- Active alerts banner still references resolved Apr 21 / Apr 22 / Apr 28 issues.
- "Open decisions: 11" KPI has no obvious sync with
decisions.html.
Fix: either wire the staleness pill to actual git mtime + the brief widget to today's date (auto), or remove these widgets. Lying-by-claim > lying-by-omission for a hub you want to trust.
Why this ranks #1: confidence in the entire hub depends on whether its visible signals are honest. Every other improvement is worthless if you can't trust what you read.
2
Tier 1 ยท observable
/projects.html is a 1,585-line wall of text
Tier 1 ยท observable
- Five tier sections (Client / Internal / GCT / Future / Skills) all rendered at once. Scrolling through ~30 items to find one is the friction you flagged on the voice note.
- No active/archive split despite 22 directories under
/projects/โ half are scratch (sphere-on-table-*,ball-on-table-*,test-*).
Fix: default view = "Active in last 14 days" (~6-8 cards). Toggle to "All by tier." Move scratch dirs to
projects/_archive/ (or hide from this index). Add client-first filter chips at the top as an alternative axis.
Single biggest navigation win. Cuts your "29 projects" complaint to the active ~8.
3
Mobile experience on dense pages
Tier 3 ยท judgment- Viewport +
@media+ PWA tags are wired. Good baseline. - But dashboard has 4 KPI cards + 3 banners + 5 sections = 12+ stacked blocks; on phone it's a long vertical scroll before reaching anything actionable.
- 3D viewers (
/projects/feeder,/drum,/machine) are canvas-first; the snapshot pill I added sits as fixed-position which probably overlaps content on small widths.
Fix: mobile pass on the top 3 surfaces you actually open from phone (dashboard, hub, viewer). Specifically: collapse banners into a "what changed" line, single-column KPI grid, snapshot pill responsive width.
4
No global search
Tier 2 ยท derived- 13 top-level pages + 22 projects + 8 client subpages = 43+ findable surfaces. Past ~20, navigation through dropdowns is slower than typing.
- Each project has a slug; trivial to build a static client-side fuzzy-search index over titles + slugs.
Fix: keyboard shortcut
Cmd+K opens a search modal; ranks by recency ร match. ~2 hours.
High value per hour.
5
Duplicated client/project surfaces
Tier 2 ยท derived/sand-separator(RUBISCO2 hub) and/clients/rubisco2.htmlboth exist. Likely overlapping but probably out of sync. Same risk for other clients.- Question: which is canonical?
Fix: pick one per client as canonical, redirect the other. Don't maintain twins.
6
"Recent activity" / "what shipped" surface is missing
Tier 2 ยท derived- You have "stale items" (negative signal) but no "recently shipped" (positive signal).
- The event log Spark maintains (auto-loaded in sessions) has the data โ just needs a view.
Fix: dashboard widget that reads the event log and shows last 7 days of commits / deploys / decisions.
Underrated โ gives a "things are happening" psychological cue and helps you remember what you shipped this week.
7
Nav information levels are mixed
Tier 3 ยท judgment- Top nav puts content (Projects, Briefs, Decisions, Vision, Brand) next to operational tools (Sessions, Voice, Workers). Different cognitive register.
- "More" dropdown is a junk drawer of low-frequency items โ fine, but could split into "Knowledge" (Vision, Brand, Tech) vs "Tools" (CAD, Workers, Voice).
Fix: smaller-bore. Not urgent.
๐ Ranked work list
| # | Fix | Effort | Impact |
|---|---|---|---|
| 1 | Auto-update staleness pills + Today's Brief OR remove the lying widgets | 2-3 h | High |
| 2 | Active-only /projects.html view + archive scratch dirs | 3-4 h | High |
| 3 | Mobile pass on dashboard + hub + viewer | 4-6 h | Med-High |
| 4 | Global search (Cmd+K) | 2 h | Med-High |
| 5 | Dedup client/project canonical pages | 1-2 h | Medium |
| 6 | Recent-activity widget on dashboard | 2 h | Medium |
| 7 | Nav split content vs tools | 1 h | Low |
Recommended ship order: 1 โ 2 โ 4 โ 3 โ 6 โ 5 โ 7. Front-loads trust + navigation wins; the mobile pass benefits from the structural fixes landing first.
๐๏ธ Surface inventory (what got walked)
| Surface | Count | State |
|---|---|---|
| Top-level pages | 13 | dashboard, projects, sessions, voice, decisions, brand, tech, vision, spark, workers, ... |
| Client subpages | 8 | afi, gct, horus, miguel, rubisco2 + deck/portal variants |
| Project directories | 22 | ~9 active, ~13 scratch/test/sphere/ball |
| Mobile baseline | โ | viewport + @media (768) + PWA manifest present โ |
| Search | โ | none โ |
| Staleness signals | โ | present but stale themselves โ ๏ธ |
โ Open questions for you
- Canonical client page choice: for each client, do we keep
/clients/<name>.htmlor the dedicated hub (e.g./sand-separator)? Or merge? - Today's Brief widget: do you want it back as a live thing, or kill it entirely? If live: who/what generates the daily content?
- "Active in last 14 days" rule: is 14 days the right cutoff for active vs archive? Could be 7 or 30.
- Scratch projects:
sphere-on-table-*,ball-on-table-*,test-*โ delete from disk, archive in a subfolder, or just hide from the index?
Audit by Spark ยท 2026-05-14 ยท ping back with picks