This Portfolio

Self-Initiated · Design & Development

Designing for yourself is the hardest brief. Here's how I solved it.

Next.js 15Tailwind CSSFramer MotionSelf-Initiated
Avi Adlin

The full experience: a scrolling walkthrough of the live site.

Context

The hardest brief is the one you write yourself.

No stakeholder. No brand book to inherit. Total creative freedom turns out to be paralyzing, every direction is defensible, so none feels right.

And the other constraint: time. This was designed nights and weekends during a job search, on top of a full-time role. A portfolio you keep redesigning forever never ships, so I set a deadline and let it kill the precious ideas.

The rest of the constraints I chose on purpose. A self-imposed brief: the portfolio should feel less like a SaaS landing page and more like a well-made annual report. Severe, typographic, monochrome with one signal color. The work has to do the talking; the container should step back.

Four design decisions held the system together.

Audience

The audience is the brief.

The work targets industries where calm reads as competence. Defense, security, infrastructure, finance. A loud portfolio would tell those teams the wrong thing about how I work.

Systems · grid
Restraint · redacted
00:00:01.247
00:00:01.892
00:00:02.014 ✓
00:00:02.733
00:00:03.001
00:00:03.418 ⚠
00:00:04.220
Telemetry · numeric
R = 70.00θ = 0.000
Schematics · line
Signals · spectrum
X 100.00Y 125.00
Targeting · crosshair

Industry visual vocabulary

Visual Identity

Two typefaces. Two colors. Zero noise.

Geist for everything that reads as content. Geist Mono for everything that reads as system: labels, captions, tags, nav.

Headlines are uppercase with tight tracking. It's a stance, not a convention. The mono treatment of metadata makes the page feel built rather than decorated.

The palette is nearly monochrome. Blue (#2563eb) is reserved for signal: section labels, scroll-driven highlights. Used as decoration, it would be noise.

SPECIMEN · GEIST
Aa
Geist · Geist Mono · Variable 100-900
Background
#09090b
Surface
#18181b
Foreground
#fafafa
Muted
#71717a
Accent
#2563eb

Token palette, dark · light mirrors these values

Dark + Light

The same page. Twice.

Dark is canonical. Light has to feel like the same design, not a tinted version of it. Every color is a CSS custom property; an inline script reads localStorage before paint so the first frame is correct. No flash, no flicker.

Built with AI · Claude Code

Not just design. Strategy executed by AI.

Instead of manually converting a Figma file into a site, I gave the AI clear goals: uploaded my resume, defined my value proposition, and scoped the target audience. The result is a site built from strategic intent: a full redesign grounded in a complete design system.

I used Claude via the CLI and a local MCP server connected directly to the Figma API. Claude pulled content from design layers, planned the architecture, defined precise design tokens, and wrote clean React in Next.js 15.

Everything is wired to GitHub and deployed via Vercel. Every change is reviewed and published automatically: a real development workflow, not a static prototype loop.

As a product designer, defining goals and watching AI execute them at production level in minutes is a paradigm shift. It lets me skip tedious technical steps, iterate on real code, and speak the same language as my developers.

Claude Code in action

Claude Code in action

Performance

Fast is part of the design.

Next.js Image optimization, GIF → video conversion, lazy loading below the fold, and Vercel Analytics + Speed Insights closing the loop. A page that feels heavy reads as imprecise; precision is the brand.

METRIC // 01
0
Lighthouse · Performance
METRIC // 02
0
Lighthouse · Accessibility
METRIC // 03
0.0s
Largest Contentful Paint
METRIC // 04
0
Cumulative Layout Shift
This is a job application

Looking for the next hard problem.

RoleSenior Product Designer
Open toFull-time · Hybrid · Tel Aviv
Emailadilnel@gmail.comLive siteavi-adlin.com
Priority