Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

273 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Numex

Voice-first personal finance logging with intelligent weekly insights.

Numex lets you record income and expenses by speaking naturally. The app converts speech into structured financial records and surfaces analytics to help you understand your spending — without the friction of manual data entry.

Current status: Prototype complete (UI + state machine, no backend yet). MVP phase is next.


What it does

  1. You tap the mic and say something like "Spent 45,000 on lunch"
  2. OS speech recognition converts it to a transcript
  3. The transcript is sent to the backend, where a Gemini model parses amount, category, type (income/expense), and currency
  4. The structured transaction is saved and reflected immediately in history and analytics
  5. If you're offline, the transcript is queued locally and synced when connectivity returns

Voice is the primary input. Manual entry is always available as a fallback.


Tech stack

Layer Technology
Mobile Flutter (iOS + Android)
Navigation go_router ^14StatefulShellRoute.indexedStack
State flutter_riverpod ^2.5 — one StateNotifier per screen feature
Voice capture speech_to_text ^7 — OS speech recognition (no custom wake word)
Backend Go (REST API)
Database PostgreSQL
AI Gemini (natural language → structured transaction)
Auth Google OAuth — JWT sessions

AI usage

AI is intentionally scoped to two jobs:

1. Transaction parsing (NLU) The raw transcript from OS speech recognition is sent to a Gemini model. The model extracts:

  • Amount (resolved to minor currency units — no floats)
  • Transaction type: income, expense, or transfer
  • Category (matched against user categories first, then system categories, then "Other")
  • Currency (inferred from language/context or user setting)

Raw audio is never stored. Transcripts are processed but not persisted in the database.

2. Weekly analytics insights Pattern-based summaries are generated from the user's transaction history — daily totals, weekly trend comparisons, category distribution, and spending spike detection. Example: "You spent 23% more on dining this week."

AI is not used for anything else. No recommendations engine, no predictive features, no background processing.

Language support (MVP): English and Russian. The LLM prompt adapts per language. Default speech language matches device locale; user can override.


Architecture

Repository pattern

All screens and notifiers depend only on abstract interfaces in core/repositories/. Mock implementations live in data/repositories/. The single file data/providers/repository_providers.dart binds interfaces to implementations.

Swapping mock → real for MVP means changing one file only — no notifier or screen changes required.

Voice state machine

idle → listening → processing → saved      (auto-returns after 2.5s)
                             → queued      (offline; auto-returns after 2.5s)
                             → needsReview (awaits user action)
                             → error       (auto-returns after 3s)

Navigation

Three-tab shell (Home / History / Settings), each with its own Navigator stack. Auth and onboarding live outside the shell. Modal sheets are not router-managed — showModalBottomSheet only.

Money

All amounts are stored as amountMinor: int (minor currency units). double is never used for money anywhere. Currency formatting happens only at the display boundary via AmountFormatter.


Project structure

app/                    Flutter project root
├── lib/
│   ├── app/            Router, theme tokens (colors, text styles, spacing)
│   ├── core/           Models, repository interfaces, utilities (Result<T,E>, formatters)
│   ├── data/           Mock repositories + repository_providers.dart
│   ├── features/       Auth, onboarding, home, transactions, categories, settings, paywall
│   └── shared/         Reusable widgets, global providers, dev tooling
├── assets/             Mock JSON data (mirrors backend schema exactly)
docs/                   Product context, UI specs, backend schema
plans/prototype/        Phase-by-phase implementation plans (00–09)

Getting started

cd app

# Run on connected device / simulator
flutter run

# Analyze (must pass with zero issues)
flutter analyze

# Run tests
flutter test

# Build
flutter build ios --debug
flutter build apk --debug

Development phases

Phase Scope Status
Prototype (01–09) Full Flutter UI, state machine, mock data, all screens Complete
MVP Go backend, PostgreSQL, real auth, billing, offline sync Upcoming

The prototype validates the voice UX, navigation architecture, and theme system before any backend work begins. All mock data mirrors the production schema exactly — MVP model migration requires zero changes to the data layer.


Privacy

  • No raw audio stored at any point
  • Transcripts are processed but not persisted
  • Minimal telemetry
  • Google OAuth only — no email/password
  • HTTPS + JWT for all API communication

Legal

Copyright © 2026 dasturchioka. All rights reserved.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages