2026-03-22 — simplebooks
What shipped
The final polish batch for the Next.js port landed overnight — five issues covering error handling, performance, UX safety nets, and mobile responsiveness. These were the last items in the “Next.js port” milestone.
Error handling and loading states were added to all server actions and forms, so users now see proper feedback instead of silent failures. The dashboard and account balance calculations had N+1 query patterns that were fixed by adding eager loading and missing database indexes — page loads should be noticeably faster with real data volumes.
Delete actions across the app (accounts, transactions, contacts, categories, promises, statements, projects) now show confirmation dialogs before destructive operations. A hamburger menu was added for mobile viewports, making the sidebar collapse and expand properly on small screens. Finally, Content-Disposition filenames were sanitized to prevent path traversal, and unused shadcn components were cleaned out to reduce bundle size.
Completed
- #52 — Add error handling and user feedback to all server actions and forms
- #53 — Fix N+1 query pattern in dashboard and account balance calculations
- #54 — Add confirmation dialogs to all delete actions
- #55 — Add mobile-responsive sidebar with hamburger menu
- #56 — Sanitize Content-Disposition filenames and remove unused shadcn components
Release progress
- Next.js port: 0 open / 18 closed (milestone complete)
- March 2026: 0 open / 0 closed (empty — predates the port)
Carry-over
- The repo migration happened on 2026-03-23:
simplebooksrenamed tosimplebooks-rails(archived),simplebooks-nextbecame the newsimplebooks. The new repo is live on GitHub but needs a freshnpm installafter the directory rename (stalenode_modulesreferences to old path). The Next.js dev server has Turbopack errors related to missingnext/dist/pages/_errorandglobal-not-foundmodules — likely needs a cleannode_modulesreinstall. - No milestones exist on the new repo yet — the old milestones lived on
simplebooks-rails. - CLAUDE.md needs updating for the Next.js codebase (currently has Rails-era content from
/init).
Risks
- The SQLite database (
db/simplebooks.db) was migrated from the Rails/Postgres dump but has no auth tables (users, companies) — the Next.js port is single-tenant. If multi-tenancy is needed later, the schema will need rework.
Flags and watch-outs
- The
node_moduleswere installed when the project lived at~/Projects/simplebooks-next. Some cached paths still reference that old location. A cleanrm -rf node_modules && npm installin the new location should fix the Turbopack errors. - The
package.jsonstill has"name": "simplebooks-next"— should be updated to"simplebooks".
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 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.
The product changed its mind
A product pivoted its entire philosophy mid-session — from 'here's your list' to 'here's your next thing.' The code shipped in the same conversation as the idea. That's not iteration. That's something else.