← Back to portfolio

Case Study

Resolved

Appliance broke? Get it to the people who can actually fix it.

This is the story of a pivot. v1 is a working React prototype of a complaint-fighting agent, running on staged data with no live model calls. v2 is the direction I moved it in, written up as a PRD and a clickable 12-screen design. Targets below are hypotheses for a pilot, not measured results. View the repo → · Read the PRD → · Click through the live prototype →

1. Where it started

The first version of Resolved was built on a simple asymmetry: companies put AI chatbots in front of their support queues, and customers get stalled by them. So I built the customer an agent of their own. Drop in a screenshot of a bad order, and it pulls out the facts, picks a tone and a legal hook, drafts a complaint in four formats (letter, tweet, call script, court filing), and walks you up a five-rung escalation ladder from the vendor to the consumer commission.

It demoed well. Then I tried to answer the questions an investor or a hiring manager would ask, and it fell apart in a few specific places.

2. Why I pivoted

Questionv1: complaint agentv2: after-sales bridge
Who pays?Consumers, who rarely pay to complainBrands, for a console with structured tickets and defect signals
Can it be copied?Easily. Any chatbot can write a complaint letterGets harder with use: catalog, channels, issue lists and response times accumulate
Stance toward companiesAdversarial, so no brand would ever work with itCooperative first; escalation stays as the backstop
Legal riskDrafts legal claims. My own prototype cited the wrong section of the ActMostly routing and filled-in facts; citations come from a small reviewed library
AI cost per userHigh: the model drives every stepLow: AI only where text input is genuinely worse

The bigger shift was noticing what people actually need for appliances. Not a sharper letter. They need to reach the brand's authorized service, with the model number and invoice in hand, before they give up and call the local repair shop.

3. The real problem

Every durable goes through the same after-sales loop: raise a ticket, a technician visits, diagnosis, part, repair, close. A washer, a TV, an AC and a trimmer all look the same from here. The front of that loop is where it breaks.

FrictionRoot causeWhat happens
Finding the right channelEach brand mixes toll-free numbers, WhatsApp bots, apps, email and service centres differentlyPeople give up before the first message
The first request is incompleteNobody knows where the serial number is or whether they're in warrantyThe first reply asks for details and a week is gone
Out of warranty, people go informalLocal shops and app-based repair services are quicker to book than the authorized routeNon-original parts, voided panel cover, no service record. The brand loses the customer and the defect signal
Stalls have no next stepFew people know brands have nodal or grievance officers, or that the National Consumer Helpline existsThe case quietly dies

People don't skip authorized service because they prefer the shortcut. They skip it because the authorized path is hard to start. India's Right to Repair Portal is already pushing brands to publish service and warranty information; Resolved turns that into a flow someone can finish in two minutes.

4. The redesign: two journeys

A. LG washer, not draining, in warranty.

  1. Search "LG", pick washing machine, pick the model from a visual list (or snap the sticker inside the door).
  2. Warranty status shows up straight away: "covered until 12 Sep 2027".
  3. Pick the problem from plain-language options. A tip suggests the 2-minute drain filter check first.
  4. The request is drafted with every fact filled in. Pick a tone: clear (suggested), firm, short, or formal with the legal citation.
  5. Send it from your own email or WhatsApp. Resolved never sends on your behalf. Then track it.

B. Samsung TV, no picture but sound works, out of warranty. This is the journey that matters most, because it's exactly where people drift to unverified repair. The app suggests a 30-second torch test (a faint image usually points to the backlight), then shows an honest comparison of authorized service and a local shop: genuine parts and a written quote on one side, speed on the other, with the risk to any remaining panel cover spelled out. The authorized request goes out on WhatsApp with the test photo attached.

5. The brand side

The cold-start problem kills most two-sided marketplaces, so v2 doesn't need brands on day one. Every brand is listed using public channels. Brands that opt in get the request first:

  • Structured tickets in their own queue, with model, serial, invoice date and photos attached.
  • Issue clusters by model, e.g. "WM-FL7 not draining: 42 requests in 30 days, 70% at 12 to 15 months of use". That's an early defect signal they currently piece together from social media.
  • A public "usually responds in X days" badge built from resolution data, which drops if SLAs slip.

The pitch to a brand in month 4 is one slide of their own data. Brands pay for the console; consumers never pay.

6. Where AI fits, and where it doesn't

The most important AI decision in v2 was taking the model out of most of the flow. Routing and legal wording have to be right every time, and templates are free to run.

StepApproachWhy
Brand, model, issueStructured catalogFaster than typing and never wrong
Drafting the requestTemplates with filled fields, four tonesPredictable and reviewable; no invented clauses
Legal citationsSmall reviewed libraryv1 taught me what a confidently wrong section number looks like
Reading a sticker or invoice photoVision modelThe one step where typing is genuinely worse
"Something else" problemsSmall model maps free text to a known issueKeeps the catalog clean
Defect clusters for brandsGrouping over structured requestsWorks because the inputs are structured to begin with

7. Sample prompt: reading a model sticker

System prompt — sticker and invoice extractionYou read photos of appliance rating stickers and purchase invoices. Extract ONLY what is printed and legible: 1. brand 2. product_type: washer | refrigerator | ac | tv | other 3. model_number: exactly as printed 4. serial_number: exactly as printed 5. purchase_date: invoices only, ISO format If a field is missing, cut off, or unreadable, return null. Never complete a partly visible model or serial number from typical patterns. A wrong serial number sends the technician to the wrong job. If the photo is not a sticker or an invoice, return every field as null with "not_a_label": true. Output strict JSON: { "brand": string|null, "product_type": string|null, "model_number": string|null, "serial_number": string|null, "purchase_date": string|null, "not_a_label": boolean, "confidence": "high"|"medium"|"low" }
Test caseExpectedWhat a bad result reveals
Clear sticker, good lightAll fields, high confidenceMissing a visible field means the reading itself is weak, not the prompt
Serial number half covered by a foldSerial null, the rest filled, medium confidenceA completed serial means the model is pattern-matching instead of reading
Invoice brand differs from sticker brandBoth kept; user asked to confirmSilently picking one hides a possible wrong-product claim
Photo of the TV screen, not a labelnot_a_label true, all nullInvented details from an irrelevant photo

Whatever the model returns, the user confirms the facts on screen before anything is drafted. Low confidence opens the field for editing instead of filling it.

8. What stays human

  • Sending. Every message goes out from the user's own email or WhatsApp. Resolved drafts; it never sends.
  • Every escalation rung. Reminder, grievance officer, National Consumer Helpline: each one is drafted and then waits for the user's go-ahead. In v1 this was an auto-pilot toggle. In v2 it's a deliberate tap every time.
  • The repair decision. Out of warranty, Resolved shows the trade-off between authorized and local repair and recommends one. The user picks.
  • "It's fixed." A case closes when the user says so, not when the brand marks the ticket resolved.

9. Success metrics

North star: cases resolved within 7 days, because both sides want it to go up.

MetricPilot targetGuardrail
Cases resolved within 7 days50%Confirmed by the user, not the brand
Time from open to request sentUnder 2 minutesDrop-off at the issue picker under 20%
Requests sent with full facts90%
Out-of-warranty users choosing authorized repairTrack from day oneNever hide the local option
Partner brands at 6 months2Partner SLA met 80% of the time

10. Risks and trade-offs

"Why not just Google the service number?" The answer has to be what Google doesn't give you: a complete request on the first try, a tracker, the next step when it stalls, and your appliances' warranties in one place.

People need it rarely. Appliances break once or twice a year. "My appliances" (invoices, warranty dates, service history) and a reminder a month before a warranty ends give people a reason to open the app between breakdowns.

The catalog goes stale. Issues are defined per category, not per model, and launch is limited to 5 brands and 4 categories. Users can flag a dead channel.

Getting found. People search at the moment something breaks. A page per model and fault ("Samsung TV no picture, sound works") is probably the cheapest way to acquire users.

Brands may resist the badge. That's fine. Listed brands still get requests; the badge is only for partners who want the credit.

11. Current state

  • v1 (code): a React 18 + Vite prototype with a hand-built light/dark design system. All data is staged, there are no live model calls, and progress is saved in the browser. Every escalation step needs explicit consent.
  • v2 (product): a PRD covering users, journeys, requirements, metrics and go-to-market, plus 12 clickable screens. That covers two consumer journeys, photo entry, a cases tracker, escalation with consent, and the desktop brand console.
  • Next: rebuild the consumer flow on the v2 design with a real catalog for 5 brands, and add photo reading behind a spend cap.
← Back to portfolio