Receipt Tracker
Receipt Tracker is a Kotlin Android app that turns a photographed receipt into a categorised expense using ML Kit’s offline OCR and a set of regex and keyword rules, then syncs it to Firebase Firestore per user. Statistics screens break monthly spending down by category with pie and bar charts. Built solo for a university module, with categorisation deliberately tuned to local retailers rather than a generic model.
- Role
- Sole developer
- Year
- 2025
- Status
- Completed
- Category
- Software Engineering
- Tools & technologies
- KotlinAndroid SDKML KitFirebase AuthFirestoreMPAndroidChart
- Links
- GitHub
The problem
Manually logging everyday cash and card spending is tedious and error-prone. The app removes the typing step by reading the total straight off the receipt and filing it under a sensible category.
Context
An “App Development in Android” module at HWR Berlin, summer semester 2025, submitted 16 August 2025 as a feature-complete v1.0 with a signed release APK.
Key decisions
On-device OCR, transparent parsing
All inference runs on-device via ML Kit. A currency-aware amount parser scans €/EUR lines first, normalises European number formatting, and only falls back to the largest number when no currency-tagged amount is found — with cloud persistence limited to Firestore.
Localised, rule-based categories
Category detection is a transparent keyword lookup table tuned to local retailer names, deliberately localised rather than ML-based.
Outcomes
- Delivered a working, feature-complete v1.0 with a signed release APK for submission.
- End-to-end scan → parse → confirm → store pipeline running fully on-device for OCR, with cloud persistence via Firestore.
- All planned scope completed: auth, scanning, OCR, auto-categorisation, manual entry, history, monthly charts, and edit/delete.
Related work

Room of Horror
A VR “room of horrors” where nursing trainees hunt for care errors in a virtual hospital room, while an instructor configures and monitors each session live from the browser.

AOG Moldova
A production landing site for 24/7 emergency aviation-parts logistics in Moldova, with a trilingual interface and a serverless quote form that routes urgent requests straight to the ops team.