Marketplace shipped fast on Google Cloud
STRuP
A mobile-first peer-to-peer marketplace for horse tack — buy, sell, make offers, negotiate over real-time chat, and complete deals through a five-stage transaction flow. Native mobile app plus a web presence.
The AI angle
Sellers can photograph their tack and have the listing drafted for them — a vision model reads the photo for category, title, description, and (only when legible) brand and size. They review and approve every field, and always set their own price.
- Photo-to-listing AI draft, gated by OCR-verified trust checks against hallucinated brands/sizes
- Real-time messaging, offers, and 5-stage transactions
- React Native (Expo) mobile app + web
- Supabase backend (Auth, Realtime, Storage) + Edge Function security boundary
- Deployed to Google Cloud Run — live in days, not months
STRuP's AI feature: a seller photographs their tack, a vision model drafts the listing, and the seller reviews and approves every field before anything goes live. It's built with the same discipline as everything else in this portfolio — real evaluation on real photos, an honest account of where the model fails, and guardrails that stop those failures from ever reaching a buyer.
The Feature
A seller snaps a photo, a vision model drafts the listing — category, title, description, condition, and, only when it's actually readable in the photo, brand and size — and the seller reviews every field in the normal sell form before publishing. Price is always set by the seller; the AI never suggests one.
The governing principle: the AI produces a draft, never a listing. A human approves every field before anything goes live. That review step is what makes an imperfect model shippable — and every correction a seller makes becomes training data. The fully manual flow stays available as an equal option: sellers choose "List with AI" or "List manually" on the same screen.
The Model
The engine is Qwen2.5-VL 7B, an open-weight vision-language model, served by Ollama — running identically on a Mac for development and on a private, auth-required Cloud Run GPU service for production. Only the URL changes.
It was chosen for strong fine-grained recognition and, decisively for used tack, its ability to read text in photos — brand stamps, size numbers, tags stitched into leather. No fine-tuning was required; the model already knows tack from pretraining. What makes it shippable is the guardrail layer underneath, not the model itself. The GPU scales to zero when idle and bills by the second — a draft costs roughly 1–2¢.
The Evaluation
Before wiring anything into the app, the engine was tested on 28 real tack photos — saddles, cinches, hackamores, stirrups, reins, pads — across three prompt rounds, every result reviewed field by field. Category landed 17/18 correct; condition 18/18 on stock photos. Brand and size were correct when the text was genuinely readable in the photo — and fabricated when it wasn't. The model invents plausible brands and sizes for faint or absent stamps rather than admitting it can't read them.
That fabrication is the honest headline finding, and it's exactly what shaped the guardrail layer below.
The Guardrails
Every draft passes through a server-side gate before the app ever sees it. Brand survives only if it appears in the photo's actual OCR text and matches a curated list of roughly 50 real tack brands — otherwise it's blanked and scrubbed from the title and description too. Size survives only if the number genuinely appears in the OCR text as its own token. Category and condition are snapped to the marketplace's exact allowed values, so the app can never receive an off-vocabulary result. The production prompt is versioned, kept identical to the offline evaluation harness, and covered by tests that permanently ban the specific hallucinated strings that once leaked through.
The Infrastructure
A photo goes from the Expo app to Supabase Storage, then to a Supabase Edge Function that verifies the seller's session and confirms the photo actually belongs to them before it ever calls the GPU. The phone never talks to the GPU directly and holds no secrets — the Edge Function is the entire security boundary, minting short-lived credentials and acting as the only party allowed to invoke the model. Since only signed-in sellers can reach it, nobody can run up the GPU bill from outside.
The Research
Before committing to this architecture, a large adversarial research pass asked the obvious question: does a better model exist? The candid answer was no — fine-grained recognition is a field-wide unsolved weakness of current vision models, not a misconfiguration on STRuP's end. The hallucination has a verified mechanism (models complete toward "what a listing usually says" instead of the pixels in front of them), and the verified remedy is exactly what got built: constrained outputs, closed vocabularies, and abstaining over guessing. No alternative model earned a verified win on STRuP's own eval photos — the decision rule going forward is that any future model change has to beat the current one there, never on a public leaderboard.
The Flywheel
Every AI-assisted listing quietly stores the original AI draft alongside what the seller actually published. The difference between the two is free, human-labeled training data. The planned next step is a small, owned classifier trained on that dataset to make category prediction near-free and close the remaining gaps the base model still misses (a cinch read as a pad, for instance) — with AI pricing as a fast-follow once enough sold listings exist to learn from.
Where It Stands
The vision engine, the trust-gate layer, and the Supabase Edge Function are built, tested, and deployed. The in-app AI listing lane is built and reviewed, with the manual flow untouched alongside it. What's still pending is infrastructure, not engineering: the production GPU service is waiting on a cloud GPU quota grant, and end-to-end testing needs the iOS Simulator wired up. The AI work itself — the model choice, the evaluation, the guardrails — is done.
Built by HansenHouse — vision model selection, hallucination-safe guardrails, real evaluation, and production infrastructure, as one integrated build.