Process
How I built this site
This portfolio is a piece of work in its own right. I designed it and built it in code with AI, and it is still in progress.
The site is the proof
A portfolio is a product with one job: let someone judge the work, fast. I design AI products, so the site has an assistant in it, it is built in code, and it holds itself to the standards I hold the products I ship.
Rules before prompts
I started in Figma and Paper, then wrote the rules down: a DESIGN.md with the tokens, type and spacing, and one content file with every fact I am allowed to claim. Claude Code builds against both, so it works inside my system instead of inventing one.
--color-ink: #f4f4f5;
/* Both greys clear WCAG AAA (7:1) on every dark ground the site
uses: muted is 11.2:1 on the page and 7.2:1 on the strongest
hover wash, faint is 9.4:1 on the page and 7.4:1 on surface-2.
Don't darken either, they carry small text. */
--color-ink-muted: #b9bebc;
--color-ink-faint: #a7afab;Designed in the real thing
Most of the design happened in the browser. I reviewed every change on a laptop and a phone, then pushed it further or threw it out. Here is Home at each turn.
- Sept 2026First version: a pixel-art hero of Dubai, with greetings in five languages floating over it.
- Late SeptA hiring-manager review. I cut every claim the work could not back up, and gave each case a thirty-second read.
- OctRebuilt around a left rail, like documentation, so every case is one click away.
- Early NovHome, the nav and the case pages reworked, and the site went dark only.
- NovBojji arrived, Home became his landing, and a light mode went in.
Bojji
Bojji is my real cat, a lynx-point Siamese. On the site he is the way in: ask him about the work instead of hunting through pages.
Every frame is generated from code on a 41 by 45 pixel grid. His answers are scripted from facts already on the site, so he cannot make anything up. A live model comes next, held to the same facts.
- AsleepCurled up on the chat bar on Home
- WakingThe first click or keystroke
- IdleSitting on every other page
- WavingWhen you hover on him
- TypingWhile you type a question
- ThinkingBefore the answer arrives
- TalkingWhile he answers
- ListeningBetween turns
Easy to use, on purpose
Home fits on one screen. Each project leads with its impact. One button copies my email. There is no contact form, no splash screen and nothing that hijacks the scroll.
No slop
Both themes meet WCAG AAA contrast. These are the site's own colours, with the ratios worked out from the same values the CSS uses.
A script also reads every built page before it ships. It fails the build on an em dash or a placeholder number, and a missing fact shows up as a visible gap rather than something made up.
Dark mode
- Body text19.1:1AAA
- Secondary text11.2:1AAA
- Labels9.4:1AAA
- Labels on the nav rail7.8:1AAA
- Links and accents11.9:1AAA
- Bojji's chat bubble15.0:1AAA
Light mode
- Body text17.7:1AAA
- Secondary text9.6:1AAA
- Labels8.6:1AAA
- Labels on the nav rail7.8:1AAA
- Links and accents12.5:1AAA
- Bojji's chat bubble15.0:1AAA
check-content: 12 pages, 0 errors, 52 open markers.Still in progress
This is not the final version. I am still building it, and this page will change with it.