Skip to content
This repository was archived by the owner on Jun 3, 2026. It is now read-only.
Aarsh edited this page May 28, 2026 · 6 revisions

Varisankya — Smart Subscription Manager

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.md is 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.


What is Varisankya?

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.


Quick links

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

At a glance

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)

Where things live

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.


Licence & ownership

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.

Clone this wiki locally