DEV Community

Özkan Altınörs
Özkan Altınörs

Posted on

How I Built a 100% Local-First Android Subscription & Bill Tracker with 6 Custom UI Themes, On-Device ML Kit OCR, and Live Central Bank FX Rates

Most subscription and bill trackers today have two major problems:

  1. They require you to connect your bank credentials via third-party aggregators like Plaid and sync your entire transaction history to a cloud server.
  2. Ironically, they charge a $5–$10/month recurring subscription just to remind you to cancel your other subscriptions.

As an indie Android developer, I wanted a fast, zero-cloud, privacy-first alternative. So I built Subscription Radar (com.abonelikradari.app) — and just shipped v9.0.22 on Google Play.

👉 Download Subscription Radar on Google Play

Here is a deep dive into the engineering decisions behind building a zero-backend financial utility app in Kotlin.


1. Zero-Backend Architecture & Encrypted Local Persistence

Instead of spinning up a cloud database and user authentication flow, Subscription Radar stores 100% of user data locally on the device:

  • Encrypted Room Database & Payload Cipher: All recurring subscriptions, variable utility bills, and payment history records stay inside an on-device Room/SQLite database with RoomPayloadCipher and SecurePreferences backed by Android Keystore.
  • Portable AES-GCM Backups: Users can export and import password-protected encrypted JSON backups (BackupCrypto) or plain CSV exports whenever they switch phones—no account required.
  • Household Profiles: Users can segment expenses across multiple profiles (e.g., Personal, Home, Family, Work) with isolated monthly budgets and analytics.

2. On-Device ML Kit OCR for Variable Utility Bills

Subscriptions like Netflix or Spotify have predictable fixed prices, but utility bills (electricity, water, gas, mobile, fiber internet) change every month.

To make logging variable bills effortless without uploading sensitive invoices to a cloud vision API:

  • We integrated Google ML Kit Text Recognition (play-services-mlkit-text-recognition) directly on-device.
  • BillImageTextAnalyzer parses receipt and invoice photos offline, extracting the total amount, currency, and due date using localized regex and date heuristics across 7 languages.

3. Multi-Currency Aggregation with Official Central Bank FX Rates

Digital nomads, expats, and developers often pay for SaaS tools in USD or EUR while paying local utility bills in TRY, INR, GBP, or RUB.

  • Subscription Radar fetches daily official exchange rates directly from public central bank XML/JSON feeds (ECB and TCMB) with zero intermediary backend cost.
  • It computes cross-rates across TRY, USD, EUR, GBP, RUB, CNY, and INR, allowing the home screen, widget, and Radar Analytics to display unified monthly and annual totals in the user's primary currency.
  • We also bundled 14 regional service catalogs with localized plan pricing so users can add popular services in one tap via the Quick Starter Wizard.

4. 6 Switchable UI Appearances & WCAG Contrast Engine

Not everyone wants their finance app to look like a dark cyberpunk terminal or a sterile spreadsheet. In v9.0.22, we engineered a runtime layout and surface theming system (UiLabAppearance) featuring 6 complete visual identities:

  1. Original: Modern dark/light radar aesthetic with animated sweep and 120Hz display support.
  2. Simple (Sade): High-clarity minimalist cards.
  3. Premium Finance: Executive dashboard with a custom PremiumPaymentRing.
  4. Block (Blok): Bold Neo-Brutalist / geometric cards with vivid color blocking.
  5. Leather Wallet (Cüzdan): Warm cream paper textures, serif typography, realistic receipt edges (CuzdanReceiptDrawable), and a dynamic paid stamp.
  6. Orbit (Yörünge): Ice-blue surfaces with orange accents and custom orbital canvas visualizations.

To ensure every theme remains readable across Light/Dark modes and 8 color palettes (96 total combinations), we built an automated WCAG 4.5:1 contrast verification engine (LabTextContrast) tested across 620+ unit and instrumentation tests.


Try It Out & Let Me Know Your Thoughts!

If you use an Android device and want a clean, private way to track your recurring subscriptions, free trials, and monthly bills:

📲 Get Subscription Radar on Google Play

I'd love to hear your feedback in the comments—especially on which of the 6 UI themes you prefer or any features you'd like to see next!

Top comments (1)

Collapse
 
johnnylemonny profile image
𝗝𝗼𝗵𝗻 •

Awesome architecture! The irony of subscription trackers charging a monthly fee and demanding Plaid access has bothered me for years. Using on-device ML Kit OCR for variable utility bills alongside direct ECB/TCMB XML feeds for multi-currency support is a super clean way to keep it 100% local and zero-backend. Also, kudos for building an automated WCAG contrast test suite across all 96 theme/palette combinations - that's serious polish!