Skip to main content
Character frontCharacter back
Frontend · Design · Jun 2026 – present

How I built this site at PageSpeed 100: React, GSAP, prerender and a Cloudflare Worker

a.k.a. My Portfolio

→ CONTEXT: Personal project: a portfolio that reads like a drafting table full of blueprints, notes and paper, instead of a resume

ROLE: Designer · Frontend Developer
TIMELINE: Jun 2026 – present
STATUS: Live
FOR: Personal project
STACK:
frontend
  • React 19
  • Vite 8
  • Vanilla CSS
motion
  • GSAP
  • Lenis
infra
  • Cloudflare Workers
  • Build-time prerender
  • AVIF
analytics
  • GA4 · Consent Mode v2
FIG. 01 Blueprint project cards, mid-reveal on scroll

BLOCK // PROBLEM

Most developer portfolios look like resumes. I wanted mine to feel like a creative piece.

BLOCK // SOLUTION

A React and GSAP scrolling experience that tells my story, presents my projects and skills, and combines accessible interactions with carefully optimized motion.

BLOCK // CONSTRAINTS

  • PageSpeed 100 in every category as a hard target
  • Every animation has to degrade gracefully under prefers-reduced-motion
  • No CSS framework, no UI kit: the hand-drawn look had to be built from scratch

ENGINEERING IMPACT REPORT

A scrolling experience that tells my story, my projects, and my skills through a highly crafted frontend experience — communicating both technical depth and design sensibility.

100
PageSpeed desktop, all four categoriesGoogle PageSpeed Insights: performance, accessibility, best practices and SEO
93
PageSpeed mobile performanceAccessibility, best practices and SEO at 100 on mobile

ENGINEERING DECISIONS

DECISION_01

Prerender every route at build time and rewrite the head at the edge

Crawlers that do not run JavaScript get the full page, and there is no server render per request. The Cloudflare Worker only swaps title, meta and JSON-LD per route.

Instead of: Server-side rendering on Workers

DECISION_02

Vanilla CSS with custom tokens

The paper, tape and blueprint effects need clip-paths, masks and blend modes that no utility framework expresses well.

Instead of: Tailwind CSS or a component library

DECISION_03

AVIF-only images with preloaded LCP assets

The smallest bytes for the hand-drawn artwork. Google Images has indexed AVIF since 2024, and preloads make the hero paint first.

Instead of: WebP with JPEG fallbacks

DECISION_04

Analytics only after consent

Consent Mode v2 keeps GA4 unloaded until the visitor says yes, so nothing is stored on a visit that declined.

Instead of: Loading analytics by default

FIELD NOTES & DEVELOPMENT HIGHLIGHTS

NOTE_01

A scrolling story: hero, about desk, blueprint project cards and a paper-plane contact section

NOTE_02

An interactive UI system (doors, notes, tape, blueprints) that reflects product thinking and detail-oriented execution

NOTE_03

Perfect PageSpeed scores while keeping the motion, thanks to preloading, prerendering and AVIF

LESSONS LEARNED

  • Motion sells the site, but preloading and prerendering are what make it feel fast.
  • Accessibility choices (skip nav, reduced motion, optional sound) cost little and shaped the design for the better.

CORE SYSTEM PALETTE