loading
loading
A live, self-updating record of the things Nico is building. Each project's page rewrites itself from session notes as the work happens — see the Prompt Lab repo for how.
The week opened on pipeline correctness. Minor-key handling was fixed end to end — the read path, the publish path, and a repair of the live data — so 128 minor-key songs stopped being served a major key by default. A change upstream in the engraving repository re-notated certain wrappers at actual pitch and moved range data to sounding pitch. A full trace through the consuming code confirmed it inert here, and settled a long-running question about clef handling in this app's favour. A third round of testing on the new print preview surfaced two defects in the compact layout — page breaks cutting verses across the boundary, and spill pages centred vertically instead of aligned to the top — both fixed the same day, with tests verified by mutation rather than assumed correct. The web app also stopped auto-reopening the last viewed song on a cold start. TODO
Band practice in, per-song takes out.
Vocal in, structured lyric sheet out.
view →
The week opened badly. A database migration had silently done nothing on production, leaving checkout broken for roughly twenty hours before anyone noticed. It was re-applied and verified across both production and preview — and the failure mode deserves naming, because a migration that fails loudly is a nuisance, while one that succeeds at nothing is a twenty-hour outage. Despite that start, a large merge session closed out, including the first live contract check against the fulfillment partner, which passed end to end with a real order. An accidental design deletion turned out to be fully recoverable. A masked server error on production exposed a genuine gap in error visibility and produced a concrete proposal to close it. The week ended on mobile polish: deletion failures on phones, slow pages, a missing account address in the menu, and shirt colours rendering inconsistently behind transparent images.
A polish pass on the photo lightbox: fade-in placeholders while images load, preloading of the neighbouring photos so navigation feels instant, swipe support, captions, a position counter, and proper handling of the first and last image. Browsing went from functional to considered. The codebase was also parameterized so one repository can serve several independent showcases, each with its own collection of work. Standing up a new showcase became a configuration step rather than a fork — the difference between a project that scales to more people and one that quietly accumulates copies. The week closed with curator-controlled photo hiding, letting whoever owns a collection pull an image from public view without editing code or waiting on a deploy.
The access-control adoption came off an eleven-day pause and cleared three gates in a single overnight session. Off-boarding gained a revoke primitive, and a live test confirmed end to end that removing someone actually removes their access — the half of access control that usually goes untested until the day it matters. An overdue audit comparing the old and new authorization decisions came back clean, meaning the two agreed everywhere it counted. The identity-relay tests went fully green once a kill switch stopped test runs from sending mail to real inboxes, a small fix that had been quietly undermining confidence in every result before it.
Speak, and watch the words appear.
view →
The centrepiece was ecosystem health. A proposal arrived and shipped the same day: a daily scheduled email that polls a deep health endpoint across services and reports back, carrying a signed pause-for-a-week link, a copy-pasteable prompt for acting on whatever it finds, and a small joke per send — on the theory that a report people enjoy opening is a report people actually open. External uptime monitoring went live alongside it, deliberately on separate infrastructure, because a watcher sharing a stack with the thing it watches goes down at exactly the wrong moment. Continuous integration had gone red from an unpinned linter picking up a new release; pinning it fixed every push and un-starved a deploy step that had been silently skipped rather than visibly failing.
The visual refresh closed out, iterated against live mockups rather than static comps: an editorial system for the recordings catalog with ledger-style feed rows, linear detail headers, and small monospaced labels, plus one change at the token layer that softened every corner on the site at once. The same day brought a split-pane live preview — a project page can now embed the running site itself alongside the writeup, at two-thirds width, so a reader sees the thing rather than a description of it. Supporting work moved preview images from automatic scraping to curated art, archived the older roadmap, and confirmed the codebase carries no dead weight. Navigation slowness was diagnosed precisely enough to fix later: the pages vary per visitor, so the browser never caches them, even though everything underneath already is.
view →
view →