funktechnik-schubert-website/README.md
2026-07-03 22:25:04 +02:00

151 lines
3.2 KiB
Markdown

# Funktechnik Schubert Website
Eigenständige öffentliche Firmenwebsite für Funktechnik Schubert. Dieses Projekt ist nicht Olympus CRM und koppelt nicht direkt an Olympus.
## Technologie
- Next.js 16 App Router
- TypeScript strict
- Serverseitige API-Routen für Kontakt und Reparaturannahme
- Geschützter Admin-Bereich unter `/admin`
- Lokale Foundation-Datenablage für Anfragen und Einstellungen
- Docker
- Nginx/Reverse-Proxy-fähig
- SEO Metadata, Sitemap und robots.txt
## Seiten
- `/` Startseite
- `/leistungen`
- `/funkgeraete-service`
- `/reparatur`
- `/ueber-uns`
- `/kontakt`
- `/impressum`
- `/datenschutz`
- `/admin/login`
- `/admin`
- `/admin/kontaktanfragen`
- `/admin/reparaturanfragen`
- `/admin/website`
- `/admin/medien`
- `/admin/einstellungen`
- `/admin/smtp`
- `/admin/seo`
- `/admin/system`
## Lokale Entwicklung
```bash
npm install
npm run dev
```
Die Website läuft lokal unter:
```text
http://localhost:3010
```
## Checks
```bash
npm run lint
npx next build
```
## Docker
```bash
docker compose build
docker compose up -d
```
Service:
```text
funktechnik-website
```
Port:
```text
3010:3010
```
## Umgebung
`.env.example` kopieren:
```bash
cp .env.example .env
```
Variablen:
- `NEXT_PUBLIC_SITE_URL`
- `ADMIN_EMAIL`
- `ADMIN_PASSWORD`
- `ADMIN_SESSION_SECRET`
- `AUTH_COOKIE_SECURE`
- `OLYMPUS_INTAKE_API_URL`
- `OLYMPUS_INTAKE_API_TOKEN`
Die Olympus-Variablen sind nur für eine spätere serverseitige Integration vorbereitet. Sie werden nicht im Browser verwendet.
Für lokale Entwicklung kann `AUTH_COOKIE_SECURE=false` bleiben. Produktiv muss HTTPS verwendet und `AUTH_COOKIE_SECURE=true` gesetzt werden. `ADMIN_SESSION_SECRET` muss produktiv ein langer zufälliger Wert sein.
## API-Routen
- `POST /api/repair`
- `POST /api/contact`
- `POST /api/admin/login`
- `POST /api/admin/logout`
- `PATCH /api/admin/contact/[id]`
- `PATCH /api/admin/repair/[id]`
- `POST /api/admin/settings`
- `POST /api/admin/smtp`
- `GET/POST /api/admin/media`
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.
## Admin-Bereich
Der geschützte Admin-Bereich ist unter `/admin/login` erreichbar. Er verwendet ein signiertes HttpOnly-Cookie und ist für Desktop und Tablet ausgelegt.
Funktionen:
- Dashboard mit Kennzahlen
- Kontaktanfragen verwalten
- Reparaturanfragen verwalten
- Website-Inhaltsverwaltung vorbereitet
- Firmendaten pflegen
- SMTP-Konfiguration vorbereiten
- Medien hochladen
- SEO-Übersicht
- Systemübersicht
SMTP-Versand, Publishing von Website-Inhalten und Olympus-Übernahme sind bewusst noch nicht aktiv gekoppelt.
## Nginx
Siehe `nginx.example.conf`.
Beispiel-Domain:
```text
funktechnik-schubert.de
```
Produktiv HTTPS aktivieren, z. B. mit Certbot:
```bash
certbot --nginx -d funktechnik-schubert.de -d www.funktechnik-schubert.de
```
## Offene manuelle Punkte
- TODO: Rechtliche Angaben ergänzen
- Produktives Kontakt-/Mail-System anbinden
- Spätere Olympus-Reparaturannahme serverseitig anbinden
- Finale Domain und HTTPS-Konfiguration setzen