webseite funktioniert, pay sdk, blog backend funktioniert
This commit is contained in:
@@ -6,7 +6,7 @@
|
||||
<title>@yield('title', 'Fotospiel - Event-Fotos einfach und sicher mit QR-Codes')</title>
|
||||
<meta name="description" content="Sammle Gastfotos für Events mit QR-Codes und unserer PWA-Plattform. Für Hochzeiten, Firmenevents und mehr. Kostenloser Einstieg.">
|
||||
<link rel="icon" href="{{ asset('logo.svg') }}" type="image/svg+xml">
|
||||
@vite(['resources/css/app.css'])
|
||||
@vite(['resources/css/app.css', 'resources/js/app.js'])
|
||||
<style>
|
||||
@keyframes aurora {
|
||||
0%, 100% { background-position: 0% 50%; }
|
||||
@@ -18,55 +18,16 @@
|
||||
animation: aurora 15s ease infinite;
|
||||
}
|
||||
</style>
|
||||
<script defer src="https://cdn.jsdelivr.net/npm/alpinejs@3.x.x/dist/cdn.min.js"></script>
|
||||
</head>
|
||||
<body class="bg-gray-50 text-gray-900">
|
||||
<!-- Header -->
|
||||
<header class="bg-white shadow-md sticky top-0 z-50">
|
||||
<div class="container mx-auto px-4 py-4 flex items-center justify-between">
|
||||
<div class="flex items-center space-x-2">
|
||||
<a href="/" class="text-2xl font-bold text-gray-900">Fotospiel</a>
|
||||
<svg class="w-6 h-6 text-gray-600" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 9a2 2 0 012-2h.93a2 2 0 001.664-.89l.812-1.22A2 2 0 0110.07 4h3.86a2 2 0 011.664.89l.812 1.22A2 2 0 0018.07 7H19a2 2 0 012 2v9a2 2 0 01-2 2H5a2 2 0 01-2-2V9z"></path>
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 13a3 3 0 11-6 0 3 3 0 016 0z"></path>
|
||||
</svg>
|
||||
</div>
|
||||
<nav class="hidden md:flex space-x-6 items-center">
|
||||
<a href="#how-it-works" class="text-gray-600 hover:text-gray-900">How it works</a>
|
||||
<a href="#features" class="text-gray-600 hover:text-gray-900">Features</a>
|
||||
<div class="relative group">
|
||||
<button class="text-gray-600 hover:text-gray-900">Occasions</button>
|
||||
<div class="absolute top-full left-0 mt-2 bg-white border rounded shadow-lg hidden group-hover:block">
|
||||
<a href="/occasions/weddings" class="block px-4 py-2 text-gray-600 hover:text-gray-900">Weddings</a>
|
||||
<a href="/occasions/birthdays" class="block px-4 py-2 text-gray-600 hover:text-gray-900">Birthdays</a>
|
||||
<a href="/occasions/corporate-events" class="block px-4 py-2 text-gray-600 hover:text-gray-900">Corporate Events</a>
|
||||
<a href="/occasions/family-celebrations" class="block px-4 py-2 text-gray-600 hover:text-gray-900">Family Celebrations</a>
|
||||
</div>
|
||||
</div>
|
||||
<a href="/blog" class="text-gray-600 hover:text-gray-900">Blog</a>
|
||||
<a href="/packages" class="text-gray-600 hover:text-gray-900">Packages</a>
|
||||
<a href="#contact" class="text-gray-600 hover:text-gray-900">Contact</a>
|
||||
<a href="/packages" class="bg-[#FFB6C1] text-white px-6 py-2 rounded-full font-semibold hover:bg-[#FF69B4] transition">Packages entdecken</a>
|
||||
</nav>
|
||||
<!-- Mobile Menu Placeholder (Hamburger) -->
|
||||
<button class="md:hidden text-gray-600">☰</button>
|
||||
</div>
|
||||
</header>
|
||||
@include('partials.header')
|
||||
|
||||
<main>
|
||||
@yield('content')
|
||||
</main>
|
||||
|
||||
<!-- Footer -->
|
||||
<footer class="bg-gray-800 text-white py-8 px-4">
|
||||
<div class="container mx-auto text-center">
|
||||
<p>© 2025 Fotospiel GmbH. Alle Rechte vorbehalten.</p>
|
||||
<div class="mt-4 space-x-4">
|
||||
<a href="/impressum" class="hover:text-[#FFB6C1]">Impressum</a>
|
||||
<a href="/datenschutz" class="hover:text-[#FFB6C1]">Datenschutz</a>
|
||||
<a href="#contact" class="hover:text-[#FFB6C1]">Kontakt</a>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
@include('partials.footer')
|
||||
|
||||
@stack('scripts')
|
||||
</body>
|
||||
|
||||
@@ -1,28 +1,26 @@
|
||||
<!doctype html>
|
||||
<html lang="de">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>Datenschutzerklärung - Fotospiel</title>
|
||||
</head>
|
||||
<body class="container mx-auto px-4 py-8">
|
||||
<h1>Datenschutzerklärung</h1>
|
||||
<p>Wir nehmen den Schutz Ihrer persönlichen Daten sehr ernst und halten uns strikt an die Regeln der Datenschutzgesetze.</p>
|
||||
<p>Verantwortlich: Fotospiel GmbH, Musterstraße 1, 12345 Musterstadt</p>
|
||||
<p>Datenerfassung: Keine PII-Speicherung, anonyme Sessions für Gäste. E-Mails werden nur für Kontaktzwecke verarbeitet.</p>
|
||||
<h2>Zahlungen und Packages</h2>
|
||||
<p>Wir verarbeiten Zahlungen für Packages über Stripe und PayPal. Karteninformationen werden nicht gespeichert – alle Daten werden verschlüsselt übertragen. Siehe <a href="https://stripe.com/de/privacy" target="_blank">Stripe Datenschutz</a> und <a href="https://www.paypal.com/de/webapps/mpp/ua/privacy-full" target="_blank">PayPal Datenschutz</a>.</p>
|
||||
<p>Package-Daten (Limits, Features) sind anonymisiert und werden nur für die Funktionalität benötigt. Consent für Zahlungen und E-Mails wird bei Kauf eingeholt. Daten werden nach 10 Jahren gelöscht.</p>
|
||||
<p>Ihre Rechte: Auskunft, Löschung, Widerspruch. Kontaktieren Sie uns unter <a href="/kontakt">Kontakt</a>.</p>
|
||||
<p>Cookies: Nur funktionale Cookies für die PWA.</p>
|
||||
|
||||
<h2>Persönliche Datenverarbeitung</h2>
|
||||
<p>Bei der Registrierung und Nutzung des Systems werden folgende persönliche Daten verarbeitet: Vor- und Nachname, Adresse, Telefonnummer, E-Mail-Adresse, Username. Diese Daten werden zur Erfüllung des Vertrags (Package-Kauf, Tenant-Management) und für die Authentifizierung verwendet. Die Verarbeitung erfolgt gemäß Art. 6 Abs. 1 lit. b DSGVO.</p>
|
||||
|
||||
<h2>Account-Löschung</h2>
|
||||
<p>Sie haben das Recht, Ihre persönlichen Daten jederzeit löschen zu lassen (Recht auf Löschung, Art. 17 DSGVO). Kontaktieren Sie uns unter [E-Mail] zur Löschung Ihres Accounts. Alle zugehörigen Daten (Events, Photos, Purchases) werden gelöscht, soweit keine gesetzlichen Aufbewahrungspflichten bestehen.</p>
|
||||
|
||||
<h2>Datensicherheit</h2>
|
||||
<p>Wir verwenden HTTPS, verschlüsselte Speicherung (Passwörter hashed) und regelmäßige Backups. Zugriff auf Daten ist rollebasierend beschränkt (Tenant vs SuperAdmin).</p>
|
||||
</body>
|
||||
</html>
|
||||
@extends('layouts.marketing')
|
||||
|
||||
@section('title', __('legal.datenschutz_title'))
|
||||
|
||||
@section('content')
|
||||
<div class="container mx-auto px-4 py-8">
|
||||
<h1 class="text-2xl font-bold mb-4">{{ __('legal.datenschutz') }}</h1>
|
||||
<p class="mb-4">{{ __('legal.datenschutz_intro') }}</p>
|
||||
<p class="mb-4">{{ __('legal.responsible') }}</p>
|
||||
<p class="mb-4">{{ __('legal.data_collection') }}</p>
|
||||
<h2 class="text-xl font-semibold mb-2">{{ __('legal.payments') }}</h2>
|
||||
<p class="mb-4">{{ __('legal.payments_desc') }} <a href="https://stripe.com/de/privacy" target="_blank">{{ __('legal.stripe_privacy') }}</a> {{ __('legal.and') }} <a href="https://www.paypal.com/de/webapps/mpp/ua/privacy-full" target="_blank">{{ __('legal.paypal_privacy') }}</a>.</p>
|
||||
<p class="mb-4">{{ __('legal.data_retention') }}</p>
|
||||
<p class="mb-4">{{ __('legal.rights') }} <a href="{{ route('kontakt') }}">{{ __('legal.contact') }}</a>.</p>
|
||||
<p class="mb-4">{{ __('legal.cookies') }}</p>
|
||||
|
||||
<h2 class="text-xl font-semibold mb-2">{{ __('legal.personal_data') }}</h2>
|
||||
<p class="mb-4">{{ __('legal.personal_data_desc') }}</p>
|
||||
|
||||
<h2 class="text-xl font-semibold mb-2">{{ __('legal.account_deletion') }}</h2>
|
||||
<p class="mb-4">{{ __('legal.account_deletion_desc') }}</p>
|
||||
|
||||
<h2 class="text-xl font-semibold mb-2">{{ __('legal.data_security') }}</h2>
|
||||
<p class="mb-4">{{ __('legal.data_security_desc') }}</p>
|
||||
</div>
|
||||
@endsection
|
||||
@@ -1,23 +1,21 @@
|
||||
<!doctype html>
|
||||
<html lang="de">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>Impressum - Fotospiel</title>
|
||||
<link rel="stylesheet" href="{{ asset('css/app.css') }}">
|
||||
</head>
|
||||
<body class="container mx-auto px-4 py-8">
|
||||
<h1 class="text-2xl font-bold mb-4">Impressum</h1>
|
||||
<p class="mb-4">Angaben gemäß § 5 TMG</p>
|
||||
<p class="mb-4">Fotospiel GmbH<br>
|
||||
Musterstraße 1<br>
|
||||
12345 Musterstadt<br>
|
||||
Vertreten durch: Max Mustermann<br>
|
||||
Kontakt: <a href="/kontakt">Kontakt</a></p>
|
||||
<p class="mb-4">Umsatzsteuer-ID: DE123456789</p>
|
||||
<h2>Monetarisierung</h2>
|
||||
<p>Wir monetarisieren über Packages (Einmalkäufe und Abos) via Stripe und PayPal. Preise exkl. MwSt. Support: support@fotospiel.de</p>
|
||||
<p>Registergericht: Amtsgericht Musterstadt</p>
|
||||
<p>Handelsregister: HRB 12345</p>
|
||||
</body>
|
||||
</html>
|
||||
@extends('layouts.marketing')
|
||||
|
||||
@section('title', __('legal.impressum_title'))
|
||||
|
||||
@section('content')
|
||||
<div class="container mx-auto px-4 py-8">
|
||||
<h1 class="text-2xl font-bold mb-4">{{ __('legal.impressum') }}</h1>
|
||||
<p class="mb-4">{{ __('legal.impressum_section') }}</p>
|
||||
<p class="mb-4">
|
||||
{{ __('legal.company') }}<br>
|
||||
{{ __('legal.address') }}<br>
|
||||
{{ __('legal.representative') }}<br>
|
||||
{{ __('legal.contact') }}: <a href="{{ route('kontakt') }}">{{ __('legal.contact') }}</a>
|
||||
</p>
|
||||
<p class="mb-4">{{ __('legal.vat_id') }}</p>
|
||||
<h2 class="text-xl font-semibold mb-2">{{ __('legal.monetization') }}</h2>
|
||||
<p class="mb-4">{{ __('legal.monetization_desc') }}</p>
|
||||
<p class="mb-4">{{ __('legal.register_court') }}</p>
|
||||
<p class="mb-4">{{ __('legal.commercial_register') }}</p>
|
||||
</div>
|
||||
@endsection
|
||||
@@ -1,48 +1,17 @@
|
||||
<!doctype html>
|
||||
<html lang="{{ app()->getLocale() }}">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>{{ $post->title }} - Fotospiel Blog</title>
|
||||
<meta name="description" content="{{ Str::limit(strip_tags($post->content), 160) }}">
|
||||
<link rel="icon" href="{{ asset('logo.svg') }}" type="image/svg+xml">
|
||||
@vite(['resources/css/app.css'])
|
||||
</head>
|
||||
<body class="bg-gray-50 text-gray-900">
|
||||
<!-- Shared Header -->
|
||||
<header class="bg-white shadow-md sticky top-0 z-50">
|
||||
<div class="container mx-auto px-4 py-4 flex items-center justify-between">
|
||||
<div class="flex items-center space-x-2">
|
||||
<a href="/marketing" class="text-2xl font-bold text-gray-900">Fotospiel</a>
|
||||
<svg class="w-6 h-6 text-gray-600" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 9a2 2 0 012-2h.93a2 2 0 001.664-.89l.812-1.22A2 2 0 0110.07 4h3.86a2 2 0 011.664.89l.812 1.22A2 2 0 0018.07 7H19a2 2 0 012 2v9a2 2 0 01-2 2H5a2 2 0 01-2-2V9z"></path><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 13a3 3 0 11-6 0 3 3 0 016 0z"></path></svg>
|
||||
</div>
|
||||
<nav class="hidden md:flex space-x-6">
|
||||
<a href="/marketing#how-it-works" class="text-gray-600 hover:text-gray-900">How it works</a>
|
||||
<a href="/marketing#features" class="text-gray-600 hover:text-gray-900">Features</a>
|
||||
<div class="relative">
|
||||
<button class="text-gray-600 hover:text-gray-900">Occasions</button>
|
||||
<div class="absolute top-full left-0 mt-2 bg-white border rounded shadow-lg">
|
||||
<a href="/occasions/weddings" class="block px-4 py-2 text-gray-600 hover:text-gray-900">Weddings</a>
|
||||
<a href="/occasions/birthdays" class="block px-4 py-2 text-gray-600 hover:text-gray-900">Birthdays</a>
|
||||
<a href="/occasions/corporate-events" class="block px-4 py-2 text-gray-600 hover:text-gray-900">Corporate Events</a>
|
||||
<a href="/occasions/family-celebrations" class="block px-4 py-2 text-gray-600 hover:text-gray-900">Family Celebrations</a>
|
||||
</div>
|
||||
</div>
|
||||
<a href="/blog" class="text-gray-900 font-semibold">Blog</a>
|
||||
<a href="/packages" class="text-gray-600 hover:text-gray-900">Pricing</a>
|
||||
<a href="/marketing#contact" class="text-gray-600 hover:text-gray-900">Contact</a>
|
||||
</nav>
|
||||
<a href="/packages" class="bg-[#FFB6C1] text-white px-6 py-2 rounded-full font-semibold">Jetzt starten</a>
|
||||
</div>
|
||||
</header>
|
||||
@extends('layouts.marketing')
|
||||
|
||||
@section('title')
|
||||
{{ $post->getTranslation('title', app()->getLocale()) }} - {{ __('blog.title') }}
|
||||
@endsection
|
||||
|
||||
@section('content')
|
||||
<!-- Hero for Single Post -->
|
||||
<section class="bg-gradient-to-r from-[#FFB6C1] via-[#FFD700] to-[#87CEEB] text-white py-20 px-4">
|
||||
<div class="container mx-auto text-center">
|
||||
<h1 class="text-4xl md:text-5xl font-bold mb-4">{{ $post->title }}</h1>
|
||||
<p class="text-lg mb-8">Von {{ $post->author->name ?? 'Fotospiel Team' }} | {{ $post->published_at->format('d.m.Y') }}</p>
|
||||
<h1 class="text-4xl md:text-5xl font-bold mb-4">{{ $post->getTranslation('title', app()->getLocale()) }}</h1>
|
||||
<p class="text-lg mb-8">{{ __('blog.by') }} {{ $post->author->name ?? __('blog.team') }} | {{ $post->published_at->format(__('date.format')) }}</p>
|
||||
@if ($post->featured_image)
|
||||
<img src="{{ $post->featured_image }}" alt="{{ $post->title }}" class="mx-auto rounded-lg shadow-lg max-w-2xl">
|
||||
<img src="{{ $post->featured_image }}" alt="{{ $post->getTranslation('title', app()->getLocale()) }}" class="mx-auto rounded-lg shadow-lg max-w-2xl">
|
||||
@endif
|
||||
</div>
|
||||
</section>
|
||||
@@ -50,27 +19,14 @@
|
||||
<!-- Post Content -->
|
||||
<section class="py-20 px-4 bg-white">
|
||||
<div class="container mx-auto max-w-4xl prose prose-lg max-w-none">
|
||||
{!! $post->content !!}
|
||||
{!! $post->getTranslation('content', app()->getLocale()) !!}
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Back to Blog -->
|
||||
<section class="py-10 px-4 bg-gray-50">
|
||||
<div class="container mx-auto text-center">
|
||||
<a href="/blog" class="bg-[#FFB6C1] text-white px-8 py-3 rounded-full font-semibold hover:bg-[#FF69B4] transition">Zurück zum Blog</a>
|
||||
<a href="/blog" class="bg-[#FFB6C1] text-white px-8 py-3 rounded-full font-semibold hover:bg-[#FF69B4] transition">{{ __('blog.back') }}</a>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Footer -->
|
||||
<footer class="bg-gray-800 text-white py-8 px-4 mt-20">
|
||||
<div class="container mx-auto text-center">
|
||||
<p>© 2025 Fotospiel GmbH. Alle Rechte vorbehalten.</p>
|
||||
<div class="mt-4 space-x-4">
|
||||
<a href="/impressum" class="hover:text-[#FFB6C1]">Impressum</a>
|
||||
<a href="/datenschutz" class="hover:text-[#FFB6C1]">Datenschutz</a>
|
||||
<a href="/marketing#contact" class="hover:text-[#FFB6C1]">Kontakt</a>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
||||
@endsection
|
||||
@@ -1,32 +1,32 @@
|
||||
@extends('layouts.marketing')
|
||||
|
||||
@section('title', 'Fotospiel - Blog')
|
||||
@section('title', __('marketing.blog.title'))
|
||||
|
||||
@section('content')
|
||||
<!-- Hero for Blog -->
|
||||
<section class="bg-gradient-to-r from-[#FFB6C1] via-[#FFD700] to-[#87CEEB] text-white py-20 px-4">
|
||||
<div class="container mx-auto text-center">
|
||||
<h1 class="text-4xl md:text-6xl font-bold mb-4">Fotospiel Blog</h1>
|
||||
<p class="text-xl md:text-2xl mb-8 max-w-3xl mx-auto">Tipps, News und Anleitungen zu perfekten Event-Fotos mit QR-Codes, PWA und mehr. Bleib informiert!</p>
|
||||
<a href="/marketing#how-it-works" class="bg-white text-[#FFB6C1] px-8 py-4 rounded-full font-semibold text-lg hover:bg-gray-100 transition">Mehr über Fotospiel</a>
|
||||
<h1 class="text-4xl md:text-6xl font-bold mb-4">{{ __('marketing.blog.hero_title') }}</h1>
|
||||
<p class="text-xl md:text-2xl mb-8 max-w-3xl mx-auto">{{ __('marketing.blog.hero_description') }}</p>
|
||||
<a href="/marketing#how-it-works" class="bg-white text-[#FFB6C1] px-8 py-4 rounded-full font-semibold text-lg hover:bg-gray-100 transition">{{ __('marketing.blog.hero_cta') }}</a>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Blog Posts Section -->
|
||||
<section class="py-20 px-4 bg-white">
|
||||
<div class="container mx-auto max-w-4xl">
|
||||
<h2 class="text-3xl font-bold text-center mb-12">Aktuelle Blog-Posts</h2>
|
||||
<h2 class="text-3xl font-bold text-center mb-12">{{ __('marketing.blog.posts_title') }}</h2>
|
||||
@if ($posts->count() > 0)
|
||||
<div class="grid md:grid-cols-2 gap-8">
|
||||
@foreach ($posts as $post)
|
||||
<div class="bg-gray-50 p-6 rounded-lg">
|
||||
@if ($post->featured_image)
|
||||
<img src="{{ $post->featured_image }}" alt="{{ $post->title }}" class="w-full h-48 object-cover rounded mb-4">
|
||||
<img src="{{ $post->featured_image }}" alt="{{ $post->getTranslation('title', app()->getLocale()) }}" class="w-full h-48 object-cover rounded mb-4">
|
||||
@endif
|
||||
<h3 class="text-xl font-semibold mb-2"><a href="{{ route('blog.show', $post->slug) }}" class="hover:text-[#FFB6C1]">{{ $post->title }}</a></h3>
|
||||
<p class="mb-4">{{ Str::limit($post->excerpt, 150) }}</p>
|
||||
<p class="text-sm text-gray-500 mb-4">Veröffentlicht am {{ $post->published_at->format('d.m.Y') }}</p>
|
||||
<a href="{{ route('blog.show', $post->slug) }}" class="text-[#FFB6C1] font-semibold">Lesen</a>
|
||||
<h3 class="text-xl font-semibold mb-2"><a href="{{ route('blog.show', $post->slug) }}" class="hover:text-[#FFB6C1]">{{ $post->getTranslation('title', app()->getLocale()) }}</a></h3>
|
||||
<p class="mb-4">{{ Str::limit($post->getTranslation('excerpt', app()->getLocale()), 150) }}</p>
|
||||
<p class="text-sm text-gray-500 mb-4">{{ __('marketing.blog.published_at') }} {{ $post->published_at->format(__('date.format')) }}</p>
|
||||
<a href="{{ route('blog.show', $post->slug) }}" class="text-[#FFB6C1] font-semibold">{{ __('marketing.blog.read_more') }}</a>
|
||||
</div>
|
||||
@endforeach
|
||||
</div>
|
||||
@@ -36,7 +36,7 @@
|
||||
</div>
|
||||
@endif
|
||||
@else
|
||||
<p class="text-center text-gray-600">Noch keine Posts verfügbar. Bleib dran!</p>
|
||||
<p class="text-center text-gray-600">{{ __('marketing.blog.empty') }}</p>
|
||||
@endif
|
||||
</div>
|
||||
</section>
|
||||
|
||||
@@ -1,47 +1,22 @@
|
||||
<!doctype html>
|
||||
<html lang="de">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>Fotospiel - {{ ucfirst($type) }} Occasion</title>
|
||||
<meta name="description" content="Fotospiel für {{ ucfirst($type) }}: Sammle Gastfotos mit QR-Codes.">
|
||||
<link rel="icon" href="{{ asset('logo.svg') }}" type="image/svg+xml">
|
||||
@vite(['resources/css/app.css'])
|
||||
</head>
|
||||
<body class="bg-gray-50 text-gray-900">
|
||||
<!-- Shared Header (kopiert aus marketing, vereinfacht) -->
|
||||
<header class="bg-white shadow-md sticky top-0 z-50">
|
||||
<div class="container mx-auto px-4 py-4 flex items-center justify-between">
|
||||
<div class="flex items-center space-x-2">
|
||||
<a href="/marketing" class="text-2xl font-bold text-gray-900">Fotospiel</a>
|
||||
<svg class="w-6 h-6 text-gray-600" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 9a2 2 0 012-2h.93a2 2 0 001.664-.89l.812-1.22A2 2 0 0110.07 4h3.86a2 2 0 011.664.89l.812 1.22A2 2 0 0018.07 7H19a2 2 0 012 2v9a2 2 0 01-2 2H5a2 2 0 01-2-2V9z"></path><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 13a3 3 0 11-6 0 3 3 0 016 0z"></path></svg>
|
||||
</div>
|
||||
<nav class="hidden md:flex space-x-6">
|
||||
<a href="/marketing#how-it-works" class="text-gray-600 hover:text-gray-900">How it works</a>
|
||||
<a href="/marketing#features" class="text-gray-600 hover:text-gray-900">Features</a>
|
||||
<div class="relative">
|
||||
<button class="text-gray-600 hover:text-gray-900">Occasions</button>
|
||||
<div class="absolute top-full left-0 mt-2 bg-white border rounded shadow-lg">
|
||||
<a href="/occasions/weddings" class="block px-4 py-2 text-gray-600 hover:text-gray-900">Weddings</a>
|
||||
<a href="/occasions/birthdays" class="block px-4 py-2 text-gray-600 hover:text-gray-900">Birthdays</a>
|
||||
<a href="/occasions/corporate-events" class="block px-4 py-2 text-gray-600 hover:text-gray-900">Corporate Events</a>
|
||||
<a href="/occasions/family-celebrations" class="block px-4 py-2 text-gray-600 hover:text-gray-900">Family Celebrations</a>
|
||||
</div>
|
||||
</div>
|
||||
<a href="/blog" class="text-gray-600 hover:text-gray-900">Blog</a>
|
||||
<a href="/packages" class="text-gray-600 hover:text-gray-900">Pricing</a>
|
||||
<a href="/marketing#contact" class="text-gray-600 hover:text-gray-900">Contact</a>
|
||||
</nav>
|
||||
<a href="/packages" class="bg-[#FFB6C1] text-white px-6 py-2 rounded-full font-semibold">Packages wählen</a>
|
||||
</div>
|
||||
</header>
|
||||
@extends('layouts.marketing')
|
||||
|
||||
@section('title', __('marketing.occasions.title', ['type' => ucfirst($type)]))
|
||||
|
||||
@section('content')
|
||||
@php
|
||||
Log::info('Occasions View Debug', [
|
||||
'type' => $type ?? 'null',
|
||||
'keyType' => $type ? str_replace('-', '', $type) : 'null',
|
||||
'locale' => app()->getLocale()
|
||||
]);
|
||||
$keyType = str_replace('-', '', $type ?? '');
|
||||
@endphp
|
||||
<!-- Hero for Occasion -->
|
||||
<section class="bg-gradient-to-r from-[#FFB6C1] via-[#FFD700] to-[#87CEEB] text-white py-20 px-4">
|
||||
<div class="container mx-auto text-center">
|
||||
<h1 class="text-4xl md:text-6xl font-bold mb-4">Fotospiel für {{ ucfirst($type) }}</h1>
|
||||
<p class="text-xl md:text-2xl mb-8 max-w-3xl mx-auto">Sammle unvergessliche Fotos von deinen Gästen mit QR-Codes. Perfekt für {{ ucfirst($type) }} – einfach, mobil und datenschutzkonform.</p>
|
||||
<a href="/packages" class="bg-white text-[#FFB6C1] px-8 py-4 rounded-full font-semibold text-lg hover:bg-gray-100 transition">Package wählen</a>
|
||||
<h1 class="text-4xl md:text-6xl font-bold mb-4">{{ __('marketing.occasions.hero_title', ['type' => ucfirst($type)]) }}</h1>
|
||||
<p class="text-xl md:text-2xl mb-8 max-w-3xl mx-auto">{{ __('marketing.occasions.hero_description', ['type' => ucfirst($type)]) }}</p>
|
||||
<a href="{{ route('packages') }}" class="bg-white text-[#FFB6C1] px-8 py-4 rounded-full font-semibold text-lg hover:bg-gray-100 transition">{{ __('marketing.occasions.cta') }}</a>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
@@ -49,89 +24,76 @@
|
||||
<section class="py-20 px-4 bg-white">
|
||||
<div class="container mx-auto max-w-4xl">
|
||||
@if($type === 'weddings')
|
||||
<h2 class="text-3xl font-bold text-center mb-12">Hochzeiten mit Fotospiel</h2>
|
||||
<p class="text-lg mb-8 text-center">Erfange romantische Momente: Gäste teilen Fotos via QR, wähle Emotions wie 'Romantisch' oder 'Fröhlich'. Besser als traditionelle Fotoboxen.</p>
|
||||
<h2 class="text-3xl font-bold text-center mb-12">{{ __('marketing.occasions.weddings.title') }}</h2>
|
||||
<p class="text-lg mb-8 text-center">{{ __('marketing.occasions.weddings.description') }}</p>
|
||||
<div class="grid md:grid-cols-2 gap-8">
|
||||
<div>
|
||||
<img src="https://images.unsplash.com/photo-1515934751635-c81c6bc9a2d8?w=600&h=400&fit=crop" alt="Hochzeitsfotos" class="rounded-lg shadow-lg">
|
||||
<img src="https://images.unsplash.com/photo-1515934751635-c81c6bc9a2d8?w=600&h=400&fit=crop" alt="{{ __('marketing.occasions.weddings.image_alt') }}" class="rounded-lg shadow-lg">
|
||||
</div>
|
||||
<div class="space-y-4">
|
||||
<h3 class="text-2xl font-semibold">Vorteile für Hochzeiten</h3>
|
||||
<h3 class="text-2xl font-semibold">{{ __('marketing.occasions.weddings.benefits_title') }}</h3>
|
||||
<ul class="space-y-2">
|
||||
<li>• QR-Code für Gäste: Einfaches Teilen ohne App-Download.</li>
|
||||
<li>• Emotion-Filter: Kategorisiere Fotos (z.B. 'Tanz', 'Kuss').</li>
|
||||
<li>• Private Galerie: Nur freigegebene Fotos sichtbar.</li>
|
||||
<li>• Download: Hochauflösend für Album.</li>
|
||||
<li>• {{ __('marketing.occasions.weddings.benefit1') }}</li>
|
||||
<li>• {{ __('marketing.occasions.weddings.benefit2') }}</li>
|
||||
<li>• {{ __('marketing.occasions.weddings.benefit3') }}</li>
|
||||
<li>• {{ __('marketing.occasions.weddings.benefit4') }}</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
@elseif($type === 'birthdays')
|
||||
<h2 class="text-3xl font-bold text-center mb-12">Geburtstage feiern</h2>
|
||||
<p class="text-lg mb-8 text-center">Lass Freunde und Familie spontane Fotos teilen. QR auf der Torte – Spaß garantiert!</p>
|
||||
<h2 class="text-3xl font-bold text-center mb-12">{{ __('marketing.occasions.birthdays.title') }}</h2>
|
||||
<p class="text-lg mb-8 text-center">{{ __('marketing.occasions.birthdays.description') }}</p>
|
||||
<div class="grid md:grid-cols-2 gap-8">
|
||||
<div>
|
||||
<img src="https://images.unsplash.com/photo-1571019613454-1cb2f99b2d8b?w=600&h=400&fit=crop" alt="Geburtstagsfotos" class="rounded-lg shadow-lg">
|
||||
<img src="https://images.unsplash.com/photo-1571019613454-1cb2f99b2d8b?w=600&h=400&fit=crop" alt="{{ __('marketing.occasions.birthdays.image_alt') }}" class="rounded-lg shadow-lg">
|
||||
</div>
|
||||
<div class="space-y-4">
|
||||
<h3 class="text-2xl font-semibold">Vorteile für Geburtstage</h3>
|
||||
<h3 class="text-2xl font-semibold">{{ __('marketing.occasions.birthdays.benefits_title') }}</h3>
|
||||
<ul class="space-y-2">
|
||||
<li>• Schnelle Uploads: Kamera oder Galerie.</li>
|
||||
<li>• Likes & Shares: Beliebte Momente hervorheben.</li>
|
||||
<li>• Offline-fähig: PWA funktioniert ohne Internet.</li>
|
||||
<li>• Anonym: Keine Registrierung nötig.</li>
|
||||
<li>• {{ __('marketing.occasions.birthdays.benefit1') }}</li>
|
||||
<li>• {{ __('marketing.occasions.birthdays.benefit2') }}</li>
|
||||
<li>• {{ __('marketing.occasions.birthdays.benefit3') }}</li>
|
||||
<li>• {{ __('marketing.occasions.birthdays.benefit4') }}</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
@elseif($type === 'corporate-events')
|
||||
<h2 class="text-3xl font-bold text-center mb-12">Firmenevents professionell</h2>
|
||||
<p class="text-lg mb-8 text-center">Netzwerken und Team-Building: Sammle Fotos zentral, teile Highlights intern.</p>
|
||||
<h2 class="text-3xl font-bold text-center mb-12">{{ __('marketing.occasions.corporate.title') }}</h2>
|
||||
<p class="text-lg mb-8 text-center">{{ __('marketing.occasions.corporate.description') }}</p>
|
||||
<div class="grid md:grid-cols-2 gap-8">
|
||||
<div>
|
||||
<img src="https://images.unsplash.com/photo-1521737604893-d14cc237f11d?w=600&h=400&fit=crop" alt="Firmenevent-Fotos" class="rounded-lg shadow-lg">
|
||||
<img src="https://images.unsplash.com/photo-1521737604893-d14cc237f11d?w=600&h=400&fit=crop" alt="{{ __('marketing.occasions.corporate.image_alt') }}" class="rounded-lg shadow-lg">
|
||||
</div>
|
||||
<div class="space-y-4">
|
||||
<h3 class="text-2xl font-semibold">Vorteile für Firmenevents</h3>
|
||||
<h3 class="text-2xl font-semibold">{{ __('marketing.occasions.corporate.benefits_title') }}</h3>
|
||||
<ul class="space-y-2">
|
||||
<li>• QR an Ständen: Gäste fotografieren sich selbst.</li>
|
||||
<li>• Kategorien: 'Team', 'Netzwerk', 'Präsentation'.</li>
|
||||
<li>• Export: Für Social Media oder Intranet.</li>
|
||||
<li>• GDPR-sicher: Keine PII gespeichert.</li>
|
||||
<li>• {{ __('marketing.occasions.corporate.benefit1') }}</li>
|
||||
<li>• {{ __('marketing.occasions.corporate.benefit2') }}</li>
|
||||
<li>• {{ __('marketing.occasions.corporate.benefit3') }}</li>
|
||||
<li>• {{ __('marketing.occasions.corporate.benefit4') }}</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
@elseif($type === 'family-celebrations')
|
||||
<h2 class="text-3xl font-bold text-center mb-12">Familienfeiern</h2>
|
||||
<p class="text-lg mb-8 text-center">Von Taufen bis Jubiläen: Sammle Erinnerungen von allen Verwandten.</p>
|
||||
<h2 class="text-3xl font-bold text-center mb-12">{{ __('marketing.occasions.family.title') }}</h2>
|
||||
<p class="text-lg mb-8 text-center">{{ __('marketing.occasions.family.description') }}</p>
|
||||
<div class="grid md:grid-cols-2 gap-8">
|
||||
<div>
|
||||
<img src="https://images.unsplash.com/photo-1507003211169-0a1dd7228f2d?w=600&h=400&fit=crop" alt="Familienfotos" class="rounded-lg shadow-lg">
|
||||
<img src="https://images.unsplash.com/photo-1507003211169-0a1dd7228f2d?w=600&h=400&fit=crop" alt="{{ __('marketing.occasions.family.image_alt') }}" class="rounded-lg shadow-lg">
|
||||
</div>
|
||||
<div class="space-y-4">
|
||||
<h3 class="text-2xl font-semibold">Vorteile für Familienfeiern</h3>
|
||||
<h3 class="text-2xl font-semibold">{{ __('marketing.occasions.family.benefits_title') }}</h3>
|
||||
<ul class="space-y-2">
|
||||
<li>• Einfach für alle Altersgruppen: Große Buchstaben, Touch-freundlich.</li>
|
||||
<li>• Emotionen: 'Familie', 'Glück', 'Zusammenhalt'.</li>
|
||||
<li>• Teilen: Per Link oder QR für Nachfeier.</li>
|
||||
<li>• Unbegrenzt: Im Premium-Tarif.</li>
|
||||
<li>• {{ __('marketing.occasions.family.benefit1') }}</li>
|
||||
<li>• {{ __('marketing.occasions.family.benefit2') }}</li>
|
||||
<li>• {{ __('marketing.occasions.family.benefit3') }}</li>
|
||||
<li>• {{ __('marketing.occasions.family.benefit4') }}</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
@else
|
||||
<p class="text-center">Occasion nicht gefunden. <a href="/marketing">Zurück zur Startseite</a>.</p>
|
||||
<p class="text-center">{{ __('marketing.occasions.not_found') }} <a href="{{ route('marketing') }}">{{ __('nav.home') }}</a>.</p>
|
||||
@endif
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Footer (kopiert aus marketing) -->
|
||||
<footer class="bg-gray-800 text-white py-8 px-4 mt-20">
|
||||
<div class="container mx-auto text-center">
|
||||
<p>© 2025 Fotospiel GmbH. Alle Rechte vorbehalten.</p>
|
||||
<div class="mt-4 space-x-4">
|
||||
<a href="/impressum" class="hover:text-[#FFB6C1]">Impressum</a>
|
||||
<a href="/datenschutz" class="hover:text-[#FFB6C1]">Datenschutz</a>
|
||||
<a href="/marketing#contact" class="hover:text-[#FFB6C1]">Kontakt</a>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
||||
@endsection
|
||||
@@ -38,7 +38,7 @@
|
||||
{{ __('marketing.packages.section_endcustomer') }}
|
||||
</h2>
|
||||
<div class="grid md:grid-cols-2 lg:grid-cols-4 gap-6">
|
||||
@foreach(\App\Models\Package::where('type', 'endcustomer')->orderBy('price')->get() as $package)
|
||||
@foreach($endcustomerPackages as $package)
|
||||
<div class="bg-white rounded-lg shadow-md p-6 border border-gray-200 hover:shadow-lg transition duration-300">
|
||||
<div class="text-center mb-4">
|
||||
<h3 class="text-xl font-semibold text-gray-900">{{ $package->name }}</h3>
|
||||
@@ -103,7 +103,7 @@
|
||||
{{ __('marketing.packages.section_reseller') }}
|
||||
</h2>
|
||||
<div class="grid md:grid-cols-2 lg:grid-cols-4 gap-6">
|
||||
@foreach(\App\Models\Package::where('type', 'reseller')->orderBy('price')->get() as $package)
|
||||
@foreach($resellerPackages as $package)
|
||||
<div class="bg-white rounded-lg shadow-md p-6 border border-gray-200 hover:shadow-lg transition duration-300">
|
||||
<div class="text-center mb-4">
|
||||
<h3 class="text-xl font-semibold text-gray-900">{{ $package->name }}</h3>
|
||||
@@ -183,6 +183,8 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@endsection
|
||||
|
||||
@push('scripts')
|
||||
<script>
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
<h3 class="text-lg font-semibold text-blue-900 mb-2">{{ $package->name }}</h3>
|
||||
<p class="text-blue-800 mb-2">{{ $package->description }}</p>
|
||||
<p class="text-sm text-blue-700">
|
||||
{{ $package->price == 0 ? __('marketing.free') : $package->price . ' €' }}
|
||||
{{ $package->price == 0 ? __('marketing.register.free') : $package->price . ' ' . __('currency.euro') }}
|
||||
</p>
|
||||
</div>
|
||||
@endif
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
@extends('marketing.layout')
|
||||
@extends('layouts.marketing')
|
||||
|
||||
@section('title', __('marketing.success.title'))
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
</script>
|
||||
<div class="text-center">
|
||||
<div class="spinner-border animate-spin inline-block w-8 h-8 border border-2 border-blue-600 border-t-transparent rounded-full" role="status">
|
||||
<span class="sr-only">Loading...</span>
|
||||
<span class="sr-only">{{ __('marketing.success.loading') }}</span>
|
||||
</div>
|
||||
<p class="mt-2 text-gray-600">{{ __('marketing.success.redirecting') }}</p>
|
||||
</div>
|
||||
|
||||
10
resources/views/partials/footer.blade.php
Normal file
10
resources/views/partials/footer.blade.php
Normal file
@@ -0,0 +1,10 @@
|
||||
<footer class="bg-gray-800 text-white py-8 px-4">
|
||||
<div class="container mx-auto text-center">
|
||||
<p>© 2025 {{ __('marketing.footer.company') }}. {{ __('marketing.footer.rights_reserved') }}</p>
|
||||
<div class="mt-4 space-x-4">
|
||||
<a href="{{ route('impressum') }}" class="hover:text-[#FFB6C1]">{{ __('legal.impressum') }}</a>
|
||||
<a href="{{ route('datenschutz') }}" class="hover:text-[#FFB6C1]">{{ __('legal.datenschutz') }}</a>
|
||||
<a href="{{ route('kontakt') }}" class="hover:text-[#FFB6C1]">{{ __('marketing.nav.contact') }}</a>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
30
resources/views/partials/header.blade.php
Normal file
30
resources/views/partials/header.blade.php
Normal file
@@ -0,0 +1,30 @@
|
||||
<header class="bg-white shadow-md sticky top-0 z-50">
|
||||
<div class="container mx-auto px-4 py-4 flex items-center justify-between">
|
||||
<div class="flex items-center space-x-2">
|
||||
<a href="/" class="text-2xl font-bold text-gray-900">Die Fotospiel.App</a>
|
||||
<svg class="w-6 h-6 text-gray-600" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 9a2 2 0 012-2h.93a2 2 0 001.664-.89l.812-1.22A2 2 0 0110.07 4h3.86a2 2 0 011.664.89l.812 1.22A2 2 0 0018.07 7H19a2 2 0 012 2v9a2 2 0 01-2 2H5a2 2 0 01-2-2V9z"></path>
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 13a3 3 0 11-6 0 3 3 0 016 0z"></path>
|
||||
</svg>
|
||||
</div>
|
||||
<nav class="hidden md:flex space-x-6 items-center">
|
||||
<a href="/#how-it-works" class="text-gray-600 hover:text-gray-900">{{ __('marketing.nav.how_it_works') }}</a>
|
||||
<a href="/#features" class="text-gray-600 hover:text-gray-900">{{ __('marketing.nav.features') }}</a>
|
||||
<div x-data="{ open: false }" @mouseenter="open = true" @mouseleave="open = false" @click.away="open = false" class="relative">
|
||||
<button class="text-gray-600 hover:text-gray-900" @click.stop="open = !open">{{ __('marketing.nav.occasions') }}</button>
|
||||
<div x-show="open" x-transition:enter="transition ease-out duration-200" x-transition:enter-start="opacity-0 transform scale-95" x-transition:enter-end="opacity-100 transform scale-100" x-transition:leave="transition ease-in duration-150" x-transition:leave-start="opacity-100 transform scale-100" x-transition:leave-end="opacity-0 transform scale-95" class="absolute top-full left-0 mt-2 bg-white border rounded shadow-lg z-10">
|
||||
<a href="{{ route('occasions.type', ['locale' => app()->getLocale(), 'type' => 'weddings']) }}" class="block px-4 py-2 text-gray-600 hover:text-gray-900 hover:bg-gray-50 transition">{{ __('marketing.nav.occasions_types.weddings') }}</a>
|
||||
<a href="{{ route('occasions.type', ['locale' => app()->getLocale(), 'type' => 'birthdays']) }}" class="block px-4 py-2 text-gray-600 hover:text-gray-900 hover:bg-gray-50 transition">{{ __('marketing.nav.occasions_types.birthdays') }}</a>
|
||||
<a href="{{ route('occasions.type', ['locale' => app()->getLocale(), 'type' => 'corporate-events']) }}" class="block px-4 py-2 text-gray-600 hover:text-gray-900 hover:bg-gray-50 transition">{{ __('marketing.nav.occasions_types.corporate') }}</a>
|
||||
<a href="{{ route('occasions.type', ['locale' => app()->getLocale(), 'type' => 'family-celebrations']) }}" class="block px-4 py-2 text-gray-600 hover:text-gray-900 hover:bg-gray-50 transition">{{ __('marketing.nav.occasions_types.family') }}</a>
|
||||
</div>
|
||||
</div>
|
||||
<a href="{{ route('blog') }}" class="text-gray-600 hover:text-gray-900">{{ __('marketing.nav.blog') }}</a>
|
||||
<a href="{{ route('packages') }}" class="text-gray-600 hover:text-gray-900">{{ __('marketing.nav.packages') }}</a>
|
||||
<a href="{{ route('kontakt') }}" class="text-gray-600 hover:text-gray-900">{{ __('marketing.nav.contact') }}</a>
|
||||
<a href="{{ route('packages') }}" class="bg-[#FFB6C1] text-white px-6 py-2 rounded-full font-semibold hover:bg-[#FF69B4] transition">{{ __('marketing.nav.discover_packages') }}</a>
|
||||
</nav>
|
||||
<!-- Mobile Menu Placeholder (Hamburger) -->
|
||||
<button class="md:hidden text-gray-600">☰</button>
|
||||
</div>
|
||||
</header>
|
||||
Reference in New Issue
Block a user