feat: add opt-in daily Discord reminders with quiet hours
This commit is contained in:
29
README.md
29
README.md
@@ -3,6 +3,8 @@
|
||||
Bun + Hono habit-tracking REST API with Drizzle ORM and local SQLite. The React Router
|
||||
client includes a homepage for signed-out visitors and a personal habit dashboard.
|
||||
|
||||
See [deployment operations](docs/OPERATIONS.md) for backup, recovery, and monitoring.
|
||||
|
||||
See [the REST API reference](docs/API.md) for habits, task recurrence, dated progress,
|
||||
combined calendars, historical corrections, daily resets, and optional count carryover.
|
||||
|
||||
@@ -345,3 +347,30 @@ existing delivery does not consume quota. Rejected attempts consume quota too;
|
||||
(comma-separated Discord IDs) restricts posting to community members you approve.
|
||||
An empty list permits all signed-in accounts. Restricted users can still preview
|
||||
and download PNGs. Quota rows expire and are pruned after 24 hours.
|
||||
|
||||
### Daily reminders
|
||||
|
||||
Open **Settings → Daily reminders** to opt into one private Discord DM when habits
|
||||
remain unfinished. Choose a local time and quiet hours; times follow the account
|
||||
timezone. Quiet-hour start is inclusive, end is exclusive, and equal times disable
|
||||
quiet hours. If the scheduled time falls in quiet hours, delivery waits until they
|
||||
end that same local day. A reminder missed for the whole day is not carried forward.
|
||||
|
||||
The production server checks once a minute. `DISCORD_BOT_TOKEN` enables delivery;
|
||||
a sharing channel is not required for reminders. Users must be reachable by the
|
||||
bot (normally a shared Discord server and enabled DMs). A message contains only
|
||||
the unfinished-habit count and app link. Settings show the most recent delivery
|
||||
result, including blocked DMs or unconfirmed delivery. Uncheck the option and save
|
||||
to opt out. No reminders are enabled by default.
|
||||
|
||||
`GET /api/reminders` returns settings and last delivery status. `PUT /api/reminders`
|
||||
requires authentication, matching Origin, and `{enabled, time, quietStart, quietEnd}`
|
||||
with `HH:MM` times. Per-user/date reservations persist across restarts and concurrent
|
||||
workers. Discord 429 retry deadlines are persisted; ambiguous message sends are
|
||||
not retried that day. Delivery records expire after 90 days. Restore disables
|
||||
reminders in the recovered database until users opt in again.
|
||||
|
||||
The disposable `SHARE_PREVIEW=1 bun scripts/dashboard-preview.ts` mode also runs a
|
||||
reminder worker against a local transport stub. Set a reminder to `14:00` (its fixed
|
||||
Europe/Belgrade time), leave a habit unfinished, and inspect delivery status in
|
||||
settings or `/__preview/reminder`. No real Discord messages are sent in this mode.
|
||||
|
||||
Reference in New Issue
Block a user