Reverse-chron pulse across every project on this site — pulled straight from each repo's io-page branch at build time.
Everything since the 26th landed here at once: arc planning, gain-staging, a mastering loop, and the orchestration wired through a real pipeline module, plus a README since this ha…
Long one. Built the real recursive generate→review→fix loop end to end: a model call emits a DSL plan for a leaf, it gets rendered, reviewed against three checks, and — if it fails…
Spent the day on reference grounding: pin down a checkpoint, build a real fingerprint library, and freeze the node schema before letting anything else get built against a moving ta…
The whole premise: an AI directs an album — concept, structure, arrangement, sound design — but never gets to hear what it made. It only sees measurements: render a section, extrac…
Two phases here. Phase 0 was just filling in schema columns that existed but were never populated at ingest — lemma via WordNet, plus f0var and a rough spectral-tilt voice-quality …
Added a /api/render/{id}/reaper endpoint that hands back a ready-to-run Lua ReaScript — drop it into Reaper and it imports the assembled WAV onto a new track, then adds a named tim…
Three things landed together, all kind of in service of "make word selection actually good": Speaking rate was normalized by character count, which is bad for short function words …
The idea: type text, get back a WAV of real people actually saying it — cut word by word from a corpus of real speech, not synthesized. It's for an album, and the "real clip only, …
Big gap since the last post — the extension just sat there working (mostly) for two years. Came back and, in one sitting with Cursor doing a lot of the typing, went from v2.1 to v3…
Up to now the dashboard just said "Drive / Last backup / Protection" and gave you nothing while a backup was actually happening. Added a real progress bar and log stream — parse re…
Same day as the dashboard work, different mood: 16 unit tests for the boring-but-load-bearing stuff (label sanitizing, repository path resolution, restic's retention-flag construct…
The idea: plug in a specific USB drive, it auto-backs-up whatever you've configured, using restic underneath (encrypted, deduplicated, content-addressed) instead of rolling my own …
Long day. Started reasonable — added a docker-compose test stack and an actual async test harness with real focus-graph tests, merged that as PR 1 (the repo's first one). Then spen…
Split the data model: nodes are now abstract concepts with separate "impl" rows underneath them, plus an implcontexts table for which implementations apply in which context. That s…
Added path highlighting and proper viewport controls (pan/zoom that doesn't fight you), a reset for selection state, and cleaned up dismissing newly-added nodes. Then split the pag…
Wanted a graph explorer for skills/topics with actual prerequisite structure — a DAG, not a flat list. FastAPI + Postgres + Alembic on the backend, Cytoscape.js inside Next.js on t…
Long gap since the last post — this is everything interesting since then, which is really one thing: I redid how reminders get scheduled. They were running on WorkManager, a OneTim…
Made a Wear OS module. It does not talk to the phone yet. Set up a WearableListenerService and a message client on the phone side to push intake updates over — Wearable.getNodeClie…
Spent two weeks fighting the widget. First pass was a classic XML AppWidgetProvider — RemoteViews, the whole deal. Got it on the home screen, clicking it opened the app, fine. Then…
I keep forgetting to drink water, so I'm building an app that nags me about it. Nothing clever yet — Room DB for logging intake, a top bar, a slideout nav, a home screen that's act…
Been feeding the regression model more data by hand for months — bumped the degree to 3 at some point for a better fit, but CSV rows don't write themselves. Finally wrote extract.p…
Added a popup suggestion box with Tab-to-autofill — type the delimiter + a partial keyword and it shows matching entries, Tab completes the top one. Took two passes (closes 7) to g…
A month later, back to the sites that never worked right. Switched the whole "what am I even editing" detection over to window.getSelection() instead of whatever I was doing before…
Redid the popup twice in a week — first restructuring the dictionary editor into key/value pairs with a delete button per entry, then a full CSS/HTML pass that (deliberately) looks…
Switched from declaring content scripts in the manifest to injecting them from the background script instead. Sounds like a lateral move, but it's what makes per-site whitelist/bla…
The core problem on tricky sites (Instagram again) was that caretPos would come back undefined, and without it there's no reliable way to know what to delete/replace — you'd have t…
Browser extension: type :smile:, get 😄. First commit message is basically a bug report I wrote to myself: "It works!!! Need to clean up the emoji names... For some reason it does …
This is the part that made the whole thing real instead of just a convincing-looking mockup. Wrote a Python script (CodePrediction/regress.py) that takes real ticket-code samples f…
Timestamps went from raw dates to actual relative labels — "today," "yesterday," "before that" — much more like a real message history. Fixed text wrapping that was breaking for so…
Fixed a batch of small stuff tracked as GitHub issues: the exit button that didn't actually exit, message timestamps that weren't computing correctly, a dropdown for changing which…
Belgrade's public transit switched to a ticketing system where your "ticket" is just a text message conversation with a specific number showing you bought one — nobody actually che…