A comprehensive cross-platform personal finance management application with gamified goals, real-time insights, and full-stack API integration.
PocketPal is a modern financial tracking application that makes managing personal finances engaging and intuitive. Unlike traditional budget apps, PocketPal combines powerful financial analytics with gamification elements to motivate users to achieve their savings goals.
Most people struggle to track their expenses consistently and find traditional finance apps boring or overwhelming. PocketPal solves this by:
- Making finance tracking visual and interactive with beautiful charts and animations
- Gamifying savings goals with quests, achievements, and progress tracking
- Providing real-time insights into spending patterns
- Offering a clean, modern interface that's actually enjoyable to use
- Young professionals starting their financial journey
- Budget-conscious individuals who want better spending visibility
- Anyone looking for a more engaging alternative to spreadsheets or complex finance software
β¨ Gamified Goals & Achievements - Turn saving money into a rewarding challenge
π¨ Beautiful UI/UX - Smooth animations and modern Material Design
π Real-Time Analytics - Interactive charts and spending breakdowns
π Full-Stack Integration - RESTful API backend demonstrating production-ready architecture
βοΈ Highly Customizable - Multiple currencies, themes, and security options
- Real-time balance tracking with income vs expenses breakdown
- Savings progress cards showing goal completion percentage
- Weekly spending chart with interactive bar graph
- Top spending categories at a glance
- Pull-to-refresh for instant data updates
- Animated transitions and smooth Hero animations
- Complete transaction management (view, add, search, filter)
- Smart filtering by type (All/Income/Expense)
- Real-time search across all transactions
- Quick-add form for instant transaction logging
- Category-based organization with visual icons
- Color-coded entries (green for income, red for expenses)
- Gamified financial challenges (e.g., "No Spend Weekend", "Save $500")
- Progress tracking with visual progress bars
- Achievement system with earned badges
- Custom goal creation with emoji selection
- Deadline tracking with day counters
- Scrollable quest list with overflow handling
- Interactive pie charts for spending breakdown
- Monthly trend analysis comparing income vs expenses
- Category-wise spending with percentages
- Financial health indicators
- Data visualization using FL Chart library
- Multi-currency support (USD, EUR, GBP, INR, JPY, CNY, AUD, CAD)
- Notification management for expense reminders and budget alerts
- Security options (PIN, Biometric, None)
- Theme switching (Light, Dark, System)
- Data export functionality (CSV/PDF)
- User profile with avatar and stats
- Sign out capability
- RESTful API integration with Node.js backend
- 6 functional endpoints (health, summary, transactions, insights, goals)
- Real-time data synchronization
- POST request handling for adding transactions
- Comprehensive error handling with user-friendly messages
- Loading states and retry mechanisms
- Network error detection
- Animated splash screen with fade + scale transitions
- Hero transitions between screens
- Shimmer loading effects
- Smooth page transitions
- Responsive design adapting to all screen sizes
- Dark theme optimized for OLED displays
- Custom fonts using Google Fonts
| Technology | Version | Purpose |
|---|---|---|
| Flutter | 3.8.1+ | Cross-platform UI framework for building natively compiled applications |
| Dart | 3.8.1+ | Programming language optimized for UI development |
| Riverpod | 3.3.1 | State management solution with compile-time safety and provider pattern |
| GoRouter | 17.0.0 | Declarative routing with deep linking support |
| FL Chart | 0.68.0 | Beautiful, animated charts for data visualization |
| Google Fonts | 6.3.2 | Custom typography from Google Fonts library |
| Shimmer | 3.0.0 | Skeleton loading animation for better UX |
| Intl | 0.20.2 | Internationalization and date/number formatting |
| Percent Indicator | 4.2.3 | Progress indicators for goals and achievements |
| HTTP | 1.2.0 | HTTP client for API communication |
| UUID | 4.5.3 | Unique identifier generation |
| Cached Network Image | 3.4.1 | Image caching and lazy loading |
| Technology | Version | Purpose |
|---|---|---|
| Node.js | 14+ | JavaScript runtime for server-side execution |
| Express.js | 4.18.2 | Web framework for building RESTful APIs |
| CORS | 2.8.5 | Cross-Origin Resource Sharing middleware |
| Body Parser | 1.20.2 | Request body parsing middleware |
| Technology | Purpose |
|---|---|
| In-Memory Storage | Mock data storage for demo purposes (production would use PostgreSQL/MongoDB) |
| Tool | Purpose |
|---|---|
| Nodemon | 3.0.1 - Auto-restart server on file changes during development |
| Flutter DevTools | Debugging and performance profiling |
| Dart Analyzer | Static code analysis and linting |
pocketpal/
βββ android/ # Android platform-specific code
βββ ios/ # iOS platform-specific code
βββ web/ # Web platform-specific code
βββ windows/ # Windows platform-specific code
βββ linux/ # Linux platform-specific code
βββ macos/ # macOS platform-specific code
βββ assets/ # Static assets (images, fonts)
β βββ images/
β βββ splash_logo.png # Splash screen logo
βββ BACKEND/ # Node.js Express API server
β βββ server.js # Main Express server with 6 API endpoints
β βββ package.json # Backend dependencies
β βββ README.md # Backend documentation
βββ lib/ # Flutter application source code
β βββ main.dart # Application entry point with GoRouter
β βββ splash_screen.dart # Animated splash screen
β βββ api_service.dart # Centralized API client with error handling
β βββ api_models.dart # Data models (Summary, Transaction, Insights, Goal)
β βββ api_demo_screen.dart # API integration demo UI
β βββ core/ # Core utilities and configurations
β β βββ theme/
β β β βββ app_theme.dart # Material theme configuration
β β β βββ app_colors.dart # Color palette constants
β β βββ utils/
β β βββ formatters.dart # Date and currency formatters
β βββ features/ # Feature-based modules
β β βββ home/ # Home dashboard feature
β β β βββ domain/
β β β β βββ home_models.dart # Domain models for home
β β β βββ presentation/
β β β β βββ screens/
β β β β β βββ home_screen.dart # Home dashboard UI
β β β β β βββ profile_screen.dart # Profile & settings UI
β β β β βββ widgets/
β β β β β βββ balance_card.dart # Balance display widget
β β β β β βββ savings_goal_card.dart # Savings progress widget
β β β β β βββ weekly_bar_chart.dart # Weekly spending chart
β β β β β βββ top_categories_row.dart # Top categories widget
β β β β βββ providers/
β β β β βββ home_providers.dart # Riverpod providers for home
β β β β βββ profile_providers.dart # Profile state providers
β β β β βββ profile_models.dart # Profile data models
β β β β βββ settings_providers.dart # Settings state management
β β β βββ data/
β β β βββ home_repository.dart # Data layer for home
β β βββ wallet/ # Wallet & transactions feature
β β β βββ domain/
β β β β βββ wallet_models.dart # Transaction models
β β β βββ presentation/
β β β βββ screens/
β β β β βββ wallet_screen.dart # Wallet UI
β β β βββ widgets/
β β β β βββ filter_chip_bar.dart # Transaction filters
β β β β βββ quick_add_form.dart # Add transaction form
β β β β βββ transaction_list.dart # Transaction list view
β β β βββ providers/
β β β βββ wallet_providers.dart # Wallet state management
β β βββ goals/ # Goals & quests feature
β β β βββ domain/
β β β β βββ goals_models.dart # Goal and quest models
β β β βββ presentation/
β β β β βββ goals_screen.dart # Goals UI
β β β β βββ goals_widgets.dart # Quest cards, achievement badges
β β β βββ providers/
β β β βββ goals_providers.dart # Goals state management
β β βββ insights/ # Analytics & insights feature
β β βββ domain/
β β β βββ insights_models.dart # Analytics models
β β βββ presentation/
β β β βββ insights_screen.dart # Insights UI
β β β βββ insights_widgets.dart # Chart components
β β βββ providers/
β β βββ insights_providers.dart # Insights state
β βββ shared/ # Shared components
β βββ screens/
β βββ main_scaffold.dart # Bottom navigation scaffold
βββ test/ # Unit and widget tests
β βββ widget_test.dart # Sample widget tests
βββ .gitignore # Git ignore rules
βββ pubspec.yaml # Flutter dependencies
βββ analysis_options.yaml # Dart analyzer configuration
βββ API_INTEGRATION_README.md # API integration guide
βββ verify_api_integration.sh # Setup verification script
βββ README.md # This file
Before running PocketPal, ensure you have the following installed:
| Software | Minimum Version | Download Link |
|---|---|---|
| Flutter SDK | 3.8.1 or higher | flutter.dev |
| Dart SDK | 3.8.1+ (bundled with Flutter) | Included with Flutter |
| Node.js | 14.0.0 or higher | nodejs.org |
| npm | 6.0.0 or higher | Included with Node.js |
| Git | Latest | git-scm.com |
For Android Development:
- Android Studio (latest stable version)
- Android SDK 21 or higher
- Android Virtual Device (AVD) or physical device
For iOS Development (macOS only):
- Xcode 14.0 or higher
- CocoaPods 1.11.0 or higher
- iOS Simulator or physical device
For Web Development:
- Chrome browser (latest version)
For Desktop Development:
- Windows: Visual Studio 2022 with C++ tools
- macOS: Xcode command-line tools
- Linux: Clang, CMake, GTK development headers
git clone https://github.com/gopal5587/POCKETPAL.git
cd POCKETPALflutter pub getcd BACKEND
npm install
cd ..If testing on a physical device, update the API base URL in lib/api_service.dart:
// Find your computer's IP address:
// Windows: Run 'ipconfig' in CMD
// Mac/Linux: Run 'ifconfig' in Terminal
// Update line 36 in api_service.dart:
const String computerIp = 'YOUR_IP_ADDRESS'; // e.g., '192.168.1.5'
// Then uncomment line 46 for physical Android device:
return 'http://$computerIp:3000';Platform-specific URLs:
- Android Emulator:
http://10.0.2.2:3000(default) - iOS Simulator:
http://localhost:3000 - Physical Device:
http://YOUR_IP:3000 - Desktop:
http://localhost:3000
Open a new terminal and run:
cd BACKEND
npm startYou should see:
ββββββββββββββββββββββββββββββββββββββββββββββββββ
β PocketPal Mock API Server Running β
ββββββββββββββββββββββββββββββββββββββββββββββββββ
π Server: http://localhost:3000
Keep this terminal running!
In a separate terminal:
# For development
flutter run
# For specific platform
flutter run -d chrome # Web
flutter run -d windows # Windows
flutter run -d macos # macOS
flutter run -d <device-id> # Mobile device# Android APK
flutter build apk --release
# Android App Bundle (for Play Store)
flutter build appbundle --release
# iOS (macOS only)
flutter build ios --release
# Web
flutter build web --release
# Windows
flutter build windows --release
# macOS
flutter build macos --release
# Linux
flutter build linux --release# Android: Install the APK from build/app/outputs/flutter-apk/app-release.apk
# Web: Serve the build/web directory
cd build/web
python -m http.server 8000
# Desktop: Run executable from build/<platform>/release/Currently, the backend uses in-memory storage and does not require environment variables. For production deployment, you would configure:
| Variable | Description | Required | Default |
|---|---|---|---|
PORT |
Backend server port | No | 3000 |
NODE_ENV |
Environment mode | No | development |
DATABASE_URL |
Database connection string | No | N/A (in-memory) |
JWT_SECRET |
Secret key for authentication | No | N/A (not implemented) |
The frontend reads configuration from lib/api_service.dart:
| Configuration | Description | Default |
|---|---|---|
baseUrl |
Backend API base URL | Auto-detected based on platform |
timeout |
HTTP request timeout | 10 seconds |
- Development:
http://localhost:3000 - Android Emulator:
http://10.0.2.2:3000
GET /api/health
Check if the server is running.
Response:
{
"status": "OK",
"message": "PocketPal API is running",
"timestamp": "2026-04-06T14:35:17.799Z",
"version": "1.0.0"
}GET /api/summary
Retrieve current month's financial summary.
Auth Required: No
Response:
{
"success": true,
"data": {
"totalIncome": 5800.00,
"totalExpenses": 291.99,
"balance": 5508.01,
"transactionCount": 6,
"month": "April",
"year": 2026
}
}GET /api/transactions
Retrieve all transactions with optional filtering.
Auth Required: No
Query Parameters:
| Parameter | Type | Description |
|---|---|---|
type |
string | Filter by income or expense |
category |
string | Filter by category name |
limit |
number | Limit number of results |
Example:
GET /api/transactions?type=expense&limit=10
Response:
{
"success": true,
"data": [
{
"id": "1",
"title": "Salary",
"amount": 5000.00,
"type": "income",
"category": "Salary",
"date": "2026-04-01T10:00:00.000Z",
"description": "Monthly salary deposit"
}
],
"count": 6
}POST /api/transactions
Create a new transaction.
Auth Required: No
Request Body:
{
"title": "Coffee",
"amount": 5.99,
"type": "expense",
"category": "Food",
"date": "2026-04-06T12:30:00.000Z",
"description": "Morning coffee"
}Required Fields: title, amount, type, category
Optional Fields: date, description
Response:
{
"success": true,
"data": {
"id": "7",
"title": "Coffee",
"amount": 5.99,
"type": "expense",
"category": "Food",
"date": "2026-04-06T12:30:00.000Z",
"description": "Morning coffee"
},
"message": "Transaction added successfully"
}GET /api/insights
Retrieve spending breakdown by category.
Auth Required: No
Response:
{
"success": true,
"data": {
"totalExpenses": 291.99,
"categoryBreakdown": [
{
"category": "Food",
"amount": 156.00,
"percentage": "53.4"
}
],
"topCategory": "Food",
"categoriesCount": 3
}
}GET /api/goals
Retrieve all savings goals with progress.
Auth Required: No
Response:
{
"success": true,
"data": [
{
"id": "1",
"title": "Emergency Fund",
"targetAmount": 10000.00,
"currentAmount": 6500.00,
"deadline": "2026-12-31",
"category": "Savings",
"icon": "π¨",
"progress": "65.0",
"remaining": 3500.00,
"daysLeft": 269,
"status": "active"
}
],
"count": 3
}All endpoints return errors in this format:
{
"success": false,
"message": "Error description",
"error": "Detailed error (development mode only)"
}Status Codes:
200- Success201- Created400- Bad Request (validation error)404- Not Found500- Internal Server Error
# Run all tests
flutter test
# Run tests with coverage
flutter test --coverage
# Run specific test file
flutter test test/widget_test.dart
# Run tests in watch mode
flutter test --watchCurrently, the backend does not have automated tests. To manually test:
# Using curl
curl http://localhost:3000/api/health
curl http://localhost:3000/api/summary
curl -X POST http://localhost:3000/api/transactions \
-H "Content-Type: application/json" \
-d '{"title":"Test","amount":10,"type":"expense","category":"Food"}'
# Using a REST client (Postman, Insomnia, etc.)
# Import the endpoints and test manuallytest/
βββ widget_test.dart # Sample widget tests
βββ unit/ # Unit tests (to be added)
βββ integration/ # Integration tests (to be added)
βββ fixtures/ # Test data fixtures (to be added)
Contributions are welcome! Please follow these guidelines:
-
Fork the repository
# Click the "Fork" button on GitHub -
Clone your fork
git clone https://github.com/YOUR_USERNAME/POCKETPAL.git cd POCKETPAL -
Create a feature branch
git checkout -b feature/your-feature-name
-
Make your changes
- Write clean, documented code
- Follow the existing code style
- Add tests if applicable
-
Commit your changes
git add . git commit -m "feat: add your feature description"
-
Push to your fork
git push origin feature/your-feature-name
-
Create a Pull Request
- Go to the original repository
- Click "New Pull Request"
- Select your fork and branch
- Describe your changes in detail
Flutter/Dart:
- Follow Effective Dart guidelines
- Use
dart formatbefore committing - Run
flutter analyzeto check for issues - Use meaningful variable and function names
- Add doc comments for public APIs
Node.js/JavaScript:
- Use ES6+ syntax
- Use
constandletinstead ofvar - Add JSDoc comments for functions
- Follow consistent indentation (2 spaces)
feature/- New features (e.g.,feature/add-budget-tracking)fix/- Bug fixes (e.g.,fix/transaction-overflow)refactor/- Code refactoring (e.g.,refactor/api-service)docs/- Documentation updates (e.g.,docs/update-readme)test/- Test additions (e.g.,test/add-wallet-tests)
Follow Conventional Commits:
<type>: <description>
[optional body]
[optional footer]
Types:
feat:- New featurefix:- Bug fixdocs:- Documentation changesstyle:- Code style changes (formatting, etc.)refactor:- Code refactoringtest:- Adding or updating testschore:- Maintenance tasks
Examples:
feat: add biometric authentication
fix: resolve transaction list overflow
docs: update API documentation
refactor: improve state management with Riverpod
This project is licensed under the MIT License - see the LICENSE file for details.
MIT License
Copyright (c) 2026 gopal5587
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
Gopal
- GitHub: @gopal5587
- Repository: POCKETPAL
- Flutter Team for the amazing framework
- Riverpod for elegant state management
- FL Chart for beautiful charts
- Express.js for the robust backend framework
- All contributors and users of PocketPal
If you encounter any issues or have questions:
- Check the API Integration Guide
- Review existing issues
- Open a new issue with:
- Clear description of the problem
- Steps to reproduce
- Expected vs actual behavior
- Screenshots (if applicable)
- Platform and version information
Planned Features:
- Database integration (PostgreSQL/MongoDB)
- User authentication & authorization
- Cloud sync across devices
- Recurring transactions
- Budget limits with alerts
- Receipt scanning with OCR
- Multi-user household budgets
- Investment tracking
- Bill reminders
- Export to accounting software
Completed Features:
- Full-stack API integration
- Transaction management
- Gamified goals system
- Interactive analytics
- Multi-currency support
- Theme customization
- Data export functionality
Add screenshots of your app here once available
β Star this repository if you find it helpful!
Made with β€οΈ and Flutter