Schlankes Webprojekt fuer "Public Secrets (Die Frage)" mit Frontend und leichtgewichtigem Backend.
- Fragenansicht mit 1-5 Sternebewertung und Kommentar (eindeutig pro Browser + Frage, jederzeit änderbar)
- Ansichten: Beliebteste, Chronologisch, Interaktionen, Nach Autoren
- Veranstaltungen aus Backend-Daten
- Initiativen aus Backend-Daten
- Ensemble mit Portraits und Kurzviten
- Eigene Seiten je Ensemble-Mitglied unter
members/*.html(Fragen, Initiativen, Veranstaltungen) - Redaktionsbereich mit Login (
/admin.html) - Mitgliederbereich mit Magic Link, Passwort-Login und Fallback-Outbox (
/login.html,/member-area.html) - CRUD fuer Fragen, Veranstaltungen, Initiativen und Mitglieder
- Globaler Not-Aus fuer Kommentare und Antworten durch Nichtmitglieder
- Historischer Kontext und uebernommene Entscheidungen:
docs/project-context.md - Ursprungskonzept:
docs/public-secrets-web-konzept.md - Betrieb, Backup, Migration:
docs/ops-and-roadmap.md
cd /path/to/publicsecrets
./bin/node server.jsDann im Browser:
- Webseite: http://127.0.0.1:8787
- Redaktion: http://127.0.0.1:8787/admin.html
GitHub Pages reicht hier nicht, weil das Projekt ein Backend mit Login und schreibbaren Daten hat.
Einfachster Weg: GitHub + Render (Konfiguration liegt schon bereit: Dockerfile, render.yaml).
- Projekt nach GitHub pushen
- Bei Render: "New +" -> "Blueprint"
- GitHub-Repo verbinden
- Render liest
render.yamlautomatisch und erstellt die Web-App - Nach dem Deploy bekommst du direkt einen öffentlichen Link wie
https://public-secrets.onrender.com
Wichtig fuer Persistenz auf Render:
- Bei
Docker-Services ist der Standard-Datenpfad im Container/app/data. - Du kannst den Pfad per Env-Variable setzen:
PUBLIC_SECRETE_DATA_DIR. - Falls deine Disk schon auf einem anderen Mount-Pfad haengt (z. B.
/opt/render/project/src/public-secrets/data), setzePUBLIC_SECRETE_DATA_DIRgenau auf diesen Pfad. - Ohne gesetzte Variable versucht der Server auf Render automatisch zuerst
/opt/render/project/src/public-secrets/data, danach/app/data.
Live-Daten sichern:
cd /path/to/publicsecrets
./scripts/backup_live_data.shLokalen Datenstand sichern:
./scripts/backup_local_data.shBeides automatisiert in einem Lauf:
./scripts/run_backup_cycle.shBackup zurueckspielen (Notfall):
./scripts/restore_backup_to_data.sh backups/live/<timestamp>Mehr Details und Langfrist-Plan:
docs/ops-and-roadmap.mddocs/backup-automation.md
Lokale Backups liegen absichtlich ausserhalb von Git:
backups/
Standard-Zugang:
- Benutzername:
philipp@saetzerei.com - Passwort:
public-secrets-123
Eigene Redakteure per Umgebungsvariable setzen:
export PUBLIC_SECRETE_EDITORS='[{"username":"redaktion","password":"dein-passwort"}]'
./bin/node server.js- Wrapper im Projekt:
./bin/node./bin/npm
- Die Wrapper suchen zuerst
PUBLIC_SECRETS_NODE_BINbzw.PUBLIC_SECRETS_NPM_BIN, dann gaengige lokale Pfade. - Wenn du ein eigenes Node-Binary nutzen willst:
export PUBLIC_SECRETS_NODE_BIN=/pfad/zu/node
export PUBLIC_SECRETS_NPM_BIN=/pfad/zu/npm
./bin/node server.jsPOST /api/auth/loginPOST /api/auth/logoutGET /api/auth/meGET /api/questionsPOST /api/questions(auth)PUT /api/questions/:id(auth)DELETE /api/questions/:id(auth)GET /api/peoplePOST /api/people(auth)PUT /api/people/:slug(auth)DELETE /api/people/:slug(auth)GET /api/eventsPOST /api/events(auth)PUT /api/events/:id(auth)DELETE /api/events/:id(auth)GET /api/initiativesPOST /api/initiatives(auth)PUT /api/initiatives/:id(auth)DELETE /api/initiatives/:id(auth)POST /api/member/auth/requestPOST /api/member/auth/password-loginPOST /api/member/auth/verifyPOST /api/member/auth/logoutGET /api/member/auth/meGET /api/member/auth/outbox(auth)GET/PUT /api/site-settings(PUTauth)GET/PUT /api/member/profileGET/POST/PUT/DELETE /api/member/questions(eigene)GET/POST/PUT/DELETE /api/member/events(eigene)GET/POST/PUT/DELETE /api/member/initiatives(eigene)
server.js- Node HTTP-Server, API, Session-Auth, statische Dateienindex.html,app.js,styles.css- Oeffentliche Webseiteadmin.html,admin.js- Redaktionsoberflaechelogin.html,login.js- Mitglieder-Login (Magic Link + Passwort)member-area.html,member-area.js- Eigener Mitgliederbereichdata/*.json- Persistenz fuer Inhalte, Sessions, Papierkorb und Site-Einstellungen