Overview
This site's /admin dashboard is a client-only, Firebase Auth-gated CMS layered on top of an otherwise
git-versioned Next.js portfolio. It lets the site owner edit hero copy, experience, skills, and project
curation live, without touching code or redeploying, while case-study content stays MDX in the repo.
Key Features
- Client-Only Auth-Gated CMS: Engineered a client-only, Firebase Auth-gated CMS (
/admin) layered on top of a static, git-versioned Next.js App Router portfolio. - Zero-Config Seed System: Architected a fallback system allowing every Firestore read to degrade
gracefully to a bundled static fallback file (
site.config.seed.ts) when Firebase environment variables are unconfigured — the site always renders with zero required env vars. - Hybrid MDX + Firestore Content Engine: Designed a hybrid content engine pairing git-versioned MDX
case studies with real-time Firestore overrides (
projects/_overrides) for dynamic ordering, visibility, and featured flags. - Live Site Config & Sections: Built live site config and section management (
siteConfig/main,sectionscollection) validated against strict Zod schemas and rendered via a flexible component registry. - Double-Gated Admin Security: Enforced client-side Auth Guards (
AdminGuard) paired with server-side Firestore Security Rules matching an explicit email allowlist. - Standardized Design System: Standardized styling and design tokens using Once UI layout primitives
(
<Column>,<Row>,<Grid>) alongside Biome formatting and Husky/lint-staged git hooks.
Technologies Used
- Next.js + React + TypeScript: For a type-safe, server-rendered application shell.
- Firebase Auth: Email/password authentication with an allowlist gate for the single-owner CMS.
- Firestore: Document store for site config, home-page sections, and project overrides, read via real-time listeners.
- Tailwind CSS: Utility-first styling for the admin UI and CMS-adjacent components.
- Once UI: Layout primitives and design tokens for the rest of the site.
- Zod: Schema validation for every Firestore-backed document, so a malformed doc can never break the page.
- MDX: Git-versioned long-form case-study content, rendered through a custom component set.
- Resend API: Transactional email delivery for the contact form.
- Biome: Formatting and linting, enforced via Husky/lint-staged git hooks.
- Git: Version control across the codebase and MDX case studies.
Outcome
The result is a portfolio that reads as a fully static, fast Next.js site to visitors, while giving its owner a live, database-backed CMS for everything except long-form case studies — with no server to run and no required configuration for the site to still work.