Fix app name phrasing and refresh blog seed dates
This commit is contained in:
@@ -30,6 +30,7 @@
|
||||
{"id":"fotospiel-app-7u1","title":"Paddle catalog sync: PaddlePackagePull job","status":"closed","priority":2,"issue_type":"task","created_at":"2026-01-01T16:00:47.468892178+01:00","created_by":"soeren","updated_at":"2026-01-01T16:00:53.126602817+01:00","closed_at":"2026-01-01T16:00:53.126602817+01:00","close_reason":"Completed in codebase (verified)"}
|
||||
{"id":"fotospiel-app-95m","title":"Paddle migration: admin catalog sync UI for packages","status":"closed","priority":2,"issue_type":"task","created_at":"2026-01-01T15:57:49.790409261+01:00","created_by":"soeren","updated_at":"2026-01-01T15:57:55.418180246+01:00","closed_at":"2026-01-01T15:57:55.418180246+01:00","close_reason":"Completed in codebase (verified)"}
|
||||
{"id":"fotospiel-app-99d","title":"Paddle migration: marketing checkout uses Paddle-hosted checkout","status":"closed","priority":2,"issue_type":"task","created_at":"2026-01-01T15:58:12.298063897+01:00","created_by":"soeren","updated_at":"2026-01-01T15:58:17.968032021+01:00","closed_at":"2026-01-01T15:58:17.968032021+01:00","close_reason":"Completed in codebase (verified)"}
|
||||
{"id":"fotospiel-app-99o","title":"Fix German welcome phrasing with article-safe app_name","status":"closed","priority":2,"issue_type":"task","created_at":"2026-01-04T11:50:17.410390085+01:00","created_by":"soeren","updated_at":"2026-01-04T12:19:55.741616753+01:00","closed_at":"2026-01-04T12:19:55.741616753+01:00","close_reason":"Closed"}
|
||||
{"id":"fotospiel-app-9al","title":"Security review checklist: Marketing/API dynamic tests","status":"open","priority":2,"issue_type":"task","created_at":"2026-01-01T16:04:35.116728385+01:00","created_by":"soeren","updated_at":"2026-01-01T16:04:35.116728385+01:00"}
|
||||
{"id":"fotospiel-app-9gc","title":"Paddle migration: review current billing implementation","status":"closed","priority":2,"issue_type":"task","created_at":"2026-01-01T15:57:04.715058376+01:00","created_by":"soeren","updated_at":"2026-01-01T15:57:10.363528452+01:00","closed_at":"2026-01-01T15:57:10.363528452+01:00","close_reason":"Completed in codebase (verified)"}
|
||||
{"id":"fotospiel-app-9ls","title":"SEC-API-02 Public API incident response playbook","status":"closed","priority":2,"issue_type":"task","created_at":"2026-01-01T15:52:35.519759351+01:00","created_by":"soeren","updated_at":"2026-01-01T15:52:41.160768858+01:00","closed_at":"2026-01-01T15:52:41.160768858+01:00","close_reason":"Completed in codebase (verified)"}
|
||||
|
||||
@@ -1 +1 @@
|
||||
fotospiel-app-5hk
|
||||
fotospiel-app-99o
|
||||
|
||||
@@ -21,7 +21,10 @@ class Welcome extends Mailable
|
||||
public function envelope(): Envelope
|
||||
{
|
||||
return new Envelope(
|
||||
subject: __('emails.welcome.subject', ['name' => $this->user->fullName]),
|
||||
subject: __('emails.welcome.subject', [
|
||||
'name' => $this->user->fullName,
|
||||
'app_name' => config('app.name'),
|
||||
]),
|
||||
);
|
||||
}
|
||||
|
||||
@@ -39,4 +42,4 @@ class Welcome extends Mailable
|
||||
{
|
||||
return [];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,6 +5,7 @@ namespace Database\Seeders;
|
||||
use App\Models\BlogAuthor;
|
||||
use App\Models\BlogCategory;
|
||||
use App\Models\BlogPost;
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Database\Seeder;
|
||||
|
||||
class BlogPostErgaenzungSeeder extends Seeder
|
||||
@@ -40,7 +41,7 @@ class BlogPostErgaenzungSeeder extends Seeder
|
||||
$articles = [
|
||||
[
|
||||
'slug' => 'nachhaltige-events-und-hochzeiten',
|
||||
'published_at' => '2026-02-16 10:00:00',
|
||||
'published_at' => '2026-04-16 10:00:00',
|
||||
'de' => [
|
||||
'title' => 'Nachhaltige Events & Hochzeiten – So feiert ihr bewusst, ohne auf Emotionen zu verzichten',
|
||||
'excerpt' => 'Green Wedding, Zero Waste Event, klimabewusste Firmenfeier – nachhaltige Events sind mehr als ein Trend. In diesem Leitfaden erfährst du, wie du Deko, Drucksachen, Catering und natürlich die Fotografie so planst, dass sie zur Umwelt und zu euch passen – inklusive Ideen, wie die Fotospiel App digitale Prozesse vereinfacht.',
|
||||
@@ -299,7 +300,7 @@ Sustainability and emotional events are not opposites – they reinforce each ot
|
||||
// 2. Ideale Timeline für Hochzeitsfotos
|
||||
[
|
||||
'slug' => 'ideale-hochzeitsfoto-timeline',
|
||||
'published_at' => '2026-02-24 10:00:00',
|
||||
'published_at' => '2026-04-24 10:00:00',
|
||||
'de' => [
|
||||
'title' => 'Die ideale Timeline für Hochzeitsfotos – So verpasst ihr keinen Moment',
|
||||
'excerpt' => 'First Look, Trauung, Gruppenbilder, Paarshooting, Party: Eine gute Foto-Timeline sorgt dafür, dass ihr alle wichtigen Momente entspannt erlebt – und trotzdem ein komplettes Album bekommt. In diesem Artikel zeige ich dir, wie du euren Hochzeitstag fotografisch planst, ohne dass er sich nach Drehplan anfühlt.',
|
||||
@@ -496,7 +497,7 @@ A clear photo timeline doesn\'t make your day rigid – it makes it easier. You
|
||||
// 3. Fotospiele für Kinder
|
||||
[
|
||||
'slug' => 'fotospiele-fuer-kinder-auf-hochzeiten-und-events',
|
||||
'published_at' => '2026-03-05 10:00:00',
|
||||
'published_at' => '2026-05-05 10:00:00',
|
||||
'de' => [
|
||||
'title' => 'Fotospiele für Kinder auf Hochzeiten & Events – So werden die Kleinsten zu großen Geschichtenerzählern',
|
||||
'excerpt' => 'Kinder auf Events sind Wunderwaffen: Sie nehmen Druck aus der Situation, sorgen für ehrliches Lachen – und sehen die Welt aus einer ganz anderen Perspektive. Mit kindgerechten Fotospielen beschäftigst du sie sinnvoll und bekommst gleichzeitig einzigartige Bilder.',
|
||||
@@ -638,7 +639,7 @@ Photo games turn children into **active storytellers**. Their pictures may be cr
|
||||
// 4. Storytelling mit Bildern / Album
|
||||
[
|
||||
'slug' => 'storytelling-mit-eventfotos',
|
||||
'published_at' => '2026-03-14 10:00:00',
|
||||
'published_at' => '2026-05-14 10:00:00',
|
||||
'de' => [
|
||||
'title' => 'Storytelling mit Eventfotos – So wird aus Bildern eine Geschichte',
|
||||
'excerpt' => 'Hunderte Fotos sind schnell gemacht – aber erst eine gute Auswahl und Reihenfolge macht daraus eine Geschichte, die man gerne anschaut. In diesem Artikel zeige ich dir, wie du aus Profi- und Gastfotos ein stimmiges Album, eine Slideshow oder ein Recap-Video baust.',
|
||||
@@ -827,7 +828,7 @@ Photos are not just proof that something happened. When curated thoughtfully, th
|
||||
// 5. Hybride Events
|
||||
[
|
||||
'slug' => 'hybride-events-und-remote-gaeste',
|
||||
'published_at' => '2026-03-24 10:00:00',
|
||||
'published_at' => '2026-05-24 10:00:00',
|
||||
'de' => [
|
||||
'title' => 'Hybride Events & entfernte Gäste – So werden alle Teil der Foto-Geschichte',
|
||||
'excerpt' => 'Nicht alle können bei einer Hochzeit oder einem Firmenevent live dabei sein – trotzdem sollen sie Teil der Erinnerungen werden. In diesem Artikel erfährst du, wie du vor Ort und remote Gäste in einer gemeinsamen Fotostory verbindest.',
|
||||
@@ -952,7 +953,7 @@ This way, people feel: **We were part of the same story**, even if we weren\'t i
|
||||
// 6. Checkliste Fotowand
|
||||
[
|
||||
'slug' => 'checkliste-fotowand-und-selfie-station',
|
||||
'published_at' => '2026-04-02 10:00:00',
|
||||
'published_at' => '2026-06-02 10:00:00',
|
||||
'de' => [
|
||||
'title' => 'Checkliste Fotowand & Selfie-Station – So entstehen eure meistgenutzten Eventmotive',
|
||||
'excerpt' => 'Eine gute Fotowand ist nicht nur „nice to have“, sondern Magnet für witzige Gruppenbilder und Selfies. Mit dieser Checkliste richtest du eine Fotowand ein, die auf Fotos großartig aussieht – und perfekt zur Fotospiel App passt.',
|
||||
@@ -1067,7 +1068,7 @@ With thoughtful placement, simple lighting, and integration into the Photo Game
|
||||
// 7. Kamerascheue Gäste
|
||||
[
|
||||
'slug' => 'kamerascheue-gaeste-respektvoll-fotografieren',
|
||||
'published_at' => '2026-04-11 10:00:00',
|
||||
'published_at' => '2026-06-11 10:00:00',
|
||||
'de' => [
|
||||
'title' => 'Kamerascheue Gäste respektvoll fotografieren – So bleibt ihr nah dran, ohne Grenzen zu überschreiten',
|
||||
'excerpt' => 'Nicht alle Menschen lieben Kameras – und trotzdem sollen sie sich auf eurem Event wohl fühlen. Hier erfährst du, wie du kamerascheue Gäste respektierst und trotzdem eine vollständige Bildgeschichte erzielst.',
|
||||
@@ -1186,7 +1187,7 @@ When guests feel seen and respected, they are much more likely to **willingly pa
|
||||
// 8. After-Event Marketing für Firmen
|
||||
[
|
||||
'slug' => 'eventfotos-im-marketing-nutzen',
|
||||
'published_at' => '2026-04-21 10:00:00',
|
||||
'published_at' => '2026-06-21 10:00:00',
|
||||
'de' => [
|
||||
'title' => 'Eventfotos im Marketing nutzen – Ohne peinliche Bilder und rechtliche Stolperfallen',
|
||||
'excerpt' => 'Firmenevents liefern wertvollen Content für Employer Branding, Social Media und Recruiting. Hier erfährst du, wie du Eventfotos sinnvoll und DSGVO-bewusst im Marketing einsetzt.',
|
||||
@@ -1325,7 +1326,7 @@ Event photos can be a strong marketing tool when you balance visibility with res
|
||||
// 9. Mikro-Momente statt gestellter Posen
|
||||
[
|
||||
'slug' => 'mikro-momente-statt-gestellter-posen',
|
||||
'published_at' => '2026-05-01 10:00:00',
|
||||
'published_at' => '2026-07-01 10:00:00',
|
||||
'de' => [
|
||||
'title' => 'Mikro-Momente statt gestellter Posen – Wie ihr echte Emotionen einfängt',
|
||||
'excerpt' => 'Die stärksten Eventfotos sind selten die perfekt inszenierten Motive – sondern die kleinen, echten Momente dazwischen. In diesem Artikel geht es darum, den Blick für Mikro-Momente zu schärfen und Gäste aktiv daran zu beteiligen.',
|
||||
@@ -1446,7 +1447,7 @@ Once you start valuing micro-moments, your photography changes. The programme is
|
||||
// 10. Technisches Setup
|
||||
[
|
||||
'slug' => 'technisches-setup-fuer-stressfreie-eventfotografie',
|
||||
'published_at' => '2026-05-10 10:00:00',
|
||||
'published_at' => '2026-07-10 10:00:00',
|
||||
'de' => [
|
||||
'title' => 'Technisches Setup für stressfreie Eventfotografie – WLAN, Strom & Uploads im Griff',
|
||||
'excerpt' => 'Die beste Fotoidee bringt wenig, wenn WLAN ausfällt, Akkus leer sind oder Uploads hängen. In diesem Artikel geht es um das technische Mindest-Setup, damit Fotospiel App, Uploads und Fotos insgesamt zuverlässig funktionieren.',
|
||||
@@ -1574,7 +1575,7 @@ When the technical basics are right, no one notices them – and that\'s the goa
|
||||
continue;
|
||||
}
|
||||
|
||||
$post = new BlogPost();
|
||||
$post = new BlogPost;
|
||||
$post->blog_author_id = $author->id;
|
||||
$post->blog_category_id = $blogCategory->id;
|
||||
$post->slug = $slug;
|
||||
@@ -1597,7 +1598,12 @@ When the technical basics are right, no one notices them – and that\'s the goa
|
||||
$post->setTranslation('meta_description', 'en', $en['meta_description']);
|
||||
}
|
||||
|
||||
$post->published_at = $articleData['published_at'] ?? now();
|
||||
$publishedAt = isset($articleData['published_at'])
|
||||
? Carbon::parse($articleData['published_at'])
|
||||
: now();
|
||||
$post->published_at = $publishedAt;
|
||||
$post->created_at = $publishedAt;
|
||||
$post->updated_at = $publishedAt;
|
||||
$post->is_published = true;
|
||||
$post->save();
|
||||
|
||||
|
||||
@@ -25,11 +25,11 @@ class BlogPostSeeder extends Seeder
|
||||
[
|
||||
'name' => json_encode([
|
||||
'de' => 'Blog',
|
||||
'en' => 'Blog'
|
||||
'en' => 'Blog',
|
||||
]),
|
||||
'description' => json_encode([
|
||||
'de' => 'Artikel und Leitfäden zu Hochzeitsplanung und Fotografie',
|
||||
'en' => 'Articles and guides about wedding planning and photography'
|
||||
'en' => 'Articles and guides about wedding planning and photography',
|
||||
]),
|
||||
'is_visible' => true,
|
||||
]
|
||||
@@ -48,7 +48,7 @@ class BlogPostSeeder extends Seeder
|
||||
$articles = [
|
||||
[
|
||||
'slug' => '10-kreative-fotoaufgaben-fuer-eure-hochzeit',
|
||||
'published_at' => '2025-11-11 10:00:00',
|
||||
'published_at' => '2026-01-11 10:00:00',
|
||||
'de' => [
|
||||
'title' => '10 kreative Fotoaufgaben für eure Hochzeit – Ideen, die Spaß machen und Emotionen wecken',
|
||||
'excerpt' => 'Jede Hochzeit erzählt ihre eigene Geschichte – aber oft fehlen genau die Fotos, die das echte Gefühl des Tages zeigen: das spontane Lachen, die liebevollen Blicke, die kleinen Missgeschicke, die später zu euren Lieblingsmomenten werden. Die Lösung: **Fotoaufgaben für Gäste!**',
|
||||
@@ -288,7 +288,7 @@ Try the Photo Game App for your wedding – scan the QR code, start the challeng
|
||||
],
|
||||
[
|
||||
'slug' => 'datenschutz-bei-eventfotos',
|
||||
'published_at' => '2025-10-29 09:00:00',
|
||||
'published_at' => '2025-12-29 09:00:00',
|
||||
'de' => [
|
||||
'title' => 'Datenschutz bei Eventfotos – Was du wissen musst (verständlich erklärt)',
|
||||
'excerpt' => 'Ein rauschendes Fest, fröhliche Menschen, unzählige Kameras – und schon schwebt die Frage im Raum: **Darf man das eigentlich alles fotografieren und teilen?** Mit unserer Fotospiel App sicher und DSGVO-konform!',
|
||||
@@ -506,7 +506,7 @@ Scan the event QR code, inform your guests – and collect memories with a clear
|
||||
],
|
||||
[
|
||||
'slug' => 'firmenevent-unvergesslich-fotos-spiele-teamgeist',
|
||||
'published_at' => '2025-11-05 11:00:00',
|
||||
'published_at' => '2026-01-05 11:00:00',
|
||||
'de' => [
|
||||
'title' => 'So macht ihr euer Firmenevent unvergesslich – Fotos, Spiele & Teamgeist',
|
||||
'excerpt' => 'Ein gelungenes Firmenevent ist mehr als ein Buffet und ein paar Reden. Es ist die Gelegenheit, das Wir-Gefühl zu stärken, neue Energie zu tanken – und Erinnerungen zu schaffen, die lange nachwirken. Doch wie entsteht aus einem „netten Abend" ein echtes Gemeinschaftserlebnis?',
|
||||
@@ -735,7 +735,7 @@ Plan your next corporate event with clear emotional moments, interactive element
|
||||
],
|
||||
[
|
||||
'slug' => 'hochzeitsbilder-qr-code',
|
||||
'published_at' => '2025-10-27 10:30:00',
|
||||
'published_at' => '2025-12-27 10:30:00',
|
||||
'de' => [
|
||||
'title' => 'Hochzeitsbilder & QR‑Code – Die moderne Art, Erinnerungen zu sammeln und zu teilen',
|
||||
'excerpt' => 'Du kennst das Spiel: Nach der Hochzeit hat jede*r tolle Bilder auf dem Handy – doch Wochen später fehlen sie im gemeinsamen Album. Ein **QR‑Code** beendet dieses Chaos und macht das Teilen von Hochzeitsfotos so einfach wie einen kurzen Scan. In diesem Leitfaden zeige ich dir, wie du QR‑Codes **smart, datenschutzfreundlich und mit Praxis‑Tipps** einsetzt – und wie unsere **Fotospiel App** daraus ein echtes Gemeinschaftserlebnis macht.',
|
||||
@@ -867,7 +867,7 @@ That way, a small black-and-white square becomes the key to your shared wedding
|
||||
],
|
||||
[
|
||||
'slug' => 'hochzeitsfotografie-mit-kleinem-budget',
|
||||
'published_at' => '2025-11-14 09:30:00',
|
||||
'published_at' => '2026-01-14 09:30:00',
|
||||
'de' => [
|
||||
'title' => 'Hochzeitsfotografie mit kleinem Budget – So bekommst du traumhafte Erinnerungen ohne Profi-Fotograf',
|
||||
'excerpt' => 'Heiraten ist wunderschön – aber teuer. Wenn du mitten in der Planung steckst, weißt du: Kleid, Location, Musik, Essen … alles summiert sich. Und dann kommt da noch der Fotograf mit seinem stolzen Preis. Doch gute Nachrichten: **Wunderschöne Hochzeitsfotos müssen kein Luxus sein.**',
|
||||
@@ -975,7 +975,7 @@ You don\'t need an expensive all‑inclusive photo package to get moving, meanin
|
||||
],
|
||||
[
|
||||
'slug' => 'qr-codes-auf-events-kreativ-nutzen',
|
||||
'published_at' => '2025-10-31 12:00:00',
|
||||
'published_at' => '2025-12-31 12:00:00',
|
||||
'de' => [
|
||||
'title' => 'So nutzt ihr QR-Codes auf Events kreativ – Von Fotos bis Networking',
|
||||
'excerpt' => 'QR-Codes sind längst mehr als kleine schwarz-weiße Quadrate. Sie sind die Brücke zwischen der realen und der digitalen Welt – und auf Events die **einfachste Möglichkeit, Interaktion zu schaffen**. Ob Hochzeit, Firmenevent oder Festival: Mit einem Scan können Gäste Fotos hochladen, Feedback geben, Kontakte austauschen oder Informationen abrufen. In diesem Artikel zeige ich dir, wie du QR-Codes kreativ nutzt – mit vielen Praxis-Tipps und konkreten Ideen für den Einsatz mit **unserer Fotospiel App**.',
|
||||
@@ -1109,7 +1109,7 @@ QR codes are simple to set up but incredibly powerful when used intentionally. T
|
||||
],
|
||||
[
|
||||
'slug' => 'top-alternativen-zum-hochzeitsfotografen',
|
||||
'published_at' => '2025-11-08 10:00:00',
|
||||
'published_at' => '2026-01-08 10:00:00',
|
||||
'de' => [
|
||||
'title' => 'Top-Alternativen zum Hochzeitsfotografen – So bekommst du echte Erinnerungen ohne Profi-Shooting',
|
||||
'excerpt' => 'Ein professioneller Fotograf ist toll – aber nicht jede Hochzeit braucht ein teures Fotoshooting. Vielleicht möchtet ihr lieber spontan, kreativ oder budgetbewusst feiern. Gute Nachrichten: Es gibt viele Wege, großartige Hochzeitsbilder zu bekommen, ohne dass ihr ein Vermögen ausgebt. Hier findest du **praktische Ideen, kreative Alternativen und echte Erfahrungs-Tipps**, wie du mit unserer **Fotospiel App** trotzdem eine einzigartige Hochzeitsgalerie erhältst.',
|
||||
@@ -1127,7 +1127,7 @@ QR codes are simple to set up but incredibly powerful when used intentionally. T
|
||||
],
|
||||
[
|
||||
'slug' => 'wann-hochzeitseinladungen-verschicken',
|
||||
'published_at' => '2025-10-26 15:00:00',
|
||||
'published_at' => '2025-12-26 15:00:00',
|
||||
'de' => [
|
||||
'title' => 'Wann Hochzeitseinladungen verschickt werden sollten – Der ultimative Leitfaden für perfektes Timing',
|
||||
'excerpt' => 'Planung ist alles – besonders bei einer Hochzeit. Zwischen Gästelisten, Location und Budget gerät das Thema **Einladungen** oft ins Hintertreffen. Doch das richtige Timing entscheidet, ob eure Liebsten kommen können oder schon verplant sind. In diesem Leitfaden erfährst du **wann** und **wie** du Einladungen am besten verschickst – plus clevere **Praxis‑Tipps**, wie du QR‑Codes, Fotoboxen und unsere **Fotospiel App** elegant in deine Kommunikation integrierst.',
|
||||
@@ -1145,7 +1145,7 @@ QR codes are simple to set up but incredibly powerful when used intentionally. T
|
||||
],
|
||||
[
|
||||
'slug' => 'warum-gastfotos-unverzichtbar-sind',
|
||||
'published_at' => '2025-11-17 14:00:00',
|
||||
'published_at' => '2026-01-17 14:00:00',
|
||||
'de' => [
|
||||
'title' => 'Warum Gastfotos wichtig sind – auch wenn du einen Profi-Fotografen hast',
|
||||
'excerpt' => 'Dein Hochzeitstag vergeht wie im Flug. Zwischen Vorfreude, Tränen und Tanz merkst du kaum, wie viele kleine Momente an dir vorbeiziehen. Natürlich ist ein Profi-Fotograf unverzichtbar – aber selbst der beste kann nicht überall gleichzeitig sein. **Gastfotos** ergänzen das große Ganze: Sie zeigen deine Feier aus allen Perspektiven, ungefiltert, echt und emotional.',
|
||||
@@ -1255,7 +1255,7 @@ With a bit of coordination and the Photo Game App, all these perspectives come t
|
||||
],
|
||||
[
|
||||
'slug' => 'wie-gaeste-eventmomente-festhalten',
|
||||
'published_at' => '2025-11-03 10:00:00',
|
||||
'published_at' => '2026-01-03 10:00:00',
|
||||
'de' => [
|
||||
'title' => 'Wie Gäste eure schönsten Eventmomente festhalten – und was du dafür tun musst',
|
||||
'excerpt' => 'Jedes Event lebt von seinen Gästen – sie sind die Energie, die Stimmung und am Ende die besten Geschichtenerzähler. Doch während Profis meist die großen Highlights ablichten, sind es die Gäste, die die **echten Momente** einfangen: spontanes Lachen, kleine Gesten, ehrliche Emotionen. Damit diese Schätze nicht verloren gehen, braucht es ein bisschen Organisation – und ein cleveres System, um sie zu sammeln. Hier erfährst du, wie du Gäste motivierst, aktiv zu fotografieren, und wie **unsere Fotospiel App** daraus ein unvergessliches Erlebnis für alle macht.',
|
||||
@@ -1387,10 +1387,11 @@ By combining clear communication, simple tech (QR code + app), and playful tasks
|
||||
$existingArticle = BlogPost::where('slug', $slug)->first();
|
||||
if ($existingArticle) {
|
||||
$this->command->info("Artikel '{$slug}' existiert bereits, überspringe...");
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
$post = new BlogPost();
|
||||
$post = new BlogPost;
|
||||
$post->blog_author_id = $author->id;
|
||||
$post->blog_category_id = $blogCategory->id;
|
||||
$post->slug = $slug;
|
||||
@@ -1412,10 +1413,13 @@ By combining clear communication, simple tech (QR code + app), and playful tasks
|
||||
$post->setTranslation('meta_title', 'en', $englishData['meta_title']);
|
||||
$post->setTranslation('meta_description', 'en', $englishData['meta_description']);
|
||||
}
|
||||
|
||||
$post->published_at = isset($articleData['published_at'])
|
||||
|
||||
$publishedAt = isset($articleData['published_at'])
|
||||
? Carbon::parse($articleData['published_at'])
|
||||
: now();
|
||||
$post->published_at = $publishedAt;
|
||||
$post->created_at = $publishedAt;
|
||||
$post->updated_at = $publishedAt;
|
||||
$post->is_published = true;
|
||||
$post->save();
|
||||
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
|
||||
return [
|
||||
'welcome' => [
|
||||
'subject' => 'Willkommen bei Fotospiel, :name',
|
||||
'subject' => 'Willkommen bei der :app_name, :name',
|
||||
'greeting' => 'Hallo :name,',
|
||||
'body' => 'Danke fuer deine Registrierung bei Fotospiel. Dein Konto ist bereit.',
|
||||
'body' => 'Danke fuer deine Registrierung bei der :app_name. Dein Konto ist bereit.',
|
||||
'username' => 'Benutzername: :username',
|
||||
'email' => 'E-Mail: :email',
|
||||
'verification' => 'Bitte bestaetige deine E-Mail-Adresse, um alle Funktionen freizuschalten.',
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
|
||||
return [
|
||||
'welcome' => [
|
||||
'subject' => 'Welcome to Fotospiel, :name',
|
||||
'subject' => 'Welcome to :app_name, :name',
|
||||
'greeting' => 'Hi :name,',
|
||||
'body' => 'Thanks for registering with Fotospiel. Your account is ready.',
|
||||
'body' => 'Thanks for registering with :app_name. Your account is ready.',
|
||||
'username' => 'Username: :username',
|
||||
'email' => 'Email: :email',
|
||||
'verification' => 'Please confirm your email to unlock all features.',
|
||||
|
||||
@@ -27,7 +27,7 @@ const Footer: React.FC = () => {
|
||||
<div className="grid grid-cols-1 gap-8 md:grid-cols-3">
|
||||
<div>
|
||||
<div className="flex items-center gap-4">
|
||||
<img src="/logo-transparent-md.png" alt="Fotospiel App Logo" className="h-12 w-auto" />
|
||||
<img src="/logo-transparent-md.png" alt="Logo der Fotospiel App" className="h-12 w-auto" />
|
||||
<div>
|
||||
<Link href={links.home} className="font-display text-2xl font-bold text-pink-500">
|
||||
Die Fotospiel App
|
||||
|
||||
@@ -136,7 +136,7 @@ const Header: React.FC = () => {
|
||||
<div className="container mx-auto px-4 py-4">
|
||||
<div className="flex items-center justify-between">
|
||||
<Link href={localizedPath('/')} className="flex items-center gap-4">
|
||||
<img src="/logo-transparent-md.png" alt="Fotospiel App Logo" className="h-12 w-auto" />
|
||||
<img src="/logo-transparent-md.png" alt="Logo der Fotospiel App" className="h-12 w-auto" />
|
||||
<span className="text-2xl font-bold font-display text-pink-500">
|
||||
Die Fotospiel App
|
||||
</span>
|
||||
|
||||
@@ -185,7 +185,7 @@ const MarketingLayout: React.FC<MarketingLayoutProps> = ({ children, title }) =>
|
||||
className="flex items-center gap-3 text-gray-900 dark:text-gray-50"
|
||||
onClick={() => setMobileMenuOpen(false)}
|
||||
>
|
||||
<img src="/logo-transparent-md.png" alt="Fotospiel App Logo" className="h-10 w-auto" />
|
||||
<img src="/logo-transparent-md.png" alt="Logo der Fotospiel App" className="h-10 w-auto" />
|
||||
<span className="font-display text-2xl font-semibold tracking-tight text-pink-500 sm:text-3xl">
|
||||
Die Fotospiel App
|
||||
</span>
|
||||
|
||||
@@ -28,7 +28,7 @@ const LegalShow: React.FC<LegalShowProps> = (props) => {
|
||||
<div className="mx-auto max-w-4xl px-6">
|
||||
<header className="mb-10">
|
||||
<p className="text-sm uppercase tracking-[0.2em] text-gray-400">
|
||||
Fotospiel App
|
||||
Die Fotospiel App
|
||||
</p>
|
||||
<h1 className="mt-2 text-3xl font-semibold text-gray-900 md:text-4xl">
|
||||
{title}
|
||||
|
||||
@@ -90,7 +90,7 @@ const DemoPage: React.FC<DemoPageProps> = ({ demoToken }) => {
|
||||
aria-hidden
|
||||
/>
|
||||
<iframe
|
||||
title="Fotospiel App Demo"
|
||||
title="Demo der Fotospiel App"
|
||||
src={embedUrl}
|
||||
className="aspect-[9/19] w-full rounded-[1.75rem] border-0 bg-white shadow-inner dark:bg-gray-950"
|
||||
loading="lazy"
|
||||
@@ -181,7 +181,7 @@ const DemoPage: React.FC<DemoPageProps> = ({ demoToken }) => {
|
||||
aria-hidden
|
||||
/>
|
||||
<iframe
|
||||
title="Fotospiel App Demo"
|
||||
title="Demo der Fotospiel App"
|
||||
src={embedUrl}
|
||||
className="aspect-[9/16] w-full rounded-[1.75rem] border-0 bg-white shadow-inner dark:bg-gray-950"
|
||||
loading="lazy"
|
||||
|
||||
@@ -53,7 +53,7 @@ const WithdrawalConfirm: React.FC<WithdrawalConfirmProps> = ({ eligiblePurchases
|
||||
<div className="mx-auto max-w-4xl px-6">
|
||||
<header className="mb-10">
|
||||
<p className="text-sm uppercase tracking-[0.2em] text-gray-400">
|
||||
Fotospiel App
|
||||
Die Fotospiel App
|
||||
</p>
|
||||
<h1 className="mt-2 text-3xl font-semibold text-gray-900 md:text-4xl">
|
||||
{t('withdrawal.title')}
|
||||
|
||||
@@ -8,8 +8,8 @@ return [
|
||||
],
|
||||
|
||||
'welcome' => [
|
||||
'subject' => 'Willkommen bei Die Fotospiel.App, :name!',
|
||||
'greeting' => 'Willkommen bei Die Fotospiel.App, :name!',
|
||||
'subject' => 'Willkommen bei der :app_name, :name!',
|
||||
'greeting' => 'Willkommen bei der :app_name, :name!',
|
||||
'subtitle' => 'Schön, dass Sie da sind. Ihr Event-Erlebnis kann sofort starten.',
|
||||
'body' => 'Vielen Dank für Ihre Registrierung. Wir haben Ihren Account vorbereitet – jetzt fehlt nur noch Ihr erstes Event.',
|
||||
'account_label' => 'Ihre Zugangsdaten',
|
||||
|
||||
@@ -7,8 +7,8 @@ return [
|
||||
'tagline' => 'Die Fotospiel.App · Event packages with wow-factor',
|
||||
],
|
||||
'welcome' => [
|
||||
'subject' => 'Welcome to Die Fotospiel.App, :name!',
|
||||
'greeting' => 'Welcome to Die Fotospiel.App, :name!',
|
||||
'subject' => 'Welcome to :app_name, :name!',
|
||||
'greeting' => 'Welcome to :app_name, :name!',
|
||||
'subtitle' => 'We are glad you are here. Your event experience can start immediately.',
|
||||
'body' => 'Thank you for signing up. Your account is ready—now let’s launch your first event.',
|
||||
'account_label' => 'Your account details',
|
||||
|
||||
@@ -1,21 +1,23 @@
|
||||
@extends('emails.partials.layout')
|
||||
|
||||
@section('title', __('emails.welcome.subject', ['name' => $user->fullName]))
|
||||
@php($appName = config('app.name'))
|
||||
|
||||
@section('title', __('emails.welcome.subject', ['name' => $user->fullName, 'app_name' => $appName]))
|
||||
@section('preheader', __('emails.welcome.subtitle'))
|
||||
@section('hero_title', __('emails.welcome.greeting', ['name' => $user->fullName]))
|
||||
@section('hero_title', __('emails.welcome.greeting', ['name' => $user->fullName, 'app_name' => $appName]))
|
||||
@section('hero_subtitle', __('emails.welcome.subtitle'))
|
||||
|
||||
@section('content')
|
||||
<p style="margin:0 0 12px; font-size:15px; color:#1f2937;">
|
||||
{{ __('emails.welcome.body') }}
|
||||
{{ __('emails.welcome.body', ['app_name' => $appName]) }}
|
||||
</p>
|
||||
<div style="background-color:#f8fafc; border:1px solid #e2e8f0; border-radius:12px; padding:16px; margin-bottom:16px;">
|
||||
<p style="margin:0 0 6px; font-size:13px; text-transform:uppercase; letter-spacing:0.08em; color:#64748b;">
|
||||
{{ __('emails.welcome.account_label') }}
|
||||
</p>
|
||||
<p style="margin:0; font-size:14px; color:#0f172a;">
|
||||
{{ __('emails.welcome.username', ['username' => $user->username]) }}<br>
|
||||
{{ __('emails.welcome.email', ['email' => $user->email]) }}
|
||||
{{ __('emails.welcome.username', ['username' => $user->username, 'app_name' => $appName]) }}<br>
|
||||
{{ __('emails.welcome.email', ['email' => $user->email, 'app_name' => $appName]) }}
|
||||
</p>
|
||||
</div>
|
||||
<p style="margin:0 0 16px; font-size:14px; color:#1f2937;">
|
||||
|
||||
Reference in New Issue
Block a user