All work
Open sourcePersonal website2026

ICGreborns — Portfolio

A portfolio that practices what it preaches: every line of copy served from a CMS, two languages, light and dark themes, a printable CV — all wrapped in a design system built from scratch.

Role
Design & development — solo
Timeline
2026 — ongoing
Stack
Next.js 16 · React 19 · TypeScript · Tailwind CSS v4 · Sanity v5
Team
Solo - AI-assisted
Built with
Next.jsReactTypeScriptTailwind CSSSanity
Live preview

Experience it in-page

Open full screen
icg-reborns.com
Open

The project is embedded above — scroll, hover and explore it without leaving the page.

The problem

A developer’s portfolio should prove the skills it claims. Most are static pages: copy hardcoded in components, a single language, no content workflow — every text tweak means a commit and a redeploy.

I wanted a site that demonstrates the full stack I sell: content architecture, multilingual delivery, accessibility and performance — not just screenshots of other work.

My role

Everything, end-to-end: brand and design system (tokens, typography, themes), content modeling in Sanity, the Next.js front-end, the contact pipeline and deployment. No template, no UI kit — every component and every GROQ query is hand-written.

The solution

Next.js 16 (App Router, Turbopack) and React 19 on the front; Sanity v5 as a headless CMS with the Studio embedded at /studio. Locales are data, not config: translatable fields use internationalized arrays resolved per request with graceful fallbacks, so the site never breaks on missing content.

The next-sanity live content API keeps published edits fresh; the contact form runs through a server action (Resend) with server-side validation; deploys ship from Vercel.

The outcome

The site now runs like a product: copy, projects and even languages are edited in the Studio and ship without a redeploy. This very case study follows that pipeline — written in the CMS, rendered by the app.

100%
of page copy served from Sanity
2
locales (EN/FR), data-driven
≈0
Very little hard-coded text in the code