# 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