Skip to content

UI revamp Phase 5c: Bills & subscriptions (recurring API, saved choices, calendar) - #99

Merged
coderconnoisseur merged 7 commits into
ui-revamp/phase5b-spendingfrom
ui-revamp/phase5c-bills
Oct 22, 2026
Merged

coderconnoisseur merged 7 commits into
ui-revamp/phase5b-spendingfrom
ui-revamp/phase5c-bills

Conversation

@coderconnoisseur

Copy link
Copy Markdown
Owner

Phase 5c, the redesigned Bills & subscriptions page. Stacked on #98. Merge order: #95 → #96 → #97 → #98 → this. I'll retarget each to refactor as the one before it lands.

Spec §4.3: docs/superpowers/specs/2026-10-22-ui-revamp-phase5-design.md. Mockup: docs/superpowers/specs/2026-10-22-phase5/bills.html. The plan's Phase 5c section is now detailed.

What changes

  • Backend, /api/bills (new):
    • GET /recurring: Lumen's existing recurring-charge detection (ai/recurring.find_recurring) plus the user's saved choices.
    • POST /recurring/state {vendor, state}: saves the user's choice for a vendor.
    • Saved choices: they live in a new recurring_states table (created at startup, like budgets). It's keyed by the detection's normalised vendor, so "NETFLIX.com" and "Netflix com" share one choice.
    • "Not a bill" moves the vendor into hidden.
    • "Cancelled" keeps the vendor listed. A charge after the cancel day shows as charged again.
    • "Active" forgets the choice.
  • Home: "Coming up", the bill markers and the calendar's bill names now come from this API. They no longer depend on the old analysis having run.
  • Bills page:
    • Three tiles: due in the next 30 days, recurring every month (weekly and yearly charges spread per month), and subscriptions that look stopped.
    • A month calendar with each bill on its projected days. A ‹ month › switcher changes the month, and the calendar is always six rows, so it never jumps.
    • Upcoming, grouped This week / Next week / Later.
    • Regular payments table:
      • Tabs: All / Subscriptions / Bills.
      • Pills: price rise (₹499 → ₹649), looks stopped, charged again after you cancelled.
      • Actions: Mark as cancelled, Not a bill, and How to cancel. How to cancel opens Ask with "How do I cancel X?" typed in but not sent.
      • Cancelled vendors sit in their own group with Undo. "Hidden (N)" lists the not-a-bill ones, also with Undo.
  • Clean-up: the interim Bills list and the last caller of the old reminders endpoint are removed.

Tests

  • Backend: 986 passed, 5 of them new. They cover per-user choices, cancel → charged again, hide and restore, vendor spelling, and input validation. Evals pass.
  • Frontend e2e: 167 passed. 10 Bills checks and 4 maths tests are new, plus Home reading only active, not-stopped bills.
  • Lint and the production build are clean.
  • A screenshot compared against the mockup caught the tabs wrapping on phones, and a test now pins it.

Manual check

  1. Open /bills on your seeded account (the demo data has rent, water, gym and mobile). Do the tiles and calendar look right? Switch months.
  2. Mark as cancelled on one: it moves to Cancelled, Undo brings it back, and both survive a reload.
  3. Not a bill on one: it disappears, and "Hidden (1)" → Undo restores it.
  4. How to cancel: Ask opens with the question typed in and not sent.
  5. Home: "Coming up" lists the same bills.

@vercel

vercel Bot commented Oct 22, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
lumen Ready Ready Preview Oct 22, 2026 11:19am UTC

@coderconnoisseur
coderconnoisseur merged commit e039ca0 into ui-revamp/phase5b-spending Oct 22, 2026
4 checks passed

This branch was successfully deployed

1 active deployment
Preview — ea286f23 Deployed Oct 22, 2026 by vercel[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant