Voice-First App Experiment

Just Spent

A native iOS and Android prototype for logging everyday expenses as quickly as speaking a sentence.

Just Spent started with one simple idea: tell Siri or Gemini something like "I just spent 20 dollars for groceries," and let the app log the expense for you.

The product bet is that expense tracking becomes more useful when capture happens at the moment of spending, without opening a heavy form or finance dashboard.

What this demonstrates: cross-platform product architecture, AI-assisted implementation discipline, test-heavy development, local-first storage, and honest tracking of what is still blocked.

Stage
Prototype
Cross-Platform
Native iOS and Android foundations
Tests
425 / 428
Tests Passing
Current repo status
Apps
2
Platforms
iOS and Android
Storage
Local
Architecture
Core Data and Room

Product Highlights

Voice

Voice Expense Capture

The intended flow is to tell Siri or Gemini what was spent and have the app create the expense automatically.

Currency

Multi-Currency Tracking

Expenses can be grouped by currency, with the default currency coming from the device locale and new currency views created as needed.

Categories

Fast Categorization

Common words like coffee, fuel, taxi, grocery, rent, medicine, books, and shopping map to useful spending categories.

Local

Local App Storage

The basic expense history is designed to work without a server, using Core Data on iOS and Room on Android.

Assistant

Assistant Entry Points

Siri, Shortcuts, Android voice, shortcuts, and App Functions are the planned surfaces for assistant-driven logging.

Tests

Test-Heavy Development

Unit, UI, integration, and local CI checks are part of the core experiment, not an afterthought.

Technology Stack

iOS App

Swift SwiftUI Core Data SiriKit XCTest
  • SwiftUI screens for onboarding, single-currency, and multi-currency expense views.
  • Core Data repository layer for creating, listing, deleting, and paginating expenses.
  • Status docs show 105/105 unit tests and 80/81 UI tests passing.

Android App

Kotlin Jetpack Compose Room App Actions JUnit
  • Compose screens for expense lists, filters, onboarding, settings, and voice entry.
  • Room database, DAO, repository, preference, permission, and lifecycle layers.
  • Status docs show 145/145 unit tests passing, with two remaining phone UI test failures in the edit flow.

Shared System

Local CI Fastlane GitHub Actions Docs
  • Shared currency and test data support cross-platform consistency.
  • Local CI scripts are documented for fast and full checks.
  • Deployment is still planned, so this page does not imply a finished store release.

Current Blockers

Siri

iOS Assistant Flow

The goal is natural voice logging through Siri, not just opening the app. That path is waiting for newer Siri and App Intents improvements to be reliable enough.

Gemini

Android Assistant Testing

The Android idea moved toward Gemini and app actions, but Play Console testing and setup became a blocker before the flow could be validated end to end.

iOS UI

Multi-Currency UI Test

One UI test still fails around expected currency tabs, so the next check is UI state, accessibility identifiers, and tab generation timing.

Android UI

Edit Dialog Tests

Two phone UI tests still fail around the edit dialog: one around the Cancel button timing and one around category dropdown visibility.

CI

Phone-Only Testing

The app is phone-only. CI should consistently use a phone AVD such as a Pixel profile so tablet emulators do not create false failures.

Release

Release Readiness

Deployment guides and Fastlane lanes exist, but store submission, beta testing, and post-launch monitoring remain planned work.

Repository Entry Points

The repository is structured as a studyable system with architecture notes, testing guidance, status docs, and platform-specific implementation specs.

Explore the architecture, current status, and remaining blockers behind the voice-first expense tracking experiment.