Share pages
Client share pages with slug, blocks (pdf, link, note, pricing), visibility, and expiry.
NeedClients need one branded link—not a Drive folder dump.
ValueFaster reviews and stronger proposal presentation.
ProjectsCase Study

ZN CMS is the staff-facing half of the personal brand system. Public hire and share URLs live on zohaibnawaz.dev; editors manage the same records from a private Dashboard.
Access is invite-only. Managers get scoped presets; sensitive edits go into draft_data until Admin approval—so public content is never half-published by accident.
Active modules: Share pages, Hire forms and submissions, Team, Leads with a realtime inbox, Managers, Approvals, and Notifications. Projects and Media stay roadmap—not padded into this case study as finished product.
Portfolio content, proposals, hire applications, and contact leads lived across the public site UI, Drive folders, and email—with no clean draft → review → publish path.
A personal practice that ships proposals and hiring flows needs clear roles, non-destructive review, and a live ops inbox—without opening a public CMS to the world.
ZN CMS keeps portfolio operations in one private desk that shares a database with the live site:
CMS and zohaibnawaz.dev read/write the same hire, share, leads, and profile tables.
Invite-only Managers with viewer/editor/publisher presets and per-module caps.
Manager edits write draft_data; live blocks stay intact until Admin approve/reject.
Leads inbox and notification bell update over Supabase Realtime.
One private console for share/hire/leads ops, safer collaborator access, and a live portfolio that only shows Admin-approved content.
Client share pages with slug, blocks (pdf, link, note, pricing), visibility, and expiry.
NeedClients need one branded link—not a Drive folder dump.
ValueFaster reviews and stronger proposal presentation.
Manager edits land in draft_data; Admin Approvals publish without overwriting live pages mid-edit.
NeedPublic /share/[slug] URLs must stay stable.
ValueSafe collaborator editing for client-facing links.
Public apply on the portfolio; staff triage in CMS; approved applicants become team profiles.
NeedHiring needs structured intake without sharing one UI with candidates.
ValueShort path from application to internal roster.
Contact-form leads with status pipeline, search, and filters.
NeedInquiries need triage, not an unread email pile.
ValueClear follow-up state for serious conversations.
Leads and a per-user bell update live via Supabase Realtime.
NeedOps desks go stale if staff must refresh constantly.
ValueFaster response when a lead or review arrives.
Admin invites Managers with presets; Approvals queue for pending drafts.
NeedCollaborators need scoped power; publish must stay intentional.
ValueSafe division of labor on a single brand site.
Public signup disabled; Admin-driven invites.
NeedThis is a private desk, not a self-serve SaaS.
ValueHard boundary against random account creation.
Admin invites Manager with Share editor access
Manager creates or edits a share page
Changes land in draft_data
Admin reviews Approvals and publishes
Public portfolio URL serves the live version
Candidate opens hire apply link on zohaibnawaz.dev
Completes form and uploads documents
Submission appears in CMS Hire inbox
Staff review; optional approve into Team
Started from a Makerkit-style Turborepo, then deliberately collapsed multi-tenant org patterns to one Admin-owned workspace.
Business valueSerious ops ergonomics without shipping a public multi-tenant CMS.
ZN CMS and zohaibnawaz.dev share the same Supabase tables for share pages, hire, leads, and notifications.
Business valuePublic URLs and the ops desk never drift out of sync.
Manager edits write draft_data; live columns stay public until an Admin approves or rejects.
Business valueCollaborators can work without half-publishing a client-facing page.
Presets × module flags × canDelete / requiresApproval, enforced in Server Actions through assertCapability—not only in the UI.
Business valuePermissions match real desk roles even if a route is wrong.
| Challenge | Solution |
|---|---|
| Managers needed to edit share and hire content without overwriting what clients already see on live URLs. | draft_data staging plus an Admin Approvals queue before anything becomes public. |
| A multi-tenant SaaS starter assumed orgs and self-serve signup; this desk is invite-only for one brand. | Constrain the fork to a single workspace owner, block public signup, and invite Managers with scoped presets. |
| If portfolio and CMS used separate databases, hire and share records would need constant sync jobs. | One Supabase project: portfolio serves public pages; CMS owns staff workflows on the same tables. |
| UI-only permission menus are not enough when Server Actions can still mutate modules a Manager should not touch. | assertCapability on mutations, backed by RLS and CSRF on state-changing requests. |
Recommended capture order for the case-study gallery.
A personal-brand CMS should feel like a private companion desk—not a second public product you have to market.
When content already has public URLs, draft vs live is the real unlock for safe collaborator editing.
One shared database beats dual-write sync—only if capability checks and RLS stay strict on every write path.
| Priority | Improvement | Business value |
|---|---|---|
| High | Projects module wired to portfolio case-study content | Edit work entries in CMS without touching the site repo for every change. |
| High | Media library with Storage-backed assets | One place to manage images used across the brand system. |
ZN CMS is a case study in invite-only RBAC, draft approval, and a shared Supabase backend with a live portfolio—not a multi-tenant CMS for everyone. If you want the same clarity for your product or practice, start a conversation.
Start a conversationFull Stack Product Engineer
Personal brand ops / internal CMS
2026
Solo build
Next Project
Ask about projects, skills, or how to hire.