01 Problem
The problem
Before this I spent nine years across 3D, broadcast graphics, print, web and interaction design, after a degree in fashion design. The agency work from those years is not mine to publish.
What I build now crosses identity, websites, automation, models and applications. Someone who can only do one of those is a specialist, and easy to hire. The reason to remember me is what happens where two of them meet - and a grid of thumbnails cannot show a meeting.
And the most substantial things I have built hold real people's names and messages, so they cannot be screenshotted at all.
02 Evidence
How I knew it was real
- People kept asking me for a portfolio, and the page at /portfolio was not one.
- My first version read as basic. The second was an ordinary portfolio - which was not what I had asked for.
- I published the work index with three pieces and took it down 65 minutes later. A half-empty portfolio does more damage than no portfolio.
03 Decision
What I set out to change
Prove range by making the visitor use it: one company, built by them, in which each discipline hands its output to the next - so the chain shows I understand how they become a system, not only that I can do five things.
What I deliberately left alone
- Client work. Every company in it is invented by the visitor, and nothing in it belongs to a client.
- Faking any of it. If a step can run for real, it does; where it falls back, it says so by name.
- Screenshots of private systems. On the work index they are rebuilt rather than filmed.
The choices worth arguing with
Chose Play, not a page: the visitor builds a company, and is told nothing until they have done it.
Over A field of capabilities, then a stack of sections about what I can do.
Because Five separate demos would prove I can do five things. The chain proves I understand how they become a system.
Chose The workflow is not animated: each stage lights when the server has actually finished it, streamed, carrying the duration it measured.
Over A click-through pipeline with timed animation.
Because Nothing is padded to produce the pause - which is why the numbers are odd, and why a fast run looks fast.
Chose The kind of business is the root of everything: a gym gets a timetable and a price table, a cafe gets a menu.
Over One template with five vocabularies.
Because The first version's gym came out looking like a clinic with different nouns.
Chose Two pages for two visitors: the world for the one who will play, the work index for the one who wants to look.
Over A project grid under the world.
Because A grid would turn the world into the section stack it exists to refuse, and make the impatient visitor play through all of it to reach a thumbnail.
04 Build
What I built
One WebGL field of 14,000 particles, drawn in a single call, which scroll moves through eight formations, with one real control per station. The visitor names a company, picks what kind it is and chooses its character - and the kind replaces the website, the workflow, the analysis and the application. Five layouts, not one template.
Every action goes through one server route and is kept as an append-only log of events. When the visitor uses their company's website as a customer, the workflow streams one line for each finished stage; where a model is used, it reads the enquiry as data against a fixed schema, and its fallback names itself.
The finale is not a summary written for the page: it is the log, printed. Refreshing continues the same business. And the way to reach me is part of the demonstration - four doors, triaged - instead of a mail link that does nothing on most machines.
- SourceA visitorNames a company, picks its kind, chooses its character.
- StepIdentityUp to two of five traits become its tokens.
- StepIts websiteFive layouts. The visitor uses it as a customer.
- StepThe workflow, streamedOne line per stage, as the server finishes it.
- ModelUnderstandThe enquiry read as data against a fixed schema. A named fallback.
- KeptIts applicationThe record, in an app built for that kind of business.
- KeptThe logEvery event, append-only. The finale prints it.
- A personMeFour doors to reach me, triaged. I answer.
05 Validation
How I tried to break it
Five kinds of business, end to end, with a refresh halfway
Each one completes, and a refresh continues the same business.
Held
360, 768 and 1280 pixels wide
No sideways scroll at any of them.
Held
A wrong secret sent to the workflow
Rejected. A real run completed in 132 ms.
Held
A device with no WebGL2
The page still works: the controls are ordinary page elements, not part of the canvas.
Held
A visitor who asks for less motion
Gets one composed still, not a broken animation.
Held
Blurred recordings of the private systems
Taken down within 95 minutes - the blur left addresses readable enough to reconstruct. The surfaces are rebuilt instead.
Broke, then fixed · 20 Aug 2026
Real phones
Checked on a Pixel 7, an iPhone 12 and a Galaxy S9+.
Held
What did not work
- My first version was a field of capabilities. It read as basic, and nine files of it were deleted the next day.
- The second, built around a deliberately awful website and three idea cards, was replaced a day later.
- After launch, the failure that kept coming back was not capability but findability: eight fixes in two days so people on phones could find their way through.
06 Outcome
What changed
- 50 commits over 11 days
- The portfolio's git history, 2026-08-14 to 2026-09-10.
- 5.7 kB before the first control is usable
- three.js deferred until after the first control, measured when the world was rebuilt.
- 132 ms for a real workflow run
- An n8n execution recorded in the commit that wired the workflow, 2026-08-15.
- 5 kinds of business, each with its own site, workflow and app
- The niche definitions the world runs on.
The portfolio is a piece of the work instead of a description of it. It answers 'can she do X' by letting you watch X hand its output to Y - and it sits beside a work index for the visitor who just wants to look.
What I cannot show you yet is whether it works on people. Every session is kept as a log of events, and I have not counted them. No completion rate, no time to first build and no enquiry count exist yet - which is exactly what I measure next.
What I measure next
- How far visitors getSessions reaching each event - company created, website launched, record moved - from the event log.
- Time to first buildWebsite launched minus company created, per session.
- Enquiries from the portfolioHire events per session. Enquiries are only emailed today, so the inbox is the only comparison.
07 Learning
What I learned
A thin portfolio does not fail for being thin. It fails for being mute.
Play alone could not answer 'what have you built?'. The second page was the fix, not a compromise.
A pretend integration is worse than no integration. Every place the world could have faked a step, it runs it or says it did not.
Every change of course came from looking, not from visitor data - because there was none. That is the gap this page now names.
What I would change next
- Count the funnel from the event log.
- Record where a visitor stops, not only what they finished.