Jonathan Kongolo

Fullstack developer · AI & MCP

← Projects

Kvitteringsvenn — receipt management app for iOS and Android

, , , ,
Role
Founder, product owner & developer
Period
2025 →
Client / context
Muida Tech AS — own product
Tech stack
Flutter, Dart, SQLCipher, Directus, OpenAI, Apple Vision, ML Kit, Tink, EnableBanking, Vipps, Unimicro
Outcome
Live on the App Store and Google Play with paying subscribers.

The project started with three months of research before a line of code was written. I mapped what already existed on the market and what could be done differently, then ran a round of customer interviews by phone and email across different professions to find out who the actual user was. The segmentation that came out of it decided the feature scope of the first version, and I designed the interface in Figma before development.

The research did not stop at launch. Feedback from the first users showed the segment we had bet on was not quite right — the need was real, but it sat with a different group than we assumed. So I kept interviewing after the MVP and adjusted both the product and the positioning towards the segment that actually had the problem. That is the group paying for it today. Using the MVP as a measuring instrument rather than as a verdict is what let the product find its market.

The app is built in Flutter for iOS and Android. At its core is an image pipeline I developed myself: the user photographs a receipt, the app detects the document edges and crops automatically, preprocesses and compresses the image locally with configurable quality and maximum resolution, and runs OCR directly on the device. Only the extracted text is sent on, to AI-based interpretation that structures the receipt into vendor, date, amount, VAT rates and line items. Both the OCR and the AI stage sit behind a provider abstraction with several implementations, so the interpretation engine can be swapped without touching the rest of the app. That the image never leaves the device was a deliberate privacy decision, and local compression keeps storage and bandwidth cost down at high image volume per user.

The app is offline-first. Data is stored in an encrypted local SQLite database (SQLCipher) with schema migrations, and free and trial users run entirely locally. For paying users I built a sync service with a local outbox: receipts and images not yet uploaded sit in a queue, and sync first restores from the server and then uploads what is pending. The routine is resumable and idempotent, with deduplication of uploads already in flight.

I built two rules-driven calculation engines. One handles Norwegian VAT reporting: it groups entries by rate, calculates net amount and VAT per rate, and totals the deductible amount per period. The other calculates consumer complaint rights under Norwegian law from purchase date and product type, so the user can see how long an item is covered. There is also a budget function, accounting export and a tax summary.

On integrations, I connected the app to open banking data through two PSD2 providers, Tink and EnableBanking, behind a shared abstraction layer with an authentication flow in a webview — including automatic matching of receipts against bank transactions. I also integrated Unimicro for accounting transfer, Vipps, OneDrive for cloud storage, and email import that pulls receipts straight from the inbox via Outlook OAuth or generic IMAP.

The app has several user tiers. Private users work alone, groups can share folders and submit receipts to the same account through invitation links, and accountants can manage several clients from one organisation account. On the platform side I handled in-app purchases, trial periods, free quotas, paywall triggers and per-subscription feature gating, App Store Connect configuration, the whole release process, and the fixes Apple’s review process asked for.

More projects