Mobile AppPersonal FinanceReact Native

Spend Guard

A full-featured personal finance tracking Android app. Log every shilling in - and out - track budgets, bills, and savings goals, all with offline support and biometric security.

PlatformAndroid (Expo)
StackReact Native · Node.js · Prisma
Version1.0.2
LaunchedJune 2026
Modules
7 finance modules
Expenses, income, budgets, bills, goals, accounts, categories
Offline support
Full offline CRUD
Auto-syncs on reconnect with no data loss
Security layers
3-layer auth
Email/OTP + PIN lock + biometric (fingerprint / Face ID)
Data safety
End-to-end encrypted
HTTPS/TLS in transit, bcrypt passwords, encrypted at rest
Executive Summary

The Big Picture

Spend Guard was built to solve a simple but persistent problem: most Kenyans lack a private, offline-first tool for tracking personal finances. Banking apps show balances - they don't help you understand where your money actually goes. Spend Guard fills that gap with a purpose-built mobile app that puts the user fully in control of their financial picture.

Problem Statement

What We Set Out to Solve

Managing personal finances in Kenya typically means juggling M-Pesa statements, bank app screenshots, and mental notes. The pain points were clear:

  • No single place to see income, expenses, bills, and goals together.
  • Finance apps that require constant internet - useless in low-connectivity areas.
  • Generic budget tools that don't reflect Kenyan income patterns (gig work, daily pay, etc.).
  • Sensitive financial data stored insecurely or shared with third-party advertisers.
Approach

How We Built It

The core design principle was offline-first, privacy-first. Every architectural decision flowed from that.

Form-driven architecture

All 7 finance modules are driven by a single moduleConfig.js data file. Adding a new record type means defining it once - the form renderer, validation, and CRUD layer all derive from it automatically.

Offline-first sync

NetworkContext tracks connectivity and queues all mutations locally in AsyncStorage when offline. On reconnect, queued operations flush to the server in order - no data loss, no duplicate records.

Layered security

Three independent security layers: email + OTP authentication, optional 4-digit PIN lock (with too-many-attempts auto-logout), and biometric unlock via Expo's local authentication API.

Smart contextual forms

Fields use dependsOn conditions (e.g. frequency only appears when income is recurring), inline banners prompt users to create required records before linking them, and KES prefix shows on all money inputs.

Technology

Stack & Tooling

Mobile
  • React Native (Expo SDK 55)
  • NativeWind v4
  • React Navigation
  • AsyncStorage
  • Expo Local Auth
  • Expo Notifications
Backend
  • Node.js
  • Prisma ORM
  • PostgreSQL
  • JWT Auth
  • bcrypt
  • Firebase Cloud Messaging
DevOps / Quality
  • EAS Build (Expo)
  • Firebase Crashlytics
  • HTTPS/TLS everywhere
  • Encrypted DB fields
  • Offline queue & sync
Results

What We Delivered

7 fully functional finance modules - expenses, income, budgets, budget categories, bills, savings goals, and accounts - all linked through smart relational dropdowns.

Complete offline CRUD with automatic background sync - users can track spending with zero connectivity and trust their data will sync when they're back online.

End-to-end encrypted financial records with three independent security layers protecting access to the app.

Spending insights and analytics dashboard aggregating records into actionable summaries and budget health indicators.

Push notification system for budget breach alerts and bill reminders, with full user control over opt-in.

Google Play Store submission with a compliant privacy policy, terms and conditions, and data safety section.

Key Learnings

What This Project Reinforced

Offline-first pays off

Building sync into the architecture from day one - rather than bolting it on - meant the offline queue and conflict resolution worked cleanly without hacks.

Config-driven forms scale

A single moduleConfig.js as the source of truth for all forms eliminated drift between form UI, validation, and API layer. Adding a new module took minutes, not hours.

UX details are the product

Small details - contextual field visibility, KES prefix on inputs, tappable banners for missing relations - made the difference between an app that feels finished and one that doesn't.

Security must be layered

One auth method is never enough for financial data. Combining OTP, PIN, and biometrics lets users choose their comfort level while keeping the default experience secure.

Legal documents

App policies are live

Privacy policy and terms & conditions are published and linked from the app.

Have a mobile app idea?

We build offline-first, production-ready mobile apps tailored to real-world usage patterns.

Let's Build It