feat(cms): add storage based website content management
This commit is contained in:
parent
7d5689cfa4
commit
12d31f5468
31 changed files with 1347 additions and 158 deletions
39
README.md
39
README.md
|
|
@ -8,12 +8,12 @@ Eigenständige öffentliche Firmenwebsite für Funktechnik Schubert. Dieses Proj
|
|||
- TypeScript strict
|
||||
- Serverseitige API-Routen für Kontakt und Reparaturannahme
|
||||
- Geschützter Admin-Bereich unter `/admin`
|
||||
- Lokale Foundation-Datenablage für Anfragen und Einstellungen
|
||||
- Lokale Storage-Datenablage für Anfragen, Einstellungen, Medien und Website-Inhalte
|
||||
- Docker
|
||||
- Nginx/Reverse-Proxy-fähig
|
||||
- SEO Metadata, Sitemap und robots.txt
|
||||
|
||||
Version: `0.3.0`
|
||||
Version: `0.4.0`
|
||||
|
||||
## Seiten
|
||||
|
||||
|
|
@ -125,6 +125,9 @@ Für lokale Entwicklung kann `AUTH_COOKIE_SECURE=false` bleiben. Produktiv muss
|
|||
- `POST /api/admin/settings`
|
||||
- `POST /api/admin/smtp`
|
||||
- `GET/POST /api/admin/media`
|
||||
- `GET/PUT /api/admin/content`
|
||||
- `GET /api/content/settings`
|
||||
- `GET /api/media/[filename]`
|
||||
- `GET /api/health`
|
||||
|
||||
Aktuell validieren die Routen serverseitig, geben klare JSON-Antworten zurück und schreiben nur technische Metadaten in Server-Logs. Es werden keine Nachrichteninhalte oder Tokens geloggt. Kontakt- und Reparaturanfragen werden lokal unter `data/*.json` gespeichert und nicht versioniert.
|
||||
|
|
@ -138,14 +141,14 @@ Funktionen:
|
|||
- Dashboard mit Kennzahlen
|
||||
- Kontaktanfragen verwalten
|
||||
- Reparaturanfragen verwalten
|
||||
- Website-Inhaltsverwaltung vorbereitet
|
||||
- Website-Inhalte pflegen und sofort veröffentlichen
|
||||
- Firmendaten pflegen
|
||||
- SMTP-Konfiguration speichern und Testmail senden
|
||||
- Medien hochladen
|
||||
- SEO-Übersicht
|
||||
- Systemübersicht
|
||||
|
||||
Publishing von Website-Inhalten und Olympus-Übernahme sind bewusst noch nicht aktiv gekoppelt. SMTP-Versand fuer Kontakt- und Reparaturanfragen ist serverseitig angebunden, sofern `/admin/smtp` vollstaendig konfiguriert ist.
|
||||
Website-Inhalte werden unter `/admin/website` gepflegt und beim Speichern sofort auf der öffentlichen Website wirksam. Die Content-Architektur ist bewusst über einen zentralen `ContentService` gekapselt, damit später Olympus CMS oder PostgreSQL als Backend angebunden werden können. SMTP-Versand fuer Kontakt- und Reparaturanfragen ist serverseitig angebunden, sofern `/admin/smtp` vollstaendig konfiguriert ist.
|
||||
|
||||
## Runtime Data
|
||||
|
||||
|
|
@ -171,6 +174,32 @@ Uploads liegen unter `storage/uploads/images/`, werden über `/api/media/[filena
|
|||
|
||||
Alte Uploads aus `public/uploads/images` werden beim Start einmalig nach `storage/uploads/images` migriert, falls sie dort noch nicht vorhanden sind.
|
||||
|
||||
Website-Inhalte liegen unter `storage/content/` und werden nicht committed:
|
||||
|
||||
```text
|
||||
storage/content/home.json
|
||||
storage/content/services.json
|
||||
storage/content/radio-service.json
|
||||
storage/content/about.json
|
||||
storage/content/contact.json
|
||||
storage/content/settings.json
|
||||
storage/content/backups/
|
||||
```
|
||||
|
||||
Jede Seite besitzt eine eigene JSON-Datei. React-Komponenten lesen diese Dateien nicht direkt, sondern ausschließlich über `lib/content/service.ts`. Vor jedem Speichern erzeugt der Service eine Backup-Datei unter `storage/content/backups/` und behält pro Dokument die letzten 20 Versionen. Änderungen benötigen keinen Neustart und keinen Docker-Build.
|
||||
|
||||
Bearbeitbar sind aktuell:
|
||||
|
||||
- Startseite mit Hero, Call-to-Actions, Featureboxen, Leistungsboxen und Kundenversprechen
|
||||
- Leistungen mit beliebig vielen sortierbaren und ein-/ausblendbaren Einträgen
|
||||
- Funkgeräte-Service mit Einleitung, Marken, Fehlerbildern, Ablauf, Messmöglichkeiten, Abgleich und Reparaturtexten
|
||||
- Über Uns mit Firmenbeschreibung, Werkstattbeschreibung und Philosophie
|
||||
- Kontakt mit Kontaktinformationen, Öffnungszeiten, Maps-Link und Seitentexten
|
||||
- Footer, Logo, Copyright, Header-CTA und globale SEO-Einstellungen
|
||||
- SEO pro Seite inklusive Meta Title, Meta Description, Keywords, OpenGraph und Social Image
|
||||
|
||||
Bilder für Logo und Social Image werden aus dem Medienbestand ausgewählt. Neue Uploads bleiben im privaten Storage und werden über `/api/media/[filename]` ausgeliefert.
|
||||
|
||||
## Healthcheck
|
||||
|
||||
```bash
|
||||
|
|
@ -188,7 +217,7 @@ Antwort:
|
|||
```json
|
||||
{
|
||||
"status": "ok",
|
||||
"version": "0.3.0",
|
||||
"version": "0.4.0",
|
||||
"storage": "ok",
|
||||
"admin": "configured",
|
||||
"smtp": "configured",
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue