SUYASH SINGHALL WORK ↗
📷 outfit.jpg
Love it — quick Q first: what’s the occasion? 👀
date w my prof
LOWKEY FIRE 🤙
Working
Oversized black leather = instant edge and drama. Silver ring detail. Moody lighting doing you a solid.
⚠️Holding it back
Jacket is swallowing you a bit, silhouette reads sleepy rather than sharp. Zero peek of what is underneath.
🚀Elevate
Zip it halfway or push the sleeves up. Slim dark jeans and clean boots to sharpen the whole thing.
Go charm the prof 📚🔥
04 / AI AGENT · WHATSAPP

Fit Check

A stylist called Rehan, living on WhatsApp. Send a photo, it asks where you are going, then tells you what is working, what is not, and how to fix it.

SEND THE PRE-FILLED MESSAGE · THEN SEND A PHOTO
*

It runs on Lua’s shared test number. The pre-filled message binds your thread to Rehan, then a photo gets you a real fit check. No signup, no app.

THE BET

The opinion you actually want is the one a stylish friend would text back. So build it where the friend already lives.

ROLEProduct design and build, end to end, solo
TIMELINEJuly 2026, one sitting
SURFACEWhatsApp
STACKLua · TypeScript · Claude Opus
THE PROBLEM

Three reasons nobody gets an honest answer about their outfit.

PROBLEM 01

The group chat is not a stylist

Send a mirror selfie to five friends and you get five reassurances. Nobody wants to be the one who says the jacket is wrong, so the feedback is warm and useless.

PROBLEM 02

A general chatbot never asks where you are going

It will rate an outfit without knowing the occasion. The same kurta is a nine at a mehendi and a four in a boardroom, so a rating with no context is just noise.

PROBLEM 03

Nobody installs an app for one outfit

The decision takes thirty seconds and happens at the door with keys in hand. Any product that needs a download has already lost to the mirror.

None of this needed a new app. It needed a better friend, in a thread that was already open.

01

SECTION 01

The product surface is prose.

My instinct was to look for the file where you write "if the user sends a photo, then search the style guide". That file does not exist. The agent reads the tool’s description and the skill’s context in plain English and decides for itself when to call them. So the behaviour lives in a forty-line persona, not in logic: the tone, the occasion-first rule, the four-part output, and the boundaries are all written rather than programmed. Iterating on this product meant editing prose, which is why a designer with no engineering background could own it end to end.

WHAT I WENT LOOKING FOR
if (hasPhoto) {
  searchStyleGuide()
}
CODE THAT DOES NOT EXIST

No routing logic, no conditionals, no handler. Nothing in the codebase decides when a tool runs.

WHAT ACTUALLY ROUTES IT
description:
  "Search the style guide
   before rating any fit."
ENGLISH, READ BY THE MODEL

The description field is not documentation. It is the routing logic, and writing it well is a UX writing problem.

02

SECTION 02

It refuses to rate anything until it knows where you are going.

The single biggest quality lever, and the one guardrail worth enforcing twice. The same outfit is excellent for one occasion and wrong for another, so a verdict without context is worthless. The requirement is written into the persona and repeated in the skill context, because a single instruction buried in a long prompt gets diluted.

SAME OUTFIT · BRUNCH
9/ 10

Relaxed setting, sneakers read intentional, the whole thing lands.

SAME OUTFIT · A WEDDING
4/ 10

Sneakers pull it casual in a room where everyone else stepped up.

So the first reply is never a rating. It is a question.

03

SECTION 03

Retrieval that carries taste, not facts.

Most retrieval demos fetch documents to answer factual questions. Here it encodes opinion. Fourteen hand-written rules turn a general model into this particular stylist, with consistent views on volume, undertone, footwear formality and kurta length. Without them the advice is competent and anonymous. With them it is specific, repeatable and mine, and it treats Indian ethnic wear as a first-class case rather than an afterthought. Change the rules and you change the stylist, which means the product extends by writing rather than by coding.

THE KNOWLEDGE BASE · 14 ENTRIES, VECTOR-EMBEDDED
01Occasion first
02Fit and proportion
03Colour and skin tone
04Colour matching
05Body type dressing
06Footwear
07Layering
08Accessories
09Indian ethnic wear
10Smart casual
11Formal and office
12Date night
13Trends and timelessness
14Grooming and finish
+Add a rule, change the stylist

Search is semantic, not keyword. A query like "beige kurta with sneakers for a daytime wedding" retrieves the footwear and ethnic-wear rules even though neither word appears in it.

04

SECTION 04

Most of the plan turned out to be the platform’s job.

I designed the architecture before reading the platform properly, which meant designing around capabilities it already had. Every deletion below came from learning the primitives rather than building past them.

A vector databasePinecone, wired up for semantic searchThe platform does vector search nativelyDeleted
A vision pipelineAn image call to read the outfit photoThe photo goes straight to a multimodal model. Zero image-handling codeDeleted
A secrets fileA .env of model API keysThe platform manages every model keyNothing to leak

Final footprint: four TypeScript files, one skill, two tools, roughly two hundred lines including comments.

05

SECTION 05

Push stages. Promote publishes.

I pushed changes, tested on WhatsApp, and got the old behaviour back repeatedly. Versioning was enabled on the project, which silently turns the auto-deploy flag into a no-op, so the code was only ever staged. Three commands, and only the last one is the one that goes live.

lua pushuploads the code. stages only, not live
lua version create -m "…"snapshots it as a new version
lua version promote v4this is the one that publishes

On any versioned platform, confirm which command actually goes live. "It deployed" and "it is live" are different claims.

On an agent platform, the product is written, not coded.

Persona, tool descriptions, skill context and knowledge entries are where the behaviour actually lives, and all four are writing tasks. Which puts a designer closest to the product, not furthest from it.

SUYASH SINGH · 2026BACK TO ALL WORK ↗