How jackworksp/kanakku works
Purpose and Runtime
Kanakku is a native Android personal-finance tracker. It records and analyzes transactions, budgets, categories, recurring payments, savings goals, exports, device widgets, SMS-derived transactions, notifications, and backups. The Gradle Android app module is app/build.gradle.kts; the application starts through app/src/main/java/com/example/kanakku/KanakkuApplication.kt and app/src/main/java/com/example/kanakku/MainActivity.kt.
Composition and UI Boundary
The presentation layer is Kotlin/Jetpack Compose-style UI organized around screens, navigation, and stateful ViewModels. MainActivity hosts navigation from app/src/main/java/com/example/kanakku/ui/navigation/KanakkuNavigation.kt; feature ViewModels mediate UI events and repository/domain results, e.g. app/src/main/java/com/example/kanakku/ui/MainViewModel.kt and app/src/main/java/com/example/kanakku/ui/budget/BudgetViewModel.kt. Screens should not directly own persistence or external integrations.
Dependency Assembly
Dependency injection centralizes construction of database, repositories, and application services in app/src/main/java/com/example/kanakku/di/AppModule.kt, app/src/main/java/com/example/kanakku/di/DatabaseModule.kt, and app/src/main/java/com/example/kanakku/di/RepositoryModule.kt. This is the principal boundary for replacing persistence/integration implementations and for lifecycle-scoped Android dependencies.
Transaction Data Core
Room-backed local storage is the system of record. app/src/main/java/com/example/kanakku/data/database/KanakkuDatabase.kt defines the database; DAOs such as app/src/main/java/com/example/kanakku/data/database/dao/TransactionDao.kt isolate SQL access; repositories such as app/src/main/java/com/example/kanakku/data/repository/TransactionRepository.kt map entities and coordinate transaction-facing operations. Stored domains include transactions, budgets, category overrides/mappings, recurring transactions, savings goals/contributions, sync metadata, and unreported SMS.
Finance Domain Processing
Pure/domain-oriented services calculate derived financial state above repository data: analytics in app/src/main/java/com/example/kanakku/domain/analytics/AnalyticsCalculator.kt, budget progress in app/src/main/java/com/example/kanakku/domain/budget/BudgetCalculator.kt, and recurring-payment detection in app/src/main/java/com/example/kanakku/domain/recurring/RecurringTransactionDetector.kt. Savings computations and category suggestions follow the same separation, allowing UI, widgets, alerts, and exports to consume shared business outcomes.
SMS Ingestion and Alerts
An Android SMS receiver initiates the ingestion pipeline: app/src/main/java/com/example/kanakku/receiver/SmsBroadcastReceiver.kt delegates background handling to app/src/main/java/com/example/kanakku/service/SmsProcessingService.kt, which reads/parses bank messages through app/src/main/java/com/example/kanakku/data/sms/BankSmsParser.kt. Parsed transactions enter the repository/database flow; failures or unresolved messages can remain reportable. Transaction and spending conditions feed Android notification managers under app/src/main/java/com/example/kanakku/notification/.
Backup, Export, and Device Integrations
Backup serialization/encryption is separated from storage targets: app/src/main/java/com/example/kanakku/data/backup/BackupSerializer.kt, app/src/main/java/com/example/kanakku/data/backup/EncryptionService.kt, and app/src/main/java/com/example/kanakku/data/backup/DriveBackupRepository.kt. Google authentication/Drive are external services via GoogleAuthHelper and GoogleDriveService; local backup is an alternate target. CSV/PDF output flows through app/src/main/java/com/example/kanakku/data/repository/ExportRepository.kt. Home-screen widgets query a dedicated data facade and update through scheduled work in app/src/main/java/com/example/kanakku/widget/data/WidgetDataRepository.kt and app/src/main/java/com/example/kanakku/widget/worker/WidgetUpdateWorker.kt.
Main entry points: TransactionRepository.kt Transaction Repository · KanakkuDatabase.kt Kanakku Database · MainViewModel.kt Feature ViewModels · AppModule.kt Dependency Assembly
Components 20
App & UI
- Kanakku Application · Initializes application-scoped dependencies.
app/src/main/java/com/example/kanakku/KanakkuApplication.kt - Main Activity
app/src/main/java/com/example/kanakku/MainActivity.kt - Navigation
app/src/main/java/com/example/kanakku/ui/navigation/KanakkuNavigation.kt - Feature ViewModels · Mediates UI events and repository/domain results.
app/src/main/java/com/example/kanakku/ui/MainViewModel.kt - Dependency Assembly · Constructs database, repositories, and services.
app/src/main/java/com/example/kanakku/di/AppModule.kt
Finance Core
- Transaction Repository · Maps entities and coordinates transaction operations.
app/src/main/java/com/example/kanakku/data/repository/TransactionRepository.kt - Room DAOs
app/src/main/java/com/example/kanakku/data/database/dao/TransactionDao.kt - Kanakku Database · System of record for finance and ingestion state.
app/src/main/java/com/example/kanakku/data/database/KanakkuDatabase.kt - Finance Calculators · Shared analytics, budget progress, and recurring-payment logic.
app/src/main/java/com/example/kanakku/domain/analytics/AnalyticsCalculator.kt
SMS & Alerts
- SMS Receiver
app/src/main/java/com/example/kanakku/receiver/SmsBroadcastReceiver.kt - SMS Processing
app/src/main/java/com/example/kanakku/service/SmsProcessingService.kt - Bank SMS Parser
app/src/main/java/com/example/kanakku/data/sms/BankSmsParser.kt - Notifications
Backup & Device
- Backup Serialization
app/src/main/java/com/example/kanakku/data/backup/BackupSerializer.kt - Encryption Service
app/src/main/java/com/example/kanakku/data/backup/EncryptionService.kt - Drive Backup Repository
app/src/main/java/com/example/kanakku/data/backup/DriveBackupRepository.kt - Google Auth & Drive
- Export Repository
app/src/main/java/com/example/kanakku/data/repository/ExportRepository.kt - Widget Data Facade
app/src/main/java/com/example/kanakku/widget/data/WidgetDataRepository.kt - Widget Update Worker
app/src/main/java/com/example/kanakku/widget/worker/WidgetUpdateWorker.kt
Connections 21
- Kanakku Application → Dependency Assembly: initializes
- Main Activity → Navigation: hosts
- Navigation → Feature ViewModels: screens use
- Dependency Assembly → Transaction Repository: provides
- Dependency Assembly → Kanakku Database: provides
- Feature ViewModels → Transaction Repository: reads and writes
- Feature ViewModels → Finance Calculators: uses derived state
- Transaction Repository → Room DAOs: uses
- Room DAOs → Kanakku Database: queries
- Finance Calculators → Transaction Repository: consumes finance data
- SMS Receiver → SMS Processing: delegates SMS
- SMS Processing → Bank SMS Parser: parses messages
- Bank SMS Parser → Transaction Repository: creates parsed transactions
- Finance Calculators → Notifications: triggers spending alerts
- Backup Serialization → Kanakku Database: serializes stored data
- Encryption Service → Backup Serialization: encrypts backup payload
- Drive Backup Repository → Encryption Service: uses
- Drive Backup Repository → Google Auth & Drive: uploads via
- Export Repository → Kanakku Database: exports finance data
- Widget Update Worker → Widget Data Facade: refreshes
- Widget Data Facade → Transaction Repository: queries summarized data