Sprint 13: WebCal-Abo / Kalender-Integration

- GET /api/webcal/token: erzeugt personl. Kalender-Token (einmalig)
- GET /api/webcal/{token}.ics: iCal-Feed mit Health-Erinnerungen,
  eigenen Events, Gassi-Treffen (erstellt + beigetreten), angenommenen Sittings
- RRULE für wiederkehrende Health-Einträge (intervall_tage)
- Migration: users.calendar_token (TEXT UNIQUE)
- Settings: "Kalender abonnieren" öffnet webcal://-Link + Kopier-Button
- api.js: API.webcal.getToken() / resetToken()
- SW-Cache: by-v104, APP_VER: 80
This commit is contained in:
rene 2026-04-16 22:39:50 +02:00
parent b58789373c
commit a4f74b6c64
8 changed files with 362 additions and 8 deletions

View file

@ -22,8 +22,8 @@
<!-- CSS: Reihenfolge ist wichtig — ?v= zwingt Browser zur Neuladung -->
<link rel="stylesheet" href="/css/design-system.css">
<link rel="stylesheet" href="/css/layout.css?v=79">
<link rel="stylesheet" href="/css/components.css?v=79">
<link rel="stylesheet" href="/css/layout.css?v=80">
<link rel="stylesheet" href="/css/components.css?v=80">
</head>
<body>
@ -269,9 +269,9 @@
<div id="modal-container"></div>
<!-- JS: Reihenfolge ist wichtig — erst Basis, dann Features -->
<script src="/js/api.js?v=79"></script>
<script src="/js/ui.js?v=79"></script>
<script src="/js/app.js?v=79"></script>
<script src="/js/api.js?v=80"></script>
<script src="/js/ui.js?v=80"></script>
<script src="/js/app.js?v=80"></script>
<!-- Feature-Seiten werden lazy geladen -->