Skip to content

shadow-monarch9/Spendlee

Repository files navigation

Spendlee

A single-user, voice-and-text-first expense tracker for Android. Tap the mic (or type), say what you spent — an LLM extracts the amount, merchant, and category, and you confirm with one tap.

Download APK

Not on the Play Store — this is a signed APK for sideloading. You'll need to allow "install from unknown sources" on your device.

Features

  • Voice or text logging — "spent 250 on groceries," spoken or typed, both routed through the same AI parsing pipeline.
  • On-device speech transcription — Android's SpeechRecognizer, with a review step so a misheard word is a quick edit, not a wrong transaction.
  • AI-powered parsing — a Supabase Edge Function proxies the transcribed text to an LLM, which returns structured amount/merchant/category data. The LLM API key lives only as an Edge Function secret; the app never holds it.
  • Manual entry, category management, and spending reports with a Canvas-drawn donut chart, all backed by local Room storage.

Tech stack

  • Kotlin + Jetpack Compose, Room (local persistence), minSdk 26
  • Supabase Edge Function (Deno/TypeScript) as a secure LLM proxy
  • Hand-rolled DI (AppContainer) — no Hilt/Dagger

Design History

This app didn't start as a voice-first tracker — it started as an automatic SMS-detection app that parsed bank UPI messages in the background. That approach hit a wall: Google Play Protect blocks sideloaded apps requesting SMS permissions, and iOS never allows any third-party app to read SMS content at all, at any review tier. The full story of why that design was abandoned and what replaced it is written up in docs/PIVOT-FROM-SMS-TO-VOICE-AI.md.

Setup

  1. Copy your Supabase project URL/anon key and release signing config into local.properties (see app/build.gradle.kts for the expected keys — never commit this file, it's gitignored on purpose).
  2. Deploy the voice-parse Supabase Edge Function under supabase/functions/ and set its TEST_KEY secret to your OpenAI API key.
  3. ./gradlew assembleDebug (or assembleRelease for a signed build).

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages