BillTracker/routes
null 1f57b22ff8 feat(settings): configurable reminder send-time (plan Tier 5)
The daily reminder job ran at a hardcoded 6 AM. Make the hour configurable:
- dailyWorker: resolveReminderHour() reads the global 'reminder_hour' setting
  (clamp 0–23, default 6) as the single source for both the cron expression and
  the next-run display; the task is stored so rescheduleDailyWorker() can restart
  it live (defensively wrapped so a bad value can't take the worker down).
- notifications admin GET/PUT expose reminder_hour; PUT clamps, persists, and
  live-reschedules the worker.
- Admin Email Notifications card: a "Reminder send time" select (account-wide).

It's a global setting by design — there's one shared daily job, so a per-user
hour would require an hourly-worker refactor (out of scope) and would otherwise
be a dead setting.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-05 16:10:25 -05:00
..
about.js v0.28.0 2026-05-15 22:45:38 -05:00
aboutAdmin.js fix(qa): version check is opt-out-able (QA-B16-01) 2026-07-03 10:05:37 -05:00
admin.js fix(admin): admin/profile routes and services 2026-06-07 21:18:02 -05:00
analytics.js v0.28.0 2026-05-16 15:38:28 -05:00
auth.js feat(settings): sign out of other devices (plan Tier 7) 2026-07-05 16:05:59 -05:00
authOidc.js fix: login mode card update, OIDC service improvements, auth middleware refinements 2026-06-04 03:53:38 -05:00
bills.js feat(server-ts): paymentValidation → .cts, proving the CJS-module path (Phase 2) 2026-07-05 13:51:37 -05:00
calendar.js feat(settings): configurable "Due soon" window (plan Tier 4) 2026-07-05 16:00:32 -05:00
calendarFeed.js feat: iCal feed for bills (Apple/Google calendar export) 2026-06-07 15:53:46 -05:00
categories.js feat(spending): category groups, YNAB-style spending page overhaul, 3-month averages, cover overspending (batch 0.41.0) 2026-06-14 19:21:34 -05:00
dataSources.js feat: bank sync section, data sources route, subscription page updates, package updates 2026-06-07 02:03:00 -05:00
export.js feat(server-ts): migrate the money boundary to TypeScript on Node's native runtime (Phase 2) 2026-07-05 13:44:04 -05:00
import.js feat(import): OFX/QFX transaction import (Batch 3) 2026-07-03 15:11:59 -05:00
matches.js feat(server-ts): paymentValidation → .cts, proving the CJS-module path (Phase 2) 2026-07-05 13:51:37 -05:00
monthly-starting-amounts.js feat(server-ts): migrate the money boundary to TypeScript on Node's native runtime (Phase 2) 2026-07-05 13:44:04 -05:00
notifications.js feat(settings): configurable reminder send-time (plan Tier 5) 2026-07-05 16:10:25 -05:00
payments.js feat(server-ts): paymentValidation → .cts, proving the CJS-module path (Phase 2) 2026-07-05 13:51:37 -05:00
privacy.js fix(qa): version check is opt-out-able (QA-B16-01) 2026-07-03 10:05:37 -05:00
profile.js fix(admin): admin/profile routes and services 2026-06-07 21:18:02 -05:00
settings.js v0.28.0 2026-05-15 22:45:38 -05:00
snowball.js feat(server-ts): migrate the money boundary to TypeScript on Node's native runtime (Phase 2) 2026-07-05 13:44:04 -05:00
spending.js feat: copy last month budgets, monthly income section on summary page 2026-06-04 21:57:42 -05:00
status.js feat(server-ts): utils/dates → TypeScript (.mts); utils/ dir now TS (Phase 2) 2026-07-05 13:48:44 -05:00
subscriptions.js feat(server-ts): migrate the money boundary to TypeScript on Node's native runtime (Phase 2) 2026-07-05 13:44:04 -05:00
summary.js feat(server-ts): migrate the money boundary to TypeScript on Node's native runtime (Phase 2) 2026-07-05 13:44:04 -05:00
tracker.js fix(tracker): route error handling + autopay write atomicity (T2) 2026-07-03 18:21:28 -05:00
transactions.js feat(server-ts): utils/dates → TypeScript (.mts); utils/ dir now TS (Phase 2) 2026-07-05 13:48:44 -05:00
user.js feat(data): "Erase my data" danger zone (Batch 5) 2026-07-03 15:21:07 -05:00
version.js security fixes 2026-05-28 03:59:35 -05:00