Two apps got a real workout today, and both punished the same habit: shipping things I had never looked at.
Sodalis was the bigger one — around +3.4k lines, and as much torn out as put in. The voting flow finally became something a member can reach rather than something the server merely supports, which is what I should have built in the first place instead of asking. The rest of the day was fences: a member cap of 15 while the club is free, promised on the site and enforced on the server, and a pass over places where the screen promised what the backend refused. The fixed login code moved from something hardcoded into something the database decides. I also pulled a guard I had added that morning: a duplicate, silently switching off the one already doing the job.
A Wine App went the other way: mostly building. The design system — nearly 2,000 lines of it — moved out into its own module, and 19 pages now take their frame from one shell instead of retyping it. Before that I chased a hang through four wrong theories; it was one lazy stack that never settled. Browse had also been telling new users the catalog held 60 wines when it holds nearly 40,000.
Plus a nightly data export on Havnetryk and a batch of notes in my ideas repo.
Tonight: Sodalis is fenced and honest, the wine app is finally built out of shared parts.