My Portfolios Website
Next.jsExpressPostgreSQL

My Portfolios Website

A personal company-profile site with a public marketing surface and an authenticated admin for full CRUD over every content resource.

Tech used

Next.js 16React 19TypeScriptExpress 5Drizzle ORMPostgreSQLTailwind v4

Situation

Content lived in hardcoded files, so every copy change needed a redeploy and nobody but a developer could touch it.

Task

Ship a self-serve site where all public content is editable from a secured admin panel.

Action

Built an Express 5 + Drizzle API with a strict { data, error } envelope and Better Auth sessions, paired with a Next.js App Router frontend using TanStack Query and shadcn UI.

Result

Content updates now take seconds instead of a deploy cycle, and every resource is managed from one dashboard.

Overview

Two independent apps: an Express API on Bun and a Next.js frontend.

Architecture

Per-resource vertical slices route to controllers to services to Drizzle. Every response returns the same envelope.

Result

Full CRUD over profile, experience, academic, skills, and portfolio content.