From fbf5c82ccc33cc21c6f3de2276b302a13157a1b9 Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 19 Aug 2026 23:44:08 +0000 Subject: [PATCH] feat(prenumeration): egna recept endast for betalande kunder - inte trial communityPublish satts till false aven under trial (ovriga premium- funktioner ingar fortfarande i provperioden). Endast betalda planer (household/family/large_household) far skicka in egna recept. Uppdaterat premium-meddelandet i appen (11 sprak + sv) sa det inte langre antyder att provperioden lases upp funktionen. Verifierat: subscriptions 10/10, api 104/104, typecheck gron. --- apps/mobile/src/locales/da/common.json | 2 +- apps/mobile/src/locales/de/common.json | 2 +- apps/mobile/src/locales/en/common.json | 2 +- apps/mobile/src/locales/es/common.json | 2 +- apps/mobile/src/locales/fi/common.json | 2 +- apps/mobile/src/locales/fr/common.json | 2 +- apps/mobile/src/locales/it/common.json | 2 +- apps/mobile/src/locales/nb/common.json | 2 +- apps/mobile/src/locales/nl/common.json | 2 +- apps/mobile/src/locales/pl/common.json | 2 +- apps/mobile/src/locales/pt/common.json | 2 +- apps/mobile/src/locales/sv/common.json | 2 +- packages/subscriptions/src/entitlements.ts | 4 +++- 13 files changed, 15 insertions(+), 13 deletions(-) diff --git a/apps/mobile/src/locales/da/common.json b/apps/mobile/src/locales/da/common.json index e083f01..ea5ce68 100644 --- a/apps/mobile/src/locales/da/common.json +++ b/apps/mobile/src/locales/da/common.json @@ -478,7 +478,7 @@ "submit.successTitle": "Tak – din opskrift er indsendt!", "submit.successBody": "Vores AI gennemgår og finpudser den. Den udgives snart, krediteret med dit navn, og dukker op blandt opskrifterne.", "submit.premiumTitle": "Egne opskrifter er en del af Premium", - "submit.premiumBody": "At indsende og udgive egne opskrifter er en del af Premium. Start din prøveperiode eller opgradér for at fortsætte.", + "submit.premiumBody": "At indsende og udgive egne opskrifter er en del af Premium — et betalt abonnement (ikke prøveperioden). Opgradér for at fortsætte.", "submit.seePlans": "Se abonnementer", "submit.backHome": "Tilbage", "cookedLog.title": "Har du lavet denne ret?", diff --git a/apps/mobile/src/locales/de/common.json b/apps/mobile/src/locales/de/common.json index 8cd70e8..70b03ce 100644 --- a/apps/mobile/src/locales/de/common.json +++ b/apps/mobile/src/locales/de/common.json @@ -478,7 +478,7 @@ "submit.successTitle": "Danke – dein Rezept ist eingereicht!", "submit.successBody": "Unsere KI prüft und verfeinert es. Es wird in Kürze veröffentlicht, mit deinem Namen versehen, und erscheint unter den Rezepten.", "submit.premiumTitle": "Eigene Rezepte sind Teil von Premium", - "submit.premiumBody": "Das Einreichen und Veröffentlichen eigener Rezepte gehört zu Premium. Starte deine Testphase oder upgrade, um fortzufahren.", + "submit.premiumBody": "Das Einreichen und Veröffentlichen eigener Rezepte gehört zu Premium — einem kostenpflichtigen Abo (nicht zur Testphase). Führe ein Upgrade durch, um fortzufahren.", "submit.seePlans": "Tarife ansehen", "submit.backHome": "Zurück", "cookedLog.title": "Hast du dieses Gericht gekocht?", diff --git a/apps/mobile/src/locales/en/common.json b/apps/mobile/src/locales/en/common.json index e101a70..cb4987a 100644 --- a/apps/mobile/src/locales/en/common.json +++ b/apps/mobile/src/locales/en/common.json @@ -478,7 +478,7 @@ "submit.successTitle": "Thanks – your recipe is submitted!", "submit.successBody": "Our AI reviews and polishes it. It will be published shortly, credited with your name, and appear among the recipes.", "submit.premiumTitle": "Own recipes are part of Premium", - "submit.premiumBody": "Submitting and publishing your own recipes is part of Premium. Start your trial or upgrade to go ahead.", + "submit.premiumBody": "Submitting and publishing your own recipes is part of Premium — a paid plan (not the trial). Upgrade to go ahead.", "submit.seePlans": "See plans", "submit.backHome": "Back", "cookedLog.title": "Did you cook this dish?", diff --git a/apps/mobile/src/locales/es/common.json b/apps/mobile/src/locales/es/common.json index 13fd6e6..e6bb37d 100644 --- a/apps/mobile/src/locales/es/common.json +++ b/apps/mobile/src/locales/es/common.json @@ -478,7 +478,7 @@ "submit.successTitle": "¡Gracias, tu receta se ha enviado!", "submit.successBody": "Nuestra IA la revisa y la pule. Se publicará en breve, acreditada con tu nombre, y aparecerá entre las recetas.", "submit.premiumTitle": "Las recetas propias son parte de Premium", - "submit.premiumBody": "Enviar y publicar tus propias recetas forma parte de Premium. Inicia tu prueba o mejora tu plan para continuar.", + "submit.premiumBody": "Enviar y publicar tus propias recetas forma parte de Premium — un plan de pago (no la prueba). Mejora tu plan para continuar.", "submit.seePlans": "Ver planes", "submit.backHome": "Volver", "cookedLog.title": "¿Has cocinado este plato?", diff --git a/apps/mobile/src/locales/fi/common.json b/apps/mobile/src/locales/fi/common.json index 496e1e8..a9bb25e 100644 --- a/apps/mobile/src/locales/fi/common.json +++ b/apps/mobile/src/locales/fi/common.json @@ -478,7 +478,7 @@ "submit.successTitle": "Kiitos – reseptisi on lähetetty!", "submit.successBody": "Tekoälymme tarkistaa ja viimeistelee sen. Se julkaistaan pian nimelläsi merkittynä ja ilmestyy reseptien joukkoon.", "submit.premiumTitle": "Omat reseptit kuuluvat Premiumiin", - "submit.premiumBody": "Omien reseptien lähettäminen ja julkaiseminen kuuluu Premiumiin. Aloita kokeilu tai päivitä jatkaaksesi.", + "submit.premiumBody": "Omien reseptien lähettäminen ja julkaiseminen kuuluu Premiumiin — maksulliseen tilaukseen (ei kokeilujaksoon). Päivitä jatkaaksesi.", "submit.seePlans": "Katso tilaukset", "submit.backHome": "Takaisin", "cookedLog.title": "Teitkö tämän ruoan?", diff --git a/apps/mobile/src/locales/fr/common.json b/apps/mobile/src/locales/fr/common.json index d6c59d3..7f759f3 100644 --- a/apps/mobile/src/locales/fr/common.json +++ b/apps/mobile/src/locales/fr/common.json @@ -478,7 +478,7 @@ "submit.successTitle": "Merci – votre recette est envoyée !", "submit.successBody": "Notre IA la relit et la peaufine. Elle sera publiée sous peu, créditée à votre nom, et apparaîtra parmi les recettes.", "submit.premiumTitle": "Les recettes perso font partie de Premium", - "submit.premiumBody": "Proposer et publier vos propres recettes fait partie de Premium. Lancez votre essai ou passez à la version supérieure pour continuer.", + "submit.premiumBody": "Proposer et publier vos propres recettes fait partie de Premium — un abonnement payant (pas l'essai). Passez à la version supérieure pour continuer.", "submit.seePlans": "Voir les offres", "submit.backHome": "Retour", "cookedLog.title": "Avez-vous cuisiné ce plat ?", diff --git a/apps/mobile/src/locales/it/common.json b/apps/mobile/src/locales/it/common.json index 146bf7b..0b33aa4 100644 --- a/apps/mobile/src/locales/it/common.json +++ b/apps/mobile/src/locales/it/common.json @@ -478,7 +478,7 @@ "submit.successTitle": "Grazie – la tua ricetta è stata inviata!", "submit.successBody": "La nostra IA la controlla e la rifinisce. Sarà pubblicata a breve, con il tuo nome, e comparirà tra le ricette.", "submit.premiumTitle": "Le ricette personali fanno parte di Premium", - "submit.premiumBody": "Inviare e pubblicare le proprie ricette fa parte di Premium. Avvia la prova o passa a Premium per continuare.", + "submit.premiumBody": "Inviare e pubblicare le proprie ricette fa parte di Premium — un piano a pagamento (non la prova). Passa a Premium per continuare.", "submit.seePlans": "Vedi i piani", "submit.backHome": "Indietro", "cookedLog.title": "Hai cucinato questo piatto?", diff --git a/apps/mobile/src/locales/nb/common.json b/apps/mobile/src/locales/nb/common.json index 4af236a..2741a29 100644 --- a/apps/mobile/src/locales/nb/common.json +++ b/apps/mobile/src/locales/nb/common.json @@ -478,7 +478,7 @@ "submit.successTitle": "Takk – oppskriften er sendt inn!", "submit.successBody": "AI-en vår går gjennom og finpusser den. Den publiseres snart, kreditert med navnet ditt, og dukker opp blant oppskriftene.", "submit.premiumTitle": "Egne oppskrifter er en del av Premium", - "submit.premiumBody": "Å sende inn og publisere egne oppskrifter er en del av Premium. Start prøveperioden eller oppgrader for å fortsette.", + "submit.premiumBody": "Å sende inn og publisere egne oppskrifter er en del av Premium — et betalt abonnement (ikke prøveperioden). Oppgrader for å fortsette.", "submit.seePlans": "Se abonnementer", "submit.backHome": "Tilbake", "cookedLog.title": "Har du laget denne retten?", diff --git a/apps/mobile/src/locales/nl/common.json b/apps/mobile/src/locales/nl/common.json index 03fe665..22d1df6 100644 --- a/apps/mobile/src/locales/nl/common.json +++ b/apps/mobile/src/locales/nl/common.json @@ -478,7 +478,7 @@ "submit.successTitle": "Bedankt – je recept is ingestuurd!", "submit.successBody": "Onze AI beoordeelt en verfijnt het. Het wordt binnenkort gepubliceerd, met je naam vermeld, en verschijnt tussen de recepten.", "submit.premiumTitle": "Eigen recepten horen bij Premium", - "submit.premiumBody": "Eigen recepten insturen en publiceren hoort bij Premium. Start je proefperiode of upgrade om verder te gaan.", + "submit.premiumBody": "Eigen recepten insturen en publiceren hoort bij Premium — een betaald abonnement (niet de proefperiode). Upgrade om verder te gaan.", "submit.seePlans": "Bekijk abonnementen", "submit.backHome": "Terug", "cookedLog.title": "Heb je dit gerecht gemaakt?", diff --git a/apps/mobile/src/locales/pl/common.json b/apps/mobile/src/locales/pl/common.json index dfbfd2f..cd08846 100644 --- a/apps/mobile/src/locales/pl/common.json +++ b/apps/mobile/src/locales/pl/common.json @@ -492,7 +492,7 @@ "submit.successTitle": "Dziękujemy – przepis został wysłany!", "submit.successBody": "Nasza SI sprawdza go i dopracowuje. Zostanie wkrótce opublikowany z Twoim podpisem i pojawi się wśród przepisów.", "submit.premiumTitle": "Własne przepisy są częścią Premium", - "submit.premiumBody": "Wysyłanie i publikowanie własnych przepisów jest częścią Premium. Rozpocznij okres próbny lub przejdź na wyższy plan, aby kontynuować.", + "submit.premiumBody": "Wysyłanie i publikowanie własnych przepisów jest częścią Premium — płatnego planu (nie okresu próbnego). Przejdź na wyższy plan, aby kontynuować.", "submit.seePlans": "Zobacz plany", "submit.backHome": "Wstecz", "cookedLog.title": "Czy ugotowałeś to danie?", diff --git a/apps/mobile/src/locales/pt/common.json b/apps/mobile/src/locales/pt/common.json index 77f03f5..b5b62e2 100644 --- a/apps/mobile/src/locales/pt/common.json +++ b/apps/mobile/src/locales/pt/common.json @@ -478,7 +478,7 @@ "submit.successTitle": "Obrigado – a sua receita foi enviada!", "submit.successBody": "A nossa IA revê e aperfeiçoa. Será publicada em breve, creditada com o seu nome, e aparecerá entre as receitas.", "submit.premiumTitle": "As receitas próprias fazem parte do Premium", - "submit.premiumBody": "Enviar e publicar as suas próprias receitas faz parte do Premium. Inicie a versão de teste ou faça upgrade para continuar.", + "submit.premiumBody": "Enviar e publicar as suas próprias receitas faz parte do Premium — um plano pago (não a versão de teste). Faça upgrade para continuar.", "submit.seePlans": "Ver planos", "submit.backHome": "Voltar", "cookedLog.title": "Cozinhou este prato?", diff --git a/apps/mobile/src/locales/sv/common.json b/apps/mobile/src/locales/sv/common.json index 2bc76a0..82bb972 100644 --- a/apps/mobile/src/locales/sv/common.json +++ b/apps/mobile/src/locales/sv/common.json @@ -478,7 +478,7 @@ "submit.successTitle": "Tack – receptet är inskickat!", "submit.successBody": "Vår AI läser igenom, granskar och finskriver det. Det publiceras strax, märkt med ditt namn, och dyker upp bland recepten.", "submit.premiumTitle": "Egna recept ingår i Premium", - "submit.premiumBody": "Att skicka in och publicera egna recept ingår i Premium. Starta din provperiod eller uppgradera så kör vi.", + "submit.premiumBody": "Att skicka in och publicera egna recept ingår i Premium – en betald plan (inte provperioden). Uppgradera så kör vi.", "submit.seePlans": "Se planer", "submit.backHome": "Tillbaka", "cookedLog.title": "Har du lagat denna rätt?", diff --git a/packages/subscriptions/src/entitlements.ts b/packages/subscriptions/src/entitlements.ts index dc9b193..8075de2 100644 --- a/packages/subscriptions/src/entitlements.ts +++ b/packages/subscriptions/src/entitlements.ts @@ -62,6 +62,8 @@ export function computeEntitlements( } // 2. Trial: 14 dagar full tillgång utan kort (spec §46). Family-nivå under trial. + // Undantag: egna recept (communityPublish) är ENBART för betalande kunder – + // inte ens under trial. Övriga premiumfunktioner ingår i provperioden. if (trial && trial.endsAt > now) { const def = PLAN_DEFINITIONS.family; return { @@ -72,7 +74,7 @@ export function computeEntitlements( aiScansUsedThisMonth: usage.aiScansUsedThisMonth, weekPlanning: true, advancedNutrition: true, - communityPublish: true, + communityPublish: false, expiresAt: trial.endsAt.toISOString(), }; }