Case Study · Personal · 2026

Portfolio Site

A portfolio gets judged by the people it was built to impress, which makes it a uniquely unforgiving brief: every shortcut in it is a claim about how you work. It started from a wireframe system worked out on paper and a generated starter site that supplied a working shell and a light identity worth keeping none of. Everything after that was built by describing intent and reviewing what came back. That part is usually left out of a case study. It's in here because knowing what to ask for, and what to reject, turned out to be the entire job.

Design System
Design System
Interactive Canvas
Interactive Canvas
Home
Home
The Problem

A portfolio gets judged by the people it was built to impress, which makes it a uniquely unforgiving brief: every shortcut in it is a claim about how you work.

My Role

End-to-end: research, flow architecture, high-fidelity UI, design system contribution.

The Approach

Frames That Tell The Truth About The Platform

The Outcome

−64%: Image payload

Scope, Constraints & Reality

No coding background

Every line came from specification, review and rejection, not hands-on code, which shaped the process more than any technical constraint did.

A starting point, not a blank page

The generated starter arrived with a light/cream identity and its own defaults. Inverting it was the first real decision, and it cascaded through every token in the system.

Static hosting, no backend

No server means no server-side secrets and no runtime image processing. Performance had to be solved at build time or not at all.

Real client work, handled carefully

T-Mobile, Standard Bank and Elevance screens are real product. Nothing could be invented, and nothing could be represented as something it wasn't.

The Work
01Ideation
Ideation

The brief, the constraint of no coding background, and the inversion from the generated starter's light identity to the shipped dark one.

02Design System
Design System

Colour swatches bound to live variables and real type-style specimens, not a picture of the system but the system itself.

03Final Screens
Final Screens

Home, case study and canvas, rebuilt in Figma from the same tokens the shipped site reads.

04What I'd Tell Someone Else
What I'd Tell Someone Else

Three decisions that needed a second look, and the reason none of the mistakes behind them threw an error.

Design Decisions

1

Frames That Tell The Truth About The Platform

Every case-study hero originally sat in the same desktop browser chrome with a fabricated URL, which put Standard Bank's iOS app, status bar and home indicator included, inside a browser window with a made-up address bar. Frames are now device-true and no URL is invented. Elevance nearly got mis-assigned the other way: its screens are tall and look mobile by aspect ratio, but they're full-page desktop captures with the nav and footer visible.

2

One Accent, Three Roles

Each case study carries its client's colour. The naive version broke immediately: T-Mobile magenta passes contrast as a fill but fails as text on the dark background, and white fails on top of the lighter accents. So each accent is three tokens rather than one, verified against 4.5:1 instead of eyeballed. A colour token is a role, not a value.

3

Animation Mapped To The Wrong Range

The hero screens drift apart on scroll. The first build was technically working and effectively invisible, and the cause was the input range, not the distance: the drift was mapped from where the hero enters the viewport, but the hero is already on screen at load, so readers began halfway through and only saw the back half of the motion. An animation nobody notices is more often mapped to the wrong range than tuned to the wrong output.

Impact

−64%
Image payload

54.4MB to 19.8MB across 238 images via WebP served through <picture>, with the originals kept as fallback so older browsers get a working image rather than a broken one. Other Work's initial load dropped 4073KB to 240KB.

670KB
Removed for low-end devices

The WebGL hero already checked for weak hardware and reduced-motion, but the check ran after the library had downloaded. Moving it behind a dynamic boundary means the devices that fall back to a CSS gradient no longer fetch roughly half the homepage payload.

1 → 16
Headings on the homepage

Every section title and project name had been a styled div, leaving screen-reader users no outline to navigate and search engines a flat wall of divs. Rendering is pixel-identical: the fix was semantic, not visual.

Screens6
Click to expand · ← → to navigate