Digster
Comparing the price of the same ride from one ride-hailing app to the next means opening the apps one by one and typing the same trip each time — even though the price gap between two of them often exceeds 30%.
One trip entry, every price shown side by side in seconds, and a direct hand-off to the chosen app. Built solo end to end: mobile, API and mapping infrastructure.
ResultA solo end-to-end app, published on the App Store and Google Play (EAS build).
Every ride-hailing app compared in one entry
One trip entered, and Digster returns the prices side by side — then opens the chosen app directly.
How it works
The app queries the ride-hailing APIs in parallel through a FastAPI backend I built and host (Render), while it shows the map live — MapLibre natively, with its own tiles served by a Cloudflare Worker rather than by Google Maps. Expo / React Native front end, the whole thing built with Cursor.
One trip, every price in parallel
The pickup and drop-off address is geocoded once (Photon, Nominatim as backup), the route computed by OSRM, then the backend queries the providers in parallel: an exact Uber estimate via OAuth when the account is linked, estimates and deep links for Bolt, Heetch, Citygo, G7. The prices come back grouped and show side by side on the map.
Its own map stack, no Google
The map runs on MapLibre natively, fed by tiles served through a Cloudflare Worker (tiles.digster-app.com) that relays OpenFreeMap — no Google billing on load, no proprietary SDK embedded. RN Maps stays as a fallback if MapLibre fails on a device.
Reading ride receipts through an OCR cascade
Two inputs: the Gmail API (read-only OAuth, token exchange on the backend) which pulls receipt emails on its own, or a PDF / photo dropped in by hand. pypdf and Pillow prepare the document, then an OCR cascade steps up only as needed — Tesseract locally, OCR.space, Google Vision, Gemini Flash — until a reliable amount comes out. receipt_parser isolates the price, the provider and the date, and the ride joins the history.
Digster and ride-hailing auth, kept apart
Firebase Auth handles the Digster account (Apple, Google, email, phone); tokens live in the device's SecureStore. Linking a ride-hailing account is a separate step: Uber OAuth goes through auth.uber.com and passes via the backend — the app never holds the Uber secrets. OAuth loops close on digster:// deep links.







