10-04-2026

This commit is contained in:
Kevin Adametz 2026-04-10 17:18:17 +02:00
parent 4d6b4930b2
commit 4bb89aad8c
836 changed files with 52961 additions and 5950 deletions

View file

@ -0,0 +1,31 @@
@extends('web.layouts.web-master')
@section('title', 'Über B2IN - Unser Team & Geschichte')
@section('content')
<div class="bg-background">
<livewire:web.components.ui.header />
<main class="variante-glass-flow">
<livewire:web.components.sections.about-hero />
<livewire:web.components.sections.our-story />
<livewire:web.components.sections.leadership-team />
<livewire:web.components.sections.our-values />
<livewire:web.components.sections.partner-c-t-a />
</main>
<livewire:web.components.ui.footer />
</div>
@endsection
@push('styles')
<style>
[x-cloak] {
display: none !important;
}
</style>
@endpush
@push('scripts')
{{-- Alpine.js wird zentral im Layout geladen --}}
@endpush

View file

@ -0,0 +1,34 @@
@extends('web.layouts.web-master')
@section('title', 'B2IN - Connecting Design and Property')
@section('content')
<div class="bg-background">
<livewire:web.components.ui.header />
<main>
<livewire:web.components.sections.hero />
<livewire:web.components.sections.ecosystem-core />
<livewire:web.components.sections.vision-section bg="bg-accent" />
<livewire:web.components.sections.brand-worlds />
<livewire:web.components.sections.content-section layout="right" bg="bg-accent"
section="integriertes_modell_b2in" />
<livewire:web.components.sections.c-t-a-section />
</main>
<livewire:web.components.ui.footer />
</div>
@endsection
@push('styles')
<style>
[x-cloak] {
display: none !important;
}
</style>
@endpush
@push('scripts')
{{-- Alpine.js wird zentral im Layout geladen --}}
@endpush

View file

@ -0,0 +1,27 @@
@extends('web.layouts.web-master')
@section('title', 'Kontakt - B2in')
@section('content')
<div class="bg-background">
<livewire:web.components.ui.header />
<main class="variante-glass-flow">
<livewire:web.components.ui.contact-form />
</main>
<livewire:web.components.ui.footer />
</div>
@endsection
@push('styles')
<style>
[x-cloak] {
display: none !important;
}
</style>
@endpush
@push('scripts')
{{-- Alpine.js wird zentral im Layout geladen --}}
@endpush

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,36 @@
@extends('web.layouts.web-master')
@section('title', 'B2in Ecosystem - Intelligentes Netzwerk')
@section('content')
<div class="bg-background">
<livewire:web.components.ui.header />
<main class="variante-glass-flow">
<livewire:web.components.sections.partner-hero section="ecosystem_hero" />
<livewire:web.components.sections.ecosystem-stats />
<livewire:web.components.sections.content-section layout="right" bg="bg-accent"
section="ecosystem_start" />
<livewire:web.components.sections.content-section layout="left" bg=""
section="ecosystem_hub" />
<livewire:web.components.sections.content-section layout="right" bg="bg-accent"
section="ecosystem_result" />
<livewire:web.components.sections.digital-core />
<livewire:web.components.sections.partner-c-t-a />
</main>
<livewire:web.components.ui.footer />
</div>
@endsection
@push('styles')
<style>
[x-cloak] {
display: none !important;
}
</style>
@endpush
@push('scripts')
{{-- Alpine.js wird zentral im Layout geladen --}}
@endpush

View file

@ -0,0 +1,74 @@
<footer class="section-dark section-padding">
<div class="container-padding">
{{-- Main Content --}}
<div class="text-center spacing-section">
<div class="spacing-section">
<div class="flex items-center justify-center">
<img src="{{ asset(\App\Helpers\ThemeHelper::getLogoPath('negative')) }}"
alt="{{ $domainName ?? 'B2in' }} Logo" class="h-14 w-auto" />
</div>
<div class="container-narrow spacing-content">
<h2 class="text-section-title text-dark-text leading-tight">
Connecting Design and <span class="text-secondary">Property</span>
</h2>
</div>
<hr class="border-t border-dark-muted/30 mt-12 pt-4">
</div>
{{-- Links --}}
<div class="grid grid-cols-2 md:grid-cols-4 gap-8 text-left max-w-4xl mx-auto">
<div class="spacing-small text-center">
<a href="#" class="block hover-text-secondary transition-colors">Privacy Policy</a>
</div>
<div class="spacing-small text-center">
<a href="#" class="block hover-text-secondary transition-colors">Terms of Service</a>
</div>
<div class="spacing-small text-center">
<a href="#" class="block hover-text-secondary transition-colors">Cookie Policy</a>
</div>
<div class="spacing-small text-center">
<a href="#" class="block hover-text-secondary transition-colors">Impressum</a>
</div>
</div>
</div>
{{-- Bottom Bar --}}
<div class="border-t border-dark-muted/30 mt-12 pt-8">
<div class="flex flex-col md:flex-row justify-between items-center spacing-small md:space-y-0">
<div class="text-dark-muted text-sm">
© {{ date('Y') }} B2in. All rights reserved.
</div>
<div class="flex items-center space-x-6 text-dark-muted text-sm">
<div class="flex space-x-4">
<a href="#" class="hover-text-secondary transition-colors" aria-label="Facebook">
<svg class="w-5 h-5" fill="currentColor" viewBox="0 0 24 24">
<path
d="M24 12.073c0-6.627-5.373-12-12-12s-12 5.373-12 12c0 5.99 4.388 10.954 10.125 11.854v-8.385H7.078v-3.47h3.047V9.43c0-3.007 1.792-4.669 4.533-4.669 1.312 0 2.686.235 2.686.235v2.953H15.83c-1.491 0-1.956.925-1.956 1.874v2.25h3.328l-.532 3.47h-2.796v8.385C19.612 23.027 24 18.062 24 12.073z" />
</svg>
</a>
<a href="#" class="hover-text-secondary transition-colors" aria-label="Instagram">
<svg class="w-5 h-5" fill="currentColor" viewBox="0 0 24 24">
<path
d="M12.017 0C5.396 0 .029 5.367.029 11.987c0 6.62 5.367 11.987 11.988 11.987s11.987-5.367 11.987-11.987C24.004 5.367 18.637.001 12.017.001zM8.449 16.988c-1.297 0-2.448-.49-3.323-1.297C4.198 14.895 3.708 13.744 3.708 12.447s.49-2.448 1.418-3.323c.875-.807 2.026-1.297 3.323-1.297s2.448.49 3.323 1.297c.928.875 1.418 2.026 1.418 3.323s-.49 2.448-1.418 3.244c-.875.807-2.026 1.297-3.323 1.297zm7.83-9.281c-.49 0-.928-.175-1.297-.49-.368-.315-.49-.753-.49-1.243s.122-.928.49-1.243c.369-.315.807-.49 1.297-.49s.928.175 1.297.49c.368.315.49.753.49 1.243s-.122.928-.49 1.243c-.369.315-.807.49-1.297.49z" />
</svg>
</a>
<a href="#" class="hover-text-secondary transition-colors" aria-label="LinkedIn">
<svg class="w-5 h-5" fill="currentColor" viewBox="0 0 24 24">
<path
d="M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433c-1.144 0-2.063-.926-2.063-2.065 0-1.138.92-2.063 2.063-2.063 1.14 0 2.064.925 2.064 2.063 0 1.139-.925 2.065-2.064 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z" />
</svg>
</a>
</div>
</div>
</div>
</div>
</div>
</footer>

View file

@ -0,0 +1,54 @@
<section class="section-padding flex items-center relative border-b border-border/30">
<div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-20 bg-hero-container rounded-[20px] w-[95%]">
<div class="grid lg:grid-cols-2 gap-12 lg:gap-16 items-center">
{{-- Left Content --}}
<div class="space-y-8">
<div class="space-y-6 slide-right delay-200">
<h1 class="text-hero-alt">
{!! $content['title'] !!}
</h1>
<p class="text-xl text-muted-foreground max-w-md leading-relaxed">
{!! $content['subtitle'] !!}
</p>
</div>
<div class="flex flex-col sm:flex-row gap-4 slide-right delay-300">
<a href="{{ $content['cta1_link'] }}" class="btn-primary-accent">
{{ $content['cta1_text'] }}
</a>
<a href="{{ $content['cta2_link'] }}" class="btn-secondary-accent">
{{ $content['cta2_text'] }}
</a>
</div>
@if(isset($content['stats']))
<div class="flex flex-wrap items-center gap-6 pt-10 mt-10 border-t border-border/80 slide-right delay-300">
@foreach ($content['stats'] as $stat)
<div class="flex items-center gap-2 text-md text-muted-foreground font-light">
@svg('heroicon-o-check-circle', 'w-6 h-6 text-secondary')
<span>{{ $stat }}</span>
</div>
@endforeach
</div>
@endif
</div>
{{-- Right Image --}}
<div class="relative">
<div class="relative rounded-3xl overflow-hidden shadow-elevated slide-left delay-300">
<img src="{{ asset('img/assets/' . $content['image']) }}" alt="{{ $content['image_alt'] }}"
class="w-full h-[600px] object-cover" />
<div class="absolute inset-0 bg-gradient-to-t from-black/20 to-transparent"></div>
</div>
{{-- Floating info card --}}
<div
class="absolute bottom-6 left-6 bg-card/95 backdrop-blur-sm rounded-xl p-4 shadow-lg border border-border/50 slide-left delay-400">
<div class="text-xl font-medium text-muted-foreground">{{ $content['card_title'] }}</div>
<div class="text-lg font-medium font-secondary">{!! $content['card_text'] !!}</div>
</div>
</div>
</div>
</div>
</section>

View file

@ -0,0 +1,34 @@
@extends('web.layouts.web-master')
@section('title', 'B2IN - Connecting Design and Property')
@section('content')
<div class="bg-background">
<livewire:web.components.ui.header />
<main class="variante-glass-flow">
<livewire:web.components.sections.hero />
<livewire:web.components.sections.vision-section />
<livewire:web.components.sections.ecosystem-core bg="bg-accent" />
<livewire:web.components.sections.brand-worlds />
<livewire:web.components.sections.content-section layout="left" bg="bg-accent"
section="integriertes_modell_b2in" />
<livewire:web.components.sections.c-t-a-section />
</main>
<livewire:web.components.ui.footer />
</div>
@endsection
@push('styles')
<style>
[x-cloak] {
display: none !important;
}
</style>
@endpush
@push('scripts')
{{-- Alpine.js wird zentral im Layout geladen --}}
@endpush

View file

@ -0,0 +1,29 @@
@extends('web.layouts.web-master')
@section('title', 'B2in Magazin - Insights & Trends')
@section('content')
<div class="bg-background">
<livewire:web.components.ui.header />
<main class="variante-glass-flow">
<livewire:web.components.sections.magazin-list />
</main>
<livewire:web.components.ui.footer />
</div>
@endsection
@push('styles')
<style>
[x-cloak] {
display: none !important;
}
</style>
@endpush
@push('scripts')
{{-- Alpine.js wird zentral im Layout geladen --}}
@endpush

View file

@ -0,0 +1,35 @@
@extends('web.layouts.web-master')
@section('title', 'Partner werden - B2in Ecosystem')
@section('content')
<div class="bg-background">
<livewire:web.components.ui.header />
<main class="variante-glass-flow">
<livewire:web.components.sections.partner-hero />
<livewire:web.components.sections.card-section bg="bg-accent" section="partner_card_section" />
<livewire:web.components.sections.benefits-section section="partner_benefits_retailer" />
<livewire:web.components.sections.benefits-section section="partner_benefits_supplier" layout="right" bg="bg-accent" />
<livewire:web.components.sections.benefits-section section="partner_benefits_broker" />
<livewire:web.components.sections.partner-process />
<livewire:web.components.sections.commitment-section />
<livewire:web.components.sections.partner-c-t-a />
</main>
<livewire:web.components.ui.footer />
</div>
@endsection
@push('styles')
<style>
[x-cloak] {
display: none !important;
}
</style>
@endpush
@push('scripts')
{{-- Alpine.js wird zentral im Layout geladen --}}
@endpush

View file

@ -0,0 +1,103 @@
<?php
use Illuminate\Support\Facades\Route;
use Livewire\Volt\Volt;
// Gemeinsame Web-Routes für alle Pages)
// Jede Landing-Page hat das gleiche Gerüst, aber unterschiedliches Styling
// Hauptseite - lädt automatisch das richtige Theme basierend auf der Domain
Route::get('/', function () {
$theme = config('app.theme', 'b2in');
// Use theme-specific view if it exists (e.g., web.b2a, web.stileigentum)
// The view name for b2in theme is 'web.b2in' and not 'web.home'
if ($theme === 'b2in') {
return view('web.home');
}
if (view()->exists('web.'.$theme)) {
return view('web.'.$theme);
}
// Fallback to the default home view
return view('web.home');
})->name('home');
// Willkommensseite
Route::get('/welcome', function () {
return view('web.welcome');
})->name('welcome');
// Weitere gemeinsame Webseiten hier...
Route::get('/about', function () {
return view('web.about');
})->name('about');
Route::get('/ecosystem', function () {
return view('web.ecosystem');
})->name('ecosystem');
Route::get('/partner', function () {
return view('web.partner');
})->name('partner');
Route::get('/magazin', function () {
return view('web.magazin');
})->name('magazin');
Route::get('/magazin/{id}', function ($id) {
return view('web.magazin-detail', compact('id'));
})->name('magazin.detail');
Route::get('/contact', function () {
return view('web.contact');
})->name('contact');
Route::get('/service', function () {
return view('web.service');
})->name('service');
Route::get('/portfolio', function () {
return view('web.portfolio');
})->name('portfolio');
Route::get('/faq', function () {
return view('web.faq');
})->name('faq');
// Theme Demo Route
Route::get('/theme-demo', function () {
return view('web.theme-demo');
})->name('theme-demo');
// Pfad-basierte Theme-Routen für lokale Entwicklung wurden entfernt
// Die Themensauswahl wird nun über den ThemeServiceProvider gesteuert (Domain oder ?theme=... GET-Parameter)
Route::get('/partner/invitation/expired/{token}', function (string $token) {
$invitation = \App\Models\PartnerInvitation::with('role')->where('token', $token)->firstOrFail();
return view('partner.invitation-expired', compact('invitation'));
})->name('partner.invitation.expired');
Route::get('/partner/invitation/used/{token}', function (string $token) {
$invitation = \App\Models\PartnerInvitation::with('role')->where('token', $token)->firstOrFail();
return view('partner.invitation-used', compact('invitation'));
})->name('partner.invitation.used');
Volt::route('/partner/invitation/{token}', 'partner.invitation-accept')
->name('partner.invitation.accept');
Volt::route('/partner/create-account', 'partner.create-account')
->name('partner.create.account');
// Öffentliche Registrierung per QR-/Code (Landing, code-check)
Volt::route('/reg/{role}', 'reg.landing')
->name('registration.landing');
Volt::route('/registration/thank-you', 'reg.thank-you')
->name('registration.thank-you');
// Partner Setup Wizard & Daten
Route::middleware('auth')->group(function () {
Volt::route('/partner/setup', 'partner.setup-wizard')
->name('partner.setup.wizard');
});
// Authentifizierungs-Routen werden in domains.php eingebunden
// require __DIR__ . '/auth.php';