Commit graph

29 commits

Author SHA1 Message Date
268a1f5f54 WIP-Schnappschuss vor Migration 2026-09-28 (uncommittete Änderungen von feature/b2in-interior) 2026-09-28 15:46:34 +02:00
3211569fee Store Display: Bilddauer mit Nachkommastelle (1,5 Sekunden)
Das Feld „Dauer (Sekunden)“ im b2in-Display nimmt Komma und Punkt an,
erlaubt 0,5 bis 120 Sekunden und speichert eine Zahl; der Player rechnet
unverändert mal 1000. Anzeige in der Liste mit Komma. Nachtrag 14.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-17 09:52:33 +00:00
90aa079cf7 CMS: Standorte an der Marke, Seitenbaum mit Vorschau, Referenzen-Modul
Nachtrag 11: Herkunfts-Sektion liest Ort, Entfernung und Rolle aus der
Markenverwaltung (drei neue Felder an cms_brands, BrandOriginSeeder),
Kartenpositionen im Code, „Marken“ in der Sidebar.

Nachtrag 12: Inhalte-Editor zeigt die Seiten der Website mit ihren
Sektionen in Reihenfolge (config/cms_pages.php, CmsPageTree), Felder in
Klartext, fehlende Sektionen aus der Sprachdatei anlegbar, Vorschau der
echten Seite im iframe mit Sprung zur Sektion; Anker an allen lebenden
Sektionen nachgezogen.

Nachtrag 13: Referenzen als eigenes Modul (CmsReference, Portal-Seite,
/referenzen mit Fallback auf die Markengalerien); Immobilien-Projekte
aus Sidebar und CMS-Übersicht genommen, Route bleibt.

Dazu .gitignore für _b2in_interior_shop/ und docs/.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-15 14:58:45 +00:00
7953a8c9a1 Interior-Farbwelt, Welten-Trennung, Tischlerei und Herkunfts-Sektion
Arbeitsplan 14.09.2026, Punkte 1.1 bis 1.4 (Nachträge 6 bis 10 im Entwicklungsplan):

- Farbwelt Interior (Tanne, Creme, Sand, Ocker, Clay) als Standard, Immobilien-Welt
  behält das bisherige Blau über body.world-immobilien; Logo je Welt, Favicons neu,
  Welten-Wechsler in Kopf- und Fußzeile.
- Saubere Trennung der Welten: eigene Navigation, Ankündigungsleiste, Magazinliste,
  Über-uns-Seite, FAQ, Kontaktseite und Abschluss-CTA für Immobilien; Beiträge tragen
  eine Welt (Migration + Admin-Feld). Abschluss-CTA Ton in Ton statt Grün-zu-Ocker.
- Kontakt: Betreffe in Gruppen Interior / Immobilien / B2in, Marken darin.
  Terminanfrage-Buttons öffnen das Widget mit vorgewähltem Anliegen; Select-Felder
  einheitlich gestaltet.
- Tischlerei als vierte Kernmarke (Platzhalter), Kachelraster 2×2.
- Herkunfts-Sektion „Aus der Region gefertigt“ mit schematischer Standortkarte und
  Ablauf CABINET (Beratung Bielefeld, Fertigung Köln, Aufbau mit Tischlerei).

Deployment: migrate, WorldSplitCmsSeeder, CmsBrandSeeder, OriginSectionCmsSeeder
(Abschnitt 8 im Entwicklungsplan).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-15 12:46:41 +00:00
1242d4bce8 Markenlogos optisch aufeinander abstimmen
Gewuenscht: CABINET 15 Prozent kleiner, Rotpunkt 20 Prozent groesser, Februe
unveraendert. Rotpunkt fuellte die Box bereits ganz aus und konnte nur ueber
eine groessere Box wachsen.

- Alle vier Logo-Boxen 20 Prozent hoeher (Seitenkopf 96 → 115 px, Kacheln
  44 → 53 px, /marken 56 → 67 px). Rotpunkt waechst dadurch um genau 20 %.
- Februe gleicht das ueber 20 Prozent Luft oben und unten in der Datei aus und
  rendert unveraendert.
- CABINET bekommt 18 Prozent Luft rechts – die Box begrenzt den 4:1-Schriftzug
  ueber die Breite, nicht ueber die Hoehe. Die Luft sitzt nur rechts, damit das
  Logo links buendig zum Text darunter bleibt.

Nachgerechnet an allen drei Stellen: CABINET 85 %, Rotpunkt 120 %, Februe 100 %.

Die Abstimmung steckt in den Zeichenflaechen der Dateien, nicht im Blade – so
gilt sie an allen vier Stellen gleichzeitig. Der Merksatz fuer neue Logos steht
im Kopf von BrandLogoSeeder.

Tests: 873 gruen (3217 Assertions), Pint sauber, alle Themes gebaut.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-03 12:47:41 +00:00
c8899e2d7d Markenlogos einbinden: Seitenkopf und alle Kacheln
Zulieferung dev/2026-08-28/markenlogos/ (CABINET und Rotpunkt als SVG, Februe
als PNG). Die Dateien liegen unter public/img/assets/marken/ und haengen als
`logo` an der jeweiligen Marke.

- Kopf der Markenseite: Logo anstelle des Schriftzugs, im <h1>, damit die
  Ueberschrift erhalten bleibt – den Text liefert das alt-Attribut. Ohne Logo
  erscheint weiterhin der Schriftzug.
- Logo zusaetzlich auf der Startseiten-Kachel, im Block auf /marken und in den
  „Weitere Marken“-Kacheln am Seitenfuss.
- Feste Box (Hoehe + Maximalbreite + object-contain) statt fester Hoehe: die
  Seitenverhaeltnisse gehen weit auseinander (Februe 2,3:1, Rotpunkt 1,2:1),
  mit reiner Hoehenangabe waere Februe doppelt so breit erschienen. Konvention
  aus der Sponsoring-Sektion.
- Februe-Logo auf seinen Inhalt beschnitten: im Original waren knapp drei
  Viertel der Flaeche leerer Rand, in einer Box haette es winzig gewirkt.
  53 KB → 15 KB.
- BrandLogoSeeder traegt die Logos auf bestehenden Installationen nach –
  CmsBrandSeeder ueberspringt vorhandene Marken. Setzt nur `logo` und nur bei
  leerem Feld, ein im Admin hochgeladenes Logo bleibt stehen.

Tests: 871 gruen (3215 Assertions), Pint sauber, alle Themes gebaut.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-03 11:16:41 +00:00
093e0ece51 Abschluss-CTA: Ausnahme vom Glass-Flow-Sektionshintergrund
Nach dem Build stand der Abschluss hellgrau mit weisser Schrift da.
`.variante-glass-flow section` faerbt jede Sektion in diesem Wrapper hell ein
und ist mit (0,1,1) spezifischer als `.cta-band` mit (0,1,0). Fuer
`.bg-secondary` und `.bg-accent` gibt es dort laengst Ausnahmen – die neue
Klasse brauchte dieselbe. /marken/{slug} haengt in genau diesem Wrapper.

Der Verlauf steht jetzt in --cta-band-gradient und wird von beiden Regeln
benutzt, damit er nicht doppelt gepflegt werden muss. Ein Test haelt die
Ausnahme fest.

Nebenbei dokumentiert: `npm run build:web` baut nur die vier Frontend-Themes,
nicht das Portal. Ohne `npm run build:portal` liefert das Admin-Portal 500 –
in Deployment-Checkliste und Vorschau-Runbook ergaenzt, samt Pruefschleife
ueber alle fuenf Manifeste.

Tests: 863 gruen (3194 Assertions), Pint sauber, alle Themes gebaut.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-03 10:36:02 +00:00
3ee7b44a77 Abschluss-CTA: durchgehender Verlauf statt weicher Kreise
Die beiden blur-Kreise ueber dem Hellblau wirkten als Flecken – der dunkle
rechts unten am staerksten. Ersetzt durch .cta-band in shared-styles.css: ein
durchgehender Verlauf ueber die volle Breite, von Anthrazit diagonal in das
Dynamic Blue, beides aus den Theme-Variablen.

- Tiefe kommt aus dem Verlauf, nicht aus ueberlagerten Flaechen.
- Zwei Haarlinien als Kontur: eine oben ueber die Breite, eine als Auftakt
  ueber der Ueberschrift, beide zu den Seiten auslaufend.
- Buttons filigraner: duennerer Rahmen beim Outline-Button, weicherer Schatten
  beim Hauptbutton.

Der Verlauf liegt als CSS-Klasse vor und nicht als Utility-Kette im Blade,
damit er mit den Theme-Variablen arbeitet und ueber alle Themes stimmt.

Tests: 862 gruen (3192 Assertions), Pint sauber, npm run build:b2in gebaut.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-03 10:12:20 +00:00
f971f416db Akkordeons weicher aufklappen, starken Hover entfernen
Die Klappelemente sprangen auf und zu: x-show gibt dem Element sofort die
volle Hoehe und blendet nur den Inhalt ein. Ersetzt durch eine Animation von
grid-template-rows 0fr → 1fr ueber 500 ms mit cubic-bezier(0.33, 1, 0.68, 1),
die die tatsaechliche Hoehe bewegt – ohne das Alpine-Collapse-Plugin, das in
diesem Projekt nicht registriert ist.

- Der zugeklappte Zustand steht auch statisch im class-Attribut, damit vor dem
  Start von Alpine nichts aufgeklappt aufblitzt.
- aria-hidden haengt am Zustand, weil der Inhalt jetzt dauerhaft im DOM steht.
- Hover: die Flaechenaufhellung (hover:bg-muted/30) ist raus, geblieben ist ein
  feiner Farbwechsel der Ueberschrift. Im FAQ entfaellt zusaetzlich der
  Hintergrundwechsel am Icon-Kreis.
- Der Pfeil dreht in derselben Dauer und Kurve wie das Aufklappen.

Betrifft beide Akkordeons – die Vertiefungen der Markenseiten und das FAQ.

Tests: 861 gruen (3189 Assertions), Pint sauber, npm run build:b2in gebaut.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-03 10:00:39 +00:00
a52347845e Abstimmungsrunde 03.09.: CABINET-Seite, korrigierte Markentexte, Galerie-Hinweise, Abschluss-CTA
Setzt die vier Punkte aus dev/2026-08-28/umsetzung-03-09-2026.md um.

1. Markenseiten
   - Rotpunkt und Febrü auf die korrigierten Fassungen (*_FINAL.md) gebracht:
     bei Rotpunkt sind die beiden Nachhaltigkeitsabschnitte zusammengefuehrt,
     bei Febrü behaelt der Blaue-Engel-Satz seinen Produktbezug ohne den
     erklaerenden Zusatz.
   - CABINET nach demselben Muster neu verfasst: 8 Abschnitte, 3 Vertiefungen,
     eigener Abschlussblock und eigene Widget-Beschriftung. Bewusst ohne Zahlen,
     Zertifizierungen oder Herstelleraussagen – dafuer gibt es keine Quelle.
     Braucht Marcels Freigabe.
   - Febrü-Claim korrigiert: „Arbeiten, wo man gerne bleibt.“

2. „BEISPIEL“-Vermerk aus den Bildunterschriften entfernt. Weil die Demobilder
   auf Vorschau und Live bereits in der Datenbank stehen, entfernt
   BrandGalleryCaptionNormalizerSeeder ihn dort in-place – nur der Text, Bild,
   Kategorie und Reihenfolge bleiben unberuehrt.

3. Hinweise zu Visualisierungen neu formuliert (Markengalerie und /referenzen).
   Die Trennung bleibt, sie laeuft nur nicht mehr ueber eine Verneinung.

4. Abschluss-CTA der Markenseiten ueberarbeitet: weiche Lichtflaechen statt
   Vollton, gesetzter Hauptbutton mit Pfeil, Herstellerseite als gleichwertiger
   Outline-Button, Showroom als Fusszeile.

Ein Pruefskript hat jeden veroeffentlichten Satz gegen die abgestimmten
Markdown-Fassungen gehalten: keine Abweichung.

Tests: 859 gruen (3180 Assertions), Pint sauber, npm run build:b2in gebaut.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-03 09:17:16 +00:00
4ef3a4d8f1 Markenseiten Rotpunkt und Febrü aus der Zulieferung vom 31.08.
Umsetzung der beiden finalen Webseitentexte aus dev/2026-08-28/.
Die angekündigte Aufgabenliste umsetzung-03-09-2026.md war leer, Grundlage
sind daher die Umsetzungshinweise in den PDFs selbst.

- Neue Felder in cms_brands: sections, widget_label, cta_title, cta_text.
  Einleitung und Leistungskacheln reichten für diese Texte nicht aus.
- Die als Vertiefung gelieferten Blöcke werden aufklappbar dargestellt,
  mit aria-expanded und aria-controls. Bewusst x-transition statt
  x-collapse, weil das Collapse-Plugin hier nicht registriert ist.
- Kein zweiter CTA-Button: das schwebende Terminanfrage-Widget trägt auf
  der Markenseite die Beschriftung der Marke und liest den Kontext aus
  der Route, da es im Layout und nicht je Seite eingebunden ist.
- Footer bekommt unten Platz und lange Beschriftungen brechen um, damit
  das Widget auf dem Smartphone nichts verdeckt.
- Abschnitte sind im Admin vollständig pflegbar, inklusive Sortierung.
- Interne Quellenhinweise der PDFs sind nicht übernommen; ein Test prüft,
  dass sie nicht im Ausgabe-HTML stehen.
- BrandPageTextSeeder fasst nur die Textfelder an, Bilder, Galerie und
  Leistungen bleiben unangetastet.

Vor der Veröffentlichung: Herstellerfreigabe einholen und die Aussage zur
erhaltenen Waldfläche nur mit ausdrücklicher Bestätigung verwenden. Beides
steht in der Deployment-Checkliste.

854 Tests grün (3150 Assertions), Pint sauber.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-03 08:52:36 +00:00
6d53243ea6 B2in Interior: Relaunch der Website, Kernmarken-CMS und Terminanfrage
Umsetzung von AP0-AP6 aus dev/2026-08-28/entwicklungsplan.md sowie der
vorab gefundenen Befunde T1 und B1-B13.

Befunde
- CmsContentSeeder überschrieb bei jedem Lauf alle redaktionellen Inhalte;
  jetzt Redaktionsschutz plus gezielter Relaunch-Seeder (B1)
- Magazin-CMS war nicht ans Frontend angebunden, Artikel jetzt über Slugs
  mit 301 von den alten numerischen URLs (B2)
- Vier veröffentlichte Display-Playlists zeigten auf b2in.test und wären
  live nicht ladbar gewesen (B13)
- Info-Tablet speicherte geleerte Öffnungszeiten nicht (T1)
- /service und /portfolio lieferten seit Februar 500 (B12)

Website
- Startseite neu strukturiert und umgetextet, eigene Seite /marken mit
  Detailseite je Kernmarke, /netzwerk und Altrouten leiten dorthin
- Galerie je Marke, getrennt nach realisierten Projekten und
  Visualisierungen; ohne gesetzte Kategorie gilt ein Bild als Entwurf
- Seite /referenzen, gespeist aus den Markengalerien
- Showroom-Display im 9:16-Rahmen über eine schreibgeschützte Embed-Route
  ohne Preview-Token
- Terminanfrage-Widget auf allen Seiten, Markenauswahl aus dem CMS,
  WhatsApp per Klick-zum-Chat-Link mit vorbereitetem Text
- FAQ, Über-uns, Kontakt und Magazin inhaltlich auf Interior umgestellt

Sonstiges
- Vorschau-Instanzen liefern noindex und verlinken sich bei unbekanntem
  Host auf sich selbst statt auf eine fremde Domain
- Seeder-Zugangsdaten aus dem Code in die Konfiguration (B8)
- Ablauf für die Vorschau: dev/2026-08-28/preview-deployment.md

833 Tests grün (3084 Assertions), Pint sauber.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-28 15:31:19 +00:00
193d37b1ce Display CMS: Upload-Fehler abfangen und kaputte Bilder im Player überspringen.
Mediathek-Uploads legen keinen Datensatz mehr an, wenn der Datei-Write
fehlschlägt (verhindert 404-Einträge auf den Displays). Der Player
überspringt Bilder mit Ladefehler nach 2s statt Schwarzbild zu zeigen.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-07 08:57:31 +00:00
7491d20d39 Display CMS: Footer-Verlauf, Format-Hinweise und Switch-Fixes.
Blendet den B2IN-Text-Verlauf ohne Footer aus, zeigt 9:16-Format-Badges in der Mediathek, normalisiert Modul-Booleans und korrigiert Flux-Switches im Dark Mode.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-18 08:27:44 +00:00
6c2da9bdac Display-Module in der Modulliste duplizieren.
Ermöglicht das Kopieren inklusive aller Inhalte und Einstellungen mit fortlaufender Benennung als „Kopie N - …“.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-18 08:24:40 +00:00
bebfa63e87 Display CMS Optimierungen 03-06-2026 2026-06-03 15:43:18 +02:00
6c6d683b9a Display CMS Optimierungen 29-05-2026
- Mediathek: Video-Vorschaubilder statt Icons (FFmpeg-Thumbnails + Backfill-Command), Kategorie "Sonstiges"
- B2in Media-Picker zeigt alle Medientypen, Typ wird automatisch erkannt; Thumbnail-Preview vor allen Medien-URL-Feldern
- B2in Marke/Footer: Footer ein/aus, Logo+Claim frei positionierbar (Ecken) mit Constraints, separate Anzeige-Schalter
- Angebote-Modul dynamisch: kein Slide-Typ mehr, einheitliches Detail-Layout mit ein-/ausblendbaren Bloecken, Logo/Brand pro Slide, Streichpreis-Option
- Player: leere Module stoppen Endlosschleife, dynamische Layout-Anpassung bei verstecktem Footer/Header
- Fix: Script-Ladereihenfolge (Livewire vor Flux), entfernte stale public/flux/flux.js, Modal-Crash beim Aktualisieren behoben

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-29 15:57:33 +00:00
9262132325 Display Module 13-05-2026 2026-05-13 14:34:08 +02:00
6a65354f4c 12-05-2026 admin, Panel Displays 2026-05-12 18:28:38 +02:00
0762e3beac Immobilien, sidebar nav mobile 2026-05-11 11:02:47 +02:00
6799325f71 Immobilien site 11-05-2026 2026-05-11 10:29:37 +02:00
e198d842ce dev immobile 2026-05-08 10:41:03 +02:00
18ca2ce858 07-05-2026 2026-05-07 13:03:01 +00:00
4bb89aad8c 10-04-2026 2026-04-10 17:18:17 +02:00
4d6b4930b2 20-02-2026 2026-02-20 17:57:50 +01:00
854ce02bf6 23-01-2026 2026-01-23 17:33:10 +01:00
07959c0ba2 21-11-2025 2025-11-21 18:21:23 +01:00
fa2ebd457d development 31-10-2025 2025-10-31 17:11:43 +01:00
7cf3558ba7 First commit 2025-10-20 17:50:35 +02:00