Building internal tools (CRMs, dashboards, lightweight admin UIs) so the team can read and write data without escalating to engineers.
A team can have the cleanest workflows, the best agents, and a working database, and still grind to a halt if the only way to see the data is through the Supabase dashboard. Admin interfaces are how non-engineers on your team read, write, and act on the data your product collects.
This is also the protocol that retires the last surviving piece of the old CMS instinct. The admin UI is the new editor. You built it. You own it. It looks like your site and works like your team.
A team can have the cleanest workflows, the best agents, and a working database, and still grind to a halt if the only way to see the data is the Supabase dashboard. Admin interfaces are how non-engineers read, write, and act on the data your product collects.
At minimum, an admin UI has four parts. Get these four and you have a real product, not a database with a paint job.
Most admin UIs look nothing like the customer-facing site. Default Bootstrap. Default Material UI. A different brand entirely.
When admin looks like a different product, your team mentally separates the brand from the data. That separation costs you taste. The team starts treating the customer-facing site as marketing and the admin as work, and the work that touches customers gets less care over time.
Rule: same design system. Same fonts, same colors, same component library. Admin is a different surface of the same product.
Boring fonts. Boring layout. Tons of whitespace. Information dense but not cluttered. The data is the point.
Resist the urge to design it. The team is here to do work, not to admire your gradients.
You need the lead capture from Protocol 07 (with the contacts table). You will add a protected /admin route, a leads view, and one inline action.
In Claude Code: "Add Supabase Auth with email + password. Create a /login page and a sign-up flow. Restrict /admin to logged-in users only." Sign up as yourself.
Tell Claude: "At /admin, fetch all rows from contacts using the Supabase server client. Render them in a table: name, email, created_at, status. Use the existing design tokens."
Tell Claude: "Add a search field that filters by name or email. Add column sorting on created_at and status."
Tell Claude: "Add a status column with values New, Working, Closed. Make it editable inline with a dropdown. Save the change to Supabase on change. Show a toast on success."
Submit a fake lead from your homepage. Log in to /admin. See the lead. Change status from New to Working. Reload. Status persisted.
A real /admin route on your live site with auth, a filterable leads view, and one working inline action. Your team can now read and act on the data without you. The product has a back office.
You build a working CRM page in 40 minutes that lists, filters, and updates the leads from your contact form. Then you secure it with login so the data is actually private.