no moneyback

This commit is contained in:
Andras Schmelczer 2026-04-10 08:10:26 +01:00
parent 14db8b4a05
commit 6077a17a83
8 changed files with 21 additions and 33 deletions

View file

@ -228,7 +228,6 @@ export default function LearnPage() {
{ question: t('learnPage.faqPricing1Q'), answer: t('learnPage.faqPricing1A') }, { question: t('learnPage.faqPricing1Q'), answer: t('learnPage.faqPricing1A') },
{ question: t('learnPage.faqPricing2Q'), answer: t('learnPage.faqPricing2A') }, { question: t('learnPage.faqPricing2Q'), answer: t('learnPage.faqPricing2A') },
{ question: t('learnPage.faqPricing3Q'), answer: t('learnPage.faqPricing3A') }, { question: t('learnPage.faqPricing3Q'), answer: t('learnPage.faqPricing3A') },
{ question: t('learnPage.faqPricing4Q'), answer: t('learnPage.faqPricing4A') },
], ],
}, },
{ {

View file

@ -340,11 +340,11 @@ export default function PricingPage({
{license.error} {license.error}
</p> </p>
)} )}
{isFree && (
<p className="text-center text-xs text-warm-400 dark:text-warm-500 mt-2"> <p className="text-center text-xs text-warm-400 dark:text-warm-500 mt-2">
{isFree {t('pricingPage.noCreditCard')}
? t('pricingPage.noCreditCard')
: t('pricingPage.moneyBackGuarantee')}
</p> </p>
)}
</> </>
) : isFilled ? ( ) : isFilled ? (
<div className="mt-auto px-5 py-3 bg-warm-100 dark:bg-warm-700 text-warm-400 dark:text-warm-500 rounded-lg font-semibold text-center"> <div className="mt-auto px-5 py-3 bg-warm-100 dark:bg-warm-700 text-warm-400 dark:text-warm-500 rounded-lg font-semibold text-center">

View file

@ -94,7 +94,7 @@ const de: Translations = {
free: 'Kostenlos', free: 'Kostenlos',
once: '/einmalig', once: '/einmalig',
freeForEarly: 'Kostenlos für Frühnutzer. Keine Kreditkarte erforderlich.', freeForEarly: 'Kostenlos für Frühnutzer. Keine Kreditkarte erforderlich.',
oneTimePayment: 'Einmalzahlung. Lebenslanger Zugang. 30 Tage Geld-zurück-Garantie.', oneTimePayment: 'Einmalzahlung. Lebenslanger Zugang.',
redirecting: 'Weiterleitung...', redirecting: 'Weiterleitung...',
claimFreeAccess: 'Kostenlosen Zugang sichern', claimFreeAccess: 'Kostenlosen Zugang sichern',
upgradeFor: 'Upgrade für {{price}}', upgradeFor: 'Upgrade für {{price}}',
@ -382,7 +382,7 @@ const de: Translations = {
getStarted: 'Jetzt starten', getStarted: 'Jetzt starten',
getStartedPrice: 'Jetzt starten — {{price}}', getStartedPrice: 'Jetzt starten — {{price}}',
noCreditCard: 'Keine Kreditkarte erforderlich', noCreditCard: 'Keine Kreditkarte erforderlich',
moneyBackGuarantee: '30 Tage Geld-zurück-Garantie',
soldOut: 'Ausverkauft', soldOut: 'Ausverkauft',
upcoming: 'Demnächst', upcoming: 'Demnächst',
failedToLoad: 'Preise konnten nicht geladen werden. Bitte später erneut versuchen.', failedToLoad: 'Preise konnten nicht geladen werden. Bitte später erneut versuchen.',
@ -562,9 +562,7 @@ const de: Translations = {
faqPricing3Q: 'Was kann ich mit der kostenlosen Version nutzen?', faqPricing3Q: 'Was kann ich mit der kostenlosen Version nutzen?',
faqPricing3A: faqPricing3A:
'Kostenlose Nutzer können alle Funktionen im Demogebiet erkunden (Innenstadt London, ungefähr Zonen 1 bis 2). Für den Zugang zu Daten für den Rest Englands benötigen Sie den lebenslangen Zugang.', 'Kostenlose Nutzer können alle Funktionen im Demogebiet erkunden (Innenstadt London, ungefähr Zonen 1 bis 2). Für den Zugang zu Daten für den Rest Englands benötigen Sie den lebenslangen Zugang.',
faqPricing4Q: 'Kann ich eine Rückerstattung erhalten?',
faqPricing4A:
'Selbstverständlich. Wir bieten eine 30-Tage-Geld-zurück-Garantie. Wenn Sie nicht zufrieden sind, schreiben Sie innerhalb von 30 Tagen an support@perfect-postcode.co.uk für eine vollständige Rückerstattung.',
// FAQ items — Tips and Tricks // FAQ items — Tips and Tricks
faqTips1Q: 'Wie nutze ich den KI-Filter, anstatt Filter einzeln hinzuzufügen?', faqTips1Q: 'Wie nutze ich den KI-Filter, anstatt Filter einzeln hinzuzufügen?',
faqTips1A: faqTips1A:

View file

@ -92,7 +92,7 @@ const en = {
free: 'Free', free: 'Free',
once: '/once', once: '/once',
freeForEarly: 'Free for early adopters. No credit card required.', freeForEarly: 'Free for early adopters. No credit card required.',
oneTimePayment: 'One-time payment. Lifetime access. 30-day money-back guarantee.', oneTimePayment: 'One-time payment. Lifetime access.',
redirecting: 'Redirecting...', redirecting: 'Redirecting...',
claimFreeAccess: 'Claim free access', claimFreeAccess: 'Claim free access',
upgradeFor: 'Upgrade for {{price}}', upgradeFor: 'Upgrade for {{price}}',
@ -378,7 +378,7 @@ const en = {
getStarted: 'Get started', getStarted: 'Get started',
getStartedPrice: 'Get started - {{price}}', getStartedPrice: 'Get started - {{price}}',
noCreditCard: 'No credit card required', noCreditCard: 'No credit card required',
moneyBackGuarantee: '30-day money-back guarantee',
soldOut: 'Sold out', soldOut: 'Sold out',
upcoming: 'Upcoming', upcoming: 'Upcoming',
failedToLoad: 'Failed to load pricing. Please try again later.', failedToLoad: 'Failed to load pricing. Please try again later.',
@ -551,9 +551,7 @@ const en = {
faqPricing3Q: 'What can I access on the free tier?', faqPricing3Q: 'What can I access on the free tier?',
faqPricing3A: faqPricing3A:
'Free users can explore all features within the demo area (inner London, roughly zones 1 to 2). To access data for the rest of England, you need lifetime access.', 'Free users can explore all features within the demo area (inner London, roughly zones 1 to 2). To access data for the rest of England, you need lifetime access.',
faqPricing4Q: 'Can I get a refund?',
faqPricing4A:
'Absolutely. We offer a 30-day money-back guarantee. If youre not satisfied, email support@perfect-postcode.co.uk within 30 days for a full refund.',
// FAQ items — Tips and Tricks // FAQ items — Tips and Tricks
faqTips1Q: 'How do I use the AI filter instead of adding filters one by one?', faqTips1Q: 'How do I use the AI filter instead of adding filters one by one?',
faqTips1A: faqTips1A:

View file

@ -95,7 +95,7 @@ const fr: Translations = {
free: 'Gratuit', free: 'Gratuit',
once: '/unique', once: '/unique',
freeForEarly: 'Gratuit pour les premiers utilisateurs. Aucune carte bancaire requise.', freeForEarly: 'Gratuit pour les premiers utilisateurs. Aucune carte bancaire requise.',
oneTimePayment: 'Paiement unique. Accès à vie. Garantie satisfait ou remboursé sous 30 jours.', oneTimePayment: 'Paiement unique. Accès à vie.',
redirecting: 'Redirection...', redirecting: 'Redirection...',
claimFreeAccess: "Réclamer laccès gratuit", claimFreeAccess: "Réclamer laccès gratuit",
upgradeFor: 'Passer à la version complète pour {{price}}', upgradeFor: 'Passer à la version complète pour {{price}}',
@ -387,7 +387,7 @@ const fr: Translations = {
getStarted: 'Commencer', getStarted: 'Commencer',
getStartedPrice: 'Commencer - {{price}}', getStartedPrice: 'Commencer - {{price}}',
noCreditCard: 'Aucune carte bancaire requise', noCreditCard: 'Aucune carte bancaire requise',
moneyBackGuarantee: 'Garantie satisfait ou remboursé sous 30 jours',
soldOut: 'Épuisé', soldOut: 'Épuisé',
upcoming: 'À venir', upcoming: 'À venir',
failedToLoad: 'Échec du chargement des tarifs. Veuillez réessayer plus tard.', failedToLoad: 'Échec du chargement des tarifs. Veuillez réessayer plus tard.',
@ -565,9 +565,7 @@ const fr: Translations = {
faqPricing3Q: 'Que puis-je faire avec la version gratuite ?', faqPricing3Q: 'Que puis-je faire avec la version gratuite ?',
faqPricing3A: faqPricing3A:
'Les utilisateurs gratuits peuvent explorer toutes les fonctionnalités dans la zone de démonstration (centre de Londres, approximativement zones 1 à 2). Pour accéder aux données du reste de lAngleterre, il faut laccès à vie.', 'Les utilisateurs gratuits peuvent explorer toutes les fonctionnalités dans la zone de démonstration (centre de Londres, approximativement zones 1 à 2). Pour accéder aux données du reste de lAngleterre, il faut laccès à vie.',
faqPricing4Q: 'Puis-je obtenir un remboursement ?',
faqPricing4A:
'Absolument. Nous offrons une garantie satisfait ou remboursé sous 30 jours. Si vous nêtes pas satisfait, envoyez un e-mail à support@perfect-postcode.co.uk dans les 30 jours pour un remboursement intégral.',
// FAQ items — Tips and Tricks // FAQ items — Tips and Tricks
faqTips1Q: 'Comment utiliser le filtre IA au lieu dajouter les filtres un par un ?', faqTips1Q: 'Comment utiliser le filtre IA au lieu dajouter les filtres un par un ?',
faqTips1A: faqTips1A:

View file

@ -95,8 +95,7 @@ const hu: Translations = {
free: 'Ingyenes', free: 'Ingyenes',
once: '/egyszeri', once: '/egyszeri',
freeForEarly: 'Ingyenes a korai felhasználóknak. Nem szükséges bankkartya.', freeForEarly: 'Ingyenes a korai felhasználóknak. Nem szükséges bankkartya.',
oneTimePayment: oneTimePayment: 'Egyszeri fizetés. Élethosszig tartó hozzáférés.',
'Egyszeri fizetés. Élethosszig tartó hozzáférés. 30 napos pénzvisszatérítési garancia.',
redirecting: 'Átirányítás...', redirecting: 'Átirányítás...',
claimFreeAccess: 'Ingyenes hozzáférés igénylése', claimFreeAccess: 'Ingyenes hozzáférés igénylése',
upgradeFor: 'Frissítés {{price}} áron', upgradeFor: 'Frissítés {{price}} áron',
@ -382,7 +381,7 @@ const hu: Translations = {
getStarted: 'Kezdjük el', getStarted: 'Kezdjük el',
getStartedPrice: 'Kezdjük el {{price}}', getStartedPrice: 'Kezdjük el {{price}}',
noCreditCard: 'Nem szükséges bankkartya', noCreditCard: 'Nem szükséges bankkartya',
moneyBackGuarantee: '30 napos pénzvisszatérítési garancia',
soldOut: 'Elfogyott', soldOut: 'Elfogyott',
upcoming: 'Következő', upcoming: 'Következő',
failedToLoad: 'Nem sikerült betölteni az árakat. Kérjük, próbáld újra később.', failedToLoad: 'Nem sikerült betölteni az árakat. Kérjük, próbáld újra később.',
@ -557,9 +556,7 @@ const hu: Translations = {
faqPricing3Q: 'Mit érhetek el az ingyenes szinten?', faqPricing3Q: 'Mit érhetek el az ingyenes szinten?',
faqPricing3A: faqPricing3A:
'Az ingyenes felhasználók a demó területen (Belső-London, megközelítőleg az 1-2. zóna) fedezhetik fel az összes funkciót. Anglia többi részének adataihoz élethosszig tartó hozzáférés szükséges.', 'Az ingyenes felhasználók a demó területen (Belső-London, megközelítőleg az 1-2. zóna) fedezhetik fel az összes funkciót. Anglia többi részének adataihoz élethosszig tartó hozzáférés szükséges.',
faqPricing4Q: 'Kérhetek visszatérítést?',
faqPricing4A:
'Természetesen. 30 napos pénzvisszatérítési garanciát kínálunk. Ha nem vagy elégedett, írj a support@perfect-postcode.co.uk címre 30 napon belül a teljes visszatérítésért.',
// FAQ items — Tips and Tricks // FAQ items — Tips and Tricks
faqTips1Q: 'Hogyan használjam az AI szűrőt a szűrők egyenkénti hozzáadása helyett?', faqTips1Q: 'Hogyan használjam az AI szűrőt a szűrők egyenkénti hozzáadása helyett?',
faqTips1A: faqTips1A:

View file

@ -93,7 +93,7 @@ const zh: Translations = {
free: '免费', free: '免费',
once: '/一次性', once: '/一次性',
freeForEarly: '早期用户免费。无需信用卡。', freeForEarly: '早期用户免费。无需信用卡。',
oneTimePayment: '一次性付款。终身访问。30天无条件退款。', oneTimePayment: '一次性付款。终身访问。',
redirecting: '跳转中...', redirecting: '跳转中...',
claimFreeAccess: '领取免费访问权限', claimFreeAccess: '领取免费访问权限',
upgradeFor: '升级仅需 {{price}}', upgradeFor: '升级仅需 {{price}}',
@ -375,7 +375,7 @@ const zh: Translations = {
getStarted: '立即开始', getStarted: '立即开始',
getStartedPrice: '立即开始 - {{price}}', getStartedPrice: '立即开始 - {{price}}',
noCreditCard: '无需信用卡', noCreditCard: '无需信用卡',
moneyBackGuarantee: '30天无条件退款保证',
soldOut: '已售罄', soldOut: '已售罄',
upcoming: '即将开放', upcoming: '即将开放',
failedToLoad: '加载价格信息失败,请稍后重试。', failedToLoad: '加载价格信息失败,请稍后重试。',
@ -541,9 +541,7 @@ const zh: Translations = {
faqPricing3Q: '免费版能用哪些功能?', faqPricing3Q: '免费版能用哪些功能?',
faqPricing3A: faqPricing3A:
'免费用户可以在演示区域(伦敦市中心,大约 1 至 2 区)内探索所有功能。要访问英格兰其他地区的数据,需要获取终身访问权限。', '免费用户可以在演示区域(伦敦市中心,大约 1 至 2 区)内探索所有功能。要访问英格兰其他地区的数据,需要获取终身访问权限。',
faqPricing4Q: '可以退款吗?',
faqPricing4A:
'当然可以。我们提供 30 天退款保证。如果您不满意,请在 30 天内发送邮件至 support@perfect-postcode.co.uk 申请全额退款。',
// FAQ items — Tips and Tricks // FAQ items — Tips and Tricks
faqTips1Q: '如何使用 AI 筛选功能,而不是逐个添加筛选条件?', faqTips1Q: '如何使用 AI 筛选功能,而不是逐个添加筛选条件?',
faqTips1A: faqTips1A:

View file

@ -11,7 +11,7 @@ use crate::pocketbase::get_superuser_token;
use crate::state::{AppState, SharedState}; use crate::state::{AppState, SharedState};
/// Pricing tiers: (cumulative user cap, price in pence). /// Pricing tiers: (cumulative user cap, price in pence).
const TIERS: &[(u64, u64)] = &[(10, 99), (15, 999), (30, 2999), (50, 4999)]; const TIERS: &[(u64, u64)] = &[(5, 99), (15, 999), (30, 2999), (50, 4999)];
const FINAL_PRICE_PENCE: u64 = 9999; const FINAL_PRICE_PENCE: u64 = 9999;
#[derive(Serialize)] #[derive(Serialize)]