A Practical Shape for Admin-Heavy Next.js Products
Admin products fail when the interface is treated as an afterthought. The real work is usually in the boring parts: validation, permission boundaries, safe server actions, predictable forms, useful empty states, and tables that make repeated work faster.
For Next.js App Router projects, I like a structure where schema, validators, server actions, and forms share the same mental model. Drizzle gives the database a readable shape, Zod keeps input honest, and server actions make mutations explicit without spreading API details across the UI.
The interface still matters. A strong admin panel should be dense but calm, keyboard-friendly, responsive, and clear about what changed. If the user has to manage real data every day, visual polish is not decoration. It is part of the product's reliability.