Engineering Portfolio (this site)
A production-grade personal portfolio built ticket-by-ticket with strict TypeScript, a real CI pipeline, and zero fabricated content — every section either ships real functionality or is explicitly marked as a placeholder pending real data.
Overview
Most portfolio sites show pretty pictures and describe engineering discipline in prose. This one had to prove it: every section either ships real, working functionality or is honestly marked as a placeholder waiting on real content — never fabricated project history, credentials, metrics, or media.
Problem Statement
A personal portfolio needed to demonstrate senior-level engineering judgment, not just list technologies. That meant a real CI pipeline gating every change, strict TypeScript catching real bugs before they shipped, and a hard rule against inventing content (fake project stats, fake credentials, fake video links) just to make sections look fuller.
System Architecture
- Next.js App Router with Server Components by default; client components are opt-in and scoped to the smallest interactive unit (a form, a modal, a filter control) rather than whole pages
- Content lives in typed `lib/constants/*` modules or MDX files under `content/`, never inline in components — one source of truth per data shape
- A shared `TERMINAL_COMMANDS` registry models the terminal's behavior as data instead of a branching dispatcher, so adding a command means adding an entry, not editing control flow
- GitHub Actions runs type-check, lint/format, and build on every pull request into `develop`; nothing merges without all three passing
Key Outcomes
- 10 tickets shipped end-to-end (PORT-101 through PORT-110), each with its own branch, PR, and passing CI run
- Multiple real bugs caught by the strict TypeScript config before they shipped — including a TS narrowing-through-closures issue and several noUncheckedIndexedAccess cases
- Zero fabricated professional content anywhere on the site: every placeholder is explicitly labeled as such rather than filled with invented specifics
Metrics
- CI
- type-check + lint + build on every PR
- Type safety
- strict, zero `any`