Add transactional emails (SMTP) and planner features (no-go areas, notes, crash recovery)

Transactional emails:
- Add nodemailer SMTP email module with dev-mode console logging
- Magic link template and welcome template with HTML + plain text
- Wire sendMagicLink into login flow, sendWelcome into registration
- Update privacy page and deploy docs for SMTP configuration

Planner features:
- No-go areas: draw polygons on map (leaflet-geoman), synced via Yjs,
  passed to BRouter as nogos parameter, route recomputes on change
- Session notes: collaborative Y.Text textarea in sidebar tab
- Crash recovery: periodic localStorage save of Yjs state, restore on reconnect
- Rate limit session creation (10/IP/hour) in /new route

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Ullrich Schäfer 2026-03-26 01:00:42 +01:00
parent 05b5f6febf
commit 0a8dd0b766
No known key found for this signature in database
GPG key ID: A32FF691A0F752D9
27 changed files with 1030 additions and 69 deletions

View file

@ -42,6 +42,19 @@ export default {
joined: "{{name}} ist beigetreten",
left: "{{name}} hat die Sitzung verlassen",
},
sidebar: {
waypoints: "Wegpunkte",
notes: "Notizen",
},
noGoAreas: {
draw: "Sperrgebiet zeichnen",
cancel: "Sperrgebiet abbrechen",
hint: "Rechtsklick auf ein Sperrgebiet zum Löschen",
},
notes: {
placeholder: "Notizen für diese Sitzung hinzufügen...",
},
rateLimitExceeded: "Zu viele Anfragen. Bitte versuche es später erneut.",
elevation: {
gain: "Höhenmeter aufwärts",
loss: "Höhenmeter abwärts",

View file

@ -42,6 +42,19 @@ export default {
joined: "{{name}} joined",
left: "{{name}} left",
},
sidebar: {
waypoints: "Waypoints",
notes: "Notes",
},
noGoAreas: {
draw: "Draw no-go area",
cancel: "Cancel no-go area",
hint: "Right-click a no-go area to delete it",
},
notes: {
placeholder: "Add notes for this session...",
},
rateLimitExceeded: "Too many requests. Please try again later.",
elevation: {
gain: "Elevation Gain",
loss: "Elevation Loss",