Zenith Panel
The operations platform I designed and run my studio on: eight modules over one database, from a lead CRM fed by webhooks to an AI assistant that answers with the business's own context.
Problem
Running a studio means leads arriving from several channels, projects in different stages, and knowledge scattered across chats and documents. Off-the-shelf tools each solve a slice and none talk to each other. So I built the piece that does.
Approach
One platform, one database, row-level security at the data layer (Supabase RLS). Everything the studio does lives in eight modules that share context instead of re-explaining it: dashboard, leads, projects, workspace, academy, knowledge, AI assistant and admin.
- Lead CRM with list + kanban views. Leads arrive on their own: my lead pipeline posts them to a webhook endpoint, no manual entry.
- Workspace with an AI-assisted calendar: I describe the week in a prompt, it proposes the events.
- Knowledge base plus a structured academy (modules and lessons), both feeding an AI assistant that answers with business context (OpenRouter). Transactional email via Resend.
- Admin module for users, roles and system configuration, enforced by the same RLS policies as the data.
Architecture
Next.js 16 with App Router and Server Actions, TypeScript strict. Access control lives in the route structure: a public route group holds the login, a protected group holds the panel, and its layout verifies session and role once so every page inside can assume an authenticated user. The AI assistant's conversation memory is multi-tenant, isolated per tenant with row-level security enforced by the database itself, not by application code.
And this is not a hosted template: it runs on a Hetzner VPS I administer, with nginx in front, PM2 keeping the Node processes alive, and DNS and SSL through Cloudflare. The same server discipline as my client-facing systems.
Spec sheet
- Modules
- Eight: dashboard, leads, projects, workspace, academy, knowledge base, AI assistant, admin.
- Lead intake
- A webhook endpoint fed by my own lead pipeline. No manual entry.
- AI layer
- OpenRouter. The assistant's conversation memory is multi-tenant, isolated with row-level security in Postgres.
- Access control
- Next.js route groups: session and role verified once at the panel layout, every page inside assumes an authenticated user.
- Transactional, via Resend.
- Infrastructure
- A Hetzner VPS I administer: nginx in front, PM2 keeping Node alive, DNS and SSL through Cloudflare.
Outcome
The panel runs the studio's day-to-day operations, and it doubles as proof of the full loop I offer an employer: design a product, ship it, and keep it alive on infrastructure I answer for.