CASE 05 · 2026 · Builder · Full-stack × ML

THIS PORTFOLIO

The site you're reading — a content-repository portfolio engineered like a product.

STATUS

SHIPPED — LIVE AT ITZPRATHAM.IN

RESULT

A fully data-driven portfolio: drop a project file and it renders everywhere — tested like a product, measured honestly.

LIMITATIONS

Metrics are measured on the live site; the cinematic curtain intentionally taxes first-visit LCP.

Next.js 16TypeScriptTailwind 4MotionGSAPLenisMDX / gray-matter

01

THE PROBLEM

Portfolios rot. The content lives in components, so updating means editing code, and nobody updates code. The system had to treat content as data — projects, timeline, metro, process — with the UI as a pure container.

100 a11y · 100 best-practices · 100 SEO (live measured)

02

THE HARD PART

Keeping the "drop a file" promise honest — YAML in MDX frontmatter is unforgiving, so every file is schema-validated with loud build errors, and the measured numbers on the process page come from a real Lighthouse run, not markup.

03

WHAT SHIPPED

A live, data-driven portfolio with an agent layer (llms.txt, /api/data, /api/agent), offline support, dark mode, and a CI-enforced quality bar.

THE FULL STORY


The story


Every portfolio ages the same way: the content is welded into components, so the

owner stops updating it. This one was built backwards on purpose — **the content is

the system, the UI is a container.**


Projects are one file each. The timeline, metro, process, even the build log and the

test matrix are MDX. A typed loader validates every file at build and memoizes the

parse, so "drop a project in" is literally true: the work index, case pages, sitemap,

JSON-LD and the agent APIs all read the same source.


The quality loop is part of the product too: CI runs lint, types, unit tests and 22

Playwright flows on every push; the process page's numbers come from a real Lighthouse

run against the live site, refreshed per deploy — no hand-typed claims.


It's the dogfood project: everything this site says about building systems, it does to

itself.


IMPACT

  • 100 a11y · 100 best-practices · 100 SEO (live measured)
  • 22 Playwright flows · zero console errors · CI green
  • Projects are content — adding one is a file drop, not a code change

THE ARCHITECTURE

Layered, labelled, honest — the system as it actually stands.

01 · CONTENT LAYER

Projects MDXSite MDXMeta MDX

02 · BUILD LAYER

Typed loaderMemoized parseStatic generation

03 · RENDER LAYER

PagesCardsSitemapJSON-LDAPIs

04 · QUALITY

CI gatesLighthouse measurePlaywright 22

SYSTEM FLOW

01Content repository
02Typed loader + validation
03Static generation
04Theme tokens
05CI + measurement

WHAT IF

Ask the project a different question. The architecture has to defend itself.

What if the content lived in a database instead of MDX?

You'd buy runtime caching, auth and a UI to edit prose that changes twice a year. MDX keeps it build-time, versioned and CI-checked — the right trade at this scale, and the content loader is the seam where a DB could slot in later without touching the UI.

What if it had 100 projects?

The loader memoizes and the work grid pages automatically; the bottleneck becomes art assets, not code. I'd add card pagination or a filter bar before the index got long — still data-only changes.

DIVE DEEPER

Built it — now the descent. Each question opens the next layer: why, why this architecture, what broke, what I'd change.

01Why a content repository instead of a CMS?

A CMS adds a service and an auth story. MDX files are versioned, reviewable, and build-time — the simplest thing that stays honest.

02Why is dark mode a token inversion?

One :root block swaps paper/ink and every component follows. No per-component theme code to drift.

03What went wrong?

Early MDX files broke builds on unquoted YAML colons, and a restored section once shipped invalid list markup — both caught by the same loud-error + CI loop they now enforce.

04What would I do now?

Move the remaining identity fields into content too, and add visual-regression gates for the canvas art.

THE REPO, INSIDE

Not a screenshot — a live iframe pulling this repo's README straight from the CDN.

FETCHING README FROM THE REPO…