A Flutter-based digital bookkeeping app for small businesses. The app uses double‑entry accounting and a seeded Chart of Accounts to power:
- Dashboard (liquidity, performance snapshots)
- Journal (transaction history)
- Ledger (account balances by category)
- Reports (Income Statement, Balance Sheet, Cash Flow + PDF export)
- Accounts (Chart of Accounts management)
- Quick Actions (guided “quick entry” forms that post balanced Dr/Cr journal entries)
- Flutter (Material 3)
- Dart SDK: see
pubspec.yaml(environment.sdk) - Local DB: Drift (SQLite) via
drift+drift_flutter - Persistence:
shared_preferences(onboarding + theme) - PDF export:
pdf+printing - UI utilities:
intl,grouped_list,sticky_headers,tutorial_coach_mark
- App entry:
lib/main.dart- Handles onboarding first-run flow (
SharedPreferences) - Initializes
ThemeService - Declares named routes (profile, settings, reports, user guide, about us)
- Handles onboarding first-run flow (
- Main tabs:
lib/main_navigation.dartIndexedStacktabs:- Dashboard (
lib/features/dashboard/) - Journal (
lib/features/journal/) - Ledger (
lib/features/ledger/) - Reports (
lib/features/reports/) - Accounts (
lib/features/accounts/)
- Dashboard (
- App bar menu:
lib/core/widgets/appbar.dart- Profile, Settings, User Guide, About Us
Main feature folders live under lib/features/ (examples):
dashboard/– dashboard KPIs + quick action entry pointjournal/– journal list + creationledger/– ledger balances and transactionsreports/– income statement / balance sheet / cash flowaccounts/– chart of accounts UIquick_action/– quick entry menu + view screens + accounting wiringuserguide/– FAQs, article-style guide, About Ussettings/,profile/,onboarding/,splash_screen/
- Database definition:
lib/core/database/app_database.dart - Migration + seeding:
lib/core/database/db_migration.dart - Tables:
lib/core/database/tables/accounts_table.dartaccount_categories_table.dartjournal_table.darttransactions_table.dartuser_table.dart
- DAOs:
lib/core/database/daos/UsersDao,AccountsDao,LedgerDao,JournalEntryDao,ReportsDao
AppDatabase.schemaVersionis currently 7 inlib/core/database/app_database.dart.
db_migration.dart onCreate:
- creates all tables
- seeds Account Categories
- seeds the Chart of Accounts (with account codes + normal balance)
- seeds a default user profile
db_migration.dart currently has an empty onUpgrade. That means:
- if you change account codes / add accounts, existing installed apps may not get them
- posting by account code can fail if the code doesn’t exist in the local DB yet
The repo includes a reminder:
lib/core/database/zzzNOTEzzz
If MODIFICATION on DATABASE FOLDER
- increase the schema version
- dart run build_runner build -d
- uninstall the app (via phone or emulator)
All transactions are stored as:
- a Journal row (date, description, optional reference)
- multiple Transaction rows (each line has
debitandcredit)
Quick Actions post balanced entries via:
lib/features/quick_action/quick_action_journal_service.dart
Key types:
TemplateLine(accountCode, isDebit, amount)– lightweight Dr/Cr templateQuickActionAccounts– constants for account codes
Critical:
QuickActionAccountsmust match the codes seeded indb_migration.dart.
Dashboard → Quick Actions → lib/features/quick_action/quick_actions_screen.dart
Quick action screens live in lib/features/quick_action/views/:
- Receive Money
collect_money_view.dartinvest_to_business_view.dartborrow_money_view.dartsell_products_view.dart
- Purchase
record_purchase_view.dart(Supplies/Equipment/Furniture/Land/Building/Vehicle)
- Banking
banking_view.dart(Deposit / Withdraw)
- Inventory & Production
inventory_view.dart(Acquire Raw Materials / Produce Finished Goods)
- Other Actions
pay_your_debt_view.dartdisburse_funds_view.dartlend_money_view.dartsettle_operations_view.dartpay_workers_view.dart(Pay Employees)consume_supplies_view.dartfund_marketing_view.dartrefund_to_customers_view.dartrecord_other_expense_view.dart(Bank Fees / Tax / Interest / Miscellaneous)
Shared UI building blocks:
lib/features/quick_action/widgets/quick_action_shared_ui.dart
Common UX patterns include:
- Amount card + validation
- Cash/Bank chips (+ optional balances)
- “Current / After” balance display for cash/bank where relevant
- Disable Save when insufficient balance for outflows
- Income Statement:
lib/features/incomestatement/incomestatement_screen.dart - Balance Sheet:
lib/features/balancesheet/balance_sheet_screen.dart - Cash Flow:
lib/features/cashflow/cash_flow_screen.dart
lib/core/utils/pdf_export_service.dartexportIncomeStatement(...)exportBalanceSheet(...)exportCashFlowStatement(...)
- Themes:
lib/core/theme/app_theme.dart - Theme persistence:
lib/core/services/theme_service.dart- stored under key
theme_modeinSharedPreferences
- stored under key
- User Guide landing:
lib/features/userguide/user_guide_screen.dart- FAQs:
lib/features/userguide/faq_screen.dart - Article-style guide:
lib/features/userguide/article_user_guide_screen.dart
- FAQs:
- About Us:
lib/features/userguide/about_us_screen.dart - Both are accessible from the app bar menu (
CustomAppBar)
Declared in pubspec.yaml:
assets/images/logo.png
Launcher icon config:
flutter_launcher_iconsinpubspec.yaml
- Flutter SDK installed
- Dart SDK matching
pubspec.yamlconstraints
flutter pub getRun when you change database tables/DAOs:
dart run build_runner build -dflutter runFrom lib/core/database/zzzNOTEzzz:
- Update Android label:
android/app/src/main/AndroidManifest.xml(android:label) - Generate launcher icons:
dart run flutter_launcher_icons- Run release build:
flutter run --release- APK output path:
build/app/outputs/flutter-apk/
Most common cause: account code mismatch between:
QuickActionAccounts(quick_action_journal_service.dart)- the seeded chart of accounts (
db_migration.dart) - and the local installed app DB (especially when
onUpgradeis empty)
Fix for development:
- bump
schemaVersion - run
build_runner - uninstall / clear app data so
onCreateseeds the updated accounts
Walkthrough persistence helpers exist in lib/core/services/walkthrough_service.dart, but completion tracking may be disabled/commented.
This project is licensed under the Apache-2.0 License