|
3 | 3 | <div align="center"> |
4 | 4 |
|
5 | 5 |  |
| 6 | + |
6 | 7 |  |
7 | 8 |  |
8 | 9 |
|
9 | 10 | </div> |
10 | 11 |
|
11 | | -<p align="center">Monet is a simple application to track your money with NFC banking card.</p> |
| 12 | +<p align="center">Monet is a simple, frictionless personal finance application that tracks your money using NFC banking cards.</p> |
| 13 | + |
| 14 | +## 📖 Overview |
| 15 | + |
| 16 | +Monet is a cross-platform mobile application ecosystem designed to simplify personal finance tracking. By leveraging the built-in Near Field Communication (NFC) hardware on smartphones, Monet provides a unique, frictionless experience. Users can simply tap their physical banking or e-money cards against their device to trigger an automated, zero-touch transaction logging workflow. |
| 17 | + |
| 18 | +> **Disclaimer:** This repository currently contains ONLY the **Flutter Frontend Client** of the Monet application. The Golang backend API (as specified in the SRS) is maintained in a separate repository or is pending implementation. |
| 19 | +
|
| 20 | +## 📱 Screenshots |
| 21 | + |
| 22 | +| Home Dashboard | NFC Scanner | Expense Analytics | |
| 23 | +| :----------------------------------------------------------------: | :------------------------------------------------------------: | :----------------------------------------------------------------: | |
| 24 | +| <img src="docs/assets/home.png" width="200" alt="Home Dashboard"/> | <img src="docs/assets/nfc.png" width="200" alt="NFC Scanner"/> | <img src="docs/assets/analytics.png" width="200" alt="Analytics"/> | |
| 25 | + |
| 26 | +_(Note: Replace the image paths with actual screenshots of the application)._ |
| 27 | + |
| 28 | +## ✨ Key Features |
| 29 | + |
| 30 | +- **NFC Hardware Integration:** Reads public metadata and UID from physical banking or e-money cards utilizing platform-specific NFC channels (e.g., `nfc_manager`), linking physical assets directly to digital tracking without processing actual financial transactions. |
| 31 | +- **Zero-Touch Expense Routing (Smart Auto-Fill):** Tapping a previously registered card instantly routes the user to a transaction form. The "Payment Method" and "Card Alias" are automatically locked and pre-filled, requiring the user to only input the transaction amount. |
| 32 | +- **Offline-First Caching Mechanism:** Ensures transactions can be logged even in areas with poor cellular reception. Utilizing local SQLite or Hive databases, pending entries are cached and later synchronized securely with the backend API once connectivity is restored via a background isolate. |
| 33 | +- **Budgeting & Analytics Dashboard:** Offers an interactive visualization of financial health, featuring pie charts for category breakdowns and line charts for spending trends, powered by the `fl_chart` library. |
| 34 | +- **Secure Authentication & Session Management:** Implements secure user onboarding using email and password, OTP verification for password recovery, and stateless API access managed via JSON Web Tokens (JWT). JWTs are stored client-side using platform-specific Secure Storage (Keychain for iOS, Keystore for Android). |
| 35 | +- **Manual Financial Management:** Provides traditional capabilities for users to manually input income and expenses, attach notes, and categorize transactions. |
12 | 36 |
|
13 | 37 | ## 💻 Tech Stack |
14 | 38 |
|
15 | 39 | - **Framework**: Flutter |
16 | 40 | - **Language**: Dart |
17 | | -- **Platform**: Android |
18 | | -- **NFC**: Android NFC API |
| 41 | +- **Architecture Pattern**: Feature-First BLoC (Business Logic Component) |
| 42 | +- **Routing**: GoRouter (Declarative Routing) |
| 43 | +- **Network**: Dio |
| 44 | +- **Platform**: Android (Target API 26+) & iOS (Target iOS 13.0+) |
| 45 | +- **NFC**: Android NFC API & iOS CoreNFC |
| 46 | +- **Data Visualization**: fl_chart |
| 47 | +- **Local Storage**: Flutter Secure Storage (Keystore/Keychain) & SQLite/Hive (for offline caching) |
| 48 | + |
| 49 | +## 📁 Project Architecture |
| 50 | + |
| 51 | +This project follows a **Feature-First Architecture** utilizing the BLoC pattern for predictable state management. |
| 52 | + |
| 53 | +```text |
| 54 | +lib/ |
| 55 | +├── core/ # Global utilities, shared widgets, theme, and constants |
| 56 | +│ ├── constants/ # API endpoints, colors (Palette), routes |
| 57 | +│ ├── services/ # Secure storage, region formatters |
| 58 | +│ ├── utils/ # Loggers and formatters |
| 59 | +│ └── widgets/ # Reusable UI components (Buttons, Inputs) |
| 60 | +├── features/ # Isolated feature modules |
| 61 | +│ ├── auth/ # Login, Register, OTP, Password Reset |
| 62 | +│ ├── expense_tracker/ # Analytics, Charts, History |
| 63 | +│ ├── home/ # Dashboard, Balance Card, Quick Actions |
| 64 | +│ ├── nfc_scanner/ # NFC Hardware Integration |
| 65 | +│ ├── profile/ # User Profile Management |
| 66 | +│ └── settings/ # App Preferences and Configurations |
| 67 | +└── routes/ # GoRouter configuration and route generation |
| 68 | +``` |
19 | 69 |
|
20 | 70 | ## 🌐 Installation for Development |
21 | 71 |
|
|
24 | 74 | - Flutter SDK (latest stable version) |
25 | 75 | - Dart SDK (included with Flutter) |
26 | 76 | - Android Studio or VS Code |
27 | | -- Android emulator or physical device with NFC capability |
| 77 | +- Android emulator or physical device with **NFC capability** (required for automated card reading features; manual entry fallback is available for non-NFC devices). |
28 | 78 |
|
29 | | -### Setup |
| 79 | +### Setup & Environment Configuration |
30 | 80 |
|
31 | | -1. Clone the repository: |
| 81 | +1. **Clone the repository:** |
32 | 82 |
|
33 | 83 | ```bash |
34 | 84 | git clone https://www.github.com/a6iyyu/monet |
35 | 85 | cd monet |
36 | 86 | ``` |
37 | 87 |
|
38 | | -2. Install dependencies: |
| 88 | +2. **Install dependencies:** |
39 | 89 |
|
40 | 90 | ```bash |
41 | 91 | flutter pub get |
42 | 92 | ``` |
43 | 93 |
|
44 | | -3. Run the app: |
| 94 | +3. **Run the app with Environment Variables:** |
| 95 | + The application requires an API Base URL to connect to the backend. You must pass this during runtime using `--dart-define`. |
45 | 96 |
|
46 | 97 | ```bash |
47 | | - flutter run |
| 98 | + flutter run --dart-define=API_BASE_URL=https://your-backend-api.com # Coming Soon |
48 | 99 | ``` |
49 | 100 |
|
50 | | -4. Build release APK: |
51 | | - |
| 101 | +4. **Build release APK:** |
52 | 102 | ```bash |
53 | | - flutter build apk --release |
| 103 | + flutter build apk --release --dart-define=API_BASE_URL=https://your-production-api.com # Coming Soon |
54 | 104 | ``` |
55 | 105 |
|
| 106 | +## 🔒 Security & Privacy |
| 107 | + |
| 108 | +Monet handles banking card metadata (UIDs) and adheres strictly to security best practices: |
| 109 | + |
| 110 | +- **No Financial Processing:** Monet does not act as a payment gateway and will not execute or process actual financial transactions (EMV protocols) from scanned cards. |
| 111 | +- **Data Privacy:** The system only reads and stores the public UID and user-assigned alias. It is strictly prohibited from attempting to read, decode, or store sensitive financial elements such as EMV chip cryptograms, CVV, or PIN blocks. |
| 112 | +- **Secure Communication:** All client-server data exchange must be transmitted over HTTPS utilizing TLS 1.2 or TLS 1.3. |
| 113 | +- **Client-Side Storage:** Sensitive session data (JWTs) must be stored using platform-level hardware-backed enclaves (`EncryptedSharedPreferences` / `KeyStore` on Android and `Keychain Services` on iOS). |
| 114 | + |
56 | 115 | --- |
57 | 116 |
|
58 | 117 | <p align="center">Made with ♥️ by Rafi Abiyyu Airlangga</p> |
0 commit comments