Billing hardening and Android polish
Thursday, October 8, 2026
Server safeguards
- Closed out a concentrated batch of billing and plan-limit fixes: Stripe webhook ordering, duplicate subscriptions, unpaid/expired plans falling back to Free, downgrade reconciliation, and account-deletion billing/refunds.
- Also tightened backend enforcement so quotas and history limits aren't merely client-side rules. Important boring work: fewer ways to accidentally give away paid access.
- Updated the generation side too: failed runs now retry daily, and Claude Haiku 4.5 moved to Haiku 5.5.
Android catch-up
- Landed a wide set of product-parity and UX polish in the Android app: trial messaging, swipe feedback in calendar navigation, tips carousels, richer summary cards, source labels, and a proper wide-screen empty detail state.
- The Sources and You tabs got notably more complete—coming-soon services, inline mobile collection status, About/help, and open-source licenses.
- Time Jump now uses the full entry cards returned by the API, making “Keep reading” feel like the rest of the diary rather than a plain list of dates.
Health Connect cleanup
- Shipped a fix for withdrawn Health Connect records. The concrete bug was a walk being sent twice through two
exerciseevents sharing the same millisecond start time but disagreeing on the rest. - Good end-of-day correction: sync should remove records that no longer exist, not keep stale duplicates around.