Skip to content

Commit 9ae255b

Browse files
authored
Merge pull request #14 from HellBus1/1.0.0
Staging 1.0.0
2 parents 8f992e3 + 1e46213 commit 9ae255b

90 files changed

Lines changed: 2453 additions & 398 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.gitignore

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,4 +46,7 @@ app.*.map.json
4646
*.env
4747
*.freezed.dart
4848

49-
google-services.json
49+
google-services.json
50+
GoogleService-Info.plist
51+
firebase_options.dart
52+
**/firebase_app_id_file.json

README.md

Lines changed: 102 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,108 @@
1-
# vent_expense_pro
1+
# VentExpensePro 📈
22

3-
A new Flutter project.
3+
**The Analog Digital Ledger** — A lightweight, privacy-first personal finance application built with Flutter.
44

5-
## Getting Started
5+
VentExpensePro combines the simplicity of a paper ledger with the power of modern digital tools. It is designed for users who want total control over their financial data without compromising on aesthetics or ease of use.
66

7-
This project is a starting point for a Flutter application.
7+
---
88

9-
A few resources to get you started if this is your first Flutter project:
9+
## ✨ Features
1010

11-
- [Learn Flutter](https://docs.flutter.dev/get-started/learn-flutter)
12-
- [Write your first Flutter app](https://docs.flutter.dev/get-started/codelab)
13-
- [Flutter learning resources](https://docs.flutter.dev/reference/learning-resources)
11+
### 📒 Smart Ledger
12+
* **Effortless Logging**: Add transactions in seconds with a streamlined interface.
13+
* **Categorization**: Organize expenses and income with customizable categories.
14+
* **Rich Details**: Track dates, notes, and payment methods for every entry.
1415

15-
For help getting started with Flutter development, view the
16-
[online documentation](https://docs.flutter.dev/), which offers tutorials,
17-
samples, guidance on mobile development, and a full API reference.
16+
### 🏦 Account Management
17+
* **Multi-Account Support**: Manage Bank accounts, Cash, Credit Cards, and Wallets in one place.
18+
* **Net Position**: Instantly view your total financial standing across all accounts.
19+
* **Credit Settlement**: Specialized workflow for settling credit card bills.
20+
21+
### 📊 Reports & Insights
22+
* **Visual Analytics**: Understand your spending patterns with dynamic charts (fl_chart).
23+
* **PDF Export**: Generate professional expense reports for sharing or archival.
24+
* **Data Filtering**: Drill down into your data by date range or account.
25+
26+
### ☁️ Privacy-First Sync
27+
* **Google Drive Sync**: Securely backup and sync your data using your own Google Drive.
28+
* **App Data Scope**: Uses the `drive.appdata` hidden folder scope, ensuring your data is only accessible by the app.
29+
* **Offline First**: Full functionality without an internet connection.
30+
31+
### 🎨 Premium Design
32+
* **Flat Aesthetic**: A clean, modern "Flat Design" look that prioritizes readability.
33+
* **Custom Typography**: Features *Lora* for elegance and *JetBrains Mono* for data precision.
34+
* **Micro-Animations**: Smooth transitions and interactive elements for a premium feel.
35+
36+
---
37+
38+
## 🛠️ Tech Stack
39+
40+
* **Framework**: [Flutter](https://flutter.dev/) (3.11+)
41+
* **State Management**: [Provider](https://pub.dev/packages/provider)
42+
* **Local Database**: [Sqflite](https://pub.dev/packages/sqflite) (SQLite)
43+
* **Dependency Injection**: [GetIt](https://pub.dev/packages/get_it)
44+
* **APIs & Infrastructure**:
45+
* Google Drive API (Backup/Sync)
46+
* Firebase Crashlytics (Crash Reporting)
47+
* **Analytics & Reporting**:
48+
* [fl_chart](https://pub.dev/packages/fl_chart)
49+
* [pdf](https://pub.dev/packages/pdf)
50+
51+
---
52+
53+
## 🚀 Getting Started
54+
55+
### Prerequisites
56+
* Flutter SDK (^3.11.0)
57+
* Android Studio / VS Code with Flutter Extension
58+
* (Optional) Firebase account for Crashlytics
59+
60+
### Setup
61+
1. **Clone the repository**:
62+
```bash
63+
git clone https://github.com/HellBus1/VentExpensePro.git
64+
cd VentExpensePro
65+
```
66+
67+
2. **Install dependencies**:
68+
```bash
69+
flutter pub get
70+
```
71+
72+
3. **Run the application**:
73+
```bash
74+
flutter run
75+
```
76+
77+
### Production Build (Android)
78+
The project is configured with ProGuard obfuscation and resource shrinking for optimized release builds.
79+
80+
```bash
81+
flutter build apk --release
82+
```
83+
84+
*Note: For Crashlytics functionality, ensure `google-services.json` is placed in `android/app/`.*
85+
86+
---
87+
88+
## 🏗️ Architecture
89+
90+
The project follows a **Clean Architecture** pattern to ensure maintainability and testability:
91+
92+
- **`lib/domain`**: Core business logic, entities, and repository interfaces (Pure Dart).
93+
- **`lib/data`**: Implementation of repositories, SQLite data sources, and external service integrations.
94+
- **`lib/presentation`**: UI layer consisting of Screens, Widgets (Clean Flat Design), and Providers (State Management).
95+
- **`lib/core`**: Application-wide configurations like Themes, DI setup, and Constants.
96+
97+
---
98+
99+
## 🔒 Privacy & Security
100+
101+
* **No Central Server**: Your financial data is never stored on our servers.
102+
* **Encrypted Sync**: Cloud sync happens directly between your device and your private Google Drive space.
103+
* **Obfuscation**: Production builds are obfuscated using R8/ProGuard to protect the application logic.
104+
105+
---
106+
107+
## 📄 License
108+
This project is for personal use and portfolio demonstration. See `LICENSE` for details.

android/.gitignore

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,3 +12,8 @@ GeneratedPluginRegistrant.java
1212
key.properties
1313
**/*.keystore
1414
**/*.jks
15+
16+
# Firebase credentials
17+
app/google-services.json
18+
google-services.json
19+

android/app/build.gradle.kts

Lines changed: 51 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,30 @@
1+
import java.util.Properties
2+
13
plugins {
24
id("com.android.application")
35
id("kotlin-android")
46
// The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins.
57
id("dev.flutter.flutter-gradle-plugin")
68
}
79

10+
// Apply Google Services and Crashlytics only if google-services.json exists
11+
if (file("google-services.json").exists()) {
12+
apply(plugin = "com.google.gms.google-services")
13+
apply(plugin = "com.google.firebase.crashlytics")
14+
println("Google Services and Crashlytics plugins applied")
15+
} else {
16+
println("google-services.json not found. Skipping Google Services and Crashlytics plugins")
17+
}
18+
19+
// Load signing properties (if available)
20+
val keystorePropertiesFile = rootProject.file("key.properties")
21+
val keystoreProperties = Properties()
22+
if (keystorePropertiesFile.exists()) {
23+
keystoreProperties.load(keystorePropertiesFile.inputStream())
24+
}
25+
826
android {
9-
namespace = "com.example.vent_expense_pro"
27+
namespace = "com.digiventure.ventexpensepro"
1028
compileSdk = flutter.compileSdkVersion
1129
ndkVersion = flutter.ndkVersion
1230

@@ -19,9 +37,19 @@ android {
1937
jvmTarget = JavaVersion.VERSION_17.toString()
2038
}
2139

40+
signingConfigs {
41+
if (keystorePropertiesFile.exists()) {
42+
create("release") {
43+
keyAlias = keystoreProperties["keyAlias"] as String
44+
keyPassword = keystoreProperties["keyPassword"] as String
45+
storeFile = file(keystoreProperties["storeFile"] as String)
46+
storePassword = keystoreProperties["storePassword"] as String
47+
}
48+
}
49+
}
50+
2251
defaultConfig {
23-
// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
24-
applicationId = "com.example.vent_expense_pro"
52+
applicationId = "com.digiventure.ventexpensepro"
2553
// You can update the following values to match your application needs.
2654
// For more information, see: https://flutter.dev/to/review-gradle-config.
2755
minSdk = flutter.minSdkVersion
@@ -32,8 +60,26 @@ android {
3260

3361
buildTypes {
3462
release {
35-
// TODO: Add your own signing config for the release build.
36-
// Signing with the debug keys for now, so `flutter run --release` works.
63+
isMinifyEnabled = true
64+
isShrinkResources = true
65+
isDebuggable = false
66+
signingConfig = if (keystorePropertiesFile.exists()) {
67+
signingConfigs.getByName("release")
68+
} else {
69+
signingConfigs.getByName("debug")
70+
}
71+
proguardFiles(
72+
getDefaultProguardFile("proguard-android-optimize.txt"),
73+
"proguard-rules.pro"
74+
)
75+
ndk {
76+
debugSymbolLevel = "FULL" // For Crashlytics native crash symbolication
77+
}
78+
}
79+
debug {
80+
isMinifyEnabled = false
81+
isShrinkResources = false
82+
isDebuggable = true
3783
signingConfig = signingConfigs.getByName("debug")
3884
}
3985
}

android/app/proguard-rules.pro

Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
# ──────────────────────────────────────────────────────────────────────────────
2+
# VentExpensePro — ProGuard / R8 Rules
3+
# ──────────────────────────────────────────────────────────────────────────────
4+
5+
# ── Flutter Engine ────────────────────────────────────────────────────────────
6+
-keep class io.flutter.app.** { *; }
7+
-keep class io.flutter.plugin.** { *; }
8+
-keep class io.flutter.util.** { *; }
9+
-keep class io.flutter.view.** { *; }
10+
-keep class io.flutter.** { *; }
11+
-keep class io.flutter.plugins.** { *; }
12+
-dontwarn io.flutter.embedding.**
13+
14+
# ── Firebase Crashlytics ─────────────────────────────────────────────────────
15+
-keepattributes SourceFile,LineNumberTable # Readable stack traces
16+
-keep public class * extends java.lang.Exception # Keep custom exceptions
17+
-keep class com.google.firebase.crashlytics.** { *; }
18+
-dontwarn com.google.firebase.crashlytics.**
19+
20+
# ── Firebase Core ────────────────────────────────────────────────────────────
21+
-keep class com.google.firebase.** { *; }
22+
-dontwarn com.google.firebase.**
23+
24+
# ── Google Play Services / Auth ──────────────────────────────────────────────
25+
-keep class com.google.android.gms.** { *; }
26+
-dontwarn com.google.android.gms.**
27+
28+
# ── Google Drive API & HTTP Client ───────────────────────────────────────────
29+
-keep class com.google.api.client.** { *; }
30+
-keep class com.google.api.services.drive.** { *; }
31+
-keep class com.google.http.** { *; }
32+
-dontwarn com.google.api.client.**
33+
-dontwarn com.google.api.services.**
34+
-dontwarn com.google.http.**
35+
36+
# ── Gson (used by Google HTTP Client) ────────────────────────────────────────
37+
-keepattributes Signature
38+
-keepattributes *Annotation*
39+
-dontwarn sun.misc.**
40+
-keep class com.google.gson.** { *; }
41+
-keep class * implements com.google.gson.TypeAdapterFactory
42+
-keep class * implements com.google.gson.JsonSerializer
43+
-keep class * implements com.google.gson.JsonDeserializer
44+
-keepclassmembers,allowobfuscation class * {
45+
@com.google.gson.annotations.SerializedName <fields>;
46+
}
47+
48+
# ── SharedPreferences ────────────────────────────────────────────────────────
49+
-keep class io.flutter.plugins.sharedpreferences.** { *; }
50+
-keep class androidx.datastore.** { *; }
51+
-dontwarn androidx.datastore.**
52+
53+
# ── SQFlite (SQLite) ─────────────────────────────────────────────────────────
54+
-keep class com.tekartik.sqflite.** { *; }
55+
-dontwarn com.tekartik.sqflite.**
56+
57+
# ── Path Provider ────────────────────────────────────────────────────────────
58+
-keep class io.flutter.plugins.pathprovider.** { *; }
59+
60+
# ── Share Plus ───────────────────────────────────────────────────────────────
61+
-keep class dev.fluttercommunity.plus.share.** { *; }
62+
-dontwarn dev.fluttercommunity.plus.share.**
63+
64+
# ── PDF Generation ───────────────────────────────────────────────────────────
65+
-keep class com.ril.pdf_box.** { *; }
66+
-dontwarn com.ril.pdf_box.**
67+
68+
# ── Kotlin ───────────────────────────────────────────────────────────────────
69+
-keep class kotlin.Metadata { *; }
70+
-dontwarn kotlin.**
71+
-dontwarn kotlinx.**
72+
73+
# ── Kotlin Serialization ────────────────────────────────────────────────────
74+
-keepattributes *Annotation*, InnerClasses
75+
-dontnote kotlinx.serialization.AnnotationsKt
76+
-keepclassmembers class kotlinx.serialization.json.** {
77+
*** Companion;
78+
}
79+
-keepclasseswithmembers class kotlinx.serialization.json.** {
80+
kotlinx.serialization.KSerializer serializer(...);
81+
}
82+
83+
# ── General ──────────────────────────────────────────────────────────────────
84+
-keepattributes *Annotation*
85+
-keepattributes Exceptions
86+
-keepattributes InnerClasses
87+
-keepattributes Signature
88+
-keepattributes EnclosingMethod
89+
90+
# Suppress warnings for common third-party libraries
91+
-dontwarn javax.annotation.**
92+
-dontwarn org.codehaus.mojo.**
93+
-dontwarn org.conscrypt.**
94+
-dontwarn org.bouncycastle.**
95+
-dontwarn org.openjsse.**
96+
-dontwarn org.apache.http.**
97+
-dontwarn android.net.http.**

android/app/src/main/AndroidManifest.xml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
2+
<uses-permission android:name="android.permission.INTERNET"/>
23
<application
3-
android:label="vent_expense_pro"
4+
android:label="VentExpensePro"
45
android:name="${applicationName}"
56
android:icon="@mipmap/ic_launcher">
67
<activity

android/app/src/main/kotlin/com/example/vent_expense_pro/MainActivity.kt renamed to android/app/src/main/kotlin/com/digiventure/ventexpensepro/MainActivity.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.example.vent_expense_pro
1+
package com.digiventure.ventexpensepro
22

33
import io.flutter.embedding.android.FlutterActivity
44

3.42 KB
Loading
2.14 KB
Loading
4.57 KB
Loading

0 commit comments

Comments
 (0)