Skip to content
← All the work

Case 06A portfolio that refuses to be oneIdentity · Websites · Automation · Intelligence · ApplicationsLive · 2026

How do you build a portfolio for someone who does not fit a portfolio category?

My answer was not another project grid. At /portfolio the visitor names a company and builds it with me - identity, website, workflow, application - and every step runs for real.

commits over 11 days
50
before the first control is usable
5.7 kB
for a real workflow run
132 ms
kinds of business, each with its own site, workflow and app
5

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

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  1. SourceA visitorNames a company, picks its kind, chooses its character.
  2. StepIdentityUp to two of five traits become its tokens.
  3. StepIts websiteFive layouts. The visitor uses it as a customer.
  4. StepThe workflow, streamedOne line per stage, as the server finishes it.
  5. ModelUnderstandThe enquiry read as data against a fixed schema. A named fallback.
  6. KeptIts applicationThe record, in an app built for that kind of business.
  7. KeptThe logEvery event, append-only. The finale prints it.
  8. A personMeFour doors to reach me, triaged. I answer.
Each discipline hands its output to the next. The only step that is not software is the last one.

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.
A portfolio that refuses to be one: how I built it - Eva Jereb