feat(marketing): 14-Tage-Trial-Klarheit + OS-aware Magic-Download

- 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 <noreply@anthropic.com>
This commit is contained in:
chahinebrini 2026-06-07 23:03:37 +02:00
parent e0cb0517fc
commit 4dfcfc4012
4 changed files with 50 additions and 7 deletions

View File

@ -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<DetectedOS>('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 };
}

View File

@ -10,7 +10,8 @@
"hero_title": "Millionen kämpfen still.", "hero_title": "Millionen kämpfen still.",
"hero_subtitle": "Du musst das nicht allein tun!", "hero_subtitle": "Du musst das nicht allein tun!",
"hero_text": "Gemeinsam sind wir Stark!", "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_affected": "Menschen in DE betroffen",
"stat_blocked": "Domains geblockt", "stat_blocked": "Domains geblockt",
"stat_from": "Ab pro Monat", "stat_from": "Ab pro Monat",
@ -83,10 +84,11 @@
"magic_feat_lock": "App nicht mehr löschbar, Filter nicht abschaltbar", "magic_feat_lock": "App nicht mehr löschbar, Filter nicht abschaltbar",
"magic_feat_trustee": "Entsperren nur über Trustee oder erneut RebreakMagic", "magic_feat_trustee": "Entsperren nur über Trustee oder erneut RebreakMagic",
"magic_cta": "RebreakMagic für Mac laden", "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.", "magic_note": "Optional. Empfohlen für Phasen mit hohem Bypass-Risiko.",
"final_title": "Fang jetzt an.", "final_title": "Fang jetzt an.",
"final_desc": "Du bist nicht kaputt. Das System ist manipulativ. Wir helfen dir zurück.", "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_1": "Ich spüre den Drang wieder stark...",
"chat_msg_2": "Ich verstehe. Was triggert dich gerade? Lass uns das durchgehen.", "chat_msg_2": "Ich verstehe. Was triggert dich gerade? Lass uns das durchgehen.",
"chat_msg_3": "Stress bei der Arbeit.", "chat_msg_3": "Stress bei der Arbeit.",

View File

@ -10,7 +10,8 @@
"hero_title": "Millions fight in silence.", "hero_title": "Millions fight in silence.",
"hero_subtitle": "You don't have to do it alone!", "hero_subtitle": "You don't have to do it alone!",
"hero_text": "Together we are strong!", "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_affected": "People in DE affected",
"stat_blocked": "Domains blocked", "stat_blocked": "Domains blocked",
"stat_from": "From / month", "stat_from": "From / month",
@ -83,10 +84,11 @@
"magic_feat_lock": "App not removable, filter not switchable", "magic_feat_lock": "App not removable, filter not switchable",
"magic_feat_trustee": "Unlock only via trustee or RebreakMagic again", "magic_feat_trustee": "Unlock only via trustee or RebreakMagic again",
"magic_cta": "Download RebreakMagic for Mac", "magic_cta": "Download RebreakMagic for Mac",
"magic_cta_windows": "Download ReBreak for Windows",
"magic_note": "Optional. Recommended for phases with high bypass risk.", "magic_note": "Optional. Recommended for phases with high bypass risk.",
"final_title": "Start now.", "final_title": "Start now.",
"final_desc": "You're not broken. The system is manipulative. We help you back.", "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_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_2": "I understand. What's triggering you right now? Let's go through this.",
"chat_msg_3": "Stress at work.", "chat_msg_3": "Stress at work.",

View File

@ -26,13 +26,14 @@
<img src="/encrypted.svg" alt="Community Illustration" class="w-15 max-w-md mx-auto mb-10" /> <img src="/encrypted.svg" alt="Community Illustration" class="w-15 max-w-md mx-auto mb-10" />
<div class="flex flex-col sm:flex-row items-center justify-center gap-4"> <div class="flex flex-col items-center justify-center gap-3">
<a href="https://apps.apple.com/app/rebreak" target="_blank" rel="noopener"> <a href="https://apps.apple.com/app/rebreak" target="_blank" rel="noopener">
<UButton size="xl" class="px-8"> <UButton size="xl" class="px-8">
<UIcon name="i-heroicons-bolt" /> <UIcon name="i-heroicons-bolt" />
{{ $t('landing.cta_start') }} {{ $t('landing.cta_start') }}
</UButton> </UButton>
</a> </a>
<p class="text-xs text-muted">{{ $t('landing.cta_subline') }}</p>
</div> </div>
<div class="flex justify-center gap-x-10 mt-16 text-center"> <div class="flex justify-center gap-x-10 mt-16 text-center">
@ -431,10 +432,10 @@
{{ $t('landing.magic_feat_trustee') }} {{ $t('landing.magic_feat_trustee') }}
</li> </li>
</ul> </ul>
<NuxtLink to="/download/rebreakmagic"> <NuxtLink :to="magicDownload.to">
<UButton size="lg" class="px-6"> <UButton size="lg" class="px-6">
<UIcon name="i-heroicons-arrow-down-tray" /> <UIcon name="i-heroicons-arrow-down-tray" />
{{ $t('landing.magic_cta') }} {{ magicDownload.label }}
</UButton> </UButton>
</NuxtLink> </NuxtLink>
<p class="text-xs text-muted mt-3">{{ $t('landing.magic_note') }}</p> <p class="text-xs text-muted mt-3">{{ $t('landing.magic_note') }}</p>
@ -478,6 +479,14 @@ definePageMeta({ layout: "default" });
const { t } = useI18n(); 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<HTMLElement | null>(null); const infoSections = ref<HTMLElement | null>(null);
const showInfoSections = ref(true); const showInfoSections = ref(true);