Skip to content

nejcm/spendwise

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

411 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Spendwise

Spendwise is a free personal finance app built with Expo and React Native. It is local-first and offline-friendly: core financial data lives on-device, with optional AI features that use your own provider key.

Spendwise app

What the app includes

  • Onboarding and profile setup (name + avatar)
  • Preferences: theme (system/light/dark) and language
  • Accounts: create/edit/delete, opening balance, monthly budget, balance overview, color customization
  • Categories: create/edit/delete, emoji icons, color customization, ordering/reorder UI, monthly budgets
  • Transactions: income/expense/transfer, advanced search + filters (type, account, category, date range), detail screen, per-account assignment
  • Recurring rules (scheduled transactions): create/edit/remove rules, next-due tracking, upcoming bill checks
  • Stats: totals, trends (weekly/monthly breakdown), category breakdowns, top income/expenses
  • Insights: monthly trend + spending by category analytics
  • Import/Export:
    • CSV import (column mapping + enhanced preview) and CSV export
    • Full JSON backup export and restore
  • Currencies and formatting:
    • Display currency selection with historical rate recalculation
    • Number/date/currency format preferences
  • Notifications:
    • Budget alerts (approaching/exceeded)
    • Upcoming bill reminders
    • Low balance alerts
    • Weekly spending digest
  • Security: optional app lock using device authentication (biometrics/PIN)
  • Optional AI:
    • AI chat (OpenAI/Anthropic) using your own provider key stored on-device
    • Receipt scanning with your own provider key

Stack

  • Expo SDK 54 with React Native 0.81
  • Expo Router 6 for file-based navigation
  • SQLite for primary app data
  • Zustand + MMKV for persisted preferences and lightweight app state
  • React Query for async queries/mutations over local data and network tasks
  • TanStack Form + Zod for forms and validation
  • Uniwind for styling
  • Jest + React Native Testing Library + Maestro

Quick Start

Requirements

  • Node.js 20+
  • pnpm
  • Expo / EAS tooling as needed for device builds

Install

pnpm install

Configure environment

Copy .env.example to .env and adjust values for your machine.

cp .env.example .env

On Windows PowerShell, use:

Copy-Item .env.example .env

At minimum, the current env schema expects:

  • EXPO_PUBLIC_APP_ENV
  • EXPO_PUBLIC_API_URL
  • EXPO_PUBLIC_VAR_NUMBER
  • EXPO_PUBLIC_VAR_BOOL
  • APP_BUILD_ONLY_VAR (optional)

If EXPO_PUBLIC_ASSOCIATED_DOMAIN is not used, omit it entirely instead of leaving it blank.

EXPO_PUBLIC_NAME, EXPO_PUBLIC_SCHEME, EXPO_PUBLIC_BUNDLE_ID, EXPO_PUBLIC_PACKAGE, and EXPO_PUBLIC_VERSION are derived in env.ts.

Run locally

pnpm start
pnpm ios
pnpm android
pnpm web

Common Commands

pnpm lint
pnpm lint:ts
pnpm lint:all
pnpm test
pnpm test:watch
pnpm test:ci
pnpm verify
pnpm install-maestro
pnpm e2e-test
pnpm doctor
pnpm knip:check

pnpm e2e-test currently targets the development app id and assumes Maestro is installed. pnpm install-maestro uses a shell installer and may need a Bash-compatible environment.

Environment Modes

  • development: local dev and internal development builds
  • preview: pre-release QA / preview builds
  • production: store-ready production builds

Helpers:

pnpm start:preview
pnpm start:production
pnpm ios:preview
pnpm ios:production
pnpm android:preview
pnpm android:production

Architecture At A Glance

  • src/app: Expo Router entry points and route files
  • src/features: feature-first modules such as home, accounts, categories, transactions, scheduled transactions, stats, insights, import/export, settings, notifications, security, and AI
  • src/components: shared app components and UI primitives
  • src/lib: infrastructure for SQLite, storage, theming, i18n, utilities, and app-wide providers
  • src/translations: translation resources

App startup happens in src/app/_layout.tsx, where the app initializes SQLite, runs migrations, sets up notifications, checks budget/upcoming-bill alerts, and mounts global providers.

Privacy Notes

  • Financial records are stored locally in SQLite on the device.
  • Preferences and lightweight persisted state are stored in MMKV.
  • Spendwise is free to use; configured AI providers may charge for usage under your own account.
  • AI provider keys are configured in-app and stored locally on your device.
  • AI features are optional. When used, requests are sent directly from your device to the selected provider.

Documentation

  • .docs/setup.md
  • .docs/architecture.md
  • .docs/features.md
  • .docs/testing.md
  • .docs/release.md
  • AGENTS.md

Inspiration

This Project is based on Obytes starter

Resources

Known issues


Roadmap

Roadmap

About

Mobile app for tracking your expenses and budgeting

Resources

License

Contributing

Stars

Watchers

Forks

Sponsor this project

  •  

Packages

 
 
 

Contributors

Languages