Repository navigation
Home
Welcome to the human-facing documentation for Varisankya, the Android app published from aarshps/varisankya-android.
The main repository is optimised for AI coding agents —
AGENTS.mdis the agent contract, the source code is the implementation. This wiki is where humans (you, contributors, future-you) go for narrative explanations, setup guides, release recipes, and history.
A modern Android app for tracking and managing recurring subscriptions, built around Material 3 Expressive design.
Today it lets you:
- Track unlimited subscriptions across multiple currencies, with monthly / weekly / yearly / custom recurrence.
- See a hero card on home with your remaining spend for the current month (and an overdue state if anything's past due).
- Mark payments paid either by swiping right on the home list or via the per-subscription Manage Payments sheet. The sheet keeps the action buttons pinned at the top while history scrolls beneath.
- View a full payment history with a horizontally-scrollable column chart, drill from month → day → subscription.
- Get daily reminders N days before a subscription is due, with a one-tap "Mark Paid" action in the notification itself.
- Lock the app behind biometric authentication (App Lock in Settings).
- Search across all subscriptions from a dedicated full-screen search.
- Customise theme (light / dark / system), font (Google Sans / system), haptics, notification timing.
It is published on Google Play production at version 3.8 (stable) at the time this page was last updated — promoted from the v3.8-beta.13 soak. The latest release notes are at https://github.com/aarshps/varisankya-android/releases.
| If you want to… | Start here |
|---|---|
| Clone the repo and run a build on Windows or Ubuntu | Getting Started |
| Cut a beta or production release through Gradle Play Publisher | Build & Release |
| Understand the MVVM layout, screens, and where features live | Architecture |
| See the dual-write subscription/payment Firestore schema and the lazy backfill | Data Model & Migrations |
| Configure Firebase Auth, Firestore rules, Google Analytics | Firebase Setup |
| Match the M3E design tokens, type scale, shapes, motion | Design System |
| Audit which user flows get traffic and which to retire | Analytics & Audit |
| Look up the AGP / Kotlin / Gradle / Firebase BoM pins | Configuration & Versions |
Read what shipped in each beta from v3.5 onwards |
Release Timeline |
| Fix a build error or a sign-in failure | Troubleshooting |
| See the open rough edges before you start hacking | Known Issues |
| Open an issue or PR | Contributing |
| Package | com.hora.varisankya |
| Display name | Varisankya |
| Min / Target / Compile SDK | 35 / 36 / 36 (Android 15+) |
| Kotlin | 2.3.0 (project), 2.0.21 in the embedded toolchain entry · AGP 9.0.1 · Gradle wrapper 8.13 · JVM target 11 |
| Architecture | MVVM (single MainViewModel), view-XML layouts, Material Components 1.14.0-alpha08 |
| Backend | Firebase Auth (Google Sign-In via Credential Manager), Firestore (subscriptions + dual-write payment storage), Firebase Analytics |
| Notifications | WorkManager chained one-shot worker (daily, self-rescheduling, timezone-resilient) → POST_NOTIFICATIONS, with in-line "Mark Paid" broadcast action |
| Active branch |
main only (legacy master was removed) |
| Release tooling |
Gradle Play Publisher (./gradlew publishBundle), secrets via retrieve_secrets.sh (Bitwarden CLI) |
varisankya-android/
├── app/
│ ├── build.gradle.kts # versionCode/Name, signingConfigs, GPP block
│ ├── google-services.json # gitignored — pulled from Bitwarden
│ ├── play_console_key.json # gitignored — pulled from Bitwarden
│ ├── proguard-rules.pro # keep rules for Firestore models
│ └── src/main/
│ ├── AndroidManifest.xml
│ ├── java/com/hora/varisankya/
│ │ ├── MainActivity.kt
│ │ ├── AddSubscriptionBottomSheet.kt
│ │ ├── PaymentBottomSheet.kt
│ │ ├── UnifiedHistoryActivity.kt # All Payments screen
│ │ ├── SettingsActivity.kt
│ │ ├── SearchActivity.kt
│ │ ├── BaseActivity.kt
│ │ ├── Subscription.kt / PaymentRecord.kt # Firestore models
│ │ ├── SubscriptionAdapter.kt / PaymentAdapter.kt
│ │ ├── SubscriptionNotificationWorker.kt # WorkManager worker
│ │ ├── PreferenceHelper.kt / CurrencyHelper.kt / Constants.kt
│ │ ├── receiver/NotificationActionReceiver.kt
│ │ ├── util/
│ │ │ ├── Analytics.kt # Firebase Analytics wrapper
│ │ │ ├── PaymentRepository.kt # dual-write helper
│ │ │ ├── StatsHelper.kt # outlier-robust mean (Tukey)
│ │ │ ├── SubscriptionActionHelper.kt # swipe actions
│ │ │ ├── BiometricAuthManager.kt
│ │ │ ├── ThemeHelper.kt / AnimationHelper.kt / DateHelper.kt
│ │ │ └── ChipHelper.kt / SwipeHelpers.kt / TimeProvider.kt
│ │ └── viewmodel/MainViewModel.kt
│ └── res/ # layouts, themes, drawables
├── firestore.rules + firebase.json + .firebaserc # rules deploy via firebase CLI
├── retrieve_secrets.sh + .env.local (gitignored) # Bitwarden secrets pump
├── gradle/libs.versions.toml # version catalog
├── AGENTS.md # agent-facing contract
├── CLI_RELEASE_GUIDE.md
├── PAYMENT_MIGRATION_PLAN.md
├── CLOUD_ARCHITECTURE_PLAN.md
└── PRIVACY.md / DATA_DELETION.md
See Architecture for a deeper walk-through.
Owned by aarshps. The repo's README.md declares the MIT Licence. A formal LICENSE file has not been committed yet — treat the MIT terms as the intent.
Source: aarshps/varisankya-android · This wiki is human-facing; the repo itself targets AI coding agents (AGENTS.md).