尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证正在加载完整 README。 以下为已保存的摘录。
Eine moderne, installierbare Progressive Web App (PWA), die einen interaktiven Monatskalender mit täglichen Türchen und inspirierenden Lebensweisheiten bietet. 📚 Dokumentation: vollständige Wissensbasis für Nutzer, Support und KI-Guide unter docs/. Bei Abweichungen gilt dort der App-Code-Stand.查看完整 README ↗
Eine moderne, installierbare Progressive Web App (PWA), die einen interaktiven Monatskalender mit täglichen Türchen und inspirierenden Lebensweisheiten bietet.
📚 Dokumentation: vollständige Wissensbasis für Nutzer, Support und KI-Guide unter
docs/. Bei Abweichungen gilt dort der App-Code-Stand.
film/film/Die App wird über Vercel ausgeliefert (Projekt im Team „Günter Struck's projects“). Live: https://kalender356.vercel.app/
Vercel-Projekt: kalender (Team „gunter-strucks-projects“). Jeder Push auf main geht automatisch live, jeder Pull Request bekommt eine Vorschau-URL (nur mit Vercel-Login sichtbar).
git clone https://github.com/gunterstruck/Kalender.git
cd Kalender
Mit Python (empfohlen):
# Python 3
python -m http.server 8000
# Python 2
python -m SimpleHTTPServer 8000
Mit Node.js (http-server):
npx http-server -p 8000
Mit VS Code Live Server:
index.html → "Open with Live Server"Öffne dann im Browser: http://localhost:8000
Die App ist eine rein statische Seite – kein Build, keine Abhängigkeiten. Die
Konfiguration liegt in vercel.json (Sicherheits- und Cache-Header) und
.vercelignore (Doku, Videos und Werkzeuge werden nicht ausgeliefert).
gunterstruck/Kalender importieren./main → Produktion, jeder Pull Request → eigene Vorschau-URLnpm i -g vercel
vercel # Vorschau-Deployment (fragt beim ersten Mal nach Team/Projekt)
vercel --prod # Produktion
vercel.json regelt| Pfad | Header |
|---|---|
| alle | X-Content-Type-Options, X-Frame-Options: DENY, Referrer-Policy, Permissions-Policy, Strict-Transport-Security |
/, /index.html | Content-Security-Policy (wie das Meta-Tag, zusätzlich frame-ancestors 'none') |
/service-worker.js | nie zwischenspeichern (max-age=0, must-revalidate), damit Updates sofort ankommen |
/manifest.json | korrekter Typ application/manifest+json, nicht zwischenspeichern |
/.well-known/assetlinks.json | application/json (Android/TWA) |
/assets/* | 1 Tag zwischenspeichern, danach im Hintergrund erneuern |
JS, CSS und HTML behalten den Vercel-Standard (max-age=0, must-revalidate),
weil die Dateinamen keine Versions-Hashes tragen.
Cache-Version in service-worker.js erhöhen (siehe unten) – sonst sehen
installierte Apps geänderte Dateien erst verzögert.
Bisher lief die App unter https://gunterstruck.github.io/Kalender/. Nach dem
Umzug GitHub Pages abschalten (Repository → Settings → Pages → „None“) oder dort
auf die neue Adresse verweisen, damit nicht zwei Fassungen parallel laufen.
Fortschritt im Browser ist an die Adresse gebunden: Nutzer der alten Adresse
starten auf der neuen Adresse mit leerem Kalender. Eine bestehende Android-App
(TWA) muss für die neue Adresse neu gebaut werden (siehe TWA_NOTES.md).
Die Monatsbilder befinden sich in /assets/months/:
assets/months/
├── january.svg
├── february.svg
├── march.svg
└── ... (12 Monate)
Eigene Bilder hinzufügen:
/assets/months/january.svg)Die Lebensweisheiten befinden sich in /js/quotes.js (Deutsch) und /js/quotes-en.js (Englisch):
const QUOTES = [
{
text: "Der Anfang ist der wichtigste Teil der Arbeit.",
author: "Platon",
dates: "428-348 v. Chr.",
link: "https://de.wikipedia.org/wiki/Platon",
linkTitle: "Mehr über Platon (Wikipedia)"
},
// ...
];
Tipps:
Die App-Icons befinden sich in /assets/icons/:
assets/icons/
├── icon.svg # Haupt-Icon (beliebige Größe)
├── icon-192.png # 192x192px (erforderlich)
└── icon-512.png # 512x512px (erforderlich)
Neue Icons erstellen:
theme_color in /manifest.json wenn nötigPasse die Farben in /css/styles.css an (CSS Custom Properties):
:root {
--primary: #6366f1; /* Hauptfarbe */
--primary-dark: #4f46e5; /* Dunkle Variante */
--secondary: #ec4899; /* Akzentfarbe */
/* ... weitere Farben */
}
/
├── index.html # Haupt-HTML-Datei
├── manifest.json # PWA-Manifest
├── service-worker.js # Service Worker für Offline-Caching
├── vercel.json # Vercel: Header, kein Build
├── .vercelignore # nicht ausgelieferte Ordner
├── impressum.html, datenschutz.html, imprint.html, privacy.html
├── css/
│ ├── styles.css # Alle Styles (Mobile First)
│ └── livedemo.css # Livedemo
├── js/
│ ├── app.js # Haupt-App-Logik (CalendarApp)
│ ├── i18n.js, i18n-dom.js # Sprache (de/en)
│ ├── quotes.js, quotes-en.js # Zitate (je 366)
│ ├── pwa-install.js # Service Worker, Install-Hinweis
│ ├── reminder.js # Tägliche Erinnerung
│ └── livedemo.js # Livedemo
├── assets/
│ ├── icons/ # App-Icons
│ ├── months/, months-portrait/ # Monats-Illustrationen
│ └── audio/ # Demo-Musik (CC BY 4.0)
├── docs/ # Wissensbasis, Kurzanleitung, KI-Guide
└── film/ # Demo-Videos (MP4) + Aufnahme-Skript
| Browser | Version | Unterstützt |
|---|---|---|
| Chrome | 67+ | ✅ Vollständig |
| Firefox | 63+ | ✅ Vollständig |
| Safari | 11.1+ | ✅ Vollständig |
| Edge | 79+ | ✅ Vollständig |
Wenn du Dateien änderst, musst du die Cache-Version erhöhen:
In /service-worker.js:
const CACHE_NAME = 'kalender-cache-v1.9.6'; // Version erhöhen!
const RUNTIME_CACHE = 'kalender-runtime-v1.9.6'; // Auch Runtime Cache!
Dann:
Ausführlich: docs/guide-ki-wissensbasis.md.
Folgende Daten werden im LocalStorage gespeichert:
calendar_opened_v2_{JAHR}_{MONAT}: Array der geöffneten Türchen (Monat 0-basiert)calendar_quotes_{JAHR}_{de|en}: Jahreszuordnung der Zitate zu den Tagencalendar_positions_v4_{JAHR}_{MONAT}: Türchen-Positionen in Prozentcalendar_selected_month_year_v2: zuletzt gewählter Monat/Jahrcalendar_theme: light oder darkpwa_installed: Merker nach InstallationBei eingeschalteter Erinnerung zusätzlich calendar_reminder (Uhrzeit) und – für die App-Benachrichtigung – die IndexedDB kalender-reminder.
Die Livedemo schreibt nichts in den Local Storage.
Daten löschen:
// In der Browser-Konsole:
localStorage.clear();
location.reload();
manifest.json korrekt verlinkt istservice-worker.js im Root-Verzeichnis liegtservice-worker.js erhöhenquotes.js vor app.js geladen wirdmanifest.json./ sein (dort liegt index.html)Contributions sind willkommen! So kannst du beitragen:
git checkout -b feature/AmazingFeature)git commit -m 'Add some AmazingFeature')git push origin feature/AmazingFeature)Dieses Projekt ist unter der MIT-Lizenz lizenziert. Siehe LICENSE Datei für Details.
Bei Fragen oder Problemen:
Zukünftige Features (optional):
Diese App:
Made with ❤️ and Vanilla JavaScript
⭐ Gefällt dir das Projekt? Gib ihm einen Stern auf GitHub!