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>
This commit is contained in:
Kevin Adametz 2026-09-15 12:46:41 +00:00
parent 1242d4bce8
commit 7953a8c9a1
137 changed files with 3840 additions and 589 deletions

View file

@ -4,8 +4,9 @@
**Basis:** `B2in_Interior-Konzept.md`, `umsetzungliste.md`, `umsetzung-inhalte.md`
**Vorgänger:** `dev/2026-02-27/b2in-website-umsetzungsplan.md`
**Rahmen:** 37–39 Std. freigegeben (18 + 8 + 4 + 3 + 4–6)
**Status:** Revision 13 – **AP0–AP6 umgesetzt**, Seite abgestimmt, Markentexte Rotpunkt und Febrü
eingearbeitet. Offen: Bildmaterial, Rechtstexte und die Herstellerfreigaben.
**Status:** Revision 14 – **AP0–AP6 umgesetzt**, Seite abgestimmt, Markentexte Rotpunkt und Febrü
eingearbeitet. **Arbeitsplan 14.09. (`umsetzungen-14-09-2026.md`), Punkt 1.1 Farbwelt und Logo
umgesetzt (Nachtrag 6).** Offen: Bildmaterial, Rechtstexte und die Herstellerfreigaben.
**Umgebung:** Dev Container, `php artisan …` (nicht `vendor/bin/sail …`)
> **Verbindliche Schreibweisen:** **Interior** (nicht „Interieur"), **Febrü**, **Rotpunkt Küchen**, **CABINET**.
@ -35,6 +36,11 @@ ausführlichen Text. `php artisan test --compact`: **873 grün** (3217 Assertion
| Abstimmungsrunde 03.09.: korrigierte Texte, CABINET-Seite, Galerie-Hinweise, Abschluss-CTA | ✅ |
| AP4 Display-Spiegelung | ✅ |
| AP5 Rubrik-Seite „Referenzen" | ✅ |
| Arbeitsplan 14.09. · 1.1 Farbwelt, Logo je Welt, Welten-Wechsler | ✅ (Nachtrag 6) |
| Welten-Trennung: Navigation, Magazin, Über uns, FAQ, Widget je Welt | ✅ (Nachtrag 7, Erweiterung zu 1.1) |
| Arbeitsplan 14.09. · 1.2 Tischlerei als vierte Marke (Platzhalter) | ✅ (Nachtrag 9) |
| Arbeitsplan 14.09. · 1.4 Akkordeon und Widget-Beschriftung je Marke | ✅ (bereits seit 03.09., CABINET-Text fehlt im CMS) |
| Arbeitsplan 14.09. · 1.3 Herkunfts-Sektion „Aus der Region gefertigt“ | ✅ (Nachtrag 10, Ablauf CABINET von Marcel bestätigen lassen) |
### Nächste Schritte
@ -1256,6 +1262,17 @@ php artisan db:seed --class=BrandGalleryCaptionNormalizerSeeder --force
# hochgeladenes Logo bleibt stehen. Braucht public/img/assets/marken/ aus dem Archiv.
php artisan db:seed --class=BrandLogoSeeder --force
# 7. Welten-Trennung (Nachtrag 7): Navigation und Inhalte der Immobilien-Welt anlegen,
# Interior-Navigation ohne „Immobilien“ und Magazin-Einleitung ohne Dubai-Bezug setzen.
# Die Migration ordnet die drei Dubai-Beitraege der Immobilien-Welt zu.
php artisan db:seed --class=WorldSplitCmsSeeder --force
# 8. Vierte Kernmarke „Tischlerei“ als Platzhalter (Nachtrag 9) – legt nur an, was fehlt.
php artisan db:seed --class=CmsBrandSeeder --force
# 9. Herkunfts-Sektion „Aus der Region gefertigt“ (Nachtrag 10) – legt die Sektion nur an, wenn sie fehlt.
php artisan db:seed --class=OriginSectionCmsSeeder --force
php artisan config:cache
php artisan view:clear
@ -1342,3 +1359,265 @@ genügt ein selektives Zurückspielen von `flux_cms_contents`, `display_versions
- [ ] Markengalerien vor dem Livegang durchsehen: jedes Bild muss in der richtigen Rubrik stehen.
Ohne gesetzte Kategorie erscheint ein Bild als „Visualisierung" – für ein echtes Projektfoto
also bewusst „Realisiertes Projekt" wählen.
---
## Nachtrag 6 · Arbeitsplan 14.09.2026, Punkt 1.1: Farbwelt und Logo (14.09.2026)
Grundlage: `umsetzungen-14-09-2026.md` (freigegebener Umfang Phase 1) und die Shop-Screenshots
unter `_b2in_interior_shop/screenshots/web/` als optische Richtung: warme Creme-/Sandflächen,
dunkles Tannengrün als Kontrast, Serifen-Überschriften, ruhige Flächen ohne Leuchteffekte.
### Zwei Welten auf einem Themensystem
`theme-b2in.css` definiert die **Interior-Welt als Standard** auf `:root` und die
**Immobilien-Welt** als Override unter `.world-immobilien` – dieselben Token-Namen, andere Werte.
Das Layout setzt die Welt als Body-Klasse (`world-interior` / `world-immobilien`), ermittelt
über `b2in_world()` in `app/helpers.php`: Immobilien sind alle Routen `immobilien*` und
`dev.immobilien*`, alles andere ist Interior. Bestehende Sektionen mussten dafür nicht angefasst
werden – sie nutzen bereits die Tokens (`text-secondary`, `bg-accent`, `cta-band` …).
| Token | Interior (neu) | Immobilien (wie bisher) |
|---|---|---|
| `--background` | Creme `#f7f4ef` | helles Beige `#f5f4f2` |
| `--foreground` | Anthrazit `#2d2926` | `#2a2a2a` |
| `--primary` (Buttons, dunkle Sektionen, Wortmarke) | Tanne `#202c2b` | Anthracite `#2b3f51` |
| `--secondary` (Akzent, Hervorhebungen, Logo-Bogen) | Ocker `#d39e46` | Dynamic Blue `#20a0da` |
| `--accent` (Sektionswechsel) | Sand `#d9cbbf` | helles Grau |
| `--clay` (neu) | Clay `#a38f82` | gedämpftes Blau |
| `--footer-*` (neu) | Sand mit Tanne | Anthracite mit Weiß |
| `--cta-band-end` (neu) | helleres Tannengrün (Ton in Ton, Korrektur 15.09.) | Dynamic Blue |
| `--font-secondary` (Überschriften) | EB Garamond (liegt lokal vor) | IBM Plex Sans |
**Kontrast-Entscheidungen:** Ocker trägt keinen hellen Text (Creme auf Ocker ≈ 2,5:1). Deshalb
ist Ocker in der Interior-Welt Akzent, kein Flächenton unter Text: der Kontakt-Button im Kopf
und der zweite Hero-Button laufen jetzt auf Tanne (gefüllt bzw. als Kontur, `.world-interior
.btn-secondary-accent`), der Abschluss-CTA der Startseite liegt auf dem Abschlussband
(`cta-band`) mit weißem Button – wie auf den Markenseiten. **Korrektur 15.09.:** Der Verlauf
Grün → Ocker wirkte unharmonisch; das Band läuft jetzt Ton in Ton in ein helleres Tannengrün aus,
Ocker sitzt nur noch in der Haarlinie oben. Hervorgehobene Wörter im Bandtitel („Ihr nächster
Schritt") tragen im CMS `text-primary` und waren auf dem dunklen Band unlesbar – in beiden
Welten. `.cta-band .text-primary` setzt sie auf den Akzent der Welt (Ocker bzw. Blau). Ocker-Text
im Footer auf Sand nutzt die tiefe Stufe `--secondary-deep`. `--muted-foreground` ist ein
abgedunkelter Clay, damit Fließtext auf Creme lesbar bleibt (Clay pur ≈ 2,9:1).
**Aufgeräumt:** Die Glow- und Schattenklassen in `shared-styles.css` (`glow-*`, `shadow-elegant`,
`shadow-premium`, Button-Hover im Glass-Flow) hatten ein festes Blau (`rgba(0,136,204)`,
`hsla(199 …)`) – jetzt hängen sie am Akzent der Welt. Karten im Glass-Flow nutzen `--card`
statt festem Weiß.
### Logo je Welt
Zulieferung 07.09.2026 (`dev/2026-08-28/logos/`): das Interior-Logo in Tanne mit Ocker-Bogen
(positiv) bzw. Creme mit Ocker-Bogen (negativ) und das B2In-Logo ohne Zusatz mit blauem Bogen.
Beide Familien sind auf den Inhalt beschnitten (Interior `viewBox="152.5 94.5 289 228"`,
B2In `viewBox="4.5 2 301 176"`) und liegen als SVG und PNG (240 px hoch) unter
`public/img/logos/`; die Interior-Varianten zusätzlich unter `public/_cabinet/assets/` für das
Display. `ThemeHelper::getLogoPath($type, $world)` liefert die Datei je Welt.
Header und Footer halten Welt und Logo-Pfad in `mount()` fest, weil ein späterer
Livewire-Request keine Seitenroute mehr trägt. Der Interior-Footer liegt auf Sand und zeigt das
**positive** Logo; der Immobilien-Footer bleibt dunkel mit dem negativen.
**Favicons** (`public/favicon/`, alle Größen plus `favicon.ico`) neu aus der Wortmarke in
Tanne/Ocker erzeugt; `theme-color` auf Creme. Die bisher tote Referenz
`img/favicons/b2in-favicon.ico` (`ThemeHelper::getFaviconPath()`) existiert jetzt.
Mail-Kopf auf Tanne.
### Welten-Wechsler
Kopfzeile (Desktop rechts neben dem Sprachwechsel, mobil als erster Block im Menü) und Footer
tragen einen Umschalter „Interior | Immobilien" (`b2in_worlds()`, Labels in `ui.php` de/en).
Die aktive Welt ist gefüllt und trägt `aria-current="page"`.
### Tests
`tests/Feature/ColorWorldsTest.php` (neu, 14 Fälle): Body-Klasse und Logo je Welt für
Startseite, `/immobilien`, Detailseite und weitere Seiten; `ThemeHelper::getLogoPath()` je Welt
und für Fremd-Themes; Dateien und Farbwerte beider Logo-Familien; Wechsler in Kopf und Fuß mit
korrekter Markierung; Tokens im Theme; kein festes Blau mehr in den Effekten.
`HomePageStructureTest` an den neuen Zuschnitt und den Sand-Footer angepasst.
### Offen nach diesem Nachtrag
- **Freigabe Marcel:** Farbwerte sind laut Plan „blockierend für 1.1" und wurden wie geliefert
umgesetzt. Die **Serife für Überschriften** (EB Garamond) ist eine Ableitung aus den
Shop-Screenshots, kein Planpunkt – ein Token in `theme-b2in.css`, bei Ablehnung in einer Zeile
zurück auf IBM Plex Sans.
- **Bildwelt:** Die Farbwelt wirkt erst mit warmem Bildmaterial (Hero, Kacheln) vollständig; die
Bestandsbilder aus der Immobilien-Zeit sind kühl. Zulieferung weiterhin offen.
- **Display-Player:** nutzt die neuen Interior-Dateien automatisch; der Theme-Scrim im Player
ist weiter neutral dunkel, keine Anpassung an Tanne vorgenommen.
- Nächste Schritte laut Reihenfolge im Arbeitsplan: 1.2 Tischlerei-Markenseite (blockiert durch
Name, Logo, Bilder), 1.3 Herkunfts-Sektion (blockiert durch CABINET-Klärung), 1.4 Akkordeon
und Widget-Beschriftung.
---
## Nachtrag 7 · Saubere Trennung der beiden Welten (14.09.2026)
Abgestimmt mit Kevin am 14.09.: Nach der Farbwelt-Umstellung zeigte die Immobilien-Welt noch die
Interior-Navigation, und das Magazin mischte Dubai- und Einrichtungsthemen. Entscheidung: **jede
Welt hat ihre eigene Navigation, der Welten-Wechsler ist die einzige Brücke.** Umfang ist eine
Erweiterung zu 1.1 des Arbeitsplans (nicht im freigegebenen Plan enthalten, Aufwand ca. 6–9 h).
### Was je Welt getrennt ist
| Bereich | Interior | Immobilien |
|---|---|---|
| Navigation (CMS) | `global.header`: Home · Marken · Referenzen · Magazin · Über B2in | `global.header_immobilien`: Immobilien · Projekte · Magazin · Über B2in |
| Ankündigungsleiste (CMS) | `global.announcement_bar`: aktuelles Interior-Thema (Rotpunkt) | `global.announcement_bar_immobilien`: aktuelles Projekt (Azizi Creek Views 4, wie vor dem Relaunch), eigener Dismiss-Schlüssel |
| Magazin | `/magazin` – nur Interior-Beiträge | `/immobilien/magazin` – nur Immobilien-Beiträge |
| Über uns | `/about` (unverändert) | `/immobilien/ueber-b2in` – Inhalte aus der Zeit vor dem Relaunch, leicht angepasst, als „B2in Immobilien" gekennzeichnet, Claim „Connecting Design and Property" |
| FAQ | `/faq` (unverändert) | `/immobilien/faq` – Fragen zu Investment, Reisen, Steuern, Einrichtung nach dem Kauf |
| Kontakt | `/contact` (unverändert) | `/immobilien/kontakt` – gleiche Seite, eigener Einstieg und eigene Betreffe (Overlay `contact_form_immobilien` über `contact_form`), Mail-Betreff „Kontaktanfrage B2in Immobilien: …"; Kontakt-Button im Kopf und CTAs der Immobilienseite zeigen dorthin |
| Footer-Links | wie bisher | FAQ, Über uns und Magazin zeigen auf die Immobilien-Seiten |
| Terminanfrage-Widget | Anliegen offen | Anliegen „Immobilien" vorbelegt, Mail-Betreff „Terminanfrage B2in Immobilien" |
**Gemeinsam bleiben** Rechtstexte und die Cookie-Seiten. (Kontakt war zunächst gemeinsam, seit 15.09. je Welt.)
### Magazin: Beiträge haben eine Welt
Neues Feld `world` (`interior` | `immobilien`) an `cms_articles`, im Admin als Auswahl „Welt"
mit Badge in der Liste. Die Migration ordnet die drei Dubai-Beiträge (Escrow, Al Jaddaf,
Turnkey) der Immobilien-Welt zu; der Supply-Chain-Beitrag bleibt laut Abstimmung unter B2B in
Interior. `CmsArticle::forFrontend($world)` filtert, Lang-Fallback inklusive.
Die **Detailseite behält ihre URL** (`/magazin/{slug}`, SEO und 301-Weiterleitungen bleiben),
rendert aber in der Welt ihres Beitrags: die Route setzt die Welt per `b2in_world_set()` vor dem
Rendern, weil Kopf- und Fußzeile sie in `mount()` festhalten. Verwandte Beiträge und der Rückweg
zur Liste bleiben in derselben Welt.
### Technik
- `b2in_world()` prüft zuerst einen expliziten Override (`b2in_world_set()`), dann die Route.
- Header: Navigation je Welt; der aktive Pfad wird in `mount()` festgehalten (vorher ging die
Markierung bei jedem Livewire-Request verloren) und nur der spezifischste Eintrag ist aktiv
(`/immobilien/magazin` markiert „Magazin", nicht „Immobilien").
- `AboutHero`, `OurStory`, `OurValues` nehmen jetzt wie `ImageBreak` einen Sektionsschlüssel.
- Kontaktformular: Betreffe in drei Gruppen (Interior · Immobilien · B2in, `form.subject_groups`).
Die Kernmarken aus dem CMS stehen automatisch am Anfang der Interior-Gruppe, die Welt der Seite
bestimmt, welche Gruppe oben steht. Betreff wird jetzt gegen die Liste validiert. Ältere
CMS-Stände mit flacher `subjects`-Liste funktionieren weiter (Fallback ohne Gruppen).
- Abschluss-CTA („Ihr nächster Schritt") je Welt: `global.cta_section_immobilien` mit eigenem Text
und Link auf `/immobilien/kontakt`; greift automatisch auf allen Seiten der Immobilien-Welt.
- Neue CMS-Sektionen (alle im Admin pflegbar): `header_immobilien`, `announcement_bar_immobilien`, `contact_form_immobilien`, `cta_section_immobilien`, `magazin_list_immobilien`,
`faq_immobilien`, `immobilien_about_hero`, `immobilien_our_story`,
`immobilien_about_image_break`, `immobilien_our_values`.
- `WorldSplitCmsSeeder` legt die neuen Sektionen an und setzt **zwei** Interior-Sektionen aus
den Lang-Dateien zurück: `header` (ohne „Immobilien") und `magazin_list` (ohne Dubai-Bezug).
Lokal ausgeführt, beim Deployment mit erledigen (Abschnitt 8).
### Tests
`tests/Feature/WorldSplitTest.php` (neu, 18 Fälle): Navigation je Welt inkl. aktiver Markierung,
Footer-Links, beide Magazinlisten, Detailseite in der Welt des Beitrags, verwandte Beiträge,
CMS-Beiträge je Welt, Editor-Auswahl und -Validierung, Über-uns- und FAQ-Seite der
Immobilien-Welt, Widget-Vorbelegung. `MagazinPageTest`, `HomePageStructureTest`,
`LiveSiteReviewTest` und `CmsAdminTest` an die Trennung angepasst.
### Offen
- Navigationspunkt „Projekte" zeigt auf den Anker `#projekte` der Immobilienseite.
- Die Immobilien-Seite selbst nutzt weiter feste Farben (`bg-zinc-950`, Status-Badges in
emerald/sky/amber) außerhalb des Token-Systems – funktioniert in der blauen Welt, ist aber
nicht themenfähig.
- `LiveSiteReviewTest` prüft die Startseite noch auf das Wort „Netzwerk" (steht im Fließtext);
kein Navigationspunkt.
---
## Nachtrag 8 · Terminanfrage-Buttons öffnen das Widget (15.09.2026)
Auf der Seite gibt es mehrere Sektionen mit „Termin anfragen"-Buttons (Hero, Weiche, Abschluss-CTA,
`/marken`-Abschluss, Markenseiten, Referenzen, Immobilienseite). Bisher führten sie auf die
Kontaktseite. Jetzt öffnen sie das schwebende Terminanfrage-Widget; von einer Markenseite aus ist
die Marke im Anliegen vorbelegt. Die Anliegen-Auswahl des Widgets bleibt wie sie ist (Marken plus
feste Einträge, keine Gruppen – die gibt es nur auf der Kontaktseite).
**Wie:** Blade-Komponente `<x-appointment-link :href :topic>`. Zeigt `href` auf `/contact` oder
`/immobilien/kontakt`, trägt der Link `data-open-appointment` (und `data-appointment-topic`); ein
Klick-Delegat in `resources/js/app.js` fängt ihn ab und feuert `open-appointment`, das Widget
öffnet sich, übernimmt das Anliegen (nur wenn es in der Auswahl existiert) und fokussiert das
Namensfeld. Ohne JavaScript bleibt es ein normaler Link; zeigt der CMS-Link woandershin, bleibt
er ein gewöhnlicher Link. Der Kontakt-Button im Kopf bleibt bewusst ein Link zur Kontaktseite.
**Formularfelder** in Widget und Kontaktformular tragen jetzt die tokenbasierten Klassen
`.form-field` / `.form-select` (shared-styles.css): Kartenton als Grund, Fokusring im Akzent der
Welt, eigener Chevron und lesbare Gruppenüberschriften in der Betreff-Auswahl – statt
Tailwind-Grau.
**Tests:** `tests/Feature/AppointmentTriggerTest.php` (9 Fälle).
---
## Nachtrag 9 · Tischlerei als vierte Kernmarke, Platzhalter (15.09.2026)
Arbeitsplan 14.09., Punkt 1.2. Name, Logo, Basisinfos und Bilder fehlen noch (blockierend laut
Plan), Platzhalter sind ausdrücklich erlaubt. Die Marke ist deshalb als **Denkanstoß** angelegt:
- **Marke `tischlerei`** im `CmsBrandSeeder` (vierter Eintrag, wird bei bestehenden Marken nicht
doppelt angelegt). Inhalte entlang der Ausrichtung aus dem Plan – Aufbau, Sonderlösungen,
Veredelung, Maßarbeit; ergänzt CABINET und Rotpunkt, steht nicht daneben; Werkstatt in
Ostwestfalen ohne Nennung des Partnerbetriebs. Drei Abschnitte mit Vertiefungen, eigener
Abschlussblock, Widget-Beschriftung „Persönliche Beratung zur Maßarbeit vereinbaren“.
- **Ohne Logo**: der Seitenkopf zeigt den Schriftzug, Kacheln kommen ohne Logo aus. Kein
Stimmungsbild, die Kacheln zeigen den Platzhalter.
- **Kachelraster** der Startseite: `sm:grid-cols-2` – 2×2 auf allen Breiten. Vier nebeneinander
war kurz drin, wurde aber als zu schmal verworfen (Abstimmung 15.09.). „Weitere Marken“ auf den
Detailseiten: drei nebeneinander ab `lg`.
- Automatisch dabei: `/marken`, Anliegen im Widget, Betreff-Gruppe Interior der Kontaktseite.
- Seitentitel von `/marken` nennt die vierte Marke.
- Lang-Fallback (`core_brands.brands`) um die Tischlerei ergänzt.
**Lokal ausgeführt:** `php artisan db:seed --class=CmsBrandSeeder` (legt nur die fehlende Marke an).
Beim Deployment mit erledigen (Abschnitt 8).
**Was Marcel nachträgt (alles im Admin):** Name der Marke, Logo, Stimmungsbild, echte Texte –
die Platzhalter sind bewusst so geschrieben, dass sie ohne Änderung nicht live gehen sollten
(„Tischlerei“ ist kein Markenname). Slug `tischlerei` bleibt stabil, auch wenn der Name kommt.
**Tests:** `tests/Feature/FourthBrandTest.php` (7 Fälle).
---
## Nachtrag 10 · Herkunfts-Sektion „Aus der Region gefertigt“ (15.09.2026)
Arbeitsplan 14.09., Punkt 1.3. Die Klärung „CABINET Hersteller oder Vertrieb“ kam am 15.09. von
Kevin nach seinem Verständnis: CABINET **fertigt selbst in Köln** und **vertreibt über die
CABINET Stores**; der Store Bielefeld ist einer davon. Dort laufen Beratung und Planung für
Bielefeld und Umkreis, gefertigt wird in Köln, aufgebaut beim Kunden – und hier kommt die
Tischlerei ins Spiel, die den Aufbau übernimmt und Sonderwünsche umsetzt. ⚠️ **Von Marcel
bestätigen lassen** (bietet CABINET selbst Aufbau an? Läuft der Aufbau immer über die eigene
Tischlerei?). Die Sektion ist so formuliert, dass sie diesem Verständnis folgt.
### Aufbau
- **Neue Sektion `origin_section`** (`OriginSection`, CMS-Gruppe `home`), eingebunden auf der
Startseite zwischen Kernmarken und „Gebaut auf Expertise“ sowie auf `/marken` zwischen
Markenübersicht und „Mehr als Marken: unser Netzwerk“. Anker `#herkunft`.
- **Schematische Karte** (SVG, ab `md`): Bielefeld als Drehscheibe in Ocker, die vier Standorte
als Punkte in Tanne mit gestrichelten Speichen und Entfernungsangabe, gestrichelte Ellipse
„Ostwestfalen“ um die drei OWL-Standorte. Keine Geografie, nur Richtung und Entfernung –
Positionen (`x`/`y` in der viewBox 640×400) und Beschriftungsseite (`label`) stehen im
Inhalt und sind im Admin änderbar. Unter `md` entfällt die Karte, die Kacheln tragen alles.
- **Vier Standort-Kacheln** (2×2 ab `sm`): Stadt, Marke, Rolle, Entfernung „von Bielefeld“ und
Link „Zur Marke“. Der Link kommt **nicht** aus dem CMS, sondern aus den veröffentlichten
Marken (`brand_slug`, ersatzweise Namensabgleich): eine unveröffentlichte Marke verliert den
Link, ihr Standort bleibt sichtbar.
- **Ablauf-Block „Gefertigt in Köln, geplant in Bielefeld“**: drei nummerierte Schritte am
Beispiel CABINET (Beratung und Planung in Bielefeld → Fertigung in Köln → Aufbau vor Ort mit
Sonderwünschen aus der Tischlerei). Das ist die saubere Trennung „gefertigt“ / „vertrieben“
aus dem Plan. Entfällt, wenn `steps` im CMS leer ist.
- **Entfernungen** gerundet, Straße ab Bielefeld Mitte: Herford rund 20 km, Bünde rund 30 km,
Rheda-Wiedenbrück rund 35 km, Köln rund 200 km. Bei Bedarf im Admin anpassen.
- Styles `.origin-map-*` in `shared-styles.css` (Token-basiert, in beiden Welten gültig, die
Sektion liegt aber nur in der Interior-Welt). Build `npm run build:b2in` ausgeführt.
**Lokal ausgeführt:** `php artisan db:seed --class=OriginSectionCmsSeeder` (legt nur an, was
fehlt, überschreibt nichts). Beim Deployment mit erledigen (Abschnitt 8, Schritt 9).
**Offen:** Bestätigung des CABINET-Ablaufs durch Marcel; Wortlaut der Tischlerei-Kachel folgt
dem Platzhalter aus Nachtrag 9 und wandert mit dem echten Markennamen.
**Tests:** `tests/Feature/OriginSectionTest.php` (12 Fälle).

View file

@ -0,0 +1,36 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 29.8.1, SVG Export Plug-In . SVG Version: 9.03 Build 0) -->
<svg version="1.0" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 310 180" style="enable-background:new 0 0 310 180;" xml:space="preserve">
<style type="text/css">
.st0{fill:#FFFFFF;}
.st1{fill:#2C9FDA;}
</style>
<g>
<g>
<g>
<path class="st0" d="M5,177.5V67.9h43.1c7.9,0,14.6,1.2,20,3.6c5.3,2.4,9.3,5.7,12,9.9c2.6,4.2,4,9.1,4,14.6
c0,4.3-0.8,8-2.5,11.3c-1.7,3.2-4,5.8-7,7.8s-6.2,3.5-10.1,4.3v1.1c4.1,0.1,7.9,1.3,11.5,3.5s6.6,5.2,8.8,9.1s3.4,8.6,3.4,14
c0,5.8-1.4,10.9-4.2,15.6c-2.9,4.6-7,8.1-12.5,10.8c-5.5,2.6-12.4,3.9-20.6,3.9L5,177.5L5,177.5z M27.2,114h17.6
c3.2,0,6-0.5,8.6-1.7c2.5-1.2,4.6-2.8,5.9-5c1.5-2.1,2.1-4.7,2.1-7.6c0-4-1.4-7.2-4.2-9.7c-2.8-2.5-6.8-3.7-12-3.7h-18L27.2,114
L27.2,114z M27.2,158.9h19.3c6.6,0,11.3-1.3,14.3-3.8c3-2.5,4.6-5.9,4.6-10.1c0-3.1-0.7-5.8-2.2-8.1c-1.5-2.3-3.6-4.2-6.3-5.6
c-2.8-1.4-5.9-2-9.7-2H27.1v29.6H27.2z"/>
<path class="st0" d="M103,177.5v-16.2l38.5-36.4c3.3-3.3,6.1-6.1,8.4-8.8s4-5.2,5.2-7.7c1.2-2.5,1.8-5.3,1.8-8.1
c0-3.3-0.7-6.1-2.2-8.5s-3.5-4.1-6-5.4c-2.5-1.3-5.4-1.9-8.7-1.9c-3.4,0-6.3,0.6-8.8,2c-2.5,1.4-4.4,3.3-5.8,5.9
c-1.4,2.5-2,5.6-2,9.2H102c0-7.1,1.6-13.3,4.9-18.5c3.3-5.3,7.7-9.3,13.4-12.2c5.7-2.9,12.4-4.3,19.9-4.3
c7.7,0,14.4,1.4,20.1,4.1c5.7,2.8,10.2,6.6,13.4,11.4c3.2,4.9,4.8,10.5,4.8,16.7c0,4-0.7,8-2.3,12.1c-1.6,4-4.4,8.5-8.5,13.3
c-4,5-9.8,10.8-17.2,17.7l-16.4,16.3v0.8H180v18.4L103,177.5L103,177.5z"/>
</g>
</g>
<g>
<path class="st0" d="M204.2,177.2V98.8h19.3v78.4H204.2z"/>
<path class="st0" d="M257.2,177.2h-19.3V98.8h19.3V112h0.7c1.6-4.2,4.1-7.7,7.6-10.6s8.3-4.2,14.4-4.2c8,0,14.2,2.6,18.5,8
c4.3,5.4,6.6,12.9,6.6,22.6v49.5h-19.3v-47.6c0-5.6-1-9.8-3-12.6c-2-2.8-5.3-4.2-9.9-4.2c-2.6,0-5.1,0.5-7.5,1.4
c-2.4,1-4.3,2.3-5.8,4.2c-1.5,1.9-2.2,4.2-2.2,7v51.7H257.2z"/>
</g>
<path class="st1" d="M213.8,61c2.6,0,5,0.3,7,0.8C206,27.1,168.9,2.5,125.6,2.5c-43.9,0-81.3,25.3-95.8,60.6H45
c9.3-32.6,41.9-56.6,80.5-56.6c38.2,0,70.5,23.5,80.2,55.6C208,61.4,210.6,61,213.8,61z"/>
<path class="st0" d="M213.8,88.3c-3.9,0-6.8-1-8.6-2.8c-1.8-1.8-2.8-4.1-2.8-6.9v-3c0-2.8,1-5.1,2.8-6.9c1.8-1.8,4.7-2.8,8.6-2.8
s6.8,1,8.6,2.8c1.8,1.8,2.8,4.1,2.8,6.9v3c0,2.8-1,5-2.8,6.9C220.6,87.4,217.7,88.3,213.8,88.3z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.4 KiB

View file

@ -0,0 +1,36 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 29.8.1, SVG Export Plug-In . SVG Version: 9.03 Build 0) -->
<svg version="1.0" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 310 180" style="enable-background:new 0 0 310 180;" xml:space="preserve">
<style type="text/css">
.st0{fill:#314052;}
.st1{fill:#2C9FDA;}
</style>
<g>
<g>
<g>
<path class="st0" d="M5,177.5V67.9h43.1c7.9,0,14.6,1.2,20,3.6c5.3,2.4,9.3,5.7,12,9.9c2.6,4.2,4,9.1,4,14.6
c0,4.3-0.8,8-2.5,11.3c-1.7,3.2-4,5.8-7,7.8c-3,2-6.2,3.5-10.1,4.3v1.1c4.1,0.1,7.9,1.3,11.5,3.5s6.6,5.2,8.8,9.1
c2.2,3.9,3.4,8.6,3.4,14c0,5.8-1.4,10.9-4.2,15.6c-2.9,4.6-7,8.1-12.5,10.8c-5.5,2.6-12.4,3.9-20.6,3.9L5,177.5L5,177.5z
M27.2,114h17.6c3.2,0,6-0.5,8.6-1.7c2.5-1.2,4.6-2.8,5.9-5c1.5-2.1,2.1-4.7,2.1-7.6c0-4-1.4-7.2-4.2-9.7
c-2.8-2.5-6.8-3.7-12-3.7h-18L27.2,114L27.2,114z M27.2,158.9h19.3c6.6,0,11.3-1.3,14.3-3.8c3-2.5,4.6-5.9,4.6-10.1
c0-3.1-0.7-5.8-2.2-8.1c-1.5-2.3-3.6-4.2-6.3-5.6c-2.8-1.4-5.9-2-9.7-2H27.1v29.6H27.2z"/>
<path class="st0" d="M103.1,177.5v-16.2l38.5-36.4c3.3-3.3,6.1-6.1,8.4-8.8c2.2-2.6,4-5.2,5.2-7.7c1.2-2.5,1.8-5.3,1.8-8.1
c0-3.3-0.7-6.1-2.2-8.5s-3.5-4.1-6-5.4c-2.5-1.3-5.4-1.9-8.7-1.9c-3.4,0-6.3,0.6-8.8,2c-2.5,1.4-4.4,3.3-5.8,5.9
c-1.4,2.5-2,5.6-2,9.2h-21.3c0-7.1,1.6-13.3,4.9-18.5c3.3-5.3,7.7-9.3,13.4-12.2c5.7-2.9,12.4-4.3,19.9-4.3
c7.7,0,14.4,1.4,20.1,4.1c5.7,2.8,10.2,6.6,13.4,11.4c3.2,4.9,4.8,10.5,4.8,16.7c0,4-0.7,8-2.3,12.1c-1.6,4-4.4,8.5-8.5,13.3
c-4,5-9.8,10.8-17.2,17.7l-16.4,16.3v0.8h45.9v18.4L103.1,177.5L103.1,177.5z"/>
</g>
</g>
<g>
<path class="st0" d="M204.2,177.2V98.8h19.3v78.4H204.2z"/>
<path class="st0" d="M257.2,177.2h-19.3V98.8h19.3V112h0.7c1.6-4.2,4.1-7.7,7.6-10.6s8.3-4.2,14.4-4.2c8,0,14.2,2.6,18.5,8
s6.6,12.9,6.6,22.6v49.5h-19.3v-47.6c0-5.6-1-9.8-3-12.6c-2-2.8-5.3-4.2-9.9-4.2c-2.6,0-5.1,0.5-7.5,1.4c-2.4,1-4.3,2.3-5.8,4.2
s-2.2,4.2-2.2,7v51.7H257.2z"/>
</g>
<path class="st1" d="M213.8,61c2.6,0,5,0.3,7,0.8C206,27.1,168.9,2.5,125.6,2.5c-43.9,0-81.3,25.3-95.8,60.6H45
c9.3-32.6,41.9-56.6,80.5-56.6c38.2,0,70.5,23.5,80.2,55.6C208.1,61.4,210.7,61,213.8,61z"/>
<path class="st0" d="M213.8,88.3c-3.9,0-6.8-1-8.6-2.8c-1.8-1.8-2.8-4.1-2.8-6.9v-3c0-2.8,1-5.1,2.8-6.9c1.8-1.8,4.7-2.8,8.6-2.8
c3.9,0,6.8,1,8.6,2.8c1.8,1.8,2.8,4.1,2.8,6.9v3c0,2.8-1,5-2.8,6.9C220.6,87.4,217.7,88.3,213.8,88.3z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.4 KiB

View file

@ -1,55 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 30.8.0, SVG Export Plug-In . SVG Version: 9.03 Build 0) -->
<svg version="1.0" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 595.3 419.5" style="enable-background:new 0 0 595.3 419.5;" xml:space="preserve">
<style type="text/css">
.st0{fill:#FFFFFF;}
.st1{fill:#2C9FDA;}
.st2{fill:none;stroke:#2C9FDA;stroke-width:3;stroke-miterlimit:10;}
</style>
<g>
<g>
<g>
<g>
<path class="st0" d="M156.8,262.4V158.9h40.7c7.5,0,13.8,1.1,18.9,3.4c5,2.3,8.8,5.4,11.3,9.4c2.5,4,3.8,8.6,3.8,13.8
c0,4.1-0.8,7.6-2.4,10.7c-1.6,3-3.8,5.5-6.6,7.4c-2.8,1.9-5.9,3.3-9.5,4.1v1c3.9,0.1,7.5,1.2,10.9,3.3c3.4,2.1,6.2,4.9,8.3,8.6
c2.1,3.7,3.2,8.1,3.2,13.2c0,5.5-1.3,10.3-4,14.7c-2.7,4.3-6.6,7.7-11.8,10.2c-5.2,2.5-11.7,3.7-19.5,3.7H156.8z M177.8,202.4
h16.6c3,0,5.7-0.5,8.1-1.6c2.4-1.1,4.3-2.6,5.6-4.7c1.4-2,2-4.4,2-7.2c0-3.8-1.3-6.8-4-9.2c-2.6-2.4-6.4-3.5-11.3-3.5h-17V202.4
z M177.8,244.9H196c6.2,0,10.7-1.2,13.5-3.6c2.8-2.4,4.3-5.6,4.3-9.5c0-2.9-0.7-5.5-2.1-7.7c-1.4-2.2-3.4-4-6-5.3
c-2.6-1.3-5.6-1.9-9.2-1.9h-18.8V244.9z"/>
<path class="st0" d="M249.4,262.4v-15.3l36.4-34.4c3.1-3.1,5.8-5.8,7.9-8.3c2.1-2.5,3.8-4.9,4.9-7.3c1.1-2.4,1.7-5,1.7-7.7
c0-3.1-0.7-5.8-2.1-8c-1.4-2.2-3.3-3.9-5.7-5.1c-2.4-1.2-5.1-1.8-8.2-1.8c-3.2,0-6,0.6-8.3,1.9c-2.4,1.3-4.2,3.1-5.5,5.6
c-1.3,2.4-1.9,5.3-1.9,8.7h-20.1c0-6.7,1.5-12.6,4.6-17.5c3.1-5,7.3-8.8,12.7-11.5c5.4-2.7,11.7-4.1,18.8-4.1
c7.3,0,13.6,1.3,19,3.9c5.4,2.6,9.6,6.2,12.7,10.8c3,4.6,4.5,9.9,4.5,15.8c0,3.8-0.7,7.6-2.2,11.4c-1.5,3.8-4.2,8-8,12.6
c-3.8,4.7-9.3,10.2-16.3,16.7l-15.5,15.4v0.8h43.4v17.4H249.4z"/>
</g>
</g>
<g>
<path class="st0" d="M345,262.2v-74.1h18.2v74.1H345z"/>
<path class="st0" d="M395.1,262.2h-18.2v-74.1h18.2v12.4h0.7c1.5-4,3.9-7.3,7.2-10c3.3-2.7,7.8-4,13.6-4c7.6,0,13.4,2.5,17.5,7.6
c4.1,5.1,6.2,12.2,6.2,21.4v46.8h-18.2v-45c0-5.3-0.9-9.3-2.8-11.9c-1.9-2.6-5-4-9.4-4c-2.5,0-4.8,0.5-7.1,1.3
c-2.3,0.9-4.1,2.2-5.5,4c-1.4,1.8-2.1,4-2.1,6.6V262.2z"/>
</g>
<path class="st1" d="M354.1,152.3c2.5,0,4.7,0.3,6.6,0.8c-14-32.8-49-56-89.9-56c-41.5,0-76.8,23.9-90.5,57.3h14.3
c8.8-30.8,39.6-53.5,76.1-53.5c36.1,0,66.6,22.2,75.8,52.5C348.6,152.7,351.1,152.3,354.1,152.3z"/>
<path class="st0" d="M354.1,178.1c-3.7,0-6.4-0.9-8.1-2.6c-1.7-1.7-2.6-3.9-2.6-6.5v-2.8c0-2.6,0.9-4.8,2.6-6.5
c1.7-1.7,4.4-2.6,8.1-2.6s6.4,0.9,8.1,2.6c1.7,1.7,2.6,3.9,2.6,6.5v2.8c0,2.6-0.9,4.7-2.6,6.5
C360.5,177.2,357.8,178.1,354.1,178.1z"/>
</g>
<g>
<path class="st0" d="M156.4,321.9v-5.4h4v-20.5h-4v-5.4h14.9v5.4h-4v20.5h4v5.4H156.4z"/>
<path class="st0" d="M196.8,307l-3-6.3h-0.1v21.1h-6.4v-31.4h7.5l8.6,14.8l3,6.3h0.1v-21.1h6.4v31.4h-7.5L196.8,307z"/>
<path class="st0" d="M243.1,296.5v25.3h-6.8v-25.3h-8.5v-6.1h23.8v6.1H243.1z"/>
<path class="st0" d="M266.4,321.9v-31.4h21.4v6.1h-14.5v6.4h12.5v6h-12.5v6.8h14.5v6.1H266.4z"/>
<path class="st0" d="M310.7,321.9h-6.8v-31.4h14.9c5.8,0,9.5,4,9.5,10c0,4.2-1.9,7.6-5.7,9l6.2,12.3h-7.6l-5.5-11.5h-4.9V321.9z
M317.9,304.6c2,0,3.3-1.1,3.3-3.1v-2c0-2-1.3-3.1-3.3-3.1h-7.2v8.2H317.9z"/>
<path class="st0" d="M343.2,321.9v-5.4h4v-20.5h-4v-5.4h14.9v5.4h-4v20.5h4v5.4H343.2z"/>
<path class="st0" d="M372.8,306.2c0-10.7,5.5-16.2,13.8-16.2c8.3,0,13.8,5.6,13.8,16.2c0,10.7-5.5,16.2-13.8,16.2
C378.3,322.4,372.8,316.8,372.8,306.2z M393.2,308.5v-4.7c0-5-2.5-7.8-6.6-7.8s-6.6,2.8-6.6,7.8v4.7c0,5,2.5,7.8,6.6,7.8
S393.2,313.5,393.2,308.5z"/>
<path class="st0" d="M423.1,321.9h-6.8v-31.4h14.9c5.8,0,9.5,4,9.5,10c0,4.2-1.9,7.6-5.7,9l6.2,12.3h-7.6l-5.5-11.5h-4.9V321.9z
M430.3,304.6c2,0,3.3-1.1,3.3-3.1v-2c0-2-1.3-3.1-3.3-3.1h-7.2v8.2H430.3z"/>
</g>
<line class="st2" x1="154.1" y1="275.5" x2="440.2" y2="275.5"/>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 3.7 KiB

View file

@ -0,0 +1,53 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 30.8.1, SVG Export Plug-In . SVG Version: 9.03 Build 0) -->
<svg version="1.0" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 595.3 419.5" style="enable-background:new 0 0 595.3 419.5;" xml:space="preserve">
<style type="text/css">
.st0{fill:#F7F4EF;}
.st1{fill:#D39E46;}
.st2{fill:none;stroke:#D39E46;stroke-width:3;stroke-miterlimit:10;}
</style>
<g>
<g>
<g>
<path class="st0" d="M156.1,260.6V157.1h40.7c7.5,0,13.8,1.1,18.9,3.4c5,2.3,8.8,5.4,11.3,9.4c2.5,4,3.8,8.6,3.8,13.8
c0,4.1-0.8,7.6-2.4,10.7c-1.6,3-3.8,5.5-6.6,7.4c-2.8,1.9-5.9,3.3-9.5,4.1v1c3.9,0.1,7.5,1.2,10.9,3.3c3.4,2.1,6.2,4.9,8.3,8.6
c2.1,3.7,3.2,8.1,3.2,13.2c0,5.5-1.3,10.3-4,14.7c-2.7,4.3-6.6,7.7-11.8,10.2c-5.2,2.5-11.7,3.7-19.5,3.7H156.1z M177.1,200.6
h16.6c3,0,5.7-0.5,8.1-1.6c2.4-1.1,4.3-2.6,5.6-4.7c1.4-2,2-4.4,2-7.2c0-3.8-1.3-6.8-4-9.2c-2.6-2.4-6.4-3.5-11.3-3.5h-17V200.6z
M177.1,243.1h18.2c6.2,0,10.7-1.2,13.5-3.6c2.8-2.4,4.3-5.6,4.3-9.5c0-2.9-0.7-5.5-2.1-7.7c-1.4-2.2-3.4-4-6-5.3
c-2.6-1.3-5.6-1.9-9.2-1.9h-18.8V243.1z"/>
<path class="st0" d="M248.7,260.6v-15.3l36.4-34.4c3.1-3.1,5.8-5.8,7.9-8.3c2.1-2.5,3.8-4.9,4.9-7.3c1.1-2.4,1.7-5,1.7-7.7
c0-3.1-0.7-5.8-2.1-8c-1.4-2.2-3.3-3.9-5.7-5.1c-2.4-1.2-5.1-1.8-8.2-1.8c-3.2,0-6,0.6-8.3,1.9c-2.4,1.3-4.2,3.1-5.5,5.6
c-1.3,2.4-1.9,5.3-1.9,8.7h-20.1c0-6.7,1.5-12.6,4.6-17.5c3.1-5,7.3-8.8,12.7-11.5c5.4-2.7,11.7-4.1,18.8-4.1
c7.3,0,13.6,1.3,19,3.9c5.4,2.6,9.6,6.2,12.7,10.8c3,4.6,4.5,9.9,4.5,15.8c0,3.8-0.7,7.6-2.2,11.4c-1.5,3.8-4.2,8-8,12.6
c-3.8,4.7-9.3,10.2-16.3,16.7l-15.5,15.4v0.8h43.4v17.4H248.7z"/>
</g>
</g>
<g>
<path class="st0" d="M344.3,260.4v-74.1h18.2v74.1H344.3z"/>
<path class="st0" d="M394.4,260.4h-18.2v-74.1h18.2v12.4h0.7c1.5-4,3.9-7.3,7.2-10c3.3-2.7,7.8-4,13.6-4c7.6,0,13.4,2.5,17.5,7.6
c4.1,5.1,6.2,12.2,6.2,21.4v46.8h-18.2v-45c0-5.3-0.9-9.3-2.8-11.9c-1.9-2.6-5-4-9.4-4c-2.5,0-4.8,0.5-7.1,1.3
c-2.3,0.9-4.1,2.2-5.5,4c-1.4,1.8-2.1,4-2.1,6.6V260.4z"/>
</g>
<path class="st1" d="M353.4,150.5c2.5,0,4.7,0.3,6.6,0.8c-14-32.8-49-56-89.9-56c-41.5,0-76.8,23.9-90.5,57.3h14.3
c8.8-30.8,39.6-53.5,76.1-53.5c36.1,0,66.6,22.2,75.8,52.5C347.9,150.9,350.4,150.5,353.4,150.5z"/>
<path class="st0" d="M353.4,176.3c-3.7,0-6.4-0.9-8.1-2.6c-1.7-1.7-2.6-3.9-2.6-6.5v-2.8c0-2.6,0.9-4.8,2.6-6.5
c1.7-1.7,4.4-2.6,8.1-2.6c3.7,0,6.4,0.9,8.1,2.6c1.7,1.7,2.6,3.9,2.6,6.5v2.8c0,2.6-0.9,4.7-2.6,6.5
C359.7,175.4,357,176.3,353.4,176.3z"/>
<g>
<path class="st0" d="M155.7,320.1v-5.4h4v-20.5h-4v-5.4h14.9v5.4h-4v20.5h4v5.4H155.7z"/>
<path class="st0" d="M196.1,305.2l-3-6.3h-0.1v21.1h-6.4v-31.4h7.5l8.6,14.8l3,6.3h0.1v-21.1h6.4v31.4h-7.5L196.1,305.2z"/>
<path class="st0" d="M242.3,294.7v25.3h-6.8v-25.3H227v-6.1h23.8v6.1H242.3z"/>
<path class="st0" d="M265.7,320.1v-31.4h21.4v6.1h-14.5v6.4H285v6h-12.5v6.8h14.5v6.1H265.7z"/>
<path class="st0" d="M310,320.1h-6.8v-31.4h14.9c5.8,0,9.5,4,9.5,10c0,4.2-1.9,7.6-5.7,9l6.2,12.3h-7.6l-5.5-11.5H310V320.1z
M317.2,302.8c2,0,3.3-1.1,3.3-3.1v-2c0-2-1.3-3.1-3.3-3.1H310v8.2H317.2z"/>
<path class="st0" d="M342.5,320.1v-5.4h4v-20.5h-4v-5.4h14.9v5.4h-4v20.5h4v5.4H342.5z"/>
<path class="st0" d="M372.1,304.4c0-10.7,5.5-16.2,13.8-16.2c8.3,0,13.8,5.6,13.8,16.2s-5.5,16.2-13.8,16.2
C377.6,320.6,372.1,315,372.1,304.4z M392.5,306.7V302c0-5-2.5-7.8-6.6-7.8s-6.6,2.8-6.6,7.8v4.7c0,5,2.5,7.8,6.6,7.8
S392.5,311.7,392.5,306.7z"/>
<path class="st0" d="M422.4,320.1h-6.8v-31.4h14.9c5.8,0,9.5,4,9.5,10c0,4.2-1.9,7.6-5.7,9l6.2,12.3h-7.6l-5.5-11.5h-4.9V320.1z
M429.6,302.8c2,0,3.3-1.1,3.3-3.1v-2c0-2-1.3-3.1-3.3-3.1h-7.2v8.2H429.6z"/>
</g>
<line class="st2" x1="153.4" y1="273.7" x2="439.5" y2="273.7"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.7 KiB

View file

@ -1,55 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 30.8.0, SVG Export Plug-In . SVG Version: 9.03 Build 0) -->
<svg version="1.0" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 595.3 419.5" style="enable-background:new 0 0 595.3 419.5;" xml:space="preserve">
<style type="text/css">
.st0{fill:#314052;}
.st1{fill:#2C9FDA;}
.st2{fill:none;stroke:#2C9FDA;stroke-width:3;stroke-miterlimit:10;}
</style>
<g>
<g>
<g>
<g>
<path class="st0" d="M156.8,262.4V158.9h40.7c7.5,0,13.8,1.1,18.9,3.4c5,2.3,8.8,5.4,11.3,9.4c2.5,4,3.8,8.6,3.8,13.8
c0,4.1-0.8,7.6-2.4,10.7c-1.6,3-3.8,5.5-6.6,7.4c-2.8,1.9-5.9,3.3-9.5,4.1v1c3.9,0.1,7.5,1.2,10.9,3.3c3.4,2.1,6.2,4.9,8.3,8.6
c2.1,3.7,3.2,8.1,3.2,13.2c0,5.5-1.3,10.3-4,14.7c-2.7,4.3-6.6,7.7-11.8,10.2c-5.2,2.5-11.7,3.7-19.5,3.7H156.8z M177.8,202.4
h16.6c3,0,5.7-0.5,8.1-1.6c2.4-1.1,4.3-2.6,5.6-4.7c1.4-2,2-4.4,2-7.2c0-3.8-1.3-6.8-4-9.2c-2.6-2.4-6.4-3.5-11.3-3.5h-17V202.4
z M177.8,244.9H196c6.2,0,10.7-1.2,13.5-3.6c2.8-2.4,4.3-5.6,4.3-9.5c0-2.9-0.7-5.5-2.1-7.7c-1.4-2.2-3.4-4-6-5.3
c-2.6-1.3-5.6-1.9-9.2-1.9h-18.8V244.9z"/>
<path class="st0" d="M249.4,262.4v-15.3l36.4-34.4c3.1-3.1,5.8-5.8,7.9-8.3c2.1-2.5,3.8-4.9,4.9-7.3c1.1-2.4,1.7-5,1.7-7.7
c0-3.1-0.7-5.8-2.1-8c-1.4-2.2-3.3-3.9-5.7-5.1c-2.4-1.2-5.1-1.8-8.2-1.8c-3.2,0-6,0.6-8.3,1.9c-2.4,1.3-4.2,3.1-5.5,5.6
c-1.3,2.4-1.9,5.3-1.9,8.7h-20.1c0-6.7,1.5-12.6,4.6-17.5c3.1-5,7.3-8.8,12.7-11.5c5.4-2.7,11.7-4.1,18.8-4.1
c7.3,0,13.6,1.3,19,3.9c5.4,2.6,9.6,6.2,12.7,10.8c3,4.6,4.5,9.9,4.5,15.8c0,3.8-0.7,7.6-2.2,11.4c-1.5,3.8-4.2,8-8,12.6
c-3.8,4.7-9.3,10.2-16.3,16.7l-15.5,15.4v0.8h43.4v17.4H249.4z"/>
</g>
</g>
<g>
<path class="st0" d="M345,262.2v-74.1h18.2v74.1H345z"/>
<path class="st0" d="M395.1,262.2h-18.2v-74.1h18.2v12.4h0.7c1.5-4,3.9-7.3,7.2-10c3.3-2.7,7.8-4,13.6-4c7.6,0,13.4,2.5,17.5,7.6
c4.1,5.1,6.2,12.2,6.2,21.4v46.8h-18.2v-45c0-5.3-0.9-9.3-2.8-11.9c-1.9-2.6-5-4-9.4-4c-2.5,0-4.8,0.5-7.1,1.3
c-2.3,0.9-4.1,2.2-5.5,4c-1.4,1.8-2.1,4-2.1,6.6V262.2z"/>
</g>
<path class="st1" d="M354.1,152.3c2.5,0,4.7,0.3,6.6,0.8c-14-32.8-49-56-89.9-56c-41.5,0-76.8,23.9-90.5,57.3h14.3
c8.8-30.8,39.6-53.5,76.1-53.5c36.1,0,66.6,22.2,75.8,52.5C348.6,152.7,351.1,152.3,354.1,152.3z"/>
<path class="st0" d="M354.1,178.1c-3.7,0-6.4-0.9-8.1-2.6c-1.7-1.7-2.6-3.9-2.6-6.5v-2.8c0-2.6,0.9-4.8,2.6-6.5
c1.7-1.7,4.4-2.6,8.1-2.6s6.4,0.9,8.1,2.6c1.7,1.7,2.6,3.9,2.6,6.5v2.8c0,2.6-0.9,4.7-2.6,6.5
C360.5,177.2,357.8,178.1,354.1,178.1z"/>
</g>
<g>
<path class="st0" d="M156.4,321.9v-5.4h4v-20.5h-4v-5.4h14.9v5.4h-4v20.5h4v5.4H156.4z"/>
<path class="st0" d="M196.8,307l-3-6.3h-0.1v21.1h-6.4v-31.4h7.5l8.6,14.8l3,6.3h0.1v-21.1h6.4v31.4h-7.5L196.8,307z"/>
<path class="st0" d="M243.1,296.5v25.3h-6.8v-25.3h-8.5v-6.1h23.8v6.1H243.1z"/>
<path class="st0" d="M266.4,321.9v-31.4h21.4v6.1h-14.5v6.4h12.5v6h-12.5v6.8h14.5v6.1H266.4z"/>
<path class="st0" d="M310.7,321.9h-6.8v-31.4h14.9c5.8,0,9.5,4,9.5,10c0,4.2-1.9,7.6-5.7,9l6.2,12.3h-7.6l-5.5-11.5h-4.9V321.9z
M317.9,304.6c2,0,3.3-1.1,3.3-3.1v-2c0-2-1.3-3.1-3.3-3.1h-7.2v8.2H317.9z"/>
<path class="st0" d="M343.2,321.9v-5.4h4v-20.5h-4v-5.4h14.9v5.4h-4v20.5h4v5.4H343.2z"/>
<path class="st0" d="M372.8,306.2c0-10.7,5.5-16.2,13.8-16.2c8.3,0,13.8,5.6,13.8,16.2c0,10.7-5.5,16.2-13.8,16.2
C378.3,322.4,372.8,316.8,372.8,306.2z M393.2,308.5v-4.7c0-5-2.5-7.8-6.6-7.8s-6.6,2.8-6.6,7.8v4.7c0,5,2.5,7.8,6.6,7.8
S393.2,313.5,393.2,308.5z"/>
<path class="st0" d="M423.1,321.9h-6.8v-31.4h14.9c5.8,0,9.5,4,9.5,10c0,4.2-1.9,7.6-5.7,9l6.2,12.3h-7.6l-5.5-11.5h-4.9V321.9z
M430.3,304.6c2,0,3.3-1.1,3.3-3.1v-2c0-2-1.3-3.1-3.3-3.1h-7.2v8.2H430.3z"/>
</g>
<line class="st2" x1="154.1" y1="275.5" x2="440.2" y2="275.5"/>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 3.7 KiB

View file

@ -0,0 +1,53 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 30.8.1, SVG Export Plug-In . SVG Version: 9.03 Build 0) -->
<svg version="1.0" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 595.3 419.5" style="enable-background:new 0 0 595.3 419.5;" xml:space="preserve">
<style type="text/css">
.st0{fill:#202C2B;}
.st1{fill:#D39E46;}
.st2{fill:none;stroke:#D39E46;stroke-width:3;stroke-miterlimit:10;}
</style>
<g>
<g>
<g>
<path class="st0" d="M156.1,260.6V157.1h40.7c7.5,0,13.8,1.1,18.9,3.4c5,2.3,8.8,5.4,11.3,9.4c2.5,4,3.8,8.6,3.8,13.8
c0,4.1-0.8,7.6-2.4,10.7c-1.6,3-3.8,5.5-6.6,7.4c-2.8,1.9-5.9,3.3-9.5,4.1v1c3.9,0.1,7.5,1.2,10.9,3.3c3.4,2.1,6.2,4.9,8.3,8.6
c2.1,3.7,3.2,8.1,3.2,13.2c0,5.5-1.3,10.3-4,14.7c-2.7,4.3-6.6,7.7-11.8,10.2c-5.2,2.5-11.7,3.7-19.5,3.7H156.1z M177.1,200.6
h16.6c3,0,5.7-0.5,8.1-1.6c2.4-1.1,4.3-2.6,5.6-4.7c1.4-2,2-4.4,2-7.2c0-3.8-1.3-6.8-4-9.2c-2.6-2.4-6.4-3.5-11.3-3.5h-17V200.6z
M177.1,243.1h18.2c6.2,0,10.7-1.2,13.5-3.6c2.8-2.4,4.3-5.6,4.3-9.5c0-2.9-0.7-5.5-2.1-7.7c-1.4-2.2-3.4-4-6-5.3
c-2.6-1.3-5.6-1.9-9.2-1.9h-18.8V243.1z"/>
<path class="st0" d="M248.7,260.6v-15.3l36.4-34.4c3.1-3.1,5.8-5.8,7.9-8.3c2.1-2.5,3.8-4.9,4.9-7.3c1.1-2.4,1.7-5,1.7-7.7
c0-3.1-0.7-5.8-2.1-8c-1.4-2.2-3.3-3.9-5.7-5.1c-2.4-1.2-5.1-1.8-8.2-1.8c-3.2,0-6,0.6-8.3,1.9c-2.4,1.3-4.2,3.1-5.5,5.6
c-1.3,2.4-1.9,5.3-1.9,8.7h-20.1c0-6.7,1.5-12.6,4.6-17.5c3.1-5,7.3-8.8,12.7-11.5c5.4-2.7,11.7-4.1,18.8-4.1
c7.3,0,13.6,1.3,19,3.9c5.4,2.6,9.6,6.2,12.7,10.8c3,4.6,4.5,9.9,4.5,15.8c0,3.8-0.7,7.6-2.2,11.4c-1.5,3.8-4.2,8-8,12.6
c-3.8,4.7-9.3,10.2-16.3,16.7l-15.5,15.4v0.8h43.4v17.4H248.7z"/>
</g>
</g>
<g>
<path class="st0" d="M344.3,260.4v-74.1h18.2v74.1H344.3z"/>
<path class="st0" d="M394.4,260.4h-18.2v-74.1h18.2v12.4h0.7c1.5-4,3.9-7.3,7.2-10c3.3-2.7,7.8-4,13.6-4c7.6,0,13.4,2.5,17.5,7.6
c4.1,5.1,6.2,12.2,6.2,21.4v46.8h-18.2v-45c0-5.3-0.9-9.3-2.8-11.9c-1.9-2.6-5-4-9.4-4c-2.5,0-4.8,0.5-7.1,1.3
c-2.3,0.9-4.1,2.2-5.5,4c-1.4,1.8-2.1,4-2.1,6.6V260.4z"/>
</g>
<path class="st1" d="M353.4,150.5c2.5,0,4.7,0.3,6.6,0.8c-14-32.8-49-56-89.9-56c-41.5,0-76.8,23.9-90.5,57.3h14.3
c8.8-30.8,39.6-53.5,76.1-53.5c36.1,0,66.6,22.2,75.8,52.5C347.9,150.9,350.4,150.5,353.4,150.5z"/>
<path class="st0" d="M353.4,176.3c-3.7,0-6.4-0.9-8.1-2.6c-1.7-1.7-2.6-3.9-2.6-6.5v-2.8c0-2.6,0.9-4.8,2.6-6.5
c1.7-1.7,4.4-2.6,8.1-2.6c3.7,0,6.4,0.9,8.1,2.6c1.7,1.7,2.6,3.9,2.6,6.5v2.8c0,2.6-0.9,4.7-2.6,6.5
C359.7,175.4,357,176.3,353.4,176.3z"/>
<g>
<path class="st0" d="M155.7,320.1v-5.4h4v-20.5h-4v-5.4h14.9v5.4h-4v20.5h4v5.4H155.7z"/>
<path class="st0" d="M196.1,305.2l-3-6.3h-0.1v21.1h-6.4v-31.4h7.5l8.6,14.8l3,6.3h0.1v-21.1h6.4v31.4h-7.5L196.1,305.2z"/>
<path class="st0" d="M242.3,294.7v25.3h-6.8v-25.3H227v-6.1h23.8v6.1H242.3z"/>
<path class="st0" d="M265.7,320.1v-31.4h21.4v6.1h-14.5v6.4H285v6h-12.5v6.8h14.5v6.1H265.7z"/>
<path class="st0" d="M310,320.1h-6.8v-31.4h14.9c5.8,0,9.5,4,9.5,10c0,4.2-1.9,7.6-5.7,9l6.2,12.3h-7.6l-5.5-11.5H310V320.1z
M317.2,302.8c2,0,3.3-1.1,3.3-3.1v-2c0-2-1.3-3.1-3.3-3.1H310v8.2H317.2z"/>
<path class="st0" d="M342.5,320.1v-5.4h4v-20.5h-4v-5.4h14.9v5.4h-4v20.5h4v5.4H342.5z"/>
<path class="st0" d="M372.1,304.4c0-10.7,5.5-16.2,13.8-16.2c8.3,0,13.8,5.6,13.8,16.2s-5.5,16.2-13.8,16.2
C377.6,320.6,372.1,315,372.1,304.4z M392.5,306.7V302c0-5-2.5-7.8-6.6-7.8s-6.6,2.8-6.6,7.8v4.7c0,5,2.5,7.8,6.6,7.8
S392.5,311.7,392.5,306.7z"/>
<path class="st0" d="M422.4,320.1h-6.8v-31.4h14.9c5.8,0,9.5,4,9.5,10c0,4.2-1.9,7.6-5.7,9l6.2,12.3h-7.6l-5.5-11.5h-4.9V320.1z
M429.6,302.8c2,0,3.3-1.1,3.3-3.1v-2c0-2-1.3-3.1-3.3-3.1h-7.2v8.2H429.6z"/>
</g>
<line class="st2" x1="153.4" y1="273.7" x2="439.5" y2="273.7"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.7 KiB

View file

@ -0,0 +1,186 @@
# B2in Interior – Arbeitsplan
**Freigegebener Umfang, Stand September 2026**
---
## Freigabestatus im Überblick
| Phase | Status | Aufwand |
|---|---|---:|
| **1 – Website: Layout, Marken, Herkunft** | ✅ freigegeben | 39–65 h |
| **3 – QR-Empfehlungssystem** | ✅ freigegeben | 25–39 h |
---
# Phase 1 – Website
## 1.1 Farbwelt und Logo
| Aufgabe |
| Interior-Farbwelt im Themensystem umstellen:
Tanne `#202c2b` Hauptton dunkel, Wortmarke,
Creme `#f7f4ef` Hintergrund,
Sand `#d9cbbf` Flächen, Footer,
Ocker `#d39e46` Akzent, Logo-Bogen
Clay `#a38f82` Sekundär, Produkte
Anthrazit `#2d2926` Text
| Immobilien-Welt als eigene Farbwelt abgrenzen (bestehendes Blau) |
| Logo-Varianten mit farbigem Bogen je Welt, positiv und negativ - normal Immobilien und Interior mit Zusatz
hier liegen die Logos dev/2026-08-28/logos
| Welten-Wechsler in Topleiste und Footer, Immobilien und Interior |
Bei der Umsetzung auf die neue Farbwelt bitte auch diese Shop Screenshots einmal begutachten. In diese Richtung soll es gehen optisch _b2in_interior_shop/screenshots/web
## 1.2 Tischlerei als vierte Marke
| Aufgabe |
| Markenseite anlegen, CMS-Eintrag, Einbindung in `/marken` und Navigation |
Als Inhalt erst mal Platzhalter.
**Inhaltliche Ausrichtung:** Aufbau, Sonderlösungen, Veredelung, Maßarbeit. Ergänzt CABINET und Rotpunkt, steht nicht daneben.
**Offen:** Name der Marke, Logo, Basis-Infos, Bildmaterial. Zur Namensfrage: Tritt sie unter eigenem Namen auf oder als B2in-Leistung? Der Name des Partnerbetriebs gehört auf die Detailseite, nicht in die Marke.
## 1.3 Herkunfts-Sektion
| Aufgabe |
| Eigener Bereich „Aus der Region gefertigt" mit den vier Standorten, visuell aufbereitet |
**Die Standorte:** Rotpunkt in Bünde, Febrü in Herford, Tischlerei in Rheda-Wiedenbrück, CABINET in Köln. Vier deutsche Manufakturen, drei davon in Ostwestfalen.
**Zu klären:** Ist CABINET Hersteller oder Vertrieb? Die Formulierung muss sauber trennen zwischen gefertigt und vertrieben.
## 1.4 Markenseiten und Texte
| Aufgabe |
| Aufklappbare Detailbereiche auf den Markenseiten |
| Kontextbezogene Beschriftung des Terminanfrage-Widgets je Marke |
**Texte:** Die finalen Fassungen für Rotpunkt und Febrü Sind bereits eingearbeitet.
## 1.5 Abschluss
| Aufgabe | Std. |
|---|---:|
| Tests, Prüfung bestehender Bereiche, Produktivsetzung |
**Summe Phase 1: 39–65 h** · rund 3.510 – 5.850 € netto
---
# Phase 3 – QR-Empfehlungssystem
## Wie es funktioniert Linus
1. Partner im System anlegen (Makler, Architekt, Handwerker, Praxis)
2. System erzeugt eindeutigen Code und QR als Bilddatei
3. Marcel druckt den Aufkleber selbst und bringt ihn auf dem Flyer an
4. Interessent scannt, landet auf der Website, Zugriff wird erfasst
5. Startet er eine Anfrage, ist sie dem Partner zugeordnet
6. Übersicht im Admin: Partner, Scans, Anfragen
## Die Bausteine
| Aufgabe | Std. |
|---|---:|
| Datenmodell: Partner, Code, Zuordnung, Status | 3–5 |
| Partnerverwaltung im Admin, Code erzeugen, QR als Bilddatei herunterladen | 7–10 |
| Weiterleitung und Erfassung des Scans | 5–8 |
| Zuordnung der Anfrage zum Partner, angebunden an die bestehende Anfragestrecke | 4–6 |
| Einfache Übersicht im Admin: Partner, Scans, Anfragen | 3–5 |
| Tests | 3–5 |
**Summe Phase 3: 25–39 h** · rund 2.250 – 3.510 € netto
## Nicht enthalten
Provisionsabrechnung und Auszahlung, Partner-Login (Phase 4), Aufkleber-Vorlagen als fertiges PDF, ausgebaute Auswertung mit Diagrammen oder Filtern.
## Technische Vorgaben für den Flyer
| | |
|---|---|
| **Aufkleber** | 60 × 80 mm hochkant. QR bei 30 × 30 mm, darunter Partnername, darunter Platz für eine Zeile |
| **Freie Fläche auf dem Flyer** | 70 × 90 mm |
| **Untergrund** | hell, einfarbig, kein Bild, kein Verlauf |
| **Abstand** | mindestens 10 mm zu Rand und Falz |
| **Platzierung** | Rückseite, in der Nähe der Kontaktangaben |
Die Zielgruppen-Ansprache steckt im Aufkleber, nicht im Flyer. Damit bleibt der Flyer eine Druckfassung.
---
# Phase 2 – Flyer: was enthalten ist
**2 Stunden.** Eine strukturierte schriftliche Rückmeldung auf einen fertigen Entwurf: Aufbau, Reihenfolge der Inhalte, Wirkung, Markenkonformität, Textschärfe. Einmal, als zusammenhängende Liste.
**Nicht enthalten:** mehrfache Durchgänge über Zwischenstände, Layoutkorrekturen, Bildauswahl, Umschreiben von Texten, Druckdatenaufbereitung.
---
# Reihenfolge der Umsetzung
| Schritt | Was | Warum zuerst |
|---|---|---|
| **1** | Farbwelt und Logo | Fundament – alles Weitere baut darauf auf |
| **2** | Welten-Wechsler | gehört technisch zur Farbwelt-Umstellung |
| **3** | Tischlerei-Markenseite | braucht die fertige Farbwelt |
| **4** | Herkunfts-Sektion | braucht die Tischlerei als vierten Standort |
| **5** | Akkordeon und Widget-Beschriftung | Feinschliff auf den fertigen Seiten |
| **6** | Tests und Livegang Phase 1 | |
| **7** | Phase 3 komplett | erst sinnvoll, wenn die Website steht |
Phase 3 erst nach dem Livegang von Phase 1: Ein QR-Code, der auf eine halbfertige Seite führt, verbrennt den ersten Eindruck beim Partner.
---
# Was ich von Marcel brauche
## Blockierend für Phase 1
| Was | Für |
|---|---|
| Freigabe Farbwerte (Ocker, Tanne) | 1.1 – Start |
| Name der Tischlerei-Marke | 1.2 |
| Logo und Basis-Infos Tischlerei | 1.2 |
| Bildmaterial Tischlerei | 1.2 |
| Klärung: CABINET Hersteller oder Vertrieb | 1.3 |
## Nicht blockierend, aber offen
| Was | Anmerkung |
|---|---|
| Logos Rotpunkt und Febrü | für die Markenseiten |
| Bildmaterial Hero und Kernmarken | Platzhalter möglich |
| Neuer Footer-Claim | „Connecting design and property" ist der alte Immobilien-Claim |
| Showroom-Adressen je Markenseite | nennen beide Seiten den richtigen Standort? |
| Höhe der Partnervergütung | vor der Partner-Ansprache, nicht vor dem Bau |
---
# Empfehlungen fürs Protokoll
**Erste zehn Partner:** Makler, Architekten, Handwerker. Praxen danach. Keine Wertung, sondern Priorisierung auf den Kanal mit der höheren Wirkung.
**Keine Provisionen an Arztpraxen** im ersten Schritt. Flyer dort über die persönliche Verbindung auslegen, mit eigenem QR-Code. Nach drei Monaten zeigen die Zahlen, ob der Kanal trägt.
**QR-Feld neutral halten.** Sachliche Zeile wie „Beratungstermin vereinbaren". Keine emotionalen Appelle.
---
# Zurückgestellt
| Thema | Status |
|---|---|
| Partnerportal | 2027, wenn genug Partner aktiv sind |
| Kundenmappe | Konzept wird überarbeitet |
| Shop (Katalog und Verkauf) | Kalkulation liegt vor: 149–235 h |
| Immobilien-CMS | Kostenplan liegt vor, nicht freigegeben |
| Dubai-Map | setzt Immobilien-CMS voraus |
| Marktplätze | spätere Shop-Stufe |
| Bestandskunden-Anschreiben | Idee vorhanden, noch nicht angeboten |
| Markenrichtlinie Fahrzeug und Print | eigene Design-Aufgabe |
---
*Aufwandsschätzung auf Basis des aktuellen Stands, kein Festpreis. Abrechnung nach tatsächlichen, dokumentierten Stunden. Zusätzliche Anforderungen werden vorab abgestimmt und erst nach Freigabe umgesetzt.*