From 4dfcfc4012959379666b9b0463e35d4e1fa14c29 Mon Sep 17 00:00:00 2001 From: chahinebrini Date: Sun, 7 Jun 2026 23:03:37 +0200 Subject: [PATCH] feat(marketing): 14-Tage-Trial-Klarheit + OS-aware Magic-Download MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Hero/Final-CTA: 'kostenlos starten' -> '14 Tage kostenlos testen' + Subline 'danach ab 3,99€/Monat, jederzeit kündbar' (löst free-vs-Preis-Verwirrung; Trial existiert bereits Stripe-seitig + Pricing nennt ihn) - useOS()-Composable + OS-aware RebreakMagic-Download: Windows-Besucher -> /download/windows, Mac/sonst -> /download/rebreakmagic Deployed: rebreak.org via deploy-marketing.sh Co-Authored-By: Claude Opus 4.8 --- apps/marketing/app/composables/useOS.ts | 30 +++++++++++++++++++++++++ apps/marketing/app/locales/de.json | 6 +++-- apps/marketing/app/locales/en.json | 6 +++-- apps/marketing/app/pages/index.vue | 15 ++++++++++--- 4 files changed, 50 insertions(+), 7 deletions(-) create mode 100644 apps/marketing/app/composables/useOS.ts diff --git a/apps/marketing/app/composables/useOS.ts b/apps/marketing/app/composables/useOS.ts new file mode 100644 index 0000000..c722059 --- /dev/null +++ b/apps/marketing/app/composables/useOS.ts @@ -0,0 +1,30 @@ +export type DetectedOS = 'windows' | 'mac' | 'ios' | 'android' | 'other'; + +/** + * Erkennt das Besucher-OS clientseitig (SSR-safe: startet 'other', updated + * onMounted). Für OS-aware Download-CTAs auf der Landing-Page. + */ +export function useOS() { + const os = ref('other'); + + onMounted(() => { + const ua = (navigator.userAgent || '').toLowerCase(); + const platform = (navigator.platform || '').toLowerCase(); + const touch = navigator.maxTouchPoints || 0; + + if (/iphone|ipad|ipod/.test(ua) || (platform === 'macintel' && touch > 1)) { + // iPadOS gibt sich als "MacIntel" mit Touchpoints aus. + os.value = 'ios'; + } else if (/android/.test(ua)) { + os.value = 'android'; + } else if (ua.includes('win') || platform.includes('win')) { + os.value = 'windows'; + } else if (ua.includes('mac') || platform.includes('mac')) { + os.value = 'mac'; + } else { + os.value = 'other'; + } + }); + + return { os }; +} diff --git a/apps/marketing/app/locales/de.json b/apps/marketing/app/locales/de.json index 749573f..fb9e5ff 100644 --- a/apps/marketing/app/locales/de.json +++ b/apps/marketing/app/locales/de.json @@ -10,7 +10,8 @@ "hero_title": "Millionen kämpfen still.", "hero_subtitle": "Du musst das nicht allein tun!", "hero_text": "Gemeinsam sind wir Stark!", - "cta_start": "Jetzt kostenlos starten", + "cta_start": "14 Tage kostenlos testen", + "cta_subline": "Danach ab 3,99 €/Monat · jederzeit kündbar", "stat_affected": "Menschen in DE betroffen", "stat_blocked": "Domains geblockt", "stat_from": "Ab pro Monat", @@ -83,10 +84,11 @@ "magic_feat_lock": "App nicht mehr löschbar, Filter nicht abschaltbar", "magic_feat_trustee": "Entsperren nur über Trustee oder erneut RebreakMagic", "magic_cta": "RebreakMagic für Mac laden", + "magic_cta_windows": "ReBreak für Windows laden", "magic_note": "Optional. Empfohlen für Phasen mit hohem Bypass-Risiko.", "final_title": "Fang jetzt an.", "final_desc": "Du bist nicht kaputt. Das System ist manipulativ. Wir helfen dir zurück.", - "final_cta": "Jetzt starten – kostenlos & anonym", + "final_cta": "14 Tage kostenlos testen – anonym", "chat_msg_1": "Ich spüre den Drang wieder stark...", "chat_msg_2": "Ich verstehe. Was triggert dich gerade? Lass uns das durchgehen.", "chat_msg_3": "Stress bei der Arbeit.", diff --git a/apps/marketing/app/locales/en.json b/apps/marketing/app/locales/en.json index dbd679c..1bf644d 100644 --- a/apps/marketing/app/locales/en.json +++ b/apps/marketing/app/locales/en.json @@ -10,7 +10,8 @@ "hero_title": "Millions fight in silence.", "hero_subtitle": "You don't have to do it alone!", "hero_text": "Together we are strong!", - "cta_start": "Start free now", + "cta_start": "Try free for 14 days", + "cta_subline": "Then from €3.99/month · cancel anytime", "stat_affected": "People in DE affected", "stat_blocked": "Domains blocked", "stat_from": "From / month", @@ -83,10 +84,11 @@ "magic_feat_lock": "App not removable, filter not switchable", "magic_feat_trustee": "Unlock only via trustee or RebreakMagic again", "magic_cta": "Download RebreakMagic for Mac", + "magic_cta_windows": "Download ReBreak for Windows", "magic_note": "Optional. Recommended for phases with high bypass risk.", "final_title": "Start now.", "final_desc": "You're not broken. The system is manipulative. We help you back.", - "final_cta": "Start now – free & anonymous", + "final_cta": "Try free for 14 days – anonymous", "chat_msg_1": "I feel the urge strongly again...", "chat_msg_2": "I understand. What's triggering you right now? Let's go through this.", "chat_msg_3": "Stress at work.", diff --git a/apps/marketing/app/pages/index.vue b/apps/marketing/app/pages/index.vue index ce1f9b5..86f73af 100644 --- a/apps/marketing/app/pages/index.vue +++ b/apps/marketing/app/pages/index.vue @@ -26,13 +26,14 @@ Community Illustration -
+
{{ $t('landing.cta_start') }} +

{{ $t('landing.cta_subline') }}

@@ -431,10 +432,10 @@ {{ $t('landing.magic_feat_trustee') }} - + - {{ $t('landing.magic_cta') }} + {{ magicDownload.label }}

{{ $t('landing.magic_note') }}

@@ -478,6 +479,14 @@ definePageMeta({ layout: "default" }); const { t } = useI18n(); +// OS-aware RebreakMagic-Download: Windows-Besucher bekommen die Windows-Variante. +const { os } = useOS(); +const magicDownload = computed(() => + os.value === 'windows' + ? { to: '/download/windows', label: t('landing.magic_cta_windows') } + : { to: '/download/rebreakmagic', label: t('landing.magic_cta') }, +); + const infoSections = ref(null); const showInfoSections = ref(true);