Add premium My Case MVP

This commit is contained in:
2026-05-23 10:17:34 +02:00
parent e0aeefc73e
commit 83fc71414f
33 changed files with 1275 additions and 148 deletions
+68 -61
View File
@@ -20,83 +20,84 @@ function pt(string $key, string $lang): string {
return htmlspecialchars(dbnToolsT($key, $lang));
}
// New 3-tier NOK ladder. Plus carries a 14-day trial (card required, no charge for 14 days).
$tierNames = [
'free' => $uiLang === 'no' ? 'Gratis' : ($uiLang === 'uk' ? 'Безкоштовно' : ($uiLang === 'pl' ? 'Bezpłatnie' : 'Free')),
'light' => 'Light',
'pro' => 'Pro',
'pro_plus' => $uiLang === 'no' ? 'Pro+ Familie' : ($uiLang === 'uk' ? 'Pro+ Сім\'я' : ($uiLang === 'pl' ? 'Pro+ Rodzina' : 'Pro+ Family')),
'free' => $uiLang === 'no' ? 'Gratis' : ($uiLang === 'uk' ? 'Безкоштовно' : ($uiLang === 'pl' ? 'Bezpłatnie' : 'Free')),
'plus' => 'Plus',
'pro' => $uiLang === 'no' ? 'Pro Familie' : ($uiLang === 'uk' ? 'Pro Сім\'я' : ($uiLang === 'pl' ? 'Pro Rodzina' : 'Pro Family')),
];
$creditsPerMonth = $uiLang === 'no' ? 'kreditter / mnd' : ($uiLang === 'uk' ? 'кредитів / міс' : ($uiLang === 'pl' ? 'kredytów / mies' : 'credits / mo'));
$perMonth = $uiLang === 'no' ? '/ måned' : ($uiLang === 'uk' ? '/ міс' : ($uiLang === 'pl' ? '/ mies' : '/ month'));
$capSuffix = $uiLang === 'no' ? '/ time' : ($uiLang === 'uk' ? '/ год' : ($uiLang === 'pl' ? '/ godz' : '/ hour'));
$tiers = [
[
'sku' => 'free',
'name' => $tierNames['free'],
'price' => '0',
'period' => dbnToolsT('pricing_period_always', $uiLang),
'credits' => '30 ' . dbnToolsT('pricing_credits_mo', $uiLang),
'storage' => dbnToolsT('pricing_no_storage', $uiLang),
'seats' => dbnToolsT('pricing_seat_1', $uiLang),
'cap' => '10 ' . dbnToolsT('pricing_cap_suffix', $uiLang),
'features' => [
dbnToolsT('pricing_free_f1', $uiLang),
dbnToolsT('pricing_free_f2', $uiLang),
dbnToolsT('pricing_free_f3', $uiLang),
'price' => 'NOK 0',
'period' => $uiLang === 'no' ? 'alltid' : 'always',
'credits' => '30 ' . $creditsPerMonth,
'storage' => $uiLang === 'no' ? 'Ingen saksoppbevaring' : 'No case storage',
'seats' => $uiLang === 'no' ? '1 bruker' : '1 user',
'cap' => '10 ' . $capSuffix,
'features' => $uiLang === 'no' ? [
'Alle 11 verktøy på innlimt tekst',
'Norsk juridisk korpus (~220K passasjer)',
'EU-vert (Tyskland / Finland / Norge)',
] : [
'All 11 tools on pasted text',
'Norwegian legal corpus (~220K passages)',
'EU-hosted (Germany / Finland / Norway)',
],
'cta' => $isAuthed ? null : dbnToolsT('pricing_cta_login', $uiLang),
'highlight' => false,
],
[
'sku' => 'light',
'name' => $tierNames['light'],
'price' => '9',
'period' => dbnToolsT('pricing_period_mo', $uiLang),
'credits' => '120 ' . dbnToolsT('pricing_credits_mo', $uiLang),
'storage' => '100 MB',
'seats' => dbnToolsT('pricing_seat_1', $uiLang),
'cap' => '15 ' . dbnToolsT('pricing_cap_suffix', $uiLang),
'features' => [
dbnToolsT('pricing_light_f1', $uiLang),
dbnToolsT('pricing_light_f2', $uiLang),
dbnToolsT('pricing_light_f3', $uiLang),
dbnToolsT('pricing_light_f4', $uiLang),
'sku' => 'plus',
'name' => $tierNames['plus'],
'price' => 'NOK 129',
'period' => $perMonth,
'credits' => '250 ' . $creditsPerMonth,
'storage' => '500 MB',
'seats' => $uiLang === 'no' ? '1 bruker' : '1 user',
'cap' => '20 ' . $capSuffix,
'features' => $uiLang === 'no' ? [
'Min Sak — last opp dokumenter med OCR',
'Bruk min sak som kontekst i alle verktøy',
'Lagrede analyser — alle resultater samlet',
'14 dagers gratis prøveperiode (kort kreves)',
] : [
'My Case — upload documents with OCR',
'Use my case as context in every tool',
'Saved analyses — every run kept and searchable',
'14-day free trial (card required)',
],
'highlight' => false,
'highlight' => true,
'badge' => $uiLang === 'no' ? 'Mest populær' : 'Most popular',
],
[
'sku' => 'pro',
'name' => $tierNames['pro'],
'price' => '€29',
'period' => dbnToolsT('pricing_period_mo', $uiLang),
'credits' => '500 ' . dbnToolsT('pricing_credits_mo', $uiLang),
'storage' => '1 GB',
'seats' => dbnToolsT('pricing_seat_1', $uiLang),
'cap' => '30 ' . dbnToolsT('pricing_cap_suffix', $uiLang),
'features' => [
dbnToolsT('pricing_pro_f1', $uiLang),
dbnToolsT('pricing_pro_f2', $uiLang),
dbnToolsT('pricing_pro_f3', $uiLang),
dbnToolsT('pricing_pro_f4', $uiLang),
],
'highlight' => true,
'badge' => dbnToolsT('pricing_badge_popular', $uiLang),
],
[
'sku' => 'pro_plus',
'name' => $tierNames['pro_plus'],
'price' => '€79',
'period' => dbnToolsT('pricing_period_mo', $uiLang),
'credits' => dbnToolsT('pricing_unlimited', $uiLang),
'storage' => '10 GB',
'seats' => dbnToolsT('pricing_seats_family', $uiLang),
'cap' => '50 ' . dbnToolsT('pricing_cap_per_seat', $uiLang),
'features' => [
dbnToolsT('pricing_proplus_f1', $uiLang),
dbnToolsT('pricing_proplus_f2', $uiLang),
dbnToolsT('pricing_proplus_f3', $uiLang),
dbnToolsT('pricing_proplus_f4', $uiLang),
'price' => 'NOK 299',
'period' => $perMonth,
'credits' => '1000 ' . $creditsPerMonth,
'storage' => '5 GB',
'seats' => $uiLang === 'no' ? '3 brukere · delt sak' : '3 users · shared case',
'cap' => '40 ' . $capSuffix,
'features' => $uiLang === 'no' ? [
'Alt i Plus, med mer plass og raskere modeller',
'Familie-sete: 3 innlogginger på samme sak',
'Prioritert GPT-4o for kompleks analyse',
'Audit-logg for hvem som kjørte hva',
] : [
'Everything in Plus, with more space and faster models',
'Family seats: 3 logins sharing one case',
'Priority GPT-4o for complex analysis',
'Audit log of who ran what',
],
'highlight' => false,
'badge' => dbnToolsT('pricing_badge_family', $uiLang),
'badge' => $uiLang === 'no' ? 'For familier' : 'For families',
],
];
@@ -106,9 +107,9 @@ $topupNotes = [
'topup_l' => dbnToolsT('pricing_topup_l_note', $uiLang),
];
$topups = [
['sku' => 'topup_s', 'price' => '€5', 'credits' => 30, 'note' => $topupNotes['topup_s']],
['sku' => 'topup_m', 'price' => '€15', 'credits' => 100, 'note' => $topupNotes['topup_m']],
['sku' => 'topup_l', 'price' => '€40', 'credits' => 300, 'note' => $topupNotes['topup_l']],
['sku' => 'topup_s', 'price' => 'NOK 49', 'credits' => 30, 'note' => $topupNotes['topup_s']],
['sku' => 'topup_m', 'price' => 'NOK 149', 'credits' => 100, 'note' => $topupNotes['topup_m']],
['sku' => 'topup_l', 'price' => 'NOK 399', 'credits' => 300, 'note' => $topupNotes['topup_l']],
];
?>
<!doctype html>
@@ -194,6 +195,12 @@ $topups = [
<p class="status-pill-info"><?= pt('pricing_status_canceled', $uiLang) ?></p>
<?php endif; ?>
<div style="background:linear-gradient(135deg,#fef3c7,#fcd34d);color:#78350f;padding:1rem 1.5rem;border-radius:10px;margin-bottom:2rem;text-align:center;font-weight:600;">
<?= $uiLang === 'no'
? '🎉 Prøv Plus gratis i 14 dager — kort kreves, kanseller når som helst, ingen belastning før dag 15.'
: '🎉 Try Plus free for 14 days — card required, cancel anytime, no charge until day 15.' ?>
</div>
<?php if ($isAuthed && !$surveyDone): ?>
<div class="survey-banner">
<div class="copy">