Skip to content

Commit dc2a2a6

Browse files
authored
Merge pull request #15 from HellBus1/staging
v1.0.0
2 parents 2eb0ee0 + 9ae255b commit dc2a2a6

147 files changed

Lines changed: 11842 additions & 240 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.

.github/workflows/ci.yml

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
name: VentExpensePro CI
2+
3+
on:
4+
pull_request:
5+
branches:
6+
- master
7+
- staging
8+
9+
jobs:
10+
build:
11+
runs-on: ubuntu-latest
12+
13+
steps:
14+
- name: Checkout code
15+
uses: actions/checkout@v4
16+
17+
- name: Setup Flutter
18+
uses: subosito/flutter-action@v2
19+
with:
20+
channel: 'stable'
21+
22+
- name: Install dependencies
23+
run: flutter pub get
24+
25+
- name: Analyze project source
26+
run: flutter analyze
27+
28+
- name: Run tests
29+
run: flutter test

.gitignore

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,4 +44,9 @@ app.*.map.json
4444
/android/app/release
4545

4646
*.env
47-
*.freezed.dart
47+
*.freezed.dart
48+
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.

analysis_options.yaml

Lines changed: 21 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,26 @@
1-
# This file configures the analyzer, which statically analyzes Dart code to
2-
# check for errors, warnings, and lints.
3-
#
4-
# The issues identified by the analyzer are surfaced in the UI of Dart-enabled
5-
# IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be
6-
# invoked from the command line by running `flutter analyze`.
7-
8-
# The following line activates a set of recommended lints for Flutter apps,
9-
# packages, and plugins designed to encourage good coding practices.
101
include: package:flutter_lints/flutter.yaml
112

123
linter:
13-
# The lint rules applied to this project can be customized in the
14-
# section below to disable rules from the `package:flutter_lints/flutter.yaml`
15-
# included above or to enable additional rules. A list of all available lints
16-
# and their documentation is published at https://dart.dev/lints.
17-
#
18-
# Instead of disabling a lint rule for the entire project in the
19-
# section below, it can also be suppressed for a single line of code
20-
# or a specific dart file by using the `// ignore: name_of_lint` and
21-
# `// ignore_for_file: name_of_lint` syntax on the line or in the file
22-
# producing the lint.
234
rules:
24-
# avoid_print: false # Uncomment to disable the `avoid_print` rule
25-
# prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule
5+
prefer_single_quotes: true
6+
always_declare_return_types: true
7+
annotate_overrides: true
8+
avoid_empty_else: true
9+
avoid_print: true
10+
avoid_relative_lib_imports: true
11+
avoid_unnecessary_containers: true
12+
prefer_const_constructors: true
13+
prefer_const_declarations: true
14+
prefer_final_fields: true
15+
prefer_final_locals: true
16+
sort_child_properties_last: true
17+
unnecessary_brace_in_string_interps: true
18+
use_key_in_widget_constructors: true
2619

27-
# Additional information about this file can be found at
28-
# https://dart.dev/guides/language/analysis-options
20+
analyzer:
21+
errors:
22+
missing_return: error
23+
dead_code: warning
24+
exclude:
25+
- "**/*.g.dart"
26+
- "**/*.freezed.dart"

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
}

0 commit comments

Comments
 (0)