PayDirt is an Android app built around one useful question:
If I have a little extra money, which credit card payment does the most good right now?
If someone has an extra $5, $10, or $25, PayDirt should point to the right move, explain why it matters, and make the payoff feel concrete.
Debt is math, not shame.
That is the product philosophy in one line.
PayDirt is meant to feel:
- calm
- direct
- unembarrassing
- specific
- lightly elegant
It is not trying to become a giant finance dashboard, a guilt machine, or a motivational app pretending to be a calculator.
A lot of debt tools either overwhelm people with charts or flatten everything into generic encouragement.
PayDirt is trying to do something simpler and sharper:
- show the best next move
- show what that move changes
- make progress visible in real terms
- give the user another clear next step
The core value is straightforward:
PayDirt should make the next best debt-payoff move clear, grounded, and easy to act on.
This repo already contains a working Android app with a meaningful manual payoff-planning foundation.
What works today:
- manual card add and edit flow
- card detail view
- payment logging
- local persistence with Room
- payoff recommendations
- strategy comparison across avalanche, snowball, and hybrid approaches
- payoff engine unit tests
- Compose-based app shell and navigation
This is already beyond prototype territory. The app does real work today.
What exists in code but is not fully assembled into the main experience yet:
- reward screen flow
- behavior engine surfaces
- APR confidence UI
- onboarding / first recommendation reveal
- Plaid-linked account flow
- background refresh scheduling from app lifecycle
- re-auth recovery UX
So the current job is not to invent the app from scratch. It is to assemble the strongest existing parts into a product that feels complete.
PayDirt should help without performing help.
That means:
- no shame
- no fake cheerleading
- no streak pressure
- no vague "take control of your future" copy
- no dashboard sprawl that hides the next useful action
Good language for this product sounds like:
- "Debt is math, not shame."
- "Small hits, right target."
- "Connect once. Let it run."
The current in-app experience centers on:
- Home — debt overview and a quick recommendation
- Card Detail — card progress and payment history
- Add / Edit Card — manual entry for payoff-critical inputs
- Optimizer — strategy comparison and target selection
- Reward Screen — already built in code and intended to become part of the main payment loop
The project is currently sequenced into five milestones.
Turn the existing app into a coherent, satisfying manual payoff experience.
Focus:
- wire reward flow after payment logging
- improve home progress and next-move surfaces
- add manual-user onboarding / first recommendation reveal
- add goal framing and behavior surfaces
- surface trust cues like APR confidence where they matter
Make Plaid-backed account linking, refresh, and re-auth work end-to-end.
Focus:
- Plaid Link UI and token exchange
- linked account management
- refresh scheduling
- re-auth detection and recovery
- recommendation updates from live data
Build the simple public-facing launch site for PayDirt.
Focus:
- straightforward marketing page
- trust and explanatory content
- clear app / store CTA paths
- optional launch-interest signup
This is intentionally a small website, not a second product.
Prepare the app for testing tracks and eventual Play submission.
Focus:
- release config and signing
- store listing assets and copy
- privacy / policy / compliance readiness
- QA on launch-critical flows
- submission support
Make PayDirt smarter and more useful over time once the base product is stable.
Focus:
- smarter recommendation inputs
- grounded momentum / progress surfaces
- payoff forecasting
- restrained, opt-in return loops
The order is intentional:
- make the app feel real
- make linked data real
- build the simple launch website
- prepare the store release path
- add deeper intelligence and retention
That keeps the work anchored to actual product value instead of chasing launch packaging before the app experience is strong enough.
- Kotlin
- Jetpack Compose
- Material 3
- Navigation Compose
- Hilt
- Room
- WorkManager
- Retrofit
- OkHttp
- Gson
- Vico
app/src/main/java/com/lweiss01/paydirt/data
Data layer: Room entities, DAOs, repositories, and remote API contractsapp/src/main/java/com/lweiss01/paydirt/domain
Business logic: payoff engine, behavior engine, APR logic, models, and use casesapp/src/main/java/com/lweiss01/paydirt/ui
Compose UI: screens, navigation, components, and themeapp/src/main/java/com/lweiss01/paydirt/work
Background refresh workapp/src/test
Unit tests.gsd
Planning and execution artifacts for milestone, requirement, and roadmap management
Requirements:
- Android Studio
- JDK 17
- local Android SDK
Build from the command line:
.\gradlew.bat :app:assembleDebugRun unit tests:
.\gradlew.bat testDebugUnitTestThe Android app already includes Plaid-oriented repository and API scaffolding, but it still expects a backend to handle secure financial integration concerns.
That backend is intended to:
- create link tokens
- exchange public tokens
- refresh liabilities / linked account data
- unlink items securely
The current debug base URL is configured in Modules.kt.
If you want the current execution plan rather than the product overview, start here:
.gsd/PROJECT.md.gsd/REQUIREMENTS.md.gsd/DECISIONS.md.gsd/milestones/M001/M001-CONTEXT.md.gsd/milestones/M001/M001-ROADMAP.md
Older planning context also exists here:
- Room schema export is enabled and written to
app/schemas - The repo currently contains both the usable manual-entry path and the in-progress live-data path
- The codebase is further along than a prototype, but not yet at full product completion
- Current planning assumes the website remains simple and marketing-focused, not feature-heavy
This project is licensed under the MIT License. See LICENSE.