diff --git a/database/seeders/ContactDetailsSeeder.php b/database/seeders/ContactDetailsSeeder.php
new file mode 100644
index 00000000..974372a1
--- /dev/null
+++ b/database/seeders/ContactDetailsSeeder.php
@@ -0,0 +1,48 @@
+ self::PHONE,
+ 'info@b2in.eu' => self::EMAIL,
+ 'info@b2in.de' => self::EMAIL,
+ ];
+
+ /** Werte, die vollständig übereinstimmen müssen – die WhatsApp-Nummer in alter Schreibweise. */
+ public const EXACT = [
+ '+49 521 98620100' => self::PHONE,
+ '0521 98620100' => self::PHONE,
+ '0521-98620100' => self::PHONE,
+ ];
+
+ public function run(): void
+ {
+ $count = $this->replaceCmsTexts(self::REPLACEMENTS, self::EXACT);
+
+ $this->command?->info($count === 0
+ ? 'Kontaktdaten: bereits aktuell.'
+ : "Kontaktdaten: {$count} Stellen auf ".self::PHONE.' / '.self::EMAIL.' umgestellt.');
+ }
+}
diff --git a/database/seeders/InteriorReleaseSeeder.php b/database/seeders/InteriorReleaseSeeder.php
index e215d87e..38f65f8d 100644
--- a/database/seeders/InteriorReleaseSeeder.php
+++ b/database/seeders/InteriorReleaseSeeder.php
@@ -59,6 +59,7 @@ class InteriorReleaseSeeder extends Seeder
ContentCorrections20261008Seeder::class,
FaqCategoriesSeeder::class,
BrandTranslationsSeeder::class,
+ ContactDetailsSeeder::class,
// Zuletzt: fehlende Felder ergänzen, verwendete Bilder in die Mediathek.
CmsSectionFieldsSeeder::class,
AssetMediaImportSeeder::class,
diff --git a/database/seeders/WhatsappNumberSeeder.php b/database/seeders/WhatsappNumberSeeder.php
index 4426c432..c28305ec 100644
--- a/database/seeders/WhatsappNumberSeeder.php
+++ b/database/seeders/WhatsappNumberSeeder.php
@@ -19,8 +19,8 @@ use Illuminate\Database\Seeder;
*/
class WhatsappNumberSeeder extends Seeder
{
- /** Business-Nummer laut Marcel (0521-98620100, korrigiert am 24.09.), international geschrieben. */
- public const NUMBER = '+49 521 98620100';
+ /** Business-Nummer laut Marcel (0521-98620100, korrigiert am 24.09.), international geschrieben (Schreibweise seit 09.10.). */
+ public const NUMBER = '+49 521 986 20 100';
/**
* Werte, die der Seeder ersetzt: der Platzhalter aus der ersten Einrichtung und die am 23.09.
diff --git a/dev/entwicklung.md b/dev/entwicklung.md
index 138c9102..244b685e 100644
--- a/dev/entwicklung.md
+++ b/dev/entwicklung.md
@@ -74,7 +74,7 @@ Stillgelegte Seiten leiten dauerhaft um: `/netzwerk`, `/interior`, `/partner` un
- **Hero-Slideshow:** elf Bilder, im CMS pflegbar. Je Bild Marke und Motiv in der Infokarte. Überblendung alle 7 Sekunden (einstellbar 3–30), Pause bei Hover und Fokus, Steuerung per Pfeiltasten. Eine Fortschrittslinie im Bild zeigt die verbleibende Zeit. Auf dem Handy steht die Karte unter dem Bild.
- **Gemeinsamer Hero-Stil** auf Start, Marken, Über uns und Kontakt: Goldverlauf als Rahmen, Zeile über der Überschrift, Vertrauenspunkte.
-- **Termin-Widget:** WhatsApp zuerst (0521-98620100), darunter das Formular.
+- **Termin-Widget:** WhatsApp zuerst (+49 521 986 20 100, zugleich Telefonnummer; E-Mail interior@b2in.eu), darunter das Formular.
- **Live-Display:** Die Startseite zeigt, was im Showroom läuft, vergrößerbar und im Vollbild.
- **Sprache:** Deutsch und Englisch, Umschaltung über die Sitzung (`SetLocale`).
diff --git a/resources/lang/de/b2in.php b/resources/lang/de/b2in.php
index 395e9c9f..de3527c1 100644
--- a/resources/lang/de/b2in.php
+++ b/resources/lang/de/b2in.php
@@ -704,14 +704,14 @@ return [
[
'title' => 'Unsere E-Mail-Adresse',
'info' => [
- 'info@b2in.eu',
+ 'interior@b2in.eu',
],
'icon' => 'mail',
],
[
'title' => 'Unsere Telefonnummer',
'info' => [
- '+49 (0) 5221 9255055',
+ '+49 521 986 20 100',
],
'icon' => 'phone',
],
diff --git a/resources/lang/de/b2in_legal.php b/resources/lang/de/b2in_legal.php
index 5e5a325b..5f1ca8a2 100644
--- a/resources/lang/de/b2in_legal.php
+++ b/resources/lang/de/b2in_legal.php
@@ -24,8 +24,8 @@ return [
@@ -190,8 +190,8 @@ return [
B2in GmbH
Feldstraße 59
32120 Hiddenhausen
- Telefon: +49 (0) 5221 9255055
- E-Mail: info@b2in.eu
+ Telefon: +49 521 986 20 100
+ E-Mail: interior@b2in.eu
@@ -302,7 +302,7 @@ return [
gemäß Art. 21 DSGVO Widerspruch gegen die Verarbeitung einzulegen, sofern Ihre Daten auf Grundlage von berechtigten Interessen verarbeitet werden.
- Möchten Sie von Ihren Rechten Gebrauch machen, genügt eine E-Mail an: info@b2in.eu.
+ Möchten Sie von Ihren Rechten Gebrauch machen, genügt eine E-Mail an: interior@b2in.eu.
Sie haben zudem das Recht, sich bei einer Datenschutz-Aufsichtsbehörde zu beschweren (Art. 77 DSGVO).
@@ -326,8 +326,8 @@ return [
B2in GmbH
Feldstraße 59
32120 Hiddenhausen
- Telefon: +49 (0) 5221 9255055
- E-Mail: info@b2in.eu
+ Telefon: +49 521 986 20 100
+ E-Mail: interior@b2in.eu
diff --git a/resources/lang/en/b2in.php b/resources/lang/en/b2in.php
index 2987def0..d6d2ae64 100644
--- a/resources/lang/en/b2in.php
+++ b/resources/lang/en/b2in.php
@@ -687,14 +687,14 @@ return [
[
'title' => 'Our Email Address',
'info' => [
- 'info@b2in.eu',
+ 'interior@b2in.eu',
],
'icon' => 'mail',
],
[
'title' => 'Our Phone Number',
'info' => [
- '+49 (0) 5221 9255055',
+ '+49 521 986 20 100',
],
'icon' => 'phone',
],
diff --git a/resources/lang/en/b2in_legal.php b/resources/lang/en/b2in_legal.php
index 7fc9cab7..08c8183f 100644
--- a/resources/lang/en/b2in_legal.php
+++ b/resources/lang/en/b2in_legal.php
@@ -24,8 +24,8 @@ return [
@@ -190,8 +190,8 @@ return [
B2in GmbH
Feldstraße 59
32120 Hiddenhausen, Germany
- Phone: +49 (0) 5221 9255055
- Email: info@b2in.eu
+ Phone: +49 521 986 20 100
+ Email: interior@b2in.eu
@@ -295,7 +295,7 @@ return [
pursuant to Art. 21 GDPR, to object to the processing, insofar as your data is processed on the basis of legitimate interests.
- To exercise your rights, simply send an email to: info@b2in.eu.
+ To exercise your rights, simply send an email to: interior@b2in.eu.
You also have the right to lodge a complaint with a data protection supervisory authority (Art. 77 GDPR).
@@ -319,8 +319,8 @@ return [
B2in GmbH
Feldstraße 59
32120 Hiddenhausen, Germany
- Phone: +49 (0) 5221 9255055
- Email: info@b2in.eu
+ Phone: +49 521 986 20 100
+ Email: interior@b2in.eu
diff --git a/resources/views/livewire/admin/cms/cabinet-info-tablet.blade.php b/resources/views/livewire/admin/cms/cabinet-info-tablet.blade.php
index 41e89afa..7f885a2f 100644
--- a/resources/views/livewire/admin/cms/cabinet-info-tablet.blade.php
+++ b/resources/views/livewire/admin/cms/cabinet-info-tablet.blade.php
@@ -172,7 +172,7 @@
{{ __('Kontakt') }}
-
+
@error('contactPhone')
{{ $message }}
@enderror
diff --git a/resources/views/livewire/admin/cms/display-version-editor.blade.php b/resources/views/livewire/admin/cms/display-version-editor.blade.php
index 79c5bb45..ef32e6d1 100644
--- a/resources/views/livewire/admin/cms/display-version-editor.blade.php
+++ b/resources/views/livewire/admin/cms/display-version-editor.blade.php
@@ -320,7 +320,7 @@
@endif
@if($slideShowContact)
-
+
@endif
diff --git a/resources/views/partner/invitation-expired.blade.php b/resources/views/partner/invitation-expired.blade.php
index e7fc8c61..e5968b9a 100644
--- a/resources/views/partner/invitation-expired.blade.php
+++ b/resources/views/partner/invitation-expired.blade.php
@@ -30,7 +30,7 @@
{{ __('Bitte kontaktieren Sie Ihren Ansprechpartner, um eine neue Einladung zu erhalten.') }}
-
+
{{ __('Support kontaktieren') }}
diff --git a/tests/Feature/ContactDetailsTest.php b/tests/Feature/ContactDetailsTest.php
new file mode 100644
index 00000000..4b2c7937
--- /dev/null
+++ b/tests/Feature/ContactDetailsTest.php
@@ -0,0 +1,48 @@
+ 'legal', 'key' => 'impressum', 'type' => 'json', 'order' => 0, 'value' => [
+ 'de' => ['content' => 'E-Mail: info@b2in.eu
Telefon: +49 (0) 5221 9255055'],
+ 'en' => ['content' => 'Email: info@b2in.de, Phone: +49 (0) 5221 9255055'],
+ ]]);
+ $contact = CmsContent::create(['group' => 'global', 'key' => 'contact', 'type' => 'json', 'order' => 0, 'value' => [
+ 'de' => ['whatsapp' => '+49 521 98620100', 'note' => 'Rufen Sie 0521 98620100 an'],
+ ]]);
+
+ $this->seed(ContactDetailsSeeder::class);
+ $first = [$legal->refresh()->getTranslations('value'), $contact->refresh()->getTranslations('value')];
+ $this->seed(ContactDetailsSeeder::class);
+
+ expect([$legal->refresh()->getTranslations('value'), $contact->refresh()->getTranslations('value')])->toBe($first)
+ ->and($first[0]['de']['content'])->toBe('E-Mail: interior@b2in.eu
Telefon: +49 521 986 20 100')
+ ->and($first[0]['en']['content'])->toBe('Email: interior@b2in.eu, Phone: +49 521 986 20 100')
+ ->and($first[1]['de']['whatsapp'])->toBe('+49 521 986 20 100')
+ // Fließtext mit der Nummer bleibt – ersetzt wird nur der vollständige Wert.
+ ->and($first[1]['de']['note'])->toBe('Rufen Sie 0521 98620100 an');
+
+ expect(whatsapp_link())->toBe('https://wa.me/4952198620100');
+});
+
+it('shows the new contact details on the contact page and in the legal texts', function () {
+ $this->get('/contact')->assertSuccessful()
+ ->assertSee('interior@b2in.eu')->assertSee('+49 521 986 20 100')
+ ->assertDontSee('5221 9255055')->assertDontSee('info@b2in.eu');
+
+ $this->get('/impressum')->assertSuccessful()->assertSee('interior@b2in.eu')->assertSee('+49 521 986 20 100');
+ $this->get('/privacy')->assertSuccessful()->assertDontSee('info@b2in.eu');
+});
+
+it('leaves no old contact details in the default texts', function () {
+ foreach (['de', 'en'] as $locale) {
+ foreach (['b2in.php', 'b2in_legal.php'] as $file) {
+ $text = file_get_contents(lang_path("{$locale}/{$file}"));
+ expect($text)->not->toContain('5221 9255055')->not->toContain('info@b2in.');
+ }
+ }
+});
diff --git a/tests/Feature/LegalTextUpdateTest.php b/tests/Feature/LegalTextUpdateTest.php
index 1048afe7..45bf2210 100644
--- a/tests/Feature/LegalTextUpdateTest.php
+++ b/tests/Feature/LegalTextUpdateTest.php
@@ -26,7 +26,7 @@ it('ships current legal references on every legal page', function (string $path,
->not->toContain('Lissabon')
->not->toContain('info@b2in.de');
})->with([
- 'impressum' => ['/impressum', ['§ 5 DDG', '§ 18 Abs. 2 MStV', 'Amtsgericht Bad Oeynhausen', 'Verbraucherstreitbeilegung', 'info@b2in.eu']],
+ 'impressum' => ['/impressum', ['§ 5 DDG', '§ 18 Abs. 2 MStV', 'Amtsgericht Bad Oeynhausen', 'Verbraucherstreitbeilegung', 'interior@b2in.eu', '+49 521 986 20 100']],
'terms' => ['/terms', ['Stand: 06.10.2026', 'Unter B2in Interior bieten wir']],
'privacy' => ['/privacy', ['§ 25 Abs. 2 Nr. 2 TDDDG', 'Google Analytics 4', '2. Hosting', 'Hetzner Online GmbH', 'Falkenstein (Sachsen)', 'höchstens 14 Tage gespeichert', 'united-domains GmbH', '9. Ihre Rechte als betroffene Person']],
'cookies' => ['/cookie-policy', ['§ 25 Abs. 1 TDDDG', 'Stand: 06.10.2026']],
@@ -71,8 +71,8 @@ it('adds hosting and mail provider to a stored privacy policy only once', functi
->and(substr_count($content, 'toBe(substr_count($content, '
'));
});
-it('points the partner portal support link to info@b2in.eu', function () {
+it('points the partner portal support link to interior@b2in.eu', function () {
$view = file_get_contents(resource_path('views/partner/invitation-expired.blade.php'));
- expect($view)->toContain('mailto:info@b2in.eu')->not->toContain('@b2in.de');
+ expect($view)->toContain('mailto:interior@b2in.eu')->not->toContain('@b2in.de');
});
diff --git a/tests/Feature/WhatsappNumberSeederTest.php b/tests/Feature/WhatsappNumberSeederTest.php
index 1cdb2a93..72b4c590 100644
--- a/tests/Feature/WhatsappNumberSeederTest.php
+++ b/tests/Feature/WhatsappNumberSeederTest.php
@@ -18,8 +18,8 @@ function contactWhatsapp(string $locale = 'de'): string
it('creates the contact entry with the business number when it is missing', function () {
$this->seed(WhatsappNumberSeeder::class);
- expect(contactWhatsapp('de'))->toBe('+49 521 98620100')
- ->and(contactWhatsapp('en'))->toBe('+49 521 98620100')
+ expect(contactWhatsapp('de'))->toBe('+49 521 986 20 100')
+ ->and(contactWhatsapp('en'))->toBe('+49 521 986 20 100')
->and(whatsapp_link())->toBe('https://wa.me/4952198620100');
});
@@ -34,8 +34,8 @@ it('replaces the placeholder number from the first setup', function () {
$this->seed(WhatsappNumberSeeder::class);
- expect(contactWhatsapp('de'))->toBe('+49 521 98620100')
- ->and(contactWhatsapp('en'))->toBe('+49 521 98620100');
+ expect(contactWhatsapp('de'))->toBe('+49 521 986 20 100')
+ ->and(contactWhatsapp('en'))->toBe('+49 521 986 20 100');
});
it('corrects the wrong number that was seeded on 23.09.', function () {
@@ -49,8 +49,8 @@ it('corrects the wrong number that was seeded on 23.09.', function () {
$this->seed(WhatsappNumberSeeder::class);
- expect(contactWhatsapp('de'))->toBe('+49 521 98620100')
- ->and(contactWhatsapp('en'))->toBe('+49 521 98620100');
+ expect(contactWhatsapp('de'))->toBe('+49 521 986 20 100')
+ ->and(contactWhatsapp('en'))->toBe('+49 521 986 20 100');
});
it('keeps a number that was maintained in the admin', function () {
@@ -68,7 +68,7 @@ it('keeps a number that was maintained in the admin', function () {
expect(contactWhatsapp('de'))->toBe('+49 170 1234567')
->and($row->getTranslation('value', 'de')['phone'])->toBe('0521 1')
- ->and(contactWhatsapp('en'))->toBe('+49 521 98620100');
+ ->and(contactWhatsapp('en'))->toBe('+49 521 986 20 100');
});
it('is idempotent', function () {
@@ -76,7 +76,7 @@ it('is idempotent', function () {
$this->seed(WhatsappNumberSeeder::class);
expect(CmsContent::query()->where('group', 'global')->where('key', 'contact')->count())->toBe(1)
- ->and(contactWhatsapp('de'))->toBe('+49 521 98620100');
+ ->and(contactWhatsapp('de'))->toBe('+49 521 986 20 100');
});
it('shows the business number on the site after seeding', function () {