ποΈ Architecture Documentation
Technical architecture guide for SpendWise application.
System Architecture Overview
SpendWise follows a modern mobile-first architecture with React Native (Expo) for the frontend and
Firebase + Groq AI for backend services.
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β SPENDWISE ARCHITECTURE β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β π± PRESENTATION LAYER β
β ββββββββββββββ ββββββββββββββ ββββββββββββββ ββββββββββββββ β
β β Dashboard β βTransactionsβ β AI Insightsβ β Reports β β
β ββββββββββββββ ββββββββββββββ ββββββββββββββ ββββββββββββββ β
β ββββββββββββββ ββββββββββββββ ββββββββββββββ β
β β Budget β β Goals β β Settings β β
β ββββββββββββββ ββββββββββββββ ββββββββββββββ β
β β
β Expo Router (File-based) β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β π§ STATE MANAGEMENT LAYER β
β β
β AppContext (React Context API) β
β ββββββββββββββββ¬βββββββββββββββ¬βββββββββββββββ¬βββββββββββββββ β
β β Transactions β Budgets β Goals β Settings β β
β ββββββββββββββββ΄βββββββββββββββ΄βββββββββββββββ΄βββββββββββββββ β
β ββββββββββββββββ¬βββββββββββββββ¬βββββββββββββββ β
β β User β Categories β Currency β β
β ββββββββββββββββ΄βββββββββββββββ΄βββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β βοΈ SERVICE LAYER β
β β
β ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ β
β β lib/ β β lib/ β β lib/ β β lib/ β β
β β auth.ts β β database.ts β β ai.ts β βnotifications β β
β ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β βοΈ EXTERNAL SERVICES β
β β
β ββββββββββββββββββββββββββββββ ββββββββββββββββββββββββββββββ β
β β π Firebase Auth β β ποΈ Firebase Realtime DB β β
β β Email/Password β β Real-time sync β β
β β Email verification β β Offline persistence β β
β ββββββββββββββββββββββββββββββ ββββββββββββββββββββββββββββββ β
β β
β ββββββββββββββββββββββββββββββ ββββββββββββββββββββββββββββββ β
β β π€ Groq API β β π Expo Notifications β β
β β LLaMA 3.3 70B β β Push notifications β β
β β Financial insights β β Scheduled reminders β β
β ββββββββββββββββββββββββββββββ ββββββββββββββββββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Layer Architecture
Detailed breakdown of each application layer.
π± 1. Presentation Layer
React Native components with Expo Router for file-based navigation. Each screen is a self-contained
module handling its own UI state and user interactions.
React Native
Expo
TypeScript
react-native-chart-kit
app/
βββ (auth)/
β βββ _layout.tsx
β βββ login.tsx
β
βββ (tabs)/
β βββ _layout.tsx
β βββ index.tsx
β βββ transactions.tsx
β βββ insights.tsx
β βββ reports.tsx
β βββ budget.tsx
β βββ goals.tsx
β βββ settings.tsx
β
βββ _layout.tsx
π§ 2. State Management Layer
Global state managed via React Context API. The AppContext wraps the entire application and provides
centralized state access and update functions.
React Context
Custom Hooks
useReducer
interface AppContextType {
user: User | null;
transactions: Transaction[];
budgets: Budget[];
goals: Goal[];
categories: Category[];
currency: Currency;
darkMode: boolean;
addTransaction: (t: Transaction) => Promise;
updateTransaction: (t: Transaction) => Promise;
deleteTransaction: (id: string) => Promise;
addBudget: (b: Budget) => Promise;
addGoal: (g: Goal) => Promise;
updateGoal: (g: Goal) => Promise;
setCurrency: (c: Currency) => Promise;
setDarkMode: (d: boolean) => Promise;
logout: () => Promise;
}
βοΈ 3. Service Layer
Abstraction layer for external service communication. Each service module handles a specific domain
with proper error handling and type safety.
lib/auth.ts
lib/database.ts
lib/ai.ts
lib/notifications.ts
auth.ts β signUp, signIn, logout, resetPassword
database.ts β CRUD for transactions, budgets, goals, settings
β Real-time subscriptions with onValue()
ai.ts β Groq API calls for financial insights
β Response parsing and error handling
notifications.ts β Permission requests, channel setup
β Immediate and scheduled notifications
βοΈ 4. Data Layer - Firebase Schema
Firebase Realtime Database stores all user data with real-time synchronization across devices.
Firebase Auth
Realtime Database
Groq API
Firebase Realtime Database
β
βββ users/{userId}/
β β
β βββ transactions/{transactionId}
β β βββ id: string
β β βββ type: "income" | "expense"
β β βββ amount: number
β β βββ category: string
β β βββ date: timestamp
β β βββ note: string
β β βββ paymentMethod: string
β β
β βββ budgets/{budgetId}
β β βββ id: string
β β βββ category: string
β β βββ limit: number
β β βββ period: "daily" | "weekly" | "monthly" | "yearly"
β β
β βββ goals/{goalId}
β β βββ id: string
β β βββ name: string
β β βββ targetAmount: number
β β βββ currentAmount: number
β β βββ deadline: timestamp
β β βββ priority: "low" | "medium" | "high"
β β
β βββ settings/
β βββ currency: { code, symbol, name }
β βββ darkMode: boolean
Data Flow
How data moves through the application layers.
π€
User Action
User taps "Add Transaction" button
π±
Presentation Layer
Screen component calls addTransaction from AppContext
π§
State Management
AppContext dispatches to service layer and updates
local state
βοΈ
Service Layer
database.ts writes to Firebase, checks budgets for
alerts
βοΈ
Firebase
Data persisted to Realtime Database, synced to other
devices
π
Real-time Update
onValue listener triggers, state updates, UI re-renders
AI Integration Architecture
How Groq AI provides financial insights.
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β AI INSIGHTS FLOW β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
ββββββββββββββββββ ββββββββββββββββββ ββββββββββββββββββ
β Transactions β β Budgets β β Goals β
βββββββββ¬βββββββββ βββββββββ¬βββββββββ βββββββββ¬βββββββββ
β β β
ββββββββββββββββββββββββΌβββββββββββββββββββββββ
β
βΌ
ββββββββββββββββββββ
β Prepare Data β
β - Filter 30d β
β - Calculate β
β summaries β
ββββββββββ¬ββββββββββ
β
βΌ
ββββββββββββββββββββ
β Build Prompt β
β - System role β
β - User data β
β - JSON format β
ββββββββββ¬ββββββββββ
β
βΌ
ββββββββββββββββββββ
β Groq API β
β LLaMA 3.3 70B β
β POST /chat/ β
β completions β
ββββββββββ¬ββββββββββ
β
βΌ
ββββββββββββββββββββ
β Parse Response β
β - Extract JSON β
β - Validate β
β - fallbacks β
ββββββββββ¬ββββββββββ
β
βΌ
ββββββββββββββββββ ββββββββββββββββββ ββββββββββββββββββ
β Health Score β β Insights β βRecommendations β
β 0-100 β β (4 types) β β (actions) β
ββββββββββββββββββ ββββββββββββββββββ ββββββββββββββββββ
Push Notification Architecture
Notification Triggers
| Trigger |
Condition |
Notification |
| Budget 80% |
Category spending β₯ 80% of limit |
β οΈ Warning alert |
| Budget 100% |
Category spending β₯ 100% of limit |
π¨ Over budget alert |
| Daily Reminder |
8:00 PM daily (if enabled) |
π Log expenses reminder |
| Weekly Summary |
Monday 9:00 AM (if enabled) |
π Weekly insights ready |
Security Architecture
Authentication Flow
βββββββββββ βββββββββββββββ ββββββββββββββββ ββββββββββββββββ
β User ββββββΆβ Login/ ββββββΆβ Firebase ββββββΆβ Verified β
β β β Register β β Auth β β User β
βββββββββββ βββββββββββββββ ββββββββββββββββ ββββββββββββββββ
β β
β βΌ
β ββββββββββββββββ
β β Email β
βββββββββββββββΆβ Verification β
ββββββββββββββββ
Data Security
| Layer |
Security Measure |
| API Keys |
Environment variables (EXPO_PUBLIC_GROQ_API_KEY) |
| Firebase |
User-scoped data (users/{userId}/...) |
| Auth |
Email verification required before full access |
| Transport |
HTTPS for all API calls |
Version Information
| Component |
Version |
| SpendWise App |
v2.1.0 |
| React Native |
0.76.5 |
| Expo SDK |
52 |
| Firebase |
11.0.2 |
| Groq Model |
llama-3.3-70b-versatile |