I built my portfolio CMS using Claude Code & Notion

How I designed and built this site end-to-end — a Next.js front end, Notion as the CMS, and Claude Code as my pair — with a living style guide keeping every component consistent.

CompanyRaygar
Timeline2026
My RoleDesign & development (end-to-end)
TeamSolo — design, build & content
Platform
Websites
Focus
Design SystemVibe CodingAI

Context

I redesigned my portfolio, but I didn't want to touch code every time I added a project or fixed a typo. I also didn't want a generic site builder — it had to match my design system exactly — or to pay a website-builder platform every month.

I already write everything in Notion. So I made Notion the place I write, and used Claude Code to build the site that reads from it. Write a page in Notion, and it shows up on the site — on-brand, in minutes.

Challenges

ChallengeWhy it matters
Every update meant editing codeA new project or a one-line fix needed a code change and a deploy. Too slow to keep fresh.
Site builders didn't fitTemplates looked generic and couldn't match my type, spacing, and components.
Writing should feel like writingPublishing a case study should be as easy as writing a Notion doc, not a coding task.
Consistency across pagesEvery page had to follow the same design rules without me checking each one by hand.

Goals

GoalTarget outcome
Publish without codeAdd or edit a project in Notion and see it live — no deploy.
Stay on-brandEvery page uses my design system: same type, spacing, components.
Own the whole buildDesign and build it myself, end to end, fast.
Keep it low-maintenanceA simple stack I can run and update on my own for years.

Results

MetricResult
Time to publishMinutes — from Notion to live
Content I controlCase studies and articles, all edited in Notion
BuildSolo, with Claude Code
CostRuns on Notion's free plan and low-cost hosting

The build

The CMS (Notion) — Notion is the content source. Two databases, one for case studies and one for articles; each page's properties become the site metadata, and the page body becomes the content. The site connects through an internal Notion integration: I share the databases with it, and it reads them with a secret key kept out of the code.

Notion pieceHow it's used
Projects databaseOne page per case study
Page propertiesCompany, role, timeline, platform, focus, cover
Page bodyHeadings, text, tables, images — rendered as-is
The CMS in Notion — every case study is just a page in this list.
The CMS in Notion — every case study is just a page in this list.
Editing a case study in Notion — properties become the metadata, the body becomes the page.
Editing a case study in Notion — properties become the metadata, the body becomes the page.

Rendering (Claude Code + Next.js) — A renderer I built with Claude Code maps each Notion block to my own components, so the output always matches my design system.

LayerApproachTools
FrameworkServer-rendered for speed and SEONext.js, TypeScript
StylingDesign tokens and utilities, no stray CSSTailwind CSS
ContentFetched from Notion's API, cached and auto-refreshedNotion API
RenderingEach Notion block mapped to an on-brand componentClaude Code
Design systemTokens → components → pages, consistent everywhereFigma, Claude Code
Version controlHistory, branches, and a safety net for every changeGit, GitHub
DeploymentBuilds and ships on every push to mainVercel

A living style guide — Every component also renders on a living style guide that imports the same code the site uses, so the design system can't quietly drift. I check changes there before they ship.

Protected case studies — Some of my best work is under NDA. Those sit behind a password: enter it once and the summary opens right there on the page — no separate login, no leaving the page.

Claude Code in my terminal — where the planning, prompting and refactoring happen.
Claude Code in my terminal — where the planning, prompting and refactoring happen.

Reflection

The goal was never to build a CMS. It was to make writing and shipping easy enough that I'd keep the site alive — and that part worked. Each piece pulls its weight: Notion for writing, Claude Code for building, a style guide to keep it honest.

  • Owning the whole stack pays off. Design and code decisions feed each other, and nothing gets lost in a handoff.
  • The speed of AI comes from the loop, not blind trust — describe it, read the diff, check it in the browser.
  • A living style guide is what keeps everything consistent. Without it, small drifts quietly pile up.
  • Cache Notion's images properly, so pages load faster and don't lean on links that expire.
Attendy — I shipped a product solo, from prompt to 599 users
Attendy2025

I shipped a product solo, from prompt to 599 users

A weekend vibe-coding project that became a live app. I designed, built, shipped, and marketed an attendance tracker solo with AI — the build turned out to be the easy part.

Suncorp Bank — Personalised communication at scale
Suncorp Bank2025-2026

Personalised communication at scale

Who, Where, When: build a comprehensive customer communication system across digital banking channels.

Suncorp Bank — Scaling a Design System into an App Demo Tool
Suncorp Bank2025-2026

Scaling a Design System into an App Demo Tool

Without a consistent, up-to-date reference, call quality and compliance were at risk. I built frontline staff a single source of truth—faster calls, better resolution, no test devices.