2026-03-23 — simplebooks
What shipped
No code changes shipped today. The session focused entirely on codebase reconnaissance — two full scout passes that mapped the state of the project after the Rails-to-Next.js migration and built out a prioritized issue backlog from scratch.
The first scout run uncovered the critical structural problem: all 8,500+ lines of app code (88 files across 16 feature branches) were never merged to main. The main branch still has only Create Next App boilerplate, while the complete bookkeeping app — accounts, transactions, promises, reconciliation, reports, CSV import, PDF generation, mobile sidebar — lives exclusively in unmerged feature branches. No PRs were ever created. Five issues were filed covering the merge blocker (#1), missing DB transaction wrapping (#2), error boundaries (#3), product definition (#4), and post-migration housekeeping (#5).
The second scout run went deeper into the actual app code on the feature branches, scanning security, performance, dead code, UX, and feature gaps. Findings included unbounded file uploads and form inputs (#6), dead query exports and an incomplete N+1 fix from issue-53 (#7, #8), zero user feedback on any form action (#9), and no duplicate detection on CSV imports (#10). All five new issues are labeled ready-for-dev.
Completed
No issues closed — this was a discovery session.
Release progress
No milestones on the new repo. The old milestones lived on simplebooks-rails (archived).
Carry-over
- #1 is the critical blocker — all other issues depend on the app code being on main. Merge strategy decision needed (squash vs incremental).
- 10 open issues total: 2 need prep (#1, #4), 8 are
ready-for-dev(#2, #3, #5–#10). - The
node_modulesmay still have stale path references from thesimplebooks-next→simplebooksrename (flagged in 2026-03-22 log). A clean reinstall hasn’t been confirmed.
Risks
- The longer the feature branches stay unmerged, the harder the merge becomes if main diverges. Currently main is frozen (no new commits), so risk is low but growing.
- No tests exist anywhere in the codebase. All 8 grindable issues will be implemented without test coverage unless a testing strategy is established first.
Flags and watch-outs
- Issue #8 found evidence that the N+1 fix from issue-53 was incomplete — there’s a dead
allTxnSums/sumMapcomputation that was fetched but never wired in. The per-account query loop remains. - The OpenAI API key in
.env.localis empty. Statement PDF parsing won’t work until a key is provided. package.jsonstill says"name": "simplebooks-next"— tracked in #5.
Why customer tools are organized wrong
This article reveals a fundamental flaw in how customer support tools are designed—organizing by interaction type instead of by customer—and explains why this fragmentation wastes time and obscures the full picture you need to help users effectively.
Infrastructure shapes thought
The tools you build determine what kinds of thinking become possible. On infrastructure, friction, and building deliberately for thought rather than just throughput.
Server-side dashboard architecture: Why moving data fetching off the browser changes everything
How choosing server-side rendering solved security, CORS, and credential management problems I didn't know I had.
The work of being available now
A book on AI, judgment, and staying human at work.
The practice of work in progress
Practical essays on how work actually gets done.
When the queue goes empty
Most products don't fail at building. They fail at the handoff between building and becoming real. What happens when the code is done and the only things left are judgment calls?
When your agents start breaking each other's code
Two agents modified the same file independently and created database locks. The fleet hit 135 issues in one day — and the coordination problem that comes with it.
The removal tax
The most productive thing you can do with a product is take features away. Eighty-nine issues closed across eight projects, and the hardest lesson came from a pipeline that ran perfectly and produced nothing.