
OpenCV + OpenRouter vision on supermarket flyers — FastAPI, Flutter, React admin, Firestore.
Extract structured product offers from noisy Belgian supermarket flyers, score them against a global nutrition/ratings database, and surface ranked deals to shoppers. Mobile users browse via Flutter with live Firestore sync; operators review and correct extractions in a React admin.
FastAPI ingestion pipeline with OpenCV region proposals, OpenRouter vision models for tabular extraction, normalized JSON written to Firestore, Flutter StreamBuilders for instant updates, and React for human-in-the-loop QA.
Print layouts vary wildly; OCR and vision prompts must stay cost-bounded on OpenRouter; fuzzy SKU and pack-size matching against reference data; flat Firestore documents tuned for list latency on mid-tier phones.

Upload paths accept camera and PDF slices; OpenCV deskews and segments candidate offer blocks.
OpenRouter multimodal calls with structured output schemas and retries for partial reads.
Fuzzy match SKUs to a ratings corpus; compute health scores and ranking keys for the mobile feed.
Firestore listeners power infinite scroll and filters in Flutter with offline-friendly caches.
React admin flags low-confidence rows, edits labels, and pushes corrections back into the pipeline.
Python AI service, Firebase-backed mobile lists, and a React review console — end-to-end from flyer photo to store-ready JSON without a monolithic low-code tool, so prompts and parsers could evolve independently.
Python AI service, Firebase-backed mobile lists, and a React review console — end-to-end from flyer photo to store-ready JSON without a monolithic low-code tool, so prompts and parsers could evolve independently.


Swap models behind one API surface for cost/quality experiments without rewriting clients.
OpenCV pre-crop cut token spend versus full-page single-shot prompts.
Real-time updates matched the “deals change hourly” expectation without polling a REST API.
FastAPI stayed stateless so GPU/CPU workers could scale separately from the admin UI.
We take on a small number of projects at a time. If the problem is hard, we're interested.