My TypeScript Candidate Tracker passed 100 tests before it had a page I could actually use.
The repository contracts, Result types, validation services, Prisma adapter, and PostgreSQL integration all had value—but the project still felt like it was walking in place.
Today I changed direction and connected one complete Company workflow to Next.js:
FormData from the browser
- runtime shape validation
- business validation
- application service
- repository
- Prisma
- PostgreSQL
- refreshed Server Component
The same application now lists, creates, displays, and edits real persisted Companies.
Several earlier decisions finally became concrete:
- browser validation improves UX but cannot protect the server
- successful database absence becomes an explicit not-found outcome
- Server Actions are real public input boundaries
- a shared Prisma client matters under development hot reload
- database-generated UUIDs work beyond Prisma Client, including Studio and raw SQL
The lesson was not that architecture is useless. It was that architecture needs a consumer.
Once a real user workflow crossed every layer, the abstractions stopped feeling theoretical and started explaining their cost.
Top comments (0)