Every update across 56 projects, newest first. Written from each project's decision log as the work happened, measured from the first recorded entry on 26 March 2026.
8 entries withheld from publication. Counts are logged decision-log entries, not commits.
Mini Crossword joins the portfolio, argued from the grid shapes feature
The game had been live on the hub since May and the book maker since August, with no page on wanessalabs.com.
Wanessa Labs WebsiteThree LinkedIn posts on the writing feed, sourced rather than inferred feature
The /thoughts feed had not gained an entry since April.
Wanessa Labs Website1.2.1 released: the interface finally says what the app does feature
The app was four features deep and the interface mentioned one. Both were in the README, which is not the same as discoverable.
Clembot-dictate1.3.0 released: a clean can be undone improved
The clipboard has no undo, so cleaning was a one-way door: a tray balloon named what changed and then it and the original were both gone. Entry.kind now distinguishes dictation, question and clean; entries written earlier load as…
Clembot-dictate1.2.0 released: cleaning the clipboard, not just the output improved
The checksum in the public README was taken from the uploaded asset rather than the local file, so the two cannot disagree.
Clembot-dictatePhase 4 bank scaling (2,050 cards), stratified mock exams, and adaptive learning loops feature
The bank scaled from 226 questions (303 of 345 reachable matrix cells) to 2,005 questions + 45 concept cards (2,050 total cards) across 9 certification tracks. Matrix coverage reached 100% (765/765 cells filled) with zero empty cells and…
CertScrollOur own CSP was blocking our own theme script (complete) feature
The session close recorded "Cloudflare Web Analytics is blocked by our own CSP" as the open question. Looking at it properly, the framing was wrong twice over.
Recipe FlowThe phone could not turn the page (complete, deployed ) feature
Each one held on a laptop and quietly evaporated at 390px, which is where this app is used.
Recipe FlowThe dishwasher packing puzzle, played inside a Reddit post launch
A Devvit app running in the subreddit rather than on this site: the board is the post and the thread is the leaderboard. A daily seed generates the load, and the hub links out to it from its own Reddit Games section.
Dishwasher Daily (Reddit) ↗A daily Poker Friday hand, played inside a Reddit post launch
The second Devvit app in the subreddit, same shape as the dishwasher one. It runs where the conversation already is rather than asking anyone to leave for a game site.
Poker Daily (Reddit) ↗Four makers on one shared print engine, live in production feature
The games repo is Git-connected, so that merge was the deploy. Verified live on games.wanessalabs.com/creator by content.
Puzzle Book Makers/projects becomes a progress surface: per-project timelines and a portfolio feed feature
The portfolio showed 68 finished things and nothing about the work. The site's one progress surface, /30-in-90, counts status === 'shipped' and so reports 4 of 30 while 45 projects sit at status: production.
Wanessa Labs WebsiteCurated launches reach their own project pages, and a forward-looking roadmap section feature
Two gaps left by the timeline work earlier the same day. The 20 curated game-hub launches rendered on the portfolio feed and nowhere else, so 19 project pages showed no timeline at all while the site already knew their launch date.
Wanessa Labs WebsiteThe Reddit rail reaches the portfolio, and code blocks become readable feature
Two games shipped as Reddit posts on the Devvit platform and the portfolio said nothing about either. Separately, every fenced code block on the site rendered as a near-black box with unreadable text, on a page whose stylesheet clearly…
Wanessa Labs WebsiteThe third Reddit pilot, and a page that grades its own coach feature
Fibbers Dice shipped as a Reddit post and had no page. The two pilots before it had set a template, and the risk with a template is that the third page repeats the second's claims rather than reading the third game's code.
Wanessa Labs WebsiteTimeline coverage 30 to 56 pages, and eleven project marks feature
Two coverage gaps on the portfolio, closed the same afternoon. Neither was a missing feature: both components already worked and were simply reading empty inputs.
Wanessa Labs WebsiteMeet Lemon Coach launch
Tap the lemon in the corner of any game to ask how it works or what a good strategy is. In the card and casino games it reads the live table too. No account, no tracking, and it never nags.
Lemon Coach ↗Hop ten marbles across the star launch
Race your ten marbles to the point straight across, hopping a chain as far as it will go. Two, three, four or six players, on one device or against bots. Nothing is ever captured, and the coach is free.
Chinese Checkers (波子棋) ↗The guided tour, and the prose it replaced feature
An eleven-step walkthrough that drives the real app across all four Collect sections, opening once on a first visit and re-runnable from a header button.
Recipe FlowThe Blackjack page, and what it revealed about the page hero feature
Local build exit 0, 87 pages, 66 project pages. Live verification by content rather than status code: the page and all four assets return 200, the served asset byte counts match the commit exactly (128450 / 111277 / 105219 / 103657), zero…
Wanessa Labs WebsiteLearn blackjack with a coach that grades every hand launch
Play a shoe against the dealer and ask the coach what basic strategy says, any time, for free. Coached mode gives every decision a verdict and a reason. Or drill the chart twenty hands at a time and watch your accuracy per category.
Blackjack ↗fix round 6, the slide that could not grow fix
Owner used the deployed site on a phone and reported that the scroll motion after answering was not working well, and asked for a button to advance.
CertScrollLearn a craps table without losing money at one launch
Five bets, a coach that works out the odds in front of you, and the etiquette that arrives when it matters. Every price is computed, including the twenty bets this game refuses to offer you.
Pass Line ↗Discover stopped showing the same lists first feature
dataService.fetchPublishedLists() orders by updated_at descending and DiscoverTab rendered that array directly. With 400+ published lists, the same handful sat at the top on every visit and most categories were never seen.
Lists of 30 AppDeployed: the Plan tab and Explore feature
Three things this deploy got right that this vault has previously got wrong. It ran from the directory containing functions/, so the Worker shipped; running from the repo root instead ships a green site with a dead API, which caused an…
Recipe FlowExplore: a swipe reader over publisher feeds (complete, NOT deployed) feature
Suite 1,224 tests across 89 files, tsc --noEmit clean.
Recipe FlowImport reaches the Library front door feature
The owner asked for a button at the top of the library to import a recipe, noting that people will want to import from a website and then connect the recipe to a book.
Recipe Flow/progress rebuilt as an instrument improved
Owner asked for /progress before manual testing. It was the least designed surface in the app and the one the owner had named as mattering.
CertScrollPhase 3, the citation spine and the matrix fill feature
Owner verdict on 2026-08-22: the site is not usable. The diagnosis was that almost none of it was a product defect.
CertScrollscope, and the cert axis that charged for compounding feature
Owner question after the fill: what stops the questions already written from filling the missing cells? The answer was that nothing about the questions did.
CertScrollThe book that could not gain a recipe feature
Reported as "there's no easy way to do this in the library or from the specific recipe after I have imported it".
Recipe FlowThe Plan tab: two columns, a derived shopping list, and a third amendment feature
This is the third amendment to that section: the pantry one on 2026-08-09 turned into the fridge and the week plan, the sharing one on 2026-08-12 opened a narrow provenance-gated link for one book, and this one opens a DERIVED shopping…
Recipe FlowRenaming a book you copied feature
Asked for as "can you add a feature to rename the books I've copied", which names the exact set: forkRecipeBook stamps a copy "<source> (my copy)" and nothing in the app could ever change it. There was no rename path at all, for any book.
Recipe FlowThe release that reached first-time visitors and nobody else feature
Reported as "I don't see it live on recipe.wanessalabs.com", and he was right. The deploy was real, Production, and verified.
Recipe FlowThe shelf splits in two feature
Reported the same hour: the book created by binding is hard to see.
Recipe FlowThe shipped shelf gets the curator's name feature
Asked for directly: the bottom shelf should be named Clemens’ Curated Cookbooks.
Recipe FlowBooks written as ideas, and a corpus that stops sampling feature
The owner asked why "Clemens' Go-To Meals" did not hold the thirty dishes from his own Lists of 30 post. It never did, and nothing had ever been built to make it: the book held FIVE entries, all starter- ids from the Wikibooks corpus,…
Recipe FlowThe book finally holds the thirty, and an invariant that had been free feature
Yesterday's work built the whole machine for writing a book as ideas and binding each one by search, and then did not use it. Clemens' Go-To Meals still held the same five starter recipes it was given on 2026-08-12, chosen by the…
Recipe Flow1.1.1 released: the interface pass, shipped feature
Downloaded back over the public URL before the manifest moved: HTTP 200, correct length, MZ header, hash matching the release notes.
Clembot-dictateUI pass: the palette belonged to someone else feature
Reported as "clunky, doesn't feel professional". Three causes, in order of how much they were doing:
Clembot-dictateThe rest of the gauntlet's round 1, and five of six measured at last feature
The 2026-08-18 gauntlet-loop pilot closed with a four item checklist for the owner. This session works the remaining three.
Recipe FlowCI had never passed, and the reason was one test fixture fix
CertScroll CI was red on all 6 runs since it was created. Not intermittently: it had never once been green.
CertScrollDocs updated for 1.1.0, and three stale claims corrected fix
Version drift fixed while in there. Three files still named Setup-1.0.0.exe and VERSION = "1.0.0" in their tables, one release after the fact.
Clembot-dictatePublic repository, curated rather than mirrored feature
It is an export, not a remote. This tree stays the source of truth and its git history never leaves, because that history is ClemVault's.
Clembot-dictateRelease runbook, and the update check that never worked feature
Two blockers found by probing rather than reading.
Clembot-dictateVoice command mode (sidecar client) feature
Dictation is unchanged and the dependency tree is untouched — no numpy upgrade, no models in the installer.
Clembot-dictateSpend your coins inside the games launch
Coins you earn by playing now buy a hint, a take back or a reveal, at the moment you want one. Thirteen of them across nine games, plus Dishwasher chapters that used to cost money. All optional, all priced on one page.
Coin Economy ↗A polish loop that refuses to start without a brief improved
Built as a prompt generator rather than a runner. The skill prints the prompt for a fan-out of paired worker and critic agents over one existing project, and never executes the run itself.
Gauntlet LoopThe Play On winner shows themselves before the scoreboard does improved
Under Play On the first player to empty their hand has already won the round, but the round keeps running so the rest of the table can finish, and nothing on screen said so. A ring and a banner now name the winner the moment it happens, and clear once the round is scored.
Last Card ↗The reduced-motion override that never won the cascade feature
Found by a gauntlet-loop pilot run, not by the test suite. Identical specificity (0,1,0), same origin, both unlayered, and a media query adds no priority, so source order decided and the base value won.
Recipe FlowCertScroll gets its own brand feature
The direction is instrument, not document. The app measures something real about the reader and showed none of it on the front door.
CertScrolllight mode feature
A second palette, not an inversion. The amber signal sits at 80% lightness because that is what reads on a near-black ground.
CertScrollscenario arcs feature
The first scenario is live. loan-model follows an inherited loan-approval model across six steps: pre-training bias metrics, target leakage in a derived feature, an overfitting gap, a canary release, drift with no code change, and a…
CertScrollthe answer key stops being option A, and Phase 2 machinery lands feature
A live defect the whole gate missed. All 15 authored questions carried answer: 0, so a visitor scored 100% by tapping the top option without reading.
CertScrollthe progress page feature
No new stored state. Every answer already recorded cardId, result, the option chosen and a timestamp in device-local IndexedDB, so /progress is a read-only view over data that already existed.
CertScrollA manual light/dark toggle, and a latent bug it exposed fix
The owner asked for a light/dark toggle "for the whole site".
Recipe FlowThe fridge gets steel, an open door, a simpler add flow, and favorites feature
Three separate requests landed in one turn: make the fridge visual look more like an appliance, drop the "Amount" field because most people buy one portion, and replace the ingredient dropdown with search plus starred favorites. All three…
Recipe FlowPlay Hong Kong mahjong with a daily round and coins on the table launch
Four sets and a pair, three faan minimum to win. A daily round moves the deal around all four seats, real hub coins change hands after every one, and you can declare your own kong or rob one back from an AI mid turn.
Mahjong (麻雀) ↗69 approved photographs, and the release that would have hidden them feature
The owner reviewed the 85-card contact sheet and kept 69. Applied with npm run photos:apply, which validated every title against the bundle before writing a byte and resolved every file on Commons with its credit.
Recipe FlowA deriver fix that reached nothing, and the row with several owners fix
The duration fix earlier today was correct and invisible. loadStarterLibrary runs derive once and persists the graph, so a library that already existed kept every wrong number.
Recipe FlowCrediting the photographer, before there is anything to credit feature
Preparation for a decision not yet taken. The Commons probe found 85 candidate photographs matched by DISH NAME for recipes that have none of their own, and those cannot ship without attribution.
Recipe FlowPictures for the 42 that have one, and a drawn stand-in for the 258 that do not feature
The library rendered 300 identical chef hats, which reads as a library that failed to load rather than one built from a text cookbook.
Recipe FlowThe curated-photo lane, and a second lane that turned out to be a dead end feature
The 42 recipes whose own Wikibooks page carries a picture are done. This is the path for the other 258, and it is deliberately not the same path.
Recipe FlowThe deriver could not read a fraction, and had never been asked to feature
The answer is the regex, and the investigation found two more bugs sitting beside it.
Recipe FlowThe starter library was unreachable to anyone who had saved a recipe feature
Reported from a real browser: five recipes saved, no shelf books, and no way to get them. The shelf said "The shipped books arrive with the starter library.
Recipe FlowThree more occasion books, and moving a ceiling without moving the shelf feature
Thanksgiving, Christmas and Feed a Crowd. Five books to eight, which is one more than the six cloths the shelf had.
Recipe FlowAstro scaffold, actual toolchain vs. plan's assumption feature
The phase1a plan names "Astro 6 (static output)" as the tech stack. Running npm create astro@latest .
CertScrollcontent schemas (scripts/schema.ts), two deliberate departures from spec section 7 docs
Cert gains url, note, access, booking, warning. Phase 0 gathered all five against provider pages on 2026-08-12 and they are exactly what makes a cert page useful with zero cards.
CertScrollTask 5 fix round 1, two owner rulings and two corrected stale claims fix
Owner ruling 1 (Oracle domains): ship Task 5's five Oracle domains as-is, mark them domainsUnverified: true rather than delete or re-invent them, and make verifying them against Oracle's published 1Z0-1127-25 exam topics a hard gate on…
CertScrollTask 5, cert data and resources. Per-cert domain provenance feature
domains did not exist in Phase 0 and was authored fresh for Task 5. This table records where each cert's domains came from.
CertScrollfive books on the shelf, and the curation moves out of TypeScript feature
Phase 2 of the recipe-books rework. Content, planting, and the finalize step.
Recipe Flowoccasion books, and a merge that reuses the scheduler rather than copying it feature
The Library duplicates the feed, and it does so structurally. That is why a Book today is either a publisher or the single staging record, and why neither can express "what do I cook for this situation".
Recipe Flowrule 6 opened, narrowly, and a gate that decides per recipe feature
The amendment came before the code, and rule 6's text was not touched.
Recipe Flowthe Gantt was not lying about the plan, it was lying about the day feature
A correction to the entry above, and two fixes.
Recipe Flowthe Library stops being a second copy of the feed feature
Phase 3 of the recipe-books rework. The shelf, the book, the create flow, clone and remix, and the export that closes the curation loop.
Recipe Flowthe book becomes the library, and four feeds that never had a picture feature
Three reported problems, one of which turned out to be three problems.
Recipe Flowa hundred recipes, and the source that did not survive checking feature
The owner asked to start with roughly a hundred recipes reliably loaded. Getting there by fetching is a hundred fetches, and rule 1 permits one per user action, so the answer was a bundle shipped with the app.
Recipe Flowone list across every source, and the rule that stayed put feature
Reported by the owner: "it's not easy to see all of the scrapes together. Is there an easier way to just scrape all of the recipes by a name?
Recipe Flowthe book was unusable on a phone, and a comment said otherwise feature
Reported by the owner: on mobile a found book "does not show the left page so it always says this page has not been opened yet". It reproduces on production, and it is worse than the report.
Recipe Flowthe fridge and the week plan, and a plan that argued with itself feature
A stated non-goal was retired on purpose, at the owner's request. prd section 6 banned "no pantry, no shopping, no aggregation across recipes".
Recipe Flowthe fridge becomes a fridge, and a test that never tested anything feature
/fridge answered "what did I buy" with a column of form rows, each carrying two number inputs and a note about who owned the stretch number. That density is right for editing and wrong for recognition: someone opening the page to remember…
Recipe Flowthe fridge reaches production, from a tree that was not this one feature
--commit-dirty was omitted deliberately, per the recorded gotcha where it silently sends a --branch=main deploy to Preview.
Recipe Flowthe starter set learns what a weeknight is feature
The owner: "I would rather skew towards weeknight." The first hundred were drawn from Category:Recipes, which is everything, and arrived heavy with desserts, condiments and baking. The Cookbook classifies its own pages by course, so the…
Recipe FlowPlay Texas Hold'em with no signal in SlowPoker launch
No-Limit Hold'em against bots, with no server and no internet. Check after every hand that the deck was not rigged, and watch a panel show each message the game would send, down to the byte. Bluetooth play is still being built.
SlowPoker ↗The stale-production blocker was already fixed fix
What was checked. Neither was true by the time it was read.
CampPingTwo ways to measure this site wrong fix
Neither of these is a defect in the site. Both are ways a future session will read it wrongly, and both produced a confident wrong answer before being caught.
Design HubFill fifteen boxes with five dice in Lemon Dice launch
Roll three times a turn, keep the dice you want, then commit them to a box you cannot use twice. Pass one device around, or take on a bot set to Easy or Normal.
Lemon Dice ↗looked at it in a browser, and found the feature had never worked feature
Everything above this entry was verified by tests and by reading. Opening the app in Chrome against wrangler pages dev, before deploying, found two defects that 631 green tests could not see.
Recipe Flowthe seam connected, and it was two actions not one feature
The previous entry recorded tagging as written down but not wired. Connecting it found that the gap was wider than the tag button: nothing in the app ever moved a found page from stub to fetched.
Recipe Flowthe shelf and the book, built but not yet reachable feature
The library became a shelf. A found book is a publisher, cloth spine, leaning, read only, assembled from that publisher's own feed.
Recipe FlowFirst borrowed design decision, and a CI deploy that never deployed feature
A viewfinder frame, taken from a recorded reference. The marketing layout gained four 1px open corner brackets, applied from design-hub reference 21hrs-space#corner-bracket-hud-frame.
CampPingCanvas UI borrow, Liquid as a catalogued specimen docs
Copy-in source via the shadcn registry model, so there is no runtime dependency on the library and no npm package was added. 25,464 bytes raw, 6,444 gzipped as source.
Design HubThe ledger stops being empty feature
First borrow recorded. Verified resolving in both directions on the live site: /project/campping lists the reference and the outcome, and the reference page's "Applied in" table lists the surface and the applied sentence.
Design HubThe type system was decorative, and Preflight was load-bearing feature
An /impeccable critique + audit pass on the homepage, run on the newly upgraded skill (upstream v4.0.4). The mechanical detector returned clean before and after; everything below came from reading the source and then measuring the result…
Design Hubthe Gantt learns its container width feature
The chart allocated a flat 4px per minute whatever box it was in. On the 18-minute biscuits in a 1118px viewport that drew a 72px chart, and rendered every one-minute step as a 4px sliver.
Recipe Flowthe payload measured, and two optimizations declined feature
Two payload items had been carried as open for three sessions. Both were measured properly for the first time, and both turned out to be worth less than they read.
Recipe FlowTwo false claims removed from the public site, and a token that was never AA fix
Three defects that all read as true. (1) --text-muted at oklch(58% 0.007 82) measured 3.99:1 on --bg and 3.59:1 on --surface-raised, failing WCAG AA on roughly 20 small-text elements.
Wanessa Labs Websitethe seven own surfaces, and a stale branch caught by checking production fix
Captured the seven live Wanessa Labs / Lists of 30 surfaces into the library: games.wanessalabs.com, books.listsof30.com, wanessalabs.com/projects/, app.listsof30.com, travel.listsof30.com, recipe.wanessalabs.com, kalimba.wanessalabs.com.…
Design HubBrowse measured and working, deployed feature
The blocker was the measurement, and the measurement was takeable. curl to publisher hosts is denied in this environment, which is what stalled phase 5 yesterday.
Recipe Flowmobile pass, two-section nav, and two defects caught only in production feature
Two sections declared once. Cook mode renders neither, because /r/:id shares no chrome with Collect and a tab bar over the recipe you are cooking from is the library chrome that route exists to escape.
Recipe Flowa leak caught by asking what would actually go public feature
Before shipping, checked what a deploy would contain rather than what the pages render. A deploy would therefore have published all four unconfirmed third-party screenshots at guessable URLs while the references themselves were correctly…
Design Hubcustom domain live, a soft 404, and the portfolio page feature
design-hub.wanessalabs.com attached by Clemens. Verified over HTTPS: 200, two confirmed cards with images, the mark loaded, no dev banner.
Design Hubdeployed, and the first two references confirmed feature
Live. Cloudflare Pages project design-hub (not design-wanessalabs, renamed to match the subdomain and the convention every other project here follows), Production on main, https://design-hub-3vy.pages.dev.
Design HubPhase 4 (partial), the skill that reads the corpus feature
Branch feat/design-system-v2, worktree .claude/worktrees/design-system-v2.
Design Hubsession close feature
vault-kanban reads the frontmatter, so the board would have shown this in Active Build indefinitely. Corrected to production / 2026-08-04.
Design Hubthe reference detail page, the projects ledger view, and a build-only bug fix
Reference detail gained a Captures section. Not a dependency: sharp is already in the tree via Astro but it is a native module with an open CVE noted above, and pulling it into page rendering for two integers is a bad trade.
Design Hubthe ship gate, and what it caught on its first run feature
launch-readiness had no design or accessibility stage at all. Seven sections covering secrets, transport, SEO, performance, analytics, legal and manual QA, and nothing about the interface.
Design HubAdaptive practice, a parent report, and Tiff feature
Built in wanessalabs-games, on feat/kids-adaptive-progress, not committed. Nothing in this folder holds code; this is the record.
Kids Game HubThe same outage fired again, and the git integration is now disconnected feature
The entry above ended "Still armed." It fired roughly 24 hours later. Same signature: HTTP 200, #root with zero children, PAGEERROR: supabaseUrl is required.
Lists of 30 AppRedesign phases 1 to 4, and the first time anyone opened the app feature
paper, --ink and --tab are canonical and overridden in all three theme blocks; the older names alias them.
Recipe FlowSite-anatomy export feature
Read-only export from prd/lineage/roadmap plus the project page source. Redacted for public use: no commit hashes, no deployment IDs, no hosting-project names.
Clem's TravelsBluff your way through Fibbers Dice launch
Bid on what the whole table is holding, then call anyone who pushes it too far. Play against Aaron, Vivian and Flavia, or pass the device around.
Fibbers Dice ↗Call the bluff in Fibbers Poker launch
Claim a hand that might not exist, or call someone who just did. Start with one card, take another every time you lose, and you are out above six.
Fibbers Poker ↗Deploying the fixes exposed a 9-hour production outage I had caused fix
Shipping the review fixes above revealed that app.listsof30.com had been serving a blank page for roughly nine hours, and that my own pushes did it.
Lists of 30 AppMobile layout flip fixed, deployed, and the live redesign finally committed fix
Bug: on a phone, scrolling swapped the mobile layout for the desktop side nav. Root cause: useDesktop() read window.innerWidth, which on mobile reports the visual viewport, not the layout viewport.
Lists of 30 AppSite-anatomy export feature
Read-only export from prd/lineage/roadmap plus the project page source. Redacted for public use: no commit hashes, no deployment IDs, no hosting-project or backend-provider names.
Lists of 30 AppThe redesign reviewed, and four findings fixed fix
Suite went 127 → 133 tests, 17 files, all passing.
Lists of 30 AppLineage opened retroactively docs
This file was created after the site shipped, not alongside it. Every entry below this line is contemporaneous.
Lists of 30: The Book Series HubSite-anatomy export feature
Read-only export: prd/lineage/roadmap plus the project page source. No vault content changed except this lineage entry and the creation of this file.
Lists of 30: The Book Series HubPhase 2, capture pipeline and four seeded references feature
Slop tells 3, 6, and 8 were checked against the seven brand token files before this session touched anything else, and one was wrong. Tell 8 ("more than two font families") had been marked vault.
Design HubPhase 3, the Astro site feature
A real constraint catch before writing the token-rendering component. Rendering a captured site's actual typeface in its card would mean loading a third-party webfont at runtime from this deployed static page, which is exactly what the…
Design HubAppend "Epic 56 Hours in NY" to the nyc card feature
First run of the Option B content-ingestion path decided 2026-07-21: Clemens pasted the post URL, the entry was derived, appended, validated, and shown as a diff. Post is listsof30.com/p/epic-56-hours-in-ny, published 2021-12-07, added as…
Clem's TravelsDecisions D1 to D5 feature
On D5, what was ruled out and why. Clemens asked for capture in the site's own UI rather than a Claude Code command.
Design HubThe local-model lane shipped, under a different project feature
The delegation lane this project existed to build landed inside token-thrift instead, on the day that skill was built. It pins one local model on the loopback Ollama port, states that nothing leaves the machine, names a hosted provider as…
Local Clembot LLMReopened for free play, with maths still gating the colours improved
Every picture became playable at any time. The daily rotation that had gated all thirty was reversed at the owner's request, because the game's actual player wanted to paint whatever she liked rather than wait for the rotation to offer it.
Palette Quest ↗Race ninety seconds down the mountain in Ski Rash launch
Carry a weapon while you race, in a new run every day or free play whenever you like. Scores stay on your device.
Ski Rash ↗Built (Phases 0, 1, 2 and 4) feature
Token spend across ClemVault sessions had never been measured, only assumed. The available prior art all converges on one mechanism: intercept and compress command output.
Token ThriftCorrection: the custom domain was recorded under the wrong hostname fix
That host has never resolved: a browser check on 2026-07-30 returned ERR_NAME_NOT_RESOLVED. The registered Cloudflare Pages custom domain on project tutorhub is tutorhub.wanessalabs.com, which returns 200 and serves the app.
TutorHubPhase 4a: renderer dependencies, measured feature
Added three@0.185.1, @react-three/fiber@9.6.1, @types/three@0.185.1.
2x2 Cube TrainerPhase 4b: the geometry seam feature
Three source files and two test files under geometry/. 13 geometry tests, full hub suite 1089 across 113 files, twice.
2x2 Cube TrainerPhase 4c: design tokens and the colour pipeline feature
69 cube-trainer tests, full hub suite 1104 across 115 files, twice.
2x2 Cube TrainerPhase 4d: the visible scene feature
74 cube-trainer tests, full hub suite 1109 across 116 files, twice.
2x2 Cube TrainerPhase 4e: drag-to-turn, and a limitation worth naming feature
97 cube-trainer tests, full hub suite 1121 across 117 files, twice.
2x2 Cube TrainerPhase 4f: all six faces, without touching the engine feature
96 cube-trainer tests, full hub suite 1126 across 117 files, twice.
2x2 Cube TrainerPhase 5a: the solver reaches the player feature
111 cube-trainer tests, full hub suite 1136 across 118 files, twice.
2x2 Cube TrainerPhase 5b: timer, inspection, persistence. v1 play surface done feature
124 cube-trainer tests, full hub suite 1149 across 119 files, twice.
2x2 Cube TrainerPhase 6a: hints, scoring, stage detection feature
134 cube-trainer tests, full hub suite 1159 across 120 files, twice.
2x2 Cube TrainerPhase 6b: drill mode. v1 COMPLETE feature
146 cube-trainer tests, full hub suite 1170 across 121 files, twice.
2x2 Cube TrainerPhase 7: the geometry seam holds feature
148 cube-trainer tests, full hub suite 1183 across 122 files, twice.
2x2 Cube TrainerPhase 8: hub integration. The build config fought back feature
Full hub suite 1183 across 122 files, twice.
2x2 Cube TrainerPost-v1: the gesture model was wrong, and the owner found it fix
Owner feedback after playing the deployed version: "sometimes I try to drag the cube to inspect the sides, but it accidentally turns the side."
2x2 Cube Trainerfirst live import, and what it found feature
The owner's first real import returned a 403. URL: allrecipes.com/recipe/21014/good-old-fashioned-pancakes/.
Recipe Flowmerged, portfolio deployed, and the first live verification feature
The merge ran in a throwaway worktree on main. The shared tree is on another session's branch and carries 60+ uncommitted files, and this vault has a recorded incident of one session's broad git add sweeping another's staged work.
Recipe Flowpaste-source and discover feature
27 tests added, 285 total green across three consecutive runs.
Recipe FlowPhase 0, audit docs
Structural template: kalimba-easy. Most recent root project and it ran this same diff-first phase-gated process, including a Phase 0 audit entry in its lineage.
Recipe FlowPhase 1, POW scaffolding and specs docs
Written in a dedicated git worktree. recipe-flow/ is an entirely new folder that touches nothing existing, so collision is impossible rather than merely unlikely.
Recipe FlowPhase 2, domain model and two engines feature
Pure logic. No UI, no network, no Date.now() in either engine.
Recipe FlowPhase 3, view registry, three views, editor feature
Built in one gate at the owner's instruction, after a proposal to split it into 3a to 3d was declined.
Recipe FlowPhase 4, import feature
Resumed after the session that started this phase was cut off mid-flight. The seven Phase 4 files existed on disk and had never been run.
Recipe FlowPhase 5, library feature
61 tests added, 255 total green, tsc --noEmit clean, build clean, npm audit reports 0 vulnerabilities. dexie@4.4.4 added, plus fake-indexeddb as a dev dependency.
Recipe FlowPhase 6, deploy and wrap-up feature
Deployed to Cloudflare Pages Production. Wrangler compiled the Worker, uploaded 3 static files, _headers, and the Functions bundle.
Recipe Flowrobots.txt caching, and a fail-open bug it exposed fix
36 tests added, 321 total green across three runs.
Recipe Flowthe logo, and two sizes it cannot survive feature
Owner supplied recipe flow logo.png: a chef-hat lemon over a recipe scroll and a Gantt chart, on an orange band. Added to the app header and to the portfolio page.
Recipe FlowProjects map: rebuilt as a 3D force-directed graph improved
The same label-overlap defect the 2026-05-19 entry below claims to have fixed. It came back, because that fix treated the symptom.
Wanessa Labs WebsiteFit animal blocks into an 8×8 grid launch
A new Critter Blocks puzzle every day, with three minutes on the clock and every piece shaped like an animal.
Critter Blocks ↗Phase 0: audit docs
Read-only audit of wanessalabs-games/ before any file was written.
2x2 Cube TrainerPhase 1: POW docs and scaffold docs
Deviation from the brief, flagged for the owner. The brief asked for empty engine/, solver/, geometry/, and ui/ directories.
2x2 Cube TrainerPhase 2: headless engine and tests feature
33 tests. M1 verified mechanically: nothing in engine/ imports anything outside engine/.
2x2 Cube TrainerPhase 3: solver worker and scramble generator feature
47 cube-trainer tests total, full hub suite 1076 across 111 files.
2x2 Cube TrainerDrop four in a row against Evie launch
A seven by six board, played pass and play on one device or against a bot who thinks a few moves ahead.
Drop4 ↗Phase 5, bring your own tab feature
The human asked for 30 more songs and for the truncated entries to be extended to full length. Both requests ran into the constraint already on the record: I cannot source real notation, and the truncated songs are truncated precisely…
Kalimba EasyTine labels on the diagram feature
The request was to invert the graphic. The user plays with their thumbs and said the picture reads upside down.
Kalimba EasyDelivered inside the main hub; the standalone app was cancelled feature
Status moved idea to production. No code was ever written in this folder.
Kids Game HubCollect thirty pictures in Palette Quest launch
Twenty five new hand-drawn pictures on top of the original five. Everything you finish is saved to an archive you can repaint from scratch.
Palette Quest ↗Phase 3 complete, 30 songs feature
The human chose "push to 30 now, flags and all" over sourcing transcriptions properly or stopping at 13. Seventeen more encoded from memory with honest flags.
Kalimba EasyPhase 3, batch 3 and a scaling problem feature
Target raised to 30 songs. Batch 3 delivered 3, not 5, and the reason matters more than the count.
Kalimba EasyPhase 3, catalog batch 1 feature
Five songs encoded, the build gate written and proven, the source format changed. 5 of a planned 30 melodies.
Kalimba EasyPhase 3, catalog batch 2 feature
Three more of my own Phase 0 bases were wrong. Every one was caught by verifying rather than recalling, which is now three batches running at roughly one bad claim per two entries.
Kalimba EasyPhase 4a, foundation and Browse feature
Phase 4 split in two, because presenting the whole UI as one diff would have been roughly two thousand unreviewable lines. 4a is the app shell plus Browse, which is the screen that IS the product.
Kalimba EasyPhase 4b, detail, player and ladder feature
Song detail, SVG kalimba, player and practice ladder. Also closed the security blocker carried out of 4a.
Kalimba EasyPhase 6, ship configuration feature
Human decided the domain and asked to build through to a publishable state.
Kalimba EasyMake a wish and watch it go wrong launch
Every wish gets granted. Choose your words one clause at a time, then read the decree that finds the loophole you left open.
The Monkey Paw ↗Fly a paper dart into an origami dogfight launch
Shoot down shuriken, cranes and turrets on the way to a paper dragon with one weak point. A new level every day.
Paper Squadron ↗Split thirteen cards into three rows in 13张 launch
Chinese Poker, three cards up top and five in each row below. Beat three opponents row by row.
13张 ↗Phase 0, audit docs
New project proposed from a diff-first, phase-gated brief. Phase 0 was read-only by instruction.
Kalimba EasyPhase 1, POW docs docs
Phase 1 proceeded on the Phase 0 recommendations, which were not overruled. The nine open questions were resolved to their recommended defaults and the assumptions were stated before writing.
Kalimba EasyRemove dead seelemons archive links, retire legacy-only feature
seelemons.com is no longer active, so every source: seelemons post rendered a dead … ↗ (archive) link. 15 destinations kept their live listsof30 post.
Clem's TravelsSix new travel posts: previews + globe OG share card feature
Ran pnpm fetch:previews --resume — resolved 5 new og:image thumbnails (sag-harbor, glenwood-springs, moab, mexico-city, monterey-bay); Phuket rides under the existing bangkok pin. 63/63 published destinations now have previews.
Clem's TravelsWork began on Last Card feature
First commit touching this game in the hub repository. House-rules Uno: draw up to two cards and play what you find, call Last Card or get caught. The hub records no separate launch announcement for it.
Last Card ↗Work began on 6×6 Sudoku feature
First commit touching this game in the hub repository. A gentler daily Sudoku on a six by six grid, solvable by scanning alone, and the one the Kids tab carries instead of the full size puzzle. The hub records no separate launch announcement for it.
6×6 Sudoku ↗Shed your hand first in Big Two launch
The Cantonese climbing game against Alice, Louis and Angus, with a strategy coach for when a hand is not obvious.
Big Two (鋤大D) ↗Decision: pnpm sync:map, reconcile-only geography sync feature
pnpm sync:map closes that gap without touching curation.
Clem's TravelsNamed the protocol: CampPing (full vault-wide rebrand) feature
the protocol has a public name, CampPing, after its first use case: keeping a campsite coordinated when there is no cell signal. This closes the "no public name yet" open item that had stood since 2026-07-08.
CampPingPush your luck with seventeen dice in Low Roller launch
Set at least one die aside after every roll, then reroll the rest until all seventeen are banked. Lowest score wins. Solo, or pass the device around up to six players.
Low Roller ↗Practise Texas Hold'em against up to five bots launch
A coach shows your equity, your outs and the pot odds as you play. Play money only, and it all runs offline.
Poker Friday ↗Launch-readiness pass (NO-GO to GO pending redeploy) feature
The Privacy Policy carries the Google API Services User Data Policy Limited Use disclosures (scopes calendar.events + calendar.calendarlist.readonly, secure server-side token storage, no ads / no sale / no model training, revoke path)…
TutorHubCanonical brand system codified in design/ feature
Two decisions baked in: (1) --measure (slate-teal) is promoted from vestigial to a documented "measured-data" role for figures, chart series, and litepaper numbers; (2) the standing claims rule is written into Do/Don't — marketing never…
CampPingHomepage animation: from scroll-story to a reusable canvas engine feature
a request to make the site's UI/UX richer and more animated, "using all the animation tools possible," across the user's properties.
CampPingPhase 3 shipped; decision: self-hosted link-preview cards feature
Phase 3 (hero SVG map engine) built and approved. Reduced motion renders the whole map complete and still.
Clem's TravelsPhase 4 built: chapters, explore mode, preview cards feature
Scenes 2-4 shipped. Continent chapters are a sticky world map with scrolling steps; entering a chapter animates the SVG viewBox to frame that continent (Motion), and off-continent arcs/markers dim.
Clem's TravelsPivot: the 3D globe is the main page feature
After comparing three globe styles (MapLibre, Globe.gl photo, Globe.gl passport), Clemens chose MapLibre (V1) and asked to make it the landing experience, weaving the posts off it, with the arc animation on the globe.
Clem's Travelsdesign/ folder added (canonical brand + tokens) feature
No invented values. bespoke --radius-card (16px), the lucide status vocabulary, and the six signature components.
TutorHubEntire remaining build (Phases 5-8) + Google OAuth fixes + multi-calendar fix
Single session, every feature brainstorm → spec → plan → TDD → live-verify. All commits to main by explicit path (shared branch).
TutorHubAdded design/ as the canonical brand source of truth feature
Pulling it into a design/ folder gives a single canonical reference for future UI work and keeps the front door in sync with the Claude Design library (preview cards live in designs/library/wanessalabs/). Documents the hard boundary with…
Wanessa Labs WebsiteDecision: anime.js v4 + Motion, not GSAP feature
Considered GSAP-only (single library, ScrollTrigger included).
Clem's TravelsDecision: build-time arc precomputation, no geo library ships feature
The world SVG is generated from Natural Earth 110m via the world-atlas package. Underlying data is public domain, package is ISC.
Clem's TravelsDecision: dual home anchors feature
The index post says of Colorado: "I live here now!" Home changed.
Clem's TravelsDecision: journey.order is keyed on travel date, not publish date feature
This is the most consequential decision in the project.
Clem's TravelsDecision: Miami / South Beach ships as a stub feature
The index post links South Beach to listsof30. The only unclaimed slug in the export was travel-advice-clemens-guide-to-haggling, which reads as a general how-to rather than a Miami post.
Clem's TravelsDecision: three-source reconciliation, nothing scraped feature
The dataset is built from three sources, all owned by Clemens, none scraped.
Clem's TravelsDecision: two deliberate divergences from wanessalabs-games feature
Also considered and declined: TypeScript 7.0.2, the latest release. It is the Go-based rewrite and toolchain support is still settling.
Clem's TravelsDecision: validation failures block the build feature
Zod covers types; three assertions cover invariants Zod cannot express:
Clem's TravelsFinding: entry count is 114, not the estimated 74 feature
The Phase 1 roster table estimated 74 entries with per-continent counts. That estimate was wrong and was presented with false precision.
Clem's TravelsFinding: legacy-only collapsed from 11 to 3 feature
Only Ohio, Valencia, and Sonoma are seelemons-only.
Clem's TravelsFinding: the posts.csv export is stale and its is_published column lies fix
Two data-integrity issues, both worked around, both recorded.
Clem's TravelsPhase 0: audit docs
Reference project for Cloudflare Pages conventions: wanessalabs-games/ (pnpm, Vite, wrangler.toml with pages_build_output_dir).
Clem's Travels/17 — Site published to production; the /docs bundle found empty docs
Shipped: the motion build deployed to Cloudflare Pages via a preview branch first (motion-preview.campping-site.pages.dev), then to production on the custom domain. Preview-first was not ceremony: the sandbox cannot drive a browser, so a…
CampPingMotion layer on site/ (relay animation + scroll-scrubbed walkthrough) feature
Ask: a scroll-scrubbed video landing experience, generated with Higgsfield via the scroll-world skill, "to show the value of consulting with a high tech AI native firm."
CampPingBoard reflects reality: status source fixed, blocked state added fix
The board read stale. The cause was not out-of-date data but how state was derived — nearly every project was piled into Active Build regardless of its real state.
Vault KanbanCurrent proof feature unverified
Vault KanbanDev loop fixed: --watch + one server, not two fix
After the lane fix landed and the scanner CLI verified correct, the board still showed the old lanes. The data and the code were both right.
Vault KanbanLegacy Express server deleted; three silent lifecycle bugs fixed first fix
Endpoint-for-endpoint the Hono server was already a superset (all 8 legacy routes, plus /graph, /graph/note, /jobs/:id). But matching route names is not matching behavior, and the diff turned up three real bugs.
Vault KanbanNetwork tab (Command Center uplink) restored + two real bugs found fix
Regression, caught by the owner: parking the legacy Express server broke the [ NETWORK ] tab. Since both servers bind 5050, the tab worked only when the legacy server happened to win the startup race.
Vault Kanban/14 — Public marketing site (draft) built at site/ feature
The wiki research (2026-07-08) was written from the start so it could port to a public surface. This session built that surface: an Astro static site at campping/site/, covering a Home page, a Use Cases section (5 segments), and a…
CampPing→ 2026-07-14 — Bug: half the nodes were unclickable (two attempts) fix
Small nodes swallowed the click. The node was visibly there; clicking it did nothing.
Vault KanbanBug: the scanner was inventing notes that nobody wrote fix
Even after vault-wide resolution cut the graph from 198 to 106 nodes, some of the survivors were nonsense: wikilink, Idea Name, topics/.md — notes nobody ever wrote.
Vault KanbanGraph scanner (TDD) + GET /api/graph feature
Built in three TDD commits (parsing helpers → path resolution + clusters → buildGraph), each red-green before the next.
Vault KanbanGraphView component + node detail panel feature
GraphView.jsx: force-directed canvas, cluster-colored. Node radius scales with the *square
Vault KanbanGraph view: spec before code docs
The cluster wikis cross-link heavily with Obsidian [[wikilinks]], and there was no way to see that structure without walking it one file at a time in Obsidian. Decided to build the view inside Vault Kanban rather than lean on Obsidian's…
Vault KanbanApp-shell refinement (fifth round) + docs/portfolio catch-up docs
Nav links highlight the current route (text-primary font-medium); below sm, the flat 4-link row collapses behind a hamburger toggle expanding into a vertical menu (including Sign out) instead of wrapping.
TutorHubLive verification (Phases 1-4) feature
Clemens created the Supabase project (wanessalabs account) and Google OAuth client; filled .env and .dev.vars.
TutorHubPost-overhaul UI/UX refinement rounds (four commits, same session) feature
Once the 16-task overhaul merged, continued iterating directly on main (small, well-scoped features, no separate branch/plan needed) — brainstormed each round conversationally with AskUserQuestion menus, then built with TDD where the…
TutorHubUI/UX overhaul (design → plan → subagent-driven-development → merge) feature unverified
TutorHubLitepaper path + go/no-go framework feature
Built the execution path from "protocol exists" to "publish litepaper" to "go/no-go decision," grounded in two fresh research pages on what documentation and benchmarks must survive in this category.
CampPingWiki build-out (competitor profiles, fresh research) docs
Built the full competitor wiki in wiki/ — one story-led page per player, each freshly web-researched (2025 through July 2026), written to brand constraints (zero em dashes, no cheerleading, sourced and dated) so pages can port to the…
CampPing/08 — Business development session #1 (revenue models + gating) feature
Protocol and reference app built. BD conversation worked through revenue models (area 1 of 8).
CampPingKickoff + Phase 1 scaffold feature
Confirmed with Clemens: vault canon instead — Vite + React + TS strict + Tailwind v4, Hono on Cloudflare Pages Functions, Supabase, Vitest.
TutorHubPhase 2 build (same session) feature
Server (Hono on Pages Functions): /api/google/oauth/start + /callback (HMAC-signed state carries user id statelessly, 10-min TTL), /api/google/disconnect (revoke + delete + flag flip), /api/google/events (refresh-token → access-token →…
TutorHubPhases 3 + 4 build (same session, continued on user go-ahead) feature
Phase 3 (dashboard): stat cards + earnings-by-month bar / hours-by-week line (recharts). Chart chrome per the dataviz skill (validated series color #2a78d6, hairline grid, muted ink, tooltips, no legend for single series).
TutorHubThe triage inbox got a home and rules feature
The staging destination became a real place in the vault with its own rules, loaded only when a task touches it. That is what turned the heartbeat from a script that printed things into something with a durable output.
News / RSS / Email ReaderA staging surface for signal picked up between sessions feature
A read-only discovery heartbeat was added that scans local sources and stages what it finds, proposing only and never editing the vault. It is not a memory write, and it was not built for this project.
Memory with EventsA discovery heartbeat, read-only by design feature
What landed is a scheduled scan over designated local sources that stages what it finds and proposes it, never editing the vault itself. Findings go to a triage inbox rather than the vault inbox, and a human moves them.
News / RSS / Email ReaderWork began on the homework launcher feature
First commit touching the homework routes in the hub repository. A photo of a worksheet becomes links to the games that practise that skill. The hub records no separate launch announcement for it.
Kids Educational Games ↗Work began on Anagram Daily feature
First commit touching this game in the hub repository. Seven letters, one centre, and every hidden word to find before the day ends. The hub records no separate launch announcement for it.
Anagram Daily ↗Work began on Snack Pop feature
First commit touching this game in the hub repository. Match food emojis, build combos, and beat the daily puzzle. The hub records no separate launch announcement for it.
Snack Pop ↗Projects mindmap: elastic layout overhaul feature
Clusters with 7–8 projects had severe leaf overlap. Root cause was three bad constants: fixed LEAF_DIST = 82, max spread of 108°, and cluster positions too close to the SVG canvas edges.
Wanessa Labs WebsitePhase 1 complete: a stable executable feature
Everything here came from watching the thing fall over. A model that downloads on first run needed to say so rather than appear frozen, a denied microphone needed a dialog and a degraded mode rather than a crash, a key-repeat needed a…
Clembot-dictatePhase 2 complete: distribution-ready feature
The work that turns a program into something another person can install. A no-admin installer that upgrades in place, the AI key moved out of an environment variable and into the Windows credential store, an integrity check on the…
Clembot-dictateThe memory surfaces landed first feature
Two skills arrived on the same day and they are what memory is actually made of today. One owns the topic files and the index that lists them, creating, updating and removing entries, and reads the handoff without writing it.
Memory with EventsAll three pieces landed on one day feature
The scan, the ranking and the human gate were built together, which is why this project is further along than its sibling scaffolds.
Self-Improvement ModuleOpen the games hub in any browser launch
Everything went live in one place, no download and no account.
Wanessa Labs Games ↗Project scaffolded feature
Created from user's project mapping pass. Initial PRD seeded from one-paragraph description.
Kids Game HubPOW artifacts scaffolded docs
Status at scaffold date: GTM strategy defined, not yet executing. Milestone 1 (pre-launch seeding) not started.
Lists of 30 App MarketingScoped: run the harness on a local model feature
The problem was cost and confidentiality in one. Long build sessions were spending real money per session, and some internal prompts carry business context that should never leave the machine.
Local Clembot LLMScoped: memory should be written by events, not by one command feature
The complaint behind this project was that a whole session's learning depended on remembering to run one command at the end of it. If that command was skipped, or the session ended badly, the memory of it was gone.
Memory with EventsScoped: one surface for everything arriving from outside feature
Three inbound streams, feeds, mail and chat, were being read in three places, and anything worth keeping had to be retyped into the vault by hand. Most of it was not, which is the actual cost: signal arrived, was read, and left no trace.
News / RSS / Email ReaderScoped: a weekly reader that says what to fix next fix
The vault accumulates faster than anyone reviews it. The idea was a scheduled pass that reads the current build state, reads what has arrived from outside, and returns a ranked list of improvement candidates.
Self-Improvement ModuleProof-of-work artifacts scaffolded feature
The decision log and the roadmap were created on this date, joining a product requirements document that already existed, which brought this folder up to the three artifacts every project at the vault root is expected to carry.
SudokuProject scaffolded feature
Created from user's project mapping pass. Initial PRD seeded from one-paragraph description.
Puzzle Book MakersAbout + Services pages shipped, RSS feed fixed fix
Added two missing pages to close the "three missing sections" gap noted in the session brief.
Wanessa Labs WebsitePOW artifacts scaffolded docs
Site was live and active but missing POW documentation.
Wanessa Labs WebsiteWork began on the 2048 port feature
First commit touching this game in the hub repository. Slide tiles and combine them to reach 2048, easier said than done. The hub records no separate launch announcement for it.
2048 ↗Play Dishwasher in your browser launch
The original Wanessa Labs mobile game, rebuilt from scratch. Fit everything into the rack, dishwasher Tetris, across seven chapters.
Dishwasher ↗First Capacitor candidate for an Android APK feature
Decision (2026-05-06): Sudoku is the first game targeted for a Capacitor WebView APK.
SudokuMigration into the gaming hub feature
Decision (2026-05-06): Sudoku is now a route in wanessalabs-games/ rather than a standalone deployed app.
SudokuFind the four groups hiding in sixteen words launch
You get five guesses. A new puzzle lands every day.
Linked ↗Play the first set of daily puzzles launch
The hub opened with Sudoku, Anagram Daily, 2048, Snack Pop and Crossword, plus word and number practice for kids. One fresh puzzle a day, no ads.
Wanessa Labs Games ↗Marketing infra scaffolded as agents + skills feature
Built the content production layer as isolated agents and composable skills inside .claude/. Designed for portability to a future marketing-os repo.
Build in PublicSprint scaffolded feature
The sprint is a meta-layer, not a product. It documents and promotes work across listsof30app/, dishwasher/, and any other active project.
Build in Public→ 2026-04-29 — Server layer (Hono on :5050) feature
The periodic-JSON-file design did not survive contact. In practice the board was always one refresh behind the vault.
Vault KanbanProject initialized feature
Promoted straight from a spoken brief with no inbox file behind it, pressure-tested, and drafted into a PRD the same day. Two decisions made here survived the whole build: record-then-transcribe rather than streaming, and paste through…
Clembot-dictateProof of work generated feature
The threading model was settled on paper before any of it was written: suppress the hotkey so the key itself never reaches the document, lock around the recording flag so a repeat cannot double-fire, and transcribe on its own thread so…
Clembot-dictateOrigin feature
Pressure-tested and passed on two grounds: it is built for a specific first user, the owner's daughter, and the MVP scope was clear from the start. The hard problem identified up front was producing step-by-step art efficiently, either…
Learn to Draw"Her Life" audience identified as primary target segment feature
The Lists of 30 audience skews toward women 28-45 navigating life transitions (career, relationship, identity). The "Her Life" framing captures the emotional register of the highest-engagement content in the archive.
Lists of 30 App MarketingCommunity seeding strategy: invite writers first, not users feature
Seed the app catalog by inviting 10-20 known writers to submit founding lists before any public announcement.
Lists of 30 App MarketingGTM project scoped separately from product and content feature
The go-to-market work for the Lists of 30 App is its own project folder, separate from the app (listsof30app/) and the content engine (lists-of-30/).
Lists of 30 App Marketing