## v1.26 — 2026-04-16
### ✨ Neu – Öffentliche System-Status-Seite
**Transparente Echtzeit-Anzeige aller SHIFTDECK-Dienste**

Statuspage-ähnliche öffentliche Seite `/status.html` mit Live-Anzeige aller 7 Systemkomponenten, Auto-Refresh alle 60 Sekunden, 90-Tage-Historie pro Service mit Uptime-Prozent und 5 Status-Stufen (Betriebsbereit, Leichte Störung, Teilausfall, Großer Ausfall, Wartung).

### Neue Dateien
- **status.html** — Öffentliche Status-Seite (im Farbkonzept, Header/Footer identisch)
- **admin-status.html** — Admin-Verwaltung mit 4 Tabs (Übersicht, Services, Vorfälle, Wartungen)
- **api/status/index.php** — Komplette Backend-API (GET/POST/PUT/DELETE, Admin-Key-Auth)
- **Datenbank/status_system.sql** — 4 Tabellen (Services, Incidents, Incident-Updates, Maintenance) + Standard-Services

### Features
- 7 Standard-Services automatisch angelegt (Webseite, API, Admin-Panel, Datenbank, Mobile App, E-Mail, Zahlungen)
- Incident-Workflow mit Zeitstrahl: Untersuchung → Identifiziert → Beobachtung → Behoben
- Betroffene Services werden bei Vorfällen automatisch auf passenden Störstatus gesetzt
- Beim Lösen eines Vorfalls werden Services automatisch wieder auf „operational" gesetzt
- Geplante Wartungen mit Start-/Endzeitfenster und Status-Verfolgung
- Kürzlich gelöste Vorfälle (14 Tage rückwirkend) werden angezeigt
- Auto-Tabellen-Anlage: Tabellen werden bei erster API-Abfrage automatisch erstellt

### Integration
- Status-Link „System-Status" im Footer aller statischen Seiten
- sitemap.xml ergänzt um `/status.html`
- Farbkonzept (Navy `#1a1f2c` / Gold `#f5b82e`) beibehalten

---


### 🎫 Ticket-System: Software-Tickets im Admin-Panel
**Software-Tickets erscheinen jetzt automatisch im bestehenden Admin-Bereich**
„Support Tickets" — keine separate Seite mehr, eine Ansicht für alle Quellen.

- **Neue DB-Tabellen** (`Datenbank/shiftdeck_v4.22.6_ticketsystem.sql`):
  - `tickets` — Ein Ticket pro Anfrage aus der Software (UUID, license_key, status, priorität)
  - `ticket_messages` — Konversation pro Ticket (Kunde + Support)
  - `faq_entries` — FAQ-Wissensdatenbank für die Software
  - 5 Beispiel-FAQs werden bei leerer Tabelle eingefügt
- **API für die Software** (`api/tickets-api.php`):
  - Auth via `X-License-Key` Header
  - Actions: `faq_list`, `tickets_list`, `ticket_create`, `ticket_messages`,
    `ticket_reply`, `ticket_close`, `ticket_delete`, `sync_check`
  - Software pollt alle 5 Min `sync_check` für Updates
- **Admin-Backend Integration**:
  - `api/superadmin/tickets` (war Stub) liefert jetzt Tickets aus BEIDEN Quellen
    (`website_tickets` + `tickets`) vereinheitlicht für das Bundle
  - Software-Tickets bekommen ID-Präfix `sw_` zur Unterscheidung
  - Status-Mapping: `in_progress`/`waiting_customer` → `in-progress`
  - `.htaccess` für `api/superadmin/` damit die Datei `tickets` als PHP läuft
- **Antworten aus dem Admin-Panel** (`api/tickets/index.php` erweitert):
  - Erkennt am ID-Präfix `sw_` ein Software-Ticket
  - Schreibt die Antwort in `ticket_messages` mit `sender_type='support'`
  - Setzt Status auf `waiting_customer`, `unread_for_customer=1`
  - Schickt Antwort-Mail an den Kunden
  - Status-Änderungen (offen/bearbeitung/geschlossen) auch unterstützt
  - Website-Tickets bleiben funktional unverändert
- **admin/index.html**: Version-Badge `v4.22.6`
- **Wichtig**: Lizenz-Modul (`api/license/*`) wurde NICHT verändert.

## v4.22.5 — 2026-04-13
### 🐛 Bugfix: Lizenzen löschen im Admin-Panel
- **Problem**: Klick auf Löschen-Button → HTTP 404. Zwei separate Ursachen kombiniert:
  1. Hoster-WAF (mod_security) blockt POST-Requests mit dem Wort „**delete**" im URL-Pfad
     und tarnt das als 404 statt 403.
  2. Das React-Bundle rief zusätzlich eine nicht existierende Datei `/api/license/licenses.php` auf.
  3. Service Worker cachte das alte Bundle unter festem Cache-Namen.
- **Fix**:
  - Neuer Proxy-Endpoint `api/lic-op.php` (neutraler Name, kein „delete" im Pfad — WAF-sicher).
    Nimmt POST entgegen, leitet intern via cURL auf localhost als DELETE an `/api/license/{key}` weiter.
  - **React-Bundle `assets/index-B2LfCBRa.js` binär gepatcht**: nutzt jetzt `/api/lic-op.php`,
    alter zweiter DELETE-Call auf `/api/license/licenses.php` (404) wurde entfernt.
  - **admin/index.html**: `deleteKey()` nutzt ebenfalls den Proxy.
  - **sw.js**: Cache-Version `shiftdeck-v2.27` → `shiftdeck-v2.29` → Service Worker löscht
    automatisch den alten Cache beim nächsten Besuch.
- **Wichtig**: Das Lizenz-Modul (`api/license/*`) wurde NICHT verändert — der Proxy nutzt
  ausschließlich die bereits vorhandene DELETE-API intern auf localhost.

## v4.18 — 2026-04-12
### SMTP vollständig auf support@shiftdeck.de umgestellt
- api/email/smtp_functions.php: Alle Credentials auf support@shiftdeck.de korrigiert
  (war: info@shiftdeck.de / jahnke@shiftdeck.de)
- SMTP: web.shiftdeck.de:465 SSL → :587 STARTTLS → shiftdeck.de:465 → php mail()
- 14 API-Dateien: smtp_functions.php eingebunden + mail() → smtpSend() ersetzt
  (tickets, paypal, orders, demo, cron, email)
- api/tickets/index.php: sd_tix_mail() → smtpSend(), Admin-E-Mail → support@
- Datenbank/shiftdeck_v4.18_smtp.sql: SMTP-Settings in website_settings
- ⚠️ SQL nach Ausführung löschen (enthält Passwort)

# SHIFTDECK Changelog

## v6.22 — 2026-04-12
### 🐛 Bugfixes
- **TimesheetAutoGenerator-Crash behoben**: `name 'MONGO_URL' is not defined` Fehler im Background-Job beseitigt. Die automatische Arbeitszeitnachweis-Generierung funktioniert jetzt wieder (Variable `MONGO_URL` → `mongo_url` korrigiert, Zeile 21477 in server.py).
## v3.17 — 2026-04-10
### Geändert
- **Handy-Showcase**: "App Store"-Button entfernt (App ist nativ, kein Store-Eintrag) — ersetzt durch "Mehr erfahren → /features.html"


## v3.68 — 2026-04-11
### Nav: Login-Status persistent — alle Seiten inkl. React-Startseite
- sd-nav-session.js v2: Token aus localStorage + sessionStorage, API-Aufruf gecacht
- React-Bundle: Login-Button bekommt id='sd-nav-login-react' → von Script erreichbar
- waitForReactNav(): wartet bis React-Nav gerendert ist (40× 200ms = 8s)
- index.html: Script eingebunden (React-Seite)
- konto.html: Vorname beim Login übergeben, _sdNavLogout beim Ausloggen
- sessionStorage-Cache: Vorname wird nicht bei jeder Seite neu per API geladen


## v3.67 — 2026-04-11
### checkout.html: Passwort-Sektion bei eingeloggten Kunden ausgeblendet
- Eingeloggt (sd_session_token vorhanden): Abschnitt „Kundenkonto erstellen" ausgeblendet
- validateStep2: Passwort-Prüfung wird übersprungen wenn st.isLoggedIn
- createOrder: kein Register-API-Call wenn bereits eingeloggt
- Trennlinie vor Passwort-Sektion ebenfalls ausgeblendet


## v3.66 — 2026-04-11
### Nav: Login-Status anzeigen (eingeloggt → „Vorname · Mein Konto")
- sd-nav-session.js: prüft sd_session_token im localStorage
- Nicht eingeloggt: „Login" mit Pfeil-Icon
- Eingeloggt: Navy-Button mit Gold-Text „Vorname · Mein Konto" + Person-Icon
- Auf allen 20 Seiten eingebunden
- konto.html: triggert Nav-Refresh nach erfolgreichem Login


## v3.65 — 2026-04-11
### Interner Risiko-Score A/B/C/D für Kauf auf Rechnung
- Datenbank/shiftdeck_v3.65_risk_score.sql: Spalte risk_score (DEFAULT 'C') zu customers
- api/auth/index.php: GET liefert risk_score mit; PUT erlaubt Admin das Setzen
- checkout.html: „Auf Rechnung" nur sichtbar wenn eingeloggt UND risk_score = 'A'
- Nicht eingeloggt oder Score B/C/D → Option komplett ausgeblendet
- Score A → grüner Badge „Für Sie verfügbar" in der Option


## v3.64 — 2026-04-11
### checkout.html: 4 Verbesserungen
- Nav: Nur „Login" sichtbar, kein „Kostenlos testen" mehr
- Add-ons: Fallback-Liste hardcoded (6 Standard-Add-ons immer sichtbar)
- Login-Vorausfüllen: sd_session_token → /api/auth/ → Felder automatisch befüllt
- Neue Zahlungsart: „Auf Rechnung" (nur bei gutem Schufa-Score, 30 Tage Zahlungsziel)


## v3.63 — 2026-04-11
### PayPal: Neue Zugangsdaten hinterlegt
- Datenbank/shiftdeck_v3.63_paypal.sql: neue Client-ID + Secret eingetragen
- checkout.html: Fallback-Client-ID aktualisiert
- Alte SQL-Datei mit alten Credentials entfernt


## v3.62 — 2026-04-11
### PayPal: Dynamisches SDK-Laden + Auto-Fallback
- PayPal SDK wird jetzt dynamisch nach DB-Abfrage geladen (Client-ID aus website_settings)
- Bei SDK-Ladefehler: automatisch auf Banküberweisung umschalten
- Bei render()-Fehler: PayPal ausgegraut, Bank-Tab automatisch aktiv
- products/index.php: paypalClientId + paypalMode in Response ergänzt
- SQL shiftdeck_v3.57_paypal.sql muss ausgeführt sein für echte Credentials


## v3.61 — 2026-04-11
### Zwei Korrekturen
- React Bundle: handleBuy → window.location.href='/checkout.html' (kein internes Modal mehr)
- api/addons/list.php: Fallback wenn Tabelle leer (statt nur bei Exception)
- Fallback-Addons: desc → description Feldname korrigiert


## v3.60 — 2026-04-11
### checkout.html: Einheitliche Navigation + Footer ergänzt
- Gleicher Header (Nav) wie alle anderen Seiten
- Gleicher 4-Spalten-Footer wie alle anderen Seiten
- body padding-top:64px für fixe Nav
- Nav-CSS-Klassen ergänzt


## v3.59 — 2026-04-11
### Add-ons Checkout: Tabellen-Konflikt behoben
- api/addons/list.php: available_addons → addons (richtige MySQL-Tabelle)
- Datenbank/shiftdeck_v3.59_addons.sql: 6 Addons in MySQL eintragen
- Addons erscheinen jetzt im Checkout unter „Add-ons hinzufügen"


## v3.58 — 2026-04-11
### PayPal: Ladeprobleme behoben
- initPay: Polling statt typeof-Check (300ms × 60 = 18s Wartezeit)
- renderPP: createOrder null-Return entfernt → wirft jetzt Error (PayPal SDK braucht das)
- Pflichtfelder (AGB/Widerruf/DSGVO) werden VOR PayPal-Order geprüft
- onCancel + onError Handler ergänzt
- .render().catch() für saubere Fehlermeldung im UI


## v3.57 — 2026-04-11
### PayPal Live-Integration aktiviert
- Datenbank/shiftdeck_v3.57_paypal.sql: Client-ID + Secret + Mode=live in website_settings
- checkout.html: PayPal SDK auf Live-Client-ID umgestellt (intent=capture)
- ⚠️ SQL-Datei nach Ausführen vom Server löschen (enthält Zugangsdaten)


## v3.56 — 2026-04-11
### PayPal: Admin-E-Mail-Benachrichtigung bei erfolgreicher Zahlung
- api/paypal/index.php: nach CAPTURE → mail() an info@shiftdeck.de
- E-Mail enthält: Bestellnummer, Betrag, PayPal-ID, Kundendaten, Produkt


## v3.55 — 2026-04-11
### checkout.html: Komplett neu gestaltet — Modern, Add-ons, Bankdaten live
- Vollständiges Redesign: Inter-Font, Navy/Gold, modernes Card-Layout
- 4-Schritt-Prozess: Paket → Daten → Zahlung → Bestätigung
- Add-ons direkt aus /api/addons/list.php geladen (live aus Admin-Konto)
- Bankdaten live aus /api/products/ (iban, bic, bank, companyName aus website_settings)
- PayPal-Adresse: paypal@shiftdeck.de sichtbar in Banküberweisung + Erfolgsseite
- IBAN-Kopieren-Button
- Jährliche Abrechnung: 2 Monate gratis
- Passwort-Stärkeanzeige


## v3.54 — 2026-04-11
### ueber-uns.html: „Direkt schreiben" → /?go=contact
- Button navigiert jetzt zum Kontaktformular auf der Startseite


## v3.53 — 2026-04-11
### Modal endgültig gefixt: Jetzt bestellen → /checkout.html
- Modal v4: „Jetzt bestellen" navigiert direkt zu /checkout.html (eigenständige Bestellseite)
- „Demo-Zugang anfragen" navigiert zu /?go=contact (Kontaktformular)
- Keine React-Abhängigkeit mehr, kein sessionStorage, kein Polling
- checkout.html war bereits vorhanden und vollständig — wird jetzt direkt genutzt


## v3.52 — 2026-04-11
### Drei Kerprobleme endgültig behoben
- **Offene Stellen**: Datenbank/shiftdeck_v3.52_jobs.sql → Jobs in MySQL eintragen (SQL ausführen!)
  PHP-API liest aus MySQL → für alle Besucher sichtbar. Fallback: IndexedDB → statische Jobs
- **Initiativbewerbung**: <button> → <a href="mailto:..."> (nativer Mail-Link, kein JS)
- **Modal-Navigation**: /?go=pricing → /#pricing (Anker-Hash, scrollt direkt zum Element)
  index.html: Hash-Handler der /#pricing/demo/contact nach React-Render ansteuert
- sd-start-modal.js: navigateTo nutzt /#pricing als primären Weg


## v3.51 — 2026-04-11
### Offene Stellen: direkt aus IndexedDB SHIFTDECKDB geladen
- Jobs werden jetzt aus der gleichen IndexedDB gelesen wie der React-Admin
- indexedDB.open('SHIFTDECKDB',1) → objectStore 'jobs' → getAll()
- Nur aktive Jobs (active !== false) werden angezeigt
- Fallback: PHP-API → Seed-Daten
- Jetzt synchron mit dem Karriere-Management im Admin-Panel


## v3.50 — 2026-04-11
### Modal-Navigation + Initiativbewerbung: Grundlegend repariert
- sd-start-modal.js komplett neu: Optionen als <button> mit addEventListener (kein href mehr)
- Modal-Navigation: direkt window._navigateTo() wenn React verfügbar, sonst /?go= Fallback
- Capture-Phase Event-Listener verhindert fremde Handler
- URL-Handler: 80 Versuche × 120ms = 9.6s, startet erst nach 600ms
- Initiativbewerbung: window.open() statt window.location.href


## v3.49 — 2026-04-11
### Initiativbewerbung gefixt + Modal-Schutz
- Initiativbewerbung: <a href="mailto:..."> → <button onclick="window.location.href='mailto:'"> (100% zuverlässig)
- sd-start-modal.js: mailto: und #-Links werden nie vom Modal abgefangen
- Job-Karten: onclick explizit gesetzt


## v3.48 — 2026-04-11
### Demo ansehen entfernt + Initiativbewerbung gefixt
- „Demo ansehen" Button aus ueber-uns.html CTA-Sektion entfernt
- React-Bundle: cta2/ctaSecondary „Demo ansehen" → null (Hero-Button entfernt)
- Initiativbewerbung: mailto URL-encodiert (%20) für bessere Kompatibilität
- Alle Seiten geprüft: kein „Demo ansehen" mehr vorhanden


## v3.47 — 2026-04-11
### ueber-uns.html: Offene Stellen live aus Datenbank + neues Design
- /api/career/jobs.php neu erstellt — liest aktive Jobs aus MySQL
- Offene Stellen werden live per API geladen (kein hardcoded Content mehr)
- Fallback auf System-Jobs (j1: Senior Fullstack Developer, j2: Sales Manager SaaS)
- Neues modernes Design: dunkler Hintergrund, Icon je Kategorie, Lade-Animation, Badge „Aktiv"


## v3.46 — 2026-04-11
### ueber-uns.html: Neues Profilfoto Andy Jahnke
- Neues, besseres Foto (Selfie, klarer Gesichtsausdruck) verarbeitet
- B&W, rund, professionelle Tonkurve — beide Stellen ersetzt (Bio + Team-Karte)


## v3.45 — 2026-04-11
### ueber-uns.html: Zeitstrahl-Zahlen an 80+ Betriebe angepasst
- Q1 2021: „ersten 10 Einrichtungen aktiv"
- Q4 2021: „50+ Betriebe" → „20+ Einrichtungen"
- Q1 2023: „300 Betriebe. Neues Team." → „40+ Einrichtungen. Erstes Team." + Texte angepasst


## v3.44 — 2026-04-11
### ueber-uns.html: SVG-Icons, Zahlen korrigiert, Heggemann AG
- Alle 7 Emoji-Icons im Zeitstrahl → professionelle SVG-Icons (dunkel/gold)
- Zahlen korrigiert: 850+ → 80+ Betriebe, 18.000+ → 1.800+ Mitarbeiter
- Heggemann AG in Bio und Badge ergänzt (CLAAS · Heggemann AG · RdB Real Estate)


## v3.43 — 2026-04-11
### ueber-uns.html: 10 Grundsätze Layout repariert
- 2-Spalten-Grid (repeat(2,1fr)) für alle 10 Regelkarten
- Einheitliche Karten-Struktur: Nr-Badge + Titel + Text mit Einzug
- Alle 10 Karten sauber neu aufgebaut (gleiche Höhe, gleicher Abstand)
- Responsiv: auf Mobile → 1 Spalte
- Überschrift: „10 Regeln" → „10 Grundsätze"


## v3.42 — 2026-04-11
### ueber-uns.html: Andy Jahnke Bio + Foto
- Foto von Andy Jahnke: schwarz-weiß, rund, mit Tonkurven-Optimierung eingebettet
- Bio-Sektion neu: „Kein klassischer Programmierer. Ein Anpacker."
  - Erfahrung bei CLAAS und RdB Real Estate erwähnt
  - Zitat: Leidenschaft als Voraussetzung, Querdenker gesucht
  - Direkt-Kontakt-Button (info@shiftdeck.de) + Link zu Offene Stellen
- CEO-Karte im Team-Grid: Emoji → echtes Foto (60px, rund)


## v3.41 — 2026-04-11
### ueber-uns.html: Buttons, 10 Regeln, modernes Team
- Buttons: moderne Rechteck-Form (border-radius:14px) statt Pill, Schatten-Ebenen, Icons
- Regeln: 5 → 10 Regeln (erste 5 unverändert):
  - Regel 6: Geschwindigkeit ist Respekt.
  - Regel 7: Preis ist keine Waffe gegen KMU.
  - Regel 8: Jede Stimme zählt — auch intern.
  - Regel 9: Remote ist Standard, nicht Ausnahme.
  - Regel 10: Wachstum mit Verantwortung.
- Team: komplettes Redesign (dunkle Card-Grid auf Navy-Hintergrund, Zitate, Technologie-Details, 4 Werte-Kennzahlen)


## v3.40 — 2026-04-11
### Start-Modal: „Wie möchten Sie starten?" auf allen Seiten
- **sd-start-modal.js** neu erstellt: universelles Modal mit zwei Optionen:
  - „Jetzt bestellen" → /?go=pricing (Preissektion)
  - „Demo-Zugang anfragen" → /?go=demo (Demo-Section)
  - ESC + Klick außen schließt Modal
- Script in alle 20 öffentlichen Seiten eingebunden (19 statische + index.html)
- React-Bundle: fn (onContactClick/Kostenlos testen) → öffnet jetzt Start-Modal
- Branchen (9×), features, markenrichtlinien, ueber-uns, download, changelog, datenschutz, agb, widerruf, 403, 404


## v3.39 — 2026-04-11
### Neue Seite: ueber-uns.html + Bundle-Fix Demo-Button
- **ueber-uns.html** komplett neu erstellt:
  - Hero: „Wir digitalisieren die Arbeitswelt für KMU" + Kostenlose Demo → /?go=demo
  - Stats: Gegründet 2020, 850+ Betriebe, 18.000+ Mitarbeiter, 100% DSGVO
  - Zeitstrahl 2020–2025: Gründung, erste Kunden, Admin-Panel, Mobile App, Team-Wachstum, Auszeichnung
  - 5 Unternehmensregeln: Kunde zuerst / Einfachheit / Fehlerkultur / Datenschutz / Zuhören
  - Team-Sektion + Offene Stellen (5 Jobs: Developer, Sales, CSM, Designer, Marketing)
  - CTA + einheitlicher Footer
- **„Alles begann 2023"** → „2020" im Bundle gepatcht (React About-Redirect)
- **Bundle**: About-State navigiert jetzt direkt zu /ueber-uns.html
- **Alle Footer-Links** „Über uns": /?go=about → /ueber-uns.html (16 Seiten)


## v3.38 — 2026-04-11
### features.html: Mitarbeiter-App Tabs — Mobile → Desktop Screenshots
- MA-Dashboard.png (📱 1170×2532) → ma-app-dashboard.jpg (🖥️ 1920×1080)
- MA-Kalender.png → ma-app-kalender.jpg
- MA-Dienstplan.png → ma-app-dienstplan.jpg
- MA-Abwesenheit.png → ma-app-abwesenheit.jpg
- MA-Überstunden.png → ma-app-ueberstunden.jpg
- MA-Zeithistorie.png → ma-app-zeithistorie.jpg
- MA-Stundenzettel.png → ma-app-stundenzettel.jpg
- Alle 9 Tabs zeigen jetzt Desktop-Ansichten (1920×1080)


## v3.37 — 2026-04-10
### Branchen-Navigation: Buttons + Bundle-Fix
- **index-B2LfCBRa.js**: window._navigateTo + window._scrollToPricing global registriert
- **index.html**: URL-Handler robuster (nutzt _navigateTo → DOM-ID → Nav-Button-Klick)
- Alle 9 Branchen-Seiten:
  - „Demo anfragen →" → umbenannt zu „Jetzt bestellen →" → /?go=pricing
  - „Jetzt kostenlos starten →" → /?go=pricing
  - „14 Tage kostenlos testen →" → /?go=pricing
  - Nav-CTA „Kostenlos testen" → /?go=pricing


## v3.36 — 2026-04-10
### Branchen-Seiten: Nav-CSS-Konflikt behoben
- Alle 9 Branchen-Seiten: Altes dunkles Nav-CSS (.nav{background:#1a1f2c} etc.) aus Style-Block 1 entfernt
- Neues weißes Nav-CSS (.nav-link-b, .nav-login-b, .nav-cta-b) greift jetzt korrekt ohne Konflikt


## v3.35 — 2026-04-10
### Branchen-Seiten: Einheitlicher Footer + Button-Fix
- Alle 9 Branchen-Seiten: Alter foot-Footer → einheitlicher weißer 4-Spalten-Footer (wie alle anderen Seiten)
- Alle 9 Branchen-Seiten: Alter custom-Nav → einheitliche Navbar (Logo + Links + Login + CTA)
- „14 Tage kostenlos testen →": /?go=pricing → /?go=demo (Demo bestellen / Demo-Section)


## v3.34 — 2026-04-10
### Tablet-Showcase + Textfix + SQL-Update
- **sd-tablet-showcase.js**: Linker Rand-Artifact entfernt (::before Glow verkleinert)
- **sd-tablet-showcase.js**: Zoom-Lightbox — Klick auf Tablet-Bild → Vollbild-Overlay mit Schließen-Button
- **Datenbank/shiftdeck_v3.34_update.sql**: heroSubline „Zeiterfassung fuer moderne Teams." → „Zeiterfassung für moderne Teams."


## v3.33 — 2026-04-10
### Branchen-Seiten: Buttons korrekt verlinkt + Demo umbenannt
- Alle 9 Branchen-Seiten (kita, handwerk, gastronomie, pflege, hotel, einzelhandel, sicherheit, transport, gebaeudereinigung):
  - „Jetzt kostenlos starten →" (btn-prim) → /?go=pricing (Bestellansicht/Preise)
  - „Demo ansehen" → umbenannt zu „Demo anfragen →" → /?go=demo (Demo-Section Startseite)
  - Nav-CTA „Kostenlos testen →" → /?go=pricing
  - Footer-CTA „14 Tage kostenlos testen →" → /?go=pricing
  - /#pricing → /?go=pricing in allen Nav-Links
- index.html: URL-Handler um ?go=demo erweitert (scrollt zu id="demo")


## v3.32 — 2026-04-10
### Einheitliches Design auf allen öffentlichen Seiten
- **Einheitliche Navbar** (identisch zur React-Navbar) auf allen Seiten:
  changelog.html, download.html, widerruf.html, datenschutz.html, agb.html, 404.html, 403.html
- **Einheitlicher Footer** (weiß, 4 Spalten: Logo / Produkt / Unternehmen / Rechtliches):
  alle o.g. Seiten + features.html, markenrichtlinien.html
- **Alle Links korrekt verdrahtet** via ?go=comparison|pricing|blog|contact|impressum|career|about
- **index.html**: URL-Parameter-Handler (?go=STATE) für React State-Navigation
- Nav-Links in features.html: /#vergleich → /?go=comparison etc.
- Tailwind CSS auf allen statischen Seiten geladen
- body{padding-top:64px} für fixed Navbar auf allen Seiten


## v3.31 — 2026-04-10
### markenrichtlinien.html — Button „Sprechen wir darüber" verlinkt
- Link war mailto (funktionierte nicht wie erwartet) → jetzt /#contact (Kontakt-Section Startseite)


## v3.30 — 2026-04-10
### App-Icons: Weißer Rand entfernt
- shiftdeckicon512x512.png war 532×532 (20px weißer Rand rechts + unten)
- Alle Icons (512, 256, 128, 64, 32px) neu aus gecropptem 512er skaliert
- Kein weißer Rand mehr — Eck-Pixel ist jetzt schwarz (Icon-Hintergrund)


## v3.29 — 2026-04-10
### Logos: Weißer Rand entfernt
- Alle Logo-Dateien neu generiert mit Tight-Crop (Content-Bounds automatisch erkannt)
- Weißer Rand rechts (~6px) und unten (~9px) vollständig entfernt
- Logos jetzt proportional ohne Canvas-Padding (380x73 statt 400x73)
- Rand=0 auf allen Seiten verifiziert
- Betrifft: shiftdeck-logo.png, shiftdeck-logo-dark.png, shiftdeck-logo-white.png, alle Größen-Varianten


## v3.28 — 2026-04-10
### Footer: Markenrichtlinien unter Unternehmen
- React-Bundle (index-B2LfCBRa.js): Link „Markenrichtlinien" → /markenrichtlinien.html im Footer unter „Unternehmen" nach „Karriere" eingefügt


## v3.27 — 2026-04-10
### markenrichtlinien.html — Kontakt-Button ergänzt
- Zweiter Button „Sprechen wir darüber →" neben info@shiftdeck.de
- Öffnet mailto mit Betreff „Markenanfrage – Sprechen wir darüber"


## v3.26 — 2026-04-10
### Tablet-Showcase: Pixel-genaues Mockup nach Vorlage
- Struktur jetzt exakt wie hochgeladenes Bild: Silber-Alu-Shell → Schwarzer Bezel → Screen
- sd-tab-shell: Aluminium-Gradient (3-schichtig: hell oben-links, mittel, dunkel)
- sd-tab-bezel: Schwarzer Display-Rahmen #17191d, 10px Breite
- sd-tab-screen: Aspect-Ratio 1057/717 (exakt aus Bild gemessen)
- Keine sichtbaren Hardware-Knöpfe (wie im Referenz-Bild)
- Glas-Reflektion: diagonal 135deg, sehr subtil (0.06 opacity)
- Screenlabel: goldener Dot + Name, blur backdrop


## v3.25 — 2026-04-10
### Tablet-Showcase: Modernes Tablet-Design + E-Mail-Korrektur
- **sd-tablet-showcase.js**: Komplett neu designed
  - Gehäuse: Titan-Silber statt schwarzem iPad-Stil (moderner Aluminium-Look)
  - Dünnere Bezels: 10px Padding statt 15px, cleaner innerer Ring
  - Apple Pencil-Slot oben simuliert
  - Kamera-Dot zentriert oben
  - Hardware-Knöpfe: Silber-Gradient statt dunkel
  - Screen: 4:3 Aspect-Ratio, realistisches Glas-Glare
  - Hintergrund: Gradient dunkel statt reines Schwarz
  - Hover: leichte Rotation (-0.5deg) + Translate
  - Screenlabel: goldener Dot + Name, Blur-Backdrop
  - MutationObserver-Cleanup beibehalten
- **markenrichtlinien.html**: Kontakt auf info@shiftdeck.de geändert


## v3.24 — 2026-04-10
### Neue Seite: markenrichtlinien.html
- Vollständige Markenrichtlinien-Seite nach Vorbild shiftbase.com/de/markenrichtlinien
- Schreibweise-Sektion: ✓ Richtig / ✗ Falsch Karten (6 Varianten)
- Logo-Downloads: Dark, White, 760x138, 400x73 mit direkten Download-Links
- App-Icon-Downloads: 512px, 256px, 128px, 64px
- Farbpalette: Navy #1a1f2c, Gold #f5b82e, Gold Dunkel #d97706 mit Kopieren-Button
- Gradient-Vorschau mit CSS-Code
- Typografie-Showcase (Inter 900/700/400/500)
- Schutzzone-Illustration mit Do/Don't-Liste
- Kontakt-CTA + Footer
- Navbar identisch zur React-Navbar (Tailwind)


## v3.23 — 2026-04-10
### features.html — Navbar via Tailwind CSS identisch zur React-Navbar
- Tailwind CSS (CDN) in features.html geladen mit brand-navy/brand-yellow Konfiguration
- Navbar-CSS komplett auf exakte Tailwind-Klassen aus React-Bundle umgestellt
- Logo: Icon-Div + Text SHIFT/DECK (identisch zum React-Bundle)
- Nav-Links: `px-4 py-2 rounded-full text-sm font-medium` (Pill-Form wie React)
- Login: `rounded-full border border-brand-navy/20 hover:bg-brand-navy hover:text-white`
- CTA: `bg-brand-yellow rounded-full font-black shadow-lg`
- Navbar jetzt pixel-identisch zur React-Navbar


## v3.22 — 2026-04-10
### Showcase-Bugfix: Nur auf Startseite anzeigen
- **Problem:** Mitarbeiter-App & Admin-Bereich Showcases erschienen auf allen React-Routen (Vergleich, Preise, Blog etc.) da URL immer `/` bleibt (State-Routing)
- **Fix:** `sd-app-showcase.js` + `sd-tablet-showcase.js`: MutationObserver beobachtet DOM-Änderungen — entfernt sich automatisch sobald Branchen-Section nicht mehr im DOM ist
- Showcases erscheinen jetzt nur auf der Startseite


## v3.21 — 2026-04-10
### features.html — Navbar 1:1 wie Startseite
- Login-Button (Outline) ergänzt → `/konto.html`
- CTA-Button: „14 Tage kostenlos" → „Kostenlos testen"
- Navbar jetzt identisch zur Startseite: Logo · Links · Login · Kostenlos testen


## v3.20 — 2026-04-10
### features.html — Hauptseiten-Navbar integriert
- Navbar `features.html`: dunkler Navy-Hintergrund → weißer Hintergrund (wie Startseite)
- Logo: Dark-Version (schwarzes "SHIFT", goldenes "DECK") statt weißer Version
- Navigations-Links ergänzt: Funktionen (aktiv), Vergleich, Preise, Blog, Download
- "← Startseite"-Button entfernt, Links ersetzen die Navigation


## v3.19 — 2026-04-10
### Logo-Integration (alle Seiten)
- **Logos/ Ordner**: 6 neue Logo-Größen erstellt (1540x280, 760x138, 400x73, 300x55, 200x36, 150x27)
- **features.html**: CSS-Text-Logo durch `<img src="/Logos/shiftdeck-logo.png">` ersetzt
- **changelog.html**: SVG-Text-Logo durch Bild-Logo ersetzt
- **download.html**: SVG-Text-Logo durch Bild-Logo ersetzt
- **widerruf.html**: Text-Logo `SHIFTDECK` durch Bild-Logo ersetzt
- **admin/kunde.html**: Text-Logo „SHIFTDECK" + Punkt durch Bild-Logo ersetzt
- **konto.html**: Base64-eingebettetes Logo durch Datei-Pfad (`/Logos/shiftdeck-logo.png`) ersetzt (Login + Sidebar)


## v3.18 — 2026-04-10
### Bugfixes
- **Branchen-Karten**: Feature-Liste (z.B. "Rezeption & Housekeeping") war zu dunkel (`text-white/80` → `text-white`)
- **CTA "Bereit für das Upgrade?"**: Überschrift war unsichtbar (navy auf navy → `text-white`)
- **CTA "Jetzt anfragen"**: Button öffnete Trial-Modal statt Kontaktformular — navigiert jetzt korrekt zu `n("contact")`


## v3.16 — 2026-04-10
### Redesign
- **Tablet-Showcase** komplett überarbeitet: iPad Pro Space Black Optik, dunkler Hintergrund (Navy-Gradient), Thumbnail-Vorschauzeile, Screen-Label im Display, Hover-Animationen, FaceID-Sensorleiste, Pencil-Anschluss, Seitentasten


## v3.15 — 2026-04-10
### Bugfix
- **sd-app-showcase.js** & **sd-tablet-showcase.js**: Showcases wurden auf allen Unterseiten (Vergleich, Features, Preise, Blog, Download) angezeigt — jetzt nur noch auf der Startseite (`/`)


## v3.14 — 2026-04-10
### Geändert
- **Seitenreihenfolge** neu strukturiert gemäß Vorgabe:
  1. Hero
  2. Ihre Branche (Branchen)
  3. Mitarbeiter-App (Handy-Showcase)
  4. Admin-Ansicht (Tablet-Showcase)
  5. Marktvergleich
  6. Preise
  7. Kundenstimmen
  8. FAQ
  9. CTA
- **React-Bundle** gepatcht: Sections ZgS/i1 und c1/d1 getauscht
- **sd-app-showcase.js**: Injection nach Branchen-Section (statt davor)


## v3.13 — 2026-04-10
### Neu
- **Tablet-Showcase** (`sd-tablet-showcase.js`): iPad-Landscape-Mockup mit Admin-Screenshots direkt auf der Startseite
- **Ordner `Tablet/`**: 8 Admin-Screenshots eingepflegt (Dashboard, Meldungen, Dienstplan, Team-Kalender, Mitarbeiter, Berechtigungen, Statistiken, Urlaub)
- **Ordner `Handy/`**: App-Screenshots für Mitarbeiter-App gesammelt
- **API `api/media/index.php`**: Automatischer Bild-Scanner — neue Bilder in `Tablet/` oder `Handy/` mit richtiger Bezeichnung werden sofort auf der Webseite angezeigt
- **Namenskonvention**: `Tablet/admin-{name}.jpg` oder `Handy/app-{name}.jpg` — Label wird automatisch aus Dateiname abgeleitet
- **`sd-app-showcase.js`**: Ebenfalls auf API umgestellt — lädt Bilder automatisch aus `Handy/`


## v3.12 — 2026-04-10
### Optimierung
- **Speicherbereinigung**: Drei ungenutzte Bildordner gelöscht — `screenshots/` (21MB), `download/img/` (16MB), `download/Bilder/` (20MB) → 57MB gespart
- **demo-video.html**: Bildpfade von `screenshots/` auf `Bilder/` umgestellt (Duplikate entfernt)
- **Aktivitätsprotokoll.png**: In `Bilder/` ergänzt (fehlte bisher)
- `download/`-Ordner ist jetzt sauber für Software-Updates reserviert


## v3.11 — 2026-04-10
### Bugfix
- **konto.html**: Verschachtelter `<style>`-Tag behoben — `@keyframes pulse`-Animation war in einem nested `<style>`-Block eingebettet, was zu CSS-Rendering-Fehlern in allen Browsern führte. Der innere `<style>`/`</style>`-Block wurde entfernt und der CSS-Code direkt in den äußeren Block integriert.


## v1.18 — 2026-03-31
### Bugfix
- **Bestellungen › Addons**: Addons wurden nach dem Entfernen beim Seitenneuladen wieder angezeigt
  - Ursache: `update_addons.php` schluckte Datenbankfehler stillschweigend (silent `catch`)
  - Fix: Echte Fehlerantwort (`success: false`, HTTP 404) wenn Bestellung nicht gefunden
  - Fix: Leere Addon-Liste `[]` wird korrekt in DB geschrieben (nicht als falsy behandelt)
  - Fix: React-Bundle ruft jetzt `loadApiOrders()` nach jedem Addon-Update auf → UI und Datenbank bleiben synchron
  - Fix: Auch bei Fehler wird `loadApiOrders()` aufgerufen → sicherer Daten-Abgleich


## v1.17 — 2026-03-30
- Rechnungs-Tab in Kundenprofil mit PDF-Download
- Mehrstufiger Onboarding-Willkommens-E-Mail-Aufbau
- Betrugsprävention: Rechnungen erst nach manueller Admin-Freigabe
- Lizenzschlüssel-Format: SHIFTDECK-A1B2-C3D4-E5F6


## v1.16
- Demo-Anfragen: 24-Stunden-Auto-Ablauf, 5-Tage-Auto-Löschung


## v1.15
- Kritischer Bugfix: verify.php setzte suspendierten Lizenzen fälschlicherweise auf `active`


## v2.92 – April 2026
### Geändert
- `download/features.html`: Komplett neu gestaltet — modernes Screenshot-Showcase-Layout
- 20 echte Admin-Screenshots eingebaut (Login, Dashboard, Dienstplan, Meldungen, Nachrichten, Team-Kalender, Kalender, Wochenrhythmus, Mitarbeiter, Berechtigungen, Projekte, GPS-Standorte, Statistiken, Stundenzettel, DATEV Export, Audit-Log, Einstellungen, Integrationen, DSGVO 2x)
- Screenshots in `/screenshots/sc-*.jpg` abgelegt
- Sticky Kategorie-Navigation mit aktiver Markierung beim Scrollen
- Browser-Frame (Mac-Dots) um alle Screenshots
- Badge-Labels pro Screenshot ("Admin-Bereich", "Dienstplan-Ansicht" etc.)
- Kern-Funktionen gold hervorgehoben (linker Balken)
- Komplett DSGVO/DSGVO-konforme Darstellung mit Datenschutz-Screenshots
- System & Sicherheit mit 4er-Grid aller relevanten Screenshots


## v2.93 – April 2026
### Geändert
- `download/features.html`: 20 weitere Screenshots eingebaut (40 Bilder gesamt)
- **Berichte & Statistiken**: Interaktive 8-Tab-Galerie (Anwesenheit, Überstunden, Krankheit, Urlaub, Kapazität, Trends, Grafiken, Lohnkosten)
- **System & Sicherheit**: Interaktive 10-Tab-Galerie aller Einstellungs-Bereiche
- **DATEV & Export**: Echter PDF-Stundenzettel als Vorschau (Browser-Style mit dunklem Hintergrund)
- **GPS & Mobil**: Geofencing-Dialog Screenshot hinzugefügt
- **Projekte**: Material-Datenbank Dialog hinzugefügt
- **Kommunikation**: E-Mail-Vorlagen Screenshot hinzugefügt
- Galerie-Tab-System (showTab Funktion) für interaktive Screenshot-Navigation



## v4.23 – April 2026
### ✨ Neu: Bidirektionales Ticket-System (Website ↔ Software)
- **`api/customer/tickets.php`**: Website-Tickets werden jetzt AUCH in die `tickets`-Tabelle (Software-Sync-Tabelle) geschrieben, wenn ein Lizenz-Schlüssel vorhanden ist → Software erhält diese Tickets automatisch per Sync
- **`api/tickets/index.php`**: `syncSdTickets()` erweitert — synct jetzt auch aus der `tickets`+`ticket_messages`-Tabelle (Software-erstellte Tickets) in `website_tickets` → Admin sieht alle Tickets in einer Ansicht
- **`konto.html`**: Beim Erstellen eines Tickets wird der Lizenz-Schlüssel des Kunden automatisch mitgesendet, um den bidirektionalen Sync zu aktivieren. Software-Tickets werden mit einem 🖥️-Badge angezeigt
- **`sw_`-Routing**: Antworten auf Software-Tickets (ID-Präfix `sw_`) werden korrekt in `ticket_messages`-Tabelle geschrieben, nicht in `website_tickets`
- **Neue SQL-Migration**: `shiftdeck_v4.23_bidirektionale_tickets.sql` für Datenbankupdates
- **E-Mail-Template**: Kunden-Bestätigungsmail zeigt jetzt an ob Software-Sync aktiv ist
- **Quelle-Kennzeichnung**: Tickets von Software oder Website werden im Admin-Bereich mit Quelle-Label versehen

### 🔧 Technisches
- `tickets/index.php`: Software-Tickets erhalten in `website_tickets` den Präfix `sw_` für korrektes Backend-Routing
- `customer/tickets.php`: GET-Endpunkt gibt jetzt auch Software-erstellte Tickets zurück (aus `tickets`+`ticket_messages` via Lizenz-Key-Lookup)
- Bidirektionale Antworten: Egal ob Admin über Website oder Software antwortet — der Kunde sieht die Antwort in beiden Interfaces


## v4.24 – April 2026
### ✨ Neu – Lizenz IP-Tracking & Installations-Status im Admin
- **Neuer Tab „Lizenz-Management"** in `admin/kunde.html`: Zeigt pro Lizenz Installations-IP, Online-Status, letzten Verbindungs-Check, Software-Version, gemeldete Nutzer und Hardware-ID
- **Online-Indikator** (grün/gelb/rot): Lizenz gilt als „Online" wenn der letzte Check < 90 Minuten zurückliegt
- **Neuer API-Endpunkt** `api/license/status.php`: Liefert vollständigen Verbindungsstatus für eine oder mehrere Lizenzen
- **`api/license/index.php` erweitert**: Bei jedem Verify-Call werden `installation_ip`, `app_version` und `user_count` in `licenses` + `license_hardware` gespeichert
- **IP-Lookup-Link**: Direktlink zu ipinfo.io für schnelle Geolokalisation der Installation
- **SQL-Migration** `shiftdeck_v4.24_lizenz_ip_tracking.sql` mit neuem View `v_license_status`


## v4.25 – April 2026
### ✨ Überarbeitet – Modul Add-ons mit Benutzeranzahl
- **Alle Module sind Add-ons** (inkl. Projekte & Baustellen)
- **Benutzeranzahl pro Modul** einstellbar in admin/kunde.html → Lizenz-Management → Module konfigurieren
- **licenses.php**: PUT {modules: {projekte: {active: true, user_count: 10}}} — neues Dict-Format
- **SQL-Migration** v4.25: Bestehende Array-Module automatisch in Dict-Format konvertiert, neuer View v_license_modules
