No description
- JavaScript 86.7%
- CSS 12%
- HTML 1%
- Dockerfile 0.3%
maily-convergence step 6, mirroring backend/src/push/webpush.ts. The
in-page setTimeout reminders die when the phone suspends the PWA; the
server now owns delivery so reminders arrive with the app closed.
- web-push dependency; VAPID keys generated on first use and persisted
to /config/push.json; per-device subscriptions in
/config/push-subscriptions.json
- minute-tick scheduler pushes event alarms (incl. expanded recurring
occurrences) and task reminders (server port of taskAlarmDatetime,
timezone-aware, covered by tests) with a persisted sent-key dedupe so
restarts can't double-send; 404/410 responses drop the subscription
- /api/push/key, /api/push/subscribe, /api/push/unsubscribe
- service worker push handler (payload { title, body, tag })
- Settings gains a per-device 'Push reminders' toggle; devices with an
active subscription skip the in-page timers to avoid double-notifying
|
||
|---|---|---|
| .forgejo/workflows | ||
| .github/workflows | ||
| client | ||
| public | ||
| server | ||
| test | ||
| .dockerignore | ||
| .env.example | ||
| .gitignore | ||
| .prettierignore | ||
| .prettierrc.json | ||
| CLAUDE.md | ||
| docker-compose.yml | ||
| docker-entrypoint.sh | ||
| Dockerfile | ||
| eslint.config.mjs | ||
| NLP.md | ||
| package-lock.json | ||
| package.json | ||
| tsconfig.base.json | ||
| tsconfig.client.json | ||
| tsconfig.server.json | ||