Smart Receipt Expense Tracker β A mobile app for recording expenses and income, scanning receipts with AI-powered OCR, and viewing financial reports.
Built with React Native (Expo SDK 54) + Node.js backend + Supabase database + Groq AI for receipt parsing.
- π° Manual Tracking β Add expenses and income with categories
- π· Receipt Scanning β Take a photo of your receipt, and AI extracts items automatically
- π§ AI-Powered Parsing β Groq Vision (Llama 4 Scout 17B) intelligently identifies items, prices, and dates directly from receipt images
- π Item Review β Edit, delete, or add items before saving
- π Dashboard β Monthly income/expense/balance cards with category breakdown
- π Report Screen β Interactive line chart with daily trends and month picker
- π Transaction History β Search, filter by category, filter by month
- π Authentication β Register/login/logout with JWT token management
- βοΈ Cloud Storage β Receipt images stored in Supabase Storage
| Library | Purpose |
|---|---|
| React Native + Expo SDK 54 | Cross-platform mobile framework |
| React Navigation | Tab + Stack navigation |
| @expo/vector-icons | Icon library |
| react-native-chart-kit | Line charts for reports |
| expo-image-picker | Camera & gallery access |
| expo-file-system | File reading for OCR upload |
| expo-secure-store | JWT token storage |
| date-fns | Date formatting |
| Library | Purpose |
|---|---|
| Node.js + Express (v5) | API server |
| Supabase (PostgreSQL) | Database |
| Supabase Storage | Receipt image storage |
| Groq Vision (Llama 4 Scout 17B) | Direct image-to-JSON receipt parsing |
| OpenAI SDK | LLM API client (Groq-compatible) |
| jsonwebtoken | JWT authentication |
| bcryptjs | Password hashing |
| Service | Detail |
|---|---|
| Hosting | Vercel (free Hobby plan) |
| Production URL | https://backend-delta-sand-64.vercel.app |
| Deploy command | vercel --cwd backend --prod --yes --force |
![]() |
![]() |
![]() |
| Dashboard | Scan Receipt | Item Review |
![]() |
![]() |
![]() |
| Report | Transaction History | Login |
Note: Add actual screenshots to
docs/screenshots/folder.
- Node.js 18+
- npm or yarn
- Expo Go app on your phone (Android/iOS) β for development
- A Groq API key (console.groq.com) β for receipt scanning
- A Supabase project (supabase.com) β for database & storage
- Vercel CLI β for backend deployment (optional)
Download the latest APK directly on your Android phone:
Or visit: https://expo.dev/accounts/naitkomahli/projects/SpendScan/builds
The APK connects to the production backend at
https://backend-delta-sand-64.vercel.app. No setup required.
# Clone the repository
git clone https://github.com/Naitkomahli/SpendScan.git
cd SpendScan
# Install mobile dependencies
npm install
# Install backend dependencies
cd backend
npm install
cd ..- Create a
.envfile inbackend/:
PORT=3000
# Supabase
SUPABASE_URL=your_supabase_url
SUPABASE_ANON_KEY=your_anon_key
SUPABASE_SERVICE_ROLE_KEY=your_service_role_key
# JWT
JWT_SECRET=your_jwt_secret
JWT_EXPIRES_IN=7d
# LLM (Groq β Vision for receipt scanning)
LLM_API_KEY=gsk_your_groq_api_key
LLM_BASE_URL=https://api.groq.com/openai/v1
LLM_MODEL=llama-3.3-70b-versatile
LLM_MODEL_VISION=meta-llama/llama-4-scout-17b-16e-instruct- Run database migration in Supabase SQL Editor:
ALTER TABLE transactions ADD COLUMN type VARCHAR(10) NOT NULL DEFAULT 'expense'
CHECK (type IN ('income', 'expense'));- Start the backend server:
cd backend
node src/server.js# Install Vercel CLI
npm install -g vercel
# Set environment variables
echo "your_value" | vercel env add SUPABASE_URL production --yes
echo "your_value" | vercel env add SUPABASE_ANON_KEY production --yes
# ... repeat for all env vars (see table below)
# Deploy
vercel --cwd backend --prod --yes --forceProduction URL: https://backend-delta-sand-64.vercel.app
# From project root
npx expo startScan the QR code with Expo Go on your phone. Make sure your phone and laptop are on the same WiFi network.
β οΈ Development: The app uses the production Vercel backend by default. If you run the backend locally, updateBASE_URLinsrc/services/api.jsto your laptop's IP (e.g.,http://192.168.1.19:3000/api).
To build your own APK with EAS Build:
# Install EAS CLI
npm install -g eas-cli
# Login to Expo
eas login
# Build APK
eas build --platform android --profile previewFor a detailed technical explanation (how each feature works, data flow, glossary), see:
β‘οΈ docs/TECHNICAL.md
SpendScan/
βββ App.js # Entry point with ErrorBoundary + AuthProvider
βββ app.json # Expo config
βββ eas.json # EAS Build profiles
βββ src/
β βββ components/ # Reusable UI components
β β βββ TransactionCard.jsx
β β βββ CategoryBadge.jsx
β β βββ EmptyState.jsx
β β βββ Skeleton.jsx # Shimmer loading placeholders
β βββ constants/ # App constants
β β βββ colors.js
β β βββ categories.js
β βββ contexts/
β β βββ AuthContext.js # Auth state + SecureStore
β βββ data/
β β βββ mockTransactions.js
β βββ navigation/
β β βββ AppNavigator.jsx # Tab + Stack navigation
β βββ screens/
β β βββ HomeScreen.jsx # Dashboard with income/expense/balance
β β βββ AddTransactionScreen.jsx
β β βββ EditTransactionScreen.jsx
β β βββ TransactionListScreen.jsx
β β βββ TransactionDetailScreen.jsx
β β βββ LoginScreen.jsx
β β βββ ProfileScreen.jsx
β β βββ ReportScreen.jsx # Line chart report
β β βββ ScanScreen.jsx # Camera/gallery + AI scan + item review
β βββ services/
β β βββ api.js # Fetch wrapper (auto-attaches JWT)
β β βββ authService.js
β β βββ transactionService.js
β βββ utils/
β βββ formatCurrency.js
βββ backend/
β βββ .env
β βββ vercel.json # Vercel routing config
β βββ src/
β β βββ server.js # Express listen (local dev)
β β βββ app.js # Express app (Vercel entry via Express preset)
β β βββ config/
β β β βββ supabase.js
β β βββ controllers/
β β β βββ authController.js
β β β βββ transactionController.js
β β β βββ receiptController.js
β β βββ services/
β β β βββ llmParser.js # Groq Vision receipt parsing
β β βββ middleware/
β β β βββ auth.js
β β β βββ errorHandler.js
β β βββ routes/
β β β βββ auth.js
β β β βββ transactions.js
β β β βββ receipts.js
β β βββ db/
β β βββ schema.sql
β βββ package.json
βββ docs/
β βββ PRD.md
β βββ TECHNICAL.md # Full technical overview
β βββ AGENTS.md # AI assistant context
β βββ screenshots/
βββ README.md
| Method | Endpoint | Description | Auth Required |
|---|---|---|---|
| POST | /api/auth/register |
Register new user | β |
| POST | /api/auth/login |
Login user | β |
| GET | /api/transactions |
Get all transactions | β |
| GET | /api/transactions/:id |
Get transaction by ID | β |
| POST | /api/transactions |
Create transaction | β |
| PUT | /api/transactions/:id |
Update transaction | β |
| DELETE | /api/transactions/:id |
Delete transaction | β |
| POST | /api/receipts/scan |
Upload & scan receipt | β |
All responses follow { success: boolean, message: string, data: any } format.
| Variable | Required | Description |
|---|---|---|
PORT |
β | Server port (default: 3000) |
SUPABASE_URL |
β | Supabase project URL |
SUPABASE_ANON_KEY |
β | Supabase anonymous key |
SUPABASE_SERVICE_ROLE_KEY |
β | Supabase service role key |
JWT_SECRET |
β | Secret for signing JWT tokens |
JWT_EXPIRES_IN |
β | Token expiry (default: 7d) |
LLM_API_KEY |
β | Groq API key |
LLM_BASE_URL |
β | Groq API base URL (default: https://api.groq.com/openai/v1) |
LLM_MODEL |
β | Text model for general LLM tasks (default: llama-3.3-70b-versatile) |
LLM_MODEL_VISION |
β | Vision model for receipt scanning (default: meta-llama/llama-4-scout-17b-16e-instruct) |
- Register, login, logout
- Token persists across app restarts
- Add income & expense transactions
- Dashboard shows income/expense/balance
- Category breakdown with progress bars
- Transaction list with month filter
- Search & category filter
- Edit & delete transactions
- Report screen with line chart
- Scan receipt β AI Vision β item review
- Edit/delete/add items in review screen
- Batch save multiple transactions from one receipt
- Profile screen with user info & logout
Download the latest APK directly on your Android phone:
https://expo.dev/artifacts/eas/EkRE1PMFEeh3E-dSDh5_yK1FJvxegw9H2b4OnVOIEpI.apk
Or visit: Expo Builds Dashboard
This project is for educational and portfolio purposes.
Ilham Oktian Ramadhan β Mobile App Developer & Project Owner
- React Native & Expo teams
- Supabase for backend infrastructure
- Groq (Llama 4 Scout) for free vision AI API
- Vercel for free hosting





