Every café collects star ratings. Almost none turn them into a decision.
bobabean's ordering app already shows a star score on every drink card — but a rating sitting on a menu is decoration, not intelligence. I designed a review-management layer for the café owner: every review is auto-tagged by sentiment the instant it's posted, a reply is drafted for the specific situation instead of a blank box, and an insight strip surfaces which drink is winning and which complaint keeps repeating. I built this as a live, interactive demo, plus a real Claude-based pipeline as a companion script — the same interaction design, a swappable brain underneath.
Concept extension to the bobabean case study · illustrative portfolio project · the demo's sentiment tagging and reply drafts are rule-based, standing in for the production ML/LLM pipeline described below.
WhoThe café owner, not the customerNo data team, no time to read two hundred reviews one at a time.
WhatReviews sorted, tagged, answeredSentiment on arrival, a drafted reply on click, trends on the surface.
WhyFeedback is a decision, not decorA star score changes nothing on its own — knowing what to fix does.
Problems
A rating with no reasoning behind it
Replies typed from a blank box, every time
No visibility into what keeps recurring
Bulk work with no bulk tools
No path from "demo" to "real model"
What today looks like
3.4 stars tells you nothing
An average rating says something's off, not what — not which drink, not which part of the visit, not whether it's getting better or worse.
Every reply starts from zero
No template, no memory of the last ten replies you wrote to the same complaint — just a blank box and whatever tone you're in that morning.
What I designed
Sentiment tagged on arrivalEvery review is classified the instant it's posted — a transparent rating + keyword rule today, designed to slot in a real classifier without touching the UI.
Replies drafted for the situationA pickup delay, a wrong order, and a quality miss each get a different, specific line — not one generic "we apologize for any inconvenience."
An insight strip, not just a feedBest-loved drink, top recurring issue, and the sentiment split sit above the reviews themselves — the business answer, not just the raw data.
Staff Tools, kept deliberately separate — a gold-bannered, collapsible panel for bulk actions, distinct from the customer-facing feed above it.
Staff tools, deliberately separateBulk actions live behind their own gold-bannered, collapsible panel — visually distinct from the customer-facing review feed, not blended into it.
A real pipeline behind the demoA companion Python script calls Claude with a prompt that analyzes aspect-level sentiment and drafts the reply in one call; the demo's export file matches its schema exactly.
Product artifacts
The review feed — sentiment tags, filter pills, and an insight strip surfacing the best-loved drink and the top recurring complaint.Staff Tools, kept deliberately separate — a gold-bannered, collapsible panel for bulk actions, distinct from the customer-facing feed above it.Staff Tools, kept deliberately separate — a gold-bannered, collapsible panel for bulk actions, distinct from the customer-facing feed above it.
The five-star rating was the easy part. Turning twenty of them into next week's menu decision is the product.
What it changes
1 click
From unread backlog to drafted replies
bulk-draft fills every gap, skips what's already answered
2
Named, actionable levers per view
best-loved drink to promote, top complaint to fix
0
UI changes needed to go live
swap the rule-based classifier for Claude, same interaction design
An owner sees "order accuracy is the recurring issue," not "3.4 stars" — the insight strip names the lever to pull, not just the average
A wrong-order complaint and a slow-pickup complaint get different, specific replies — not the same apology copy-pasted twenty times