Selected work

Three things I couldn't stop thinking about, so I built them.

The deeper cut: what each was built to test, the decisions behind it and what remains unproven. SOURCE IT asks whether evidence can trace a product to its maker; it has been tested in bounded live cases only. Relay and OFFLINE are working prototypes; neither has been tested with users.

01

SOURCE IT

Sourcing investigation tool — The Certainty GapBUILT

Can a retail product be traced to its actual maker, or only to something that looks like it?

The test case

Boggi Milano Marcello trousers, dark navy

Made in
Tunisia
Fabric
Exclusive Italian fabric
Composition
59% cotton · 37% lyocell · 4% elastane

Read from the physical care label.

What that means

A similar Turkish supplier listing would be a possible alternative, not the factory. It wouldn’t establish the same material, fit or maker. The original factory is still unknown.

  1. 01 · Resemblance
    Looks like the product
  2. 02 · Supplier claim
    Says it makes it
  3. 03 · Supported connection
    Independent evidence links them
  4. 04 · Unresolved
    Identity still unknown
My role

I came up with the question and mapped how a buyer actually investigates a product.

I directed the build with AI in Lovable, researched search providers and sourcing routes, and inspected what came back.

When the evidence was weak or a run failed, I changed the rules.

What the prototype does
  • Starts from an uploaded photo, or from a retail link once you choose an image the page shows. A link can add to a photo. A blocked page needs an upload. Every run has a review step before searching.
  • Searches live web sources, plus one chosen marketplace per run (Alibaba, 1688 or AliExpress) by photo.
  • Reads claims from the retail page when the site allows it, and says so when it doesn’t.
  • Keeps retail matches, marketplace listings, directory leads and supplier claims separate, and records where each came from and what is missing.
  • Saves reports so investigations can be compared.
Earlier walkthroughSOURCE IT — early prototype walkthrough, recorded before the live search integrations.
Decisions the tests forced
Blocked pages
Some retail sites refuse automated reads (403).
The user reviews the input, and missing page data is marked unavailable, not guessed.
Lookalikes
Visual and marketplace matches kept reading like answers.
Resemblance is kept apart from provenance. Directories and supplier self-descriptions are labelled as leads.
Messy inputs
Some image formats failed with providers, and supplier claims contradicted each other.
Images are normalised before searching, and contradictions are flagged rather than turned into facts. Image comparisons in the recent bounded Boggi and tie reports are still unmeasured.
What a real run found

An Elliot Martin tie search surfaced Shengzhou Xinli Neckwear as a candidate, and it recurred across bounded searches. That makes it a lead worth checking. It does not show a link from the brand to the factory. A Boggi run returned generic trouser leads and no Boggi maker.

Where it stands

Evolving pre-launch prototype. Live searches have been tested in bounded cases, and the saved workflow and comparison exist. Image comparisons in the recent bounded Boggi and tie reports are unmeasured. Overall reliability, user validation and any original manufacturer are still unproven.

Next proof: a controlled test across several product categories, triangulating sources, with limits on cost and response time.

Lovable
— AI-assisted build I directed
SerpApi · Apify
— live web discovery and marketplace photo search
02

Relay

AI conversation studioBUILT

Transcription is only the raw material. Which moments, ideas and quotes actually matter — and who should make that final editorial decision?

The problem

Meeting tools preserve the words, but the useful story is buried inside them. What matters changes with what someone needs next: a decision log, a study note, a follow-up email. Relay finds the relevant moments in the same messy conversation, then keeps the final editorial decision with the person using it.

The build

A multi-screen prototype that runs a live model call end to end — upload, analysis, intent-driven output selection, a review step, then a library of saved outputs.

Open document
PrototypeUpload a conversation recording.
Open document
PrototypeIntent selects the output: the same recording becomes a summary, action items or notes.
Open document
PrototypeNothing is shared until every detected speaker has approved it.
Decisions
Intent selects the output, not the file type.
The same recording becomes a different artefact depending on who will act on it. Asking for intent up front is the only question that changes the answer.
Nothing publishes without a human edit.
The review screen cannot be skipped. The model drafts; the person keeps the editorial decision.
Output is stored, not consumed.
A library turns one recording into a compounding set of working assets rather than a result that is read once and lost.
What remains unvalidated

Whether stated intent is a better selector than document type once real users are choosing under time pressure.

Working prototype. User validation not yet run.

Tools
Lovable, Replit
— building and iterating the prototype
ChatGPT, Claude
— product logic, flows, output architecture, edge cases
03

OFFLINE

Real-world social discoveryBUILT

A product that optimises toward real-world interaction, not time spent in-app.

The problem

A match on a dating app opens a long digital runway — opening lines, days of messaging, scheduling — and often no meeting. Meanwhile people are already out in the same room with no way of knowing who is compatible, who is interested back, or whether it is alright to walk over. Three kinds of uncertainty, none of them solved by more messaging.

The build

A multi-screen prototype covering the two contexts the product runs in: a persistent discovery layer outside venues, and Tonight Mode, activated when the user is physically out. Tonight Mode covers temporary venue check-in, a compatibility count rather than a catalogue, a small curated batch, mutual interest, one active connection with minimal coordination, and a 'We've met' confirmation.

Open document
PrototypeTonight Mode entry — switched on when you arrive, not left running.
Open document
PrototypeLive venue state — who is out, without displaying everyone.
Open document
PrototypeA compatibility count rather than a catalogue, and a connection that ends with the night.
Decisions
One active connection at a time.
Several mutual likes in one venue would otherwise become several parallel chats and no conversation. Mutual interest becomes a sequenced opportunity with a short window, so the night is spent on one person rather than a phone.
A curated batch, never an endless queue.
'37 checked in · 12 compatible' orients without displaying everyone. Showing all twelve at once turns a room into a feed and puts the product in competition with the night.
Approachable Mode is recognition, not permission.
An optional current-outfit selfie answers 'what do you look like right now', which is a different job from the profile photo. It is contextual, temporary and revocable, and it never overrides an ordinary boundary.
Expiry is contextual, not punitive.
An unmet connection ends with the night — 'not tonight' rather than a loss. If two people do meet, both confirm it and the connection is kept.
What remains unvalidated

Whether people want to know which compatible singles are in the room, or whether that reads as intrusive — and whether a deliberately limited batch feels refreshing or restrictive. Both have to be answered before venue density is worth engineering for.

Working prototype. User validation not yet run.

Tools
Lovable, Replit
— building and iterating the prototype
ChatGPT, Claude
— behavioural problem definition, product architecture, flows, trust and safety logic