Detects when a bill's recent payments have diverged from its configured expected amount for 2+ consecutive months and surfaces it in a new collapsible amber panel on the Tracker page. - Migration v0.71: adds `drift_snoozed_until` to bills and `notify_amount_change` to users - New `driftService.getDriftReport()`: computes per-bill payment median over last 3 months, flags drift above a user-configurable threshold (default 5%, minimum $1 delta) - New `GET /api/bills/drift-report` and `POST /api/bills/:id/snooze-drift` routes (registered before `/:id` to avoid routing conflict) - `runDriftNotifications()` added to daily worker — sends amber digest email per user listing all changed bills with old → new amounts - `notify_amount_change` wired through profile and notifications routes - `DriftInsightPanel`: collapsible amber panel with per-bill strikethrough old → new amount, ±% badge, TrendingUp/TrendingDown icons, "Update to $X.XX" (with undo toast) and "Dismiss" (30 days) actions; teal palette for price decreases - `drift_threshold_pct` setting added to SettingsPage Billing Behavior - "Notify on price changes" toggle added to ProfilePage notifications Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| AboutPage.jsx | ||
| AdminPage.jsx | ||
| AnalyticsPage.jsx | ||
| BillsPage.jsx | ||
| CalendarPage.jsx | ||
| CategoriesPage.jsx | ||
| DataPage.jsx | ||
| DataPage.jsx.backup | ||
| HealthPage.jsx | ||
| LoginPage.jsx | ||
| PrivacyPage.jsx | ||
| ProfilePage.jsx | ||
| ReleaseNotesPage.jsx | ||
| RoadmapPage.jsx | ||
| SettingsPage.jsx | ||
| SnowballPage.jsx | ||
| StatusPage.jsx | ||
| SubscriptionsPage.jsx | ||
| SummaryPage.jsx | ||
| TrackerPage-bk.jsx | ||
| TrackerPage.jsx | ||