AppSite, API and dashboard
Portfolio platform
Three separately deployed apps: a Next.js site, a typed Express and Zod API with 350+ test assertions, and a dashboard with instant publishing behind Google OAuth, TOTP and audit logs.
- Role
- Designed and built
- When
- Since 2024
- Status
- Released
- Stack
Next.js
React
Tailwind CSS
Express
- TypeScript
- Zod
MongoDB
- Vercel

In short
Next.js 16 site, Express 5 and TypeScript API, Next.js dashboard, each deployed on its own
Google OAuth (PKCE), TOTP 2FA with recovery codes, an audit log with before and after snapshots
Guest passes, tagged links and first-party analytics behind a daily rotating identifier
Edits publish instantly: the API drops the cached page on every write
Context
A portfolio is usually a static page. This one is a small product: the content you are reading comes from an API, is edited in a dashboard, and publishes the moment it is saved.
What I built
The site is a server-rendered Next.js 16 app, so a crawler gets real HTML. The API is Express 5 in TypeScript with every shape validated by Zod, 350+ test assertions, rate limiting, an origin CSRF guard and a 64 kB body cap. The dashboard signs in with Google (PKCE), requires a second factor, keeps recovery codes and logs every change with a before and after snapshot.
Two features exist to show rather than describe. Guest passes let a reviewer walk the dashboard read-only on their own device. Tagged links put a short code on the resume's portfolio link, so a recruiter's visit can be told apart from the rest without a cookie: visitors are counted behind an identifier that rotates every day and is never stored in the clear.
Outcome
A content change is live within a second of saving. The whole thing lints, type checks and builds in CI before it can merge, and a merge into main is the deploy.