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:
parent
e0cb0517fc
commit
4dfcfc4012
30
apps/marketing/app/composables/useOS.ts
Normal file
30
apps/marketing/app/composables/useOS.ts
Normal 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 };
|
||||
}
|
||||
@ -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.",
|
||||
|
||||
@ -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.",
|
||||
|
||||
@ -26,13 +26,14 @@
|
||||
|
||||
<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">
|
||||
<UButton size="xl" class="px-8">
|
||||
<UIcon name="i-heroicons-bolt" />
|
||||
{{ $t('landing.cta_start') }}
|
||||
</UButton>
|
||||
</a>
|
||||
<p class="text-xs text-muted">{{ $t('landing.cta_subline') }}</p>
|
||||
</div>
|
||||
|
||||
<div class="flex justify-center gap-x-10 mt-16 text-center">
|
||||
@ -431,10 +432,10 @@
|
||||
{{ $t('landing.magic_feat_trustee') }}
|
||||
</li>
|
||||
</ul>
|
||||
<NuxtLink to="/download/rebreakmagic">
|
||||
<NuxtLink :to="magicDownload.to">
|
||||
<UButton size="lg" class="px-6">
|
||||
<UIcon name="i-heroicons-arrow-down-tray" />
|
||||
{{ $t('landing.magic_cta') }}
|
||||
{{ magicDownload.label }}
|
||||
</UButton>
|
||||
</NuxtLink>
|
||||
<p class="text-xs text-muted mt-3">{{ $t('landing.magic_note') }}</p>
|
||||
@ -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<HTMLElement | null>(null);
|
||||
const showInfoSections = ref(true);
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user