Case studies/Portfolio Rebuild · Framer
AI WorkflowDesign Systems0-to-1Design to Code
Case Study No. 01 · A designer builds her own product

Ten pages. One token system. Shipped in React.

Migrating a Squarespace portfolio to a custom Framer site by designing a shared token architecture first, then implementing ten pages as React/TSX components with AI-assisted development.

Portfolio rebuild hero — Squarespace site before, Framer site after
Platform
Framer + React/TSX
Custom code components
Role
Sole Designer
AI-assisted dev
Scope
10 pages shipped
Live and published
Timeline
Apr → May 2026
~4 sessions
10
Pages designed and shipped as self-contained React components.
10+
Design tokens locked before a single page was built.
1
Shared token object. One change propagates across the entire site.
Live
Shipped, published, and password-protected on Framer's CDN.
The problem
What Squarespace couldn't tell

A Figma-only portfolio wasn't telling the right story.

Squarespace was limiting, not visually, but strategically. The roles I wanted required evidence of design-to-code fluency, systems thinking, and the ability to work across the design and engineering boundary. A static portfolio couldn't demonstrate any of that.

The deliberate choice: rebuild in Framer using custom React/TSX components instead of drag-and-drop defaults. Design the system first, then build the pages on top of it.

Previous Squarespace portfolio site — the before state
Design system foundation
The decision that made everything else fast

Token architecture before a single page was built.

Before writing any layout code, every visual primitive was defined as a shared JS object: color tokens, typography scales, border values. The rule was simple. If a value needed to be consistent across pages, it lived in the token block at the top of every file.

This is the same thinking that drives enterprise design systems. A brand color update propagates automatically. No hunting through ten files for the right shade of olive.

The token system also acted as a design constraint. Visual decisions had to be made once, explicitly. That discipline is what makes the site feel coherent without ever opening a style guide.

// shared across all 10 pages
const colors = {
white: "#FFFFFF",
cream: "#FDFAF0",
ink: "#1A1F0A",
inkMuted: "#5C5F4E",
olive: "#6B8E23",
oliveDeep: "#3D4F18",
border: "#E8E6DD",
}
// one change = 10 pages updated
const fonts = {
serif: "Playfair Display",
sans: "DM Sans",
}
10-page system composite — every page in the portfolio shown together to demonstrate visual consistency
AI-assisted implementation
The workflow, honestly described

AI as code labor. Designer as decision-maker.

Every layout decision, every typographic call, every component hierarchy was mine. Claude handled the React/TSX execution. The distinction matters. This isn't "AI designed my portfolio." It's a documented, iterative workflow where the designer stays in the driver's seat.

The process ran across four sessions: preview in chat, give feedback, generate TSX, paste into Framer, publish, repeat. Real constraints surfaced along the way. Framer's compiler rejects TypeScript Record types, so inline JS objects became the convention across all ten files.

Knowing how to direct AI-assisted development, not just use it, is increasingly a senior skill on modern product teams.

AI workflow — chat screenshot showing a design decision being made in real time
Troubleshooting moment — Framer compiler error and the fix
Troubleshooting moment — another error/fix pair from the build process
Reflections

What building your own product teaches you about design systems.

Reflection 01

Tokens first, always.

Locking color and type before building pages is not overhead. It's the work. Every hour spent on the token system saved three hours of inconsistency fixes later. By the time the first page was built, every design decision had already been made.

Reflection 02

Constraints are a gift.

Framer's compiler limits pushed better conventions: inline JS objects over TypeScript Record types, self-contained components over shared state. The output is more portable for it. Each TSX file can move to another React project without modification.

Reflection 03

AI amplifies, not replaces.

The quality of AI output scales directly with the clarity of design decisions. Vague prompts produce vague code. Sharp design thinking produces sharp implementation. The bottleneck is never the AI. It's the precision of what you ask for.

Reflection 04

Ship early, improve in phases.

Going live before imagery or mobile breakpoints were finished created real feedback loops. The site improved faster because it was real, not sitting in a Figma file. A live, imperfect product teaches you what a polished prototype never can.

The result

A live product. Not a prototype.

The live, shipped Framer portfolio in a browser window
End of case study
Thanks for reading.
← View all case studies