mypromo.be
AI / RAG2024

MYPROMO.BE

OpenCV + OpenRouter vision on supermarket flyers — FastAPI, Flutter, React admin, Firestore.

4
Surfaces (FastAPI · Flutter · React · Firestore)
3+
Vision pipeline stages
2
Human review loops (auto · QA)
SCROLL
Client
Side project
Domain
AI / Retail
Platform
Flutter + React
Duration
Core Stack
FastAPI · OpenRouter · Firebase
The Brief

THE
PROBLEM

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.

Core Engineering Challenge

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.

Full
Stack
Extended stack
backend
FastAPI
mobile
Flutter
database
Firebase
ai
OpenRouter
mypromo
mypromo
How we built it

THE ARCHITECTURE

01
Ingest & preprocess

Upload paths accept camera and PDF slices; OpenCV deskews and segments candidate offer blocks.

FastAPIOpenCV
02
Vision extraction

OpenRouter multimodal calls with structured output schemas and retries for partial reads.

OpenRouterPython
03
Match & score

Fuzzy match SKUs to a ratings corpus; compute health scores and ranking keys for the mobile feed.

PostgreSQLFirestore
04
Mobile sync

Firestore listeners power infinite scroll and filters in Flutter with offline-friendly caches.

FlutterFirebase
05
Human review

React admin flags low-confidence rows, edits labels, and pushes corrections back into the pipeline.

ReactFastAPI
System Data Flow
Ingestion
CrawlerContent Hash10K+ pages
Processing
ChunkerDeduplicatorEmbedding API
Storage
pgvectorPostgreSQLRedis Cache
Auth
Identity ProviderJWT BridgeSessions
Query
HNSW SearchRe-rankerLLM Stream
Delivery
Web AppMobile AppUsers
What we delivered

THE RESULTS

Full

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.

Full
Stack

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.

Visual documentation

SCREENS &
INTERFACES

mypromo2
mypromo2
mypromo3
mypromo3
Engineering decisions

TECH
DEEP DIVE

OR
OpenRouter for vision

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.

FS
Firestore for mobile lists

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.

Next Case Study
Mobile App
PocketMoney

Kids tasks & rewards marketplace

FlutterNode.jsMongoDB
Start a project

LET'S
BUILD
SOMETHING.

We take on a small number of projects at a time. If the problem is hard, we're interested.

Email
hello@techmusketeers.com
Response time
Within 24 hours
Availability
Open for new projects · 2025