fix(subscriptions): free-niva 5 AI-skanningar (beslut Johan)
Free 10->5 i kod, test, paywall-copy (12 sprak) och docs. Full trappa: free 5 / trial 14d 25 skann / premium 100/200/400.
This commit is contained in:
@@ -210,7 +210,7 @@
|
|||||||
"paywall.choose": "Vælg",
|
"paywall.choose": "Vælg",
|
||||||
"paywall.fairUse": "Fair use-kvote for AI-scanninger inkluderet.",
|
"paywall.fairUse": "Fair use-kvote for AI-scanninger inkluderet.",
|
||||||
"paywall.family": "Family · op til 6 personer",
|
"paywall.family": "Family · op til 6 personer",
|
||||||
"paywall.freeNote": "Gratis: 10 AI-scanninger/md., manuelt lager, gemte opskrifter og enkel registrering.",
|
"paywall.freeNote": "Gratis: 5 AI-scanninger/md., manuelt lager, gemte opskrifter og enkel registrering.",
|
||||||
"paywall.household": "Household · op til 3 personer",
|
"paywall.household": "Household · op til 3 personer",
|
||||||
"paywall.large": "Large Household · op til 12 personer",
|
"paywall.large": "Large Household · op til 12 personer",
|
||||||
"paywall.perMonth": "{price}/md.",
|
"paywall.perMonth": "{price}/md.",
|
||||||
|
|||||||
@@ -210,7 +210,7 @@
|
|||||||
"paywall.choose": "Wählen",
|
"paywall.choose": "Wählen",
|
||||||
"paywall.fairUse": "Fair-Use-Kontingent für KI-Scans inklusive.",
|
"paywall.fairUse": "Fair-Use-Kontingent für KI-Scans inklusive.",
|
||||||
"paywall.family": "Family · bis zu 6 Personen",
|
"paywall.family": "Family · bis zu 6 Personen",
|
||||||
"paywall.freeNote": "Gratis: 10 KI-Scans/Monat, manueller Vorrat, gespeicherte Rezepte und einfaches Tracking.",
|
"paywall.freeNote": "Gratis: 5 KI-Scans/Monat, manueller Vorrat, gespeicherte Rezepte und einfaches Tracking.",
|
||||||
"paywall.household": "Household · bis zu 3 Personen",
|
"paywall.household": "Household · bis zu 3 Personen",
|
||||||
"paywall.large": "Large Household · bis zu 12 Personen",
|
"paywall.large": "Large Household · bis zu 12 Personen",
|
||||||
"paywall.perMonth": "{price}/Monat",
|
"paywall.perMonth": "{price}/Monat",
|
||||||
|
|||||||
@@ -210,7 +210,7 @@
|
|||||||
"paywall.choose": "Choose",
|
"paywall.choose": "Choose",
|
||||||
"paywall.fairUse": "Fair-use quota for AI scans included.",
|
"paywall.fairUse": "Fair-use quota for AI scans included.",
|
||||||
"paywall.family": "Family · up to 6 people",
|
"paywall.family": "Family · up to 6 people",
|
||||||
"paywall.freeNote": "Free: 10 AI scans/month, manual inventory, saved recipes and simple logging.",
|
"paywall.freeNote": "Free: 5 AI scans/month, manual inventory, saved recipes and simple logging.",
|
||||||
"paywall.household": "Household · up to 3 people",
|
"paywall.household": "Household · up to 3 people",
|
||||||
"paywall.large": "Large Household · up to 12 people",
|
"paywall.large": "Large Household · up to 12 people",
|
||||||
"paywall.perMonth": "{price}/month",
|
"paywall.perMonth": "{price}/month",
|
||||||
|
|||||||
@@ -210,7 +210,7 @@
|
|||||||
"paywall.choose": "Elegir",
|
"paywall.choose": "Elegir",
|
||||||
"paywall.fairUse": "Cuota de uso razonable de escaneos de IA incluida.",
|
"paywall.fairUse": "Cuota de uso razonable de escaneos de IA incluida.",
|
||||||
"paywall.family": "Family · hasta 6 personas",
|
"paywall.family": "Family · hasta 6 personas",
|
||||||
"paywall.freeNote": "Gratis: 10 escaneos de IA/mes, inventario manual, recetas guardadas y registro sencillo.",
|
"paywall.freeNote": "Gratis: 5 escaneos de IA/mes, inventario manual, recetas guardadas y registro sencillo.",
|
||||||
"paywall.household": "Household · hasta 3 personas",
|
"paywall.household": "Household · hasta 3 personas",
|
||||||
"paywall.large": "Large Household · hasta 12 personas",
|
"paywall.large": "Large Household · hasta 12 personas",
|
||||||
"paywall.perMonth": "{price}/mes",
|
"paywall.perMonth": "{price}/mes",
|
||||||
|
|||||||
@@ -210,7 +210,7 @@
|
|||||||
"paywall.choose": "Valitse",
|
"paywall.choose": "Valitse",
|
||||||
"paywall.fairUse": "Kohtuukäytön AI-skannauskiintiö sisältyy.",
|
"paywall.fairUse": "Kohtuukäytön AI-skannauskiintiö sisältyy.",
|
||||||
"paywall.family": "Family · enintään 6 henkilöä",
|
"paywall.family": "Family · enintään 6 henkilöä",
|
||||||
"paywall.freeNote": "Ilmainen: 10 AI-skannausta/kk, manuaalinen varasto, tallennetut reseptit ja helppo kirjaus.",
|
"paywall.freeNote": "Ilmainen: 5 AI-skannausta/kk, manuaalinen varasto, tallennetut reseptit ja helppo kirjaus.",
|
||||||
"paywall.household": "Household · enintään 3 henkilöä",
|
"paywall.household": "Household · enintään 3 henkilöä",
|
||||||
"paywall.large": "Large Household · enintään 12 henkilöä",
|
"paywall.large": "Large Household · enintään 12 henkilöä",
|
||||||
"paywall.perMonth": "{price}/kk",
|
"paywall.perMonth": "{price}/kk",
|
||||||
|
|||||||
@@ -210,7 +210,7 @@
|
|||||||
"paywall.choose": "Choisir",
|
"paywall.choose": "Choisir",
|
||||||
"paywall.fairUse": "Quota d'usage raisonnable de scans IA inclus.",
|
"paywall.fairUse": "Quota d'usage raisonnable de scans IA inclus.",
|
||||||
"paywall.family": "Family · jusqu'à 6 personnes",
|
"paywall.family": "Family · jusqu'à 6 personnes",
|
||||||
"paywall.freeNote": "Gratuit : 10 scans IA/mois, stock manuel, recettes enregistrées et suivi simple.",
|
"paywall.freeNote": "Gratuit : 5 scans IA/mois, stock manuel, recettes enregistrées et suivi simple.",
|
||||||
"paywall.household": "Household · jusqu'à 3 personnes",
|
"paywall.household": "Household · jusqu'à 3 personnes",
|
||||||
"paywall.large": "Large Household · jusqu'à 12 personnes",
|
"paywall.large": "Large Household · jusqu'à 12 personnes",
|
||||||
"paywall.perMonth": "{price}/mois",
|
"paywall.perMonth": "{price}/mois",
|
||||||
|
|||||||
@@ -210,7 +210,7 @@
|
|||||||
"paywall.choose": "Scegli",
|
"paywall.choose": "Scegli",
|
||||||
"paywall.fairUse": "Quota fair use di scansioni IA inclusa.",
|
"paywall.fairUse": "Quota fair use di scansioni IA inclusa.",
|
||||||
"paywall.family": "Family · fino a 6 persone",
|
"paywall.family": "Family · fino a 6 persone",
|
||||||
"paywall.freeNote": "Gratis: 10 scansioni IA/mese, dispensa manuale, ricette salvate e registrazione semplice.",
|
"paywall.freeNote": "Gratis: 5 scansioni IA/mese, dispensa manuale, ricette salvate e registrazione semplice.",
|
||||||
"paywall.household": "Household · fino a 3 persone",
|
"paywall.household": "Household · fino a 3 persone",
|
||||||
"paywall.large": "Large Household · fino a 12 persone",
|
"paywall.large": "Large Household · fino a 12 persone",
|
||||||
"paywall.perMonth": "{price}/mese",
|
"paywall.perMonth": "{price}/mese",
|
||||||
|
|||||||
@@ -210,7 +210,7 @@
|
|||||||
"paywall.choose": "Velg",
|
"paywall.choose": "Velg",
|
||||||
"paywall.fairUse": "Fair use-kvote for AI-skanninger inkludert.",
|
"paywall.fairUse": "Fair use-kvote for AI-skanninger inkludert.",
|
||||||
"paywall.family": "Family · opptil 6 personer",
|
"paywall.family": "Family · opptil 6 personer",
|
||||||
"paywall.freeNote": "Gratis: 10 AI-skanninger/mnd., manuelt lager, lagrede oppskrifter og enkel loggføring.",
|
"paywall.freeNote": "Gratis: 5 AI-skanninger/mnd., manuelt lager, lagrede oppskrifter og enkel loggføring.",
|
||||||
"paywall.household": "Household · opptil 3 personer",
|
"paywall.household": "Household · opptil 3 personer",
|
||||||
"paywall.large": "Large Household · opptil 12 personer",
|
"paywall.large": "Large Household · opptil 12 personer",
|
||||||
"paywall.perMonth": "{price}/mnd.",
|
"paywall.perMonth": "{price}/mnd.",
|
||||||
|
|||||||
@@ -210,7 +210,7 @@
|
|||||||
"paywall.choose": "Kies",
|
"paywall.choose": "Kies",
|
||||||
"paywall.fairUse": "Fair-use quotum voor AI-scans inbegrepen.",
|
"paywall.fairUse": "Fair-use quotum voor AI-scans inbegrepen.",
|
||||||
"paywall.family": "Family · tot 6 personen",
|
"paywall.family": "Family · tot 6 personen",
|
||||||
"paywall.freeNote": "Gratis: 10 AI-scans/maand, handmatige voorraad, opgeslagen recepten en eenvoudig registreren.",
|
"paywall.freeNote": "Gratis: 5 AI-scans/maand, handmatige voorraad, opgeslagen recepten en eenvoudig registreren.",
|
||||||
"paywall.household": "Household · tot 3 personen",
|
"paywall.household": "Household · tot 3 personen",
|
||||||
"paywall.large": "Large Household · tot 12 personen",
|
"paywall.large": "Large Household · tot 12 personen",
|
||||||
"paywall.perMonth": "{price}/maand",
|
"paywall.perMonth": "{price}/maand",
|
||||||
|
|||||||
@@ -216,7 +216,7 @@
|
|||||||
"paywall.choose": "Wybierz",
|
"paywall.choose": "Wybierz",
|
||||||
"paywall.fairUse": "Limit fair use skanów AI w cenie.",
|
"paywall.fairUse": "Limit fair use skanów AI w cenie.",
|
||||||
"paywall.family": "Family · do 6 osób",
|
"paywall.family": "Family · do 6 osób",
|
||||||
"paywall.freeNote": "Za darmo: 10 skanów AI/mies., ręczna spiżarnia, zapisane przepisy i proste rejestrowanie.",
|
"paywall.freeNote": "Za darmo: 5 skanów AI/mies., ręczna spiżarnia, zapisane przepisy i proste rejestrowanie.",
|
||||||
"paywall.household": "Household · do 3 osób",
|
"paywall.household": "Household · do 3 osób",
|
||||||
"paywall.large": "Large Household · do 12 osób",
|
"paywall.large": "Large Household · do 12 osób",
|
||||||
"paywall.perMonth": "{price}/mies.",
|
"paywall.perMonth": "{price}/mies.",
|
||||||
|
|||||||
@@ -210,7 +210,7 @@
|
|||||||
"paywall.choose": "Escolher",
|
"paywall.choose": "Escolher",
|
||||||
"paywall.fairUse": "Quota de utilização justa de análises de IA incluída.",
|
"paywall.fairUse": "Quota de utilização justa de análises de IA incluída.",
|
||||||
"paywall.family": "Family · até 6 pessoas",
|
"paywall.family": "Family · até 6 pessoas",
|
||||||
"paywall.freeNote": "Grátis: 10 análises de IA/mês, despensa manual, receitas guardadas e registo simples.",
|
"paywall.freeNote": "Grátis: 5 análises de IA/mês, despensa manual, receitas guardadas e registo simples.",
|
||||||
"paywall.household": "Household · até 3 pessoas",
|
"paywall.household": "Household · até 3 pessoas",
|
||||||
"paywall.large": "Large Household · até 12 pessoas",
|
"paywall.large": "Large Household · até 12 pessoas",
|
||||||
"paywall.perMonth": "{price}/mês",
|
"paywall.perMonth": "{price}/mês",
|
||||||
|
|||||||
@@ -218,7 +218,7 @@
|
|||||||
"paywall.choose": "Välj",
|
"paywall.choose": "Välj",
|
||||||
"paywall.fairUse": "Fair use-kvot för AI-skanningar ingår.",
|
"paywall.fairUse": "Fair use-kvot för AI-skanningar ingår.",
|
||||||
"paywall.family": "Family · upp till 6 personer",
|
"paywall.family": "Family · upp till 6 personer",
|
||||||
"paywall.freeNote": "Gratis: 10 AI-skanningar/mån, manuellt lager, sparade recept och enkel loggning.",
|
"paywall.freeNote": "Gratis: 5 AI-skanningar/mån, manuellt lager, sparade recept och enkel loggning.",
|
||||||
"paywall.household": "Household · upp till 3 personer",
|
"paywall.household": "Household · upp till 3 personer",
|
||||||
"paywall.large": "Large Household · upp till 12 personer",
|
"paywall.large": "Large Household · upp till 12 personer",
|
||||||
"paywall.perMonth": "{price}/mån",
|
"paywall.perMonth": "{price}/mån",
|
||||||
|
|||||||
@@ -47,7 +47,7 @@ och tolkar men hittar aldrig på – vilket gör produkten trovärdig nog för a
|
|||||||
|
|
||||||
Prenumeration via App Store/Google Play: **Household 79 kr**, **Family 129 kr**,
|
Prenumeration via App Store/Google Play: **Household 79 kr**, **Family 129 kr**,
|
||||||
**Large Household 169 kr** per månad, 14 dagars fri provperiod utan kort, användbar
|
**Large Household 169 kr** per månad, 14 dagars fri provperiod utan kort, användbar
|
||||||
gratisnivå (10 AI-skanningar/mån) som behåller användare i tratten.
|
gratisnivå (5 AI-skanningar/mån) som behåller användare i tratten.
|
||||||
|
|
||||||
Ett genomsnittligt svenskt barnhushåll slänger mat för tusenlappar per år och lägger
|
Ett genomsnittligt svenskt barnhushåll slänger mat för tusenlappar per år och lägger
|
||||||
10 000+ kr/månad på mat – en app som synligt sänker svinnet och svarar på vardagens
|
10 000+ kr/månad på mat – en app som synligt sänker svinnet och svarar på vardagens
|
||||||
|
|||||||
@@ -49,7 +49,7 @@ systemet är medvetet flaggat AV vid lansering – det är rätt beslut och ska
|
|||||||
värden: tid (planering + "vad ska vi äta?" löst), pengar (svinnvärde i kronor visas i
|
värden: tid (planering + "vad ska vi äta?" löst), pengar (svinnvärde i kronor visas i
|
||||||
appen – "du har räddat mat för 214 kr i månaden") och hälsa (mål utan loggningsjobb).
|
appen – "du har räddat mat för 214 kr i månaden") och hälsa (mål utan loggningsjobb).
|
||||||
Kritisk sanning: gratisnivån måste vara bra nog att bygga vanan men inte så bra att
|
Kritisk sanning: gratisnivån måste vara bra nog att bygga vanan men inte så bra att
|
||||||
uppgraderingen känns onödig – 10 AI-skanningar/mån + manuellt lager + full receptbank är
|
uppgraderingen känns onödig – 5 AI-skanningar/mån + manuellt lager + full receptbank är
|
||||||
den balansen. Priset testas i beta med prisexperiment innan låsning.
|
den balansen. Priset testas i beta med prisexperiment innan låsning.
|
||||||
|
|
||||||
## Retention
|
## Retention
|
||||||
|
|||||||
@@ -39,12 +39,12 @@ växelkurs 10,50 SEK/USD (A4).
|
|||||||
|
|
||||||
| Profil | Antagande om användning | AI-kostnad/mån |
|
| Profil | Antagande om användning | AI-kostnad/mån |
|
||||||
| --------------------------- | ----------------------------------------- | ----------------------------------------------- |
|
| --------------------------- | ----------------------------------------- | ----------------------------------------------- |
|
||||||
| Gratis | 10 skanningar (kvottak) | $0,10 ≈ 1,1 kr |
|
| Gratis | 5 skanningar (kvottak) | $0,10 ≈ 1,1 kr |
|
||||||
| Household (aktivt) | 60 skanningar + 4 planer + nattligt minne | $0,76 ≈ 8 kr |
|
| Household (aktivt) | 60 skanningar + 4 planer + nattligt minne | $0,76 ≈ 8 kr |
|
||||||
| Family (aktivt) | 100 skanningar + 4 planer + minne | $1,17 ≈ 12 kr |
|
| Family (aktivt) | 100 skanningar + 4 planer + minne | $1,17 ≈ 12 kr |
|
||||||
| Family (maxar fair use 600) | värsta fallet | $6,66 ≈ 70 kr — fortfarande under 129 kr-priset |
|
| Family (maxar fair use 600) | värsta fallet | $6,66 ≈ 70 kr — fortfarande under 129 kr-priset |
|
||||||
|
|
||||||
Fair use-taken (100/200/400, gratis 10) gör att ingen enskild användare kan bli
|
Fair use-taken (100/200/400, gratis 5) gör att ingen enskild användare kan bli
|
||||||
förlustaffär ens i värsta fallet.
|
förlustaffär ens i värsta fallet.
|
||||||
|
|
||||||
## Total kostnad per skala
|
## Total kostnad per skala
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
# Del 13 – Subscriptions
|
# Del 13 – Subscriptions
|
||||||
|
|
||||||
Planer (spec §45): Household 79 kr (3 pers), Family 129 kr (6), Large Household 169 kr (12).
|
Planer (spec §45): Household 79 kr (3 pers), Family 129 kr (6), Large Household 169 kr (12).
|
||||||
Fair use-kvoter för AI: 100/200/400 skanningar/mån. Gratis: 10. Trial: 14 dagar full
|
Fair use-kvoter för AI: 100/200/400 skanningar/mån. Gratis: 5. Trial: 14 dagar full
|
||||||
tillgång (Family-nivå) utan kort, startar vid registrering (spec §46).
|
tillgång (Family-nivå) utan kort, startar vid registrering (spec §46).
|
||||||
|
|
||||||
## Arkitekturprincip
|
## Arkitekturprincip
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ utifrån det ni faktiskt har hemma, vad som bör användas snart och vad ni gill
|
|||||||
• Kalorier och näring beräknas alltid deterministiskt – AI:n gissar aldrig siffror
|
• Kalorier och näring beräknas alltid deterministiskt – AI:n gissar aldrig siffror
|
||||||
• Full insyn: "Vad {NAMN} vet om mig" går att rätta, pausa och radera
|
• Full insyn: "Vad {NAMN} vet om mig" går att rätta, pausa och radera
|
||||||
|
|
||||||
Gratis: 10 AI-skanningar/månad, manuellt lager, sparade recept och enkel loggning.
|
Gratis: 5 AI-skanningar/månad, manuellt lager, sparade recept och enkel loggning.
|
||||||
Premium (14 dagar gratis, inget kort): obegränsat lager, veckoplan, delning och
|
Premium (14 dagar gratis, inget kort): obegränsat lager, veckoplan, delning och
|
||||||
fler AI-skanningar.
|
fler AI-skanningar.
|
||||||
|
|
||||||
@@ -57,7 +57,7 @@ what you like.
|
|||||||
• Calories and nutrition are always computed deterministically – AI never invents numbers
|
• Calories and nutrition are always computed deterministically – AI never invents numbers
|
||||||
• Full transparency: "What {NAME} knows about me" can be corrected, paused and deleted
|
• Full transparency: "What {NAME} knows about me" can be corrected, paused and deleted
|
||||||
|
|
||||||
Free: 10 AI scans/month, manual inventory, saved recipes and simple logging.
|
Free: 5 AI scans/month, manual inventory, saved recipes and simple logging.
|
||||||
Premium (14-day free trial, no card): unlimited inventory, week planning, sharing
|
Premium (14-day free trial, no card): unlimited inventory, week planning, sharing
|
||||||
and more AI scans.
|
and more AI scans.
|
||||||
|
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ export const PLAN_DEFINITIONS: Record<SubscriptionPlan, PlanDefinition> = {
|
|||||||
priceMinorPerMonth: 0,
|
priceMinorPerMonth: 0,
|
||||||
currency: "SEK",
|
currency: "SEK",
|
||||||
maxHouseholdMembers: 1,
|
maxHouseholdMembers: 1,
|
||||||
aiScansPerMonth: 10,
|
aiScansPerMonth: 5,
|
||||||
weekPlanning: false,
|
weekPlanning: false,
|
||||||
advancedNutrition: false,
|
advancedNutrition: false,
|
||||||
communityPublish: false,
|
communityPublish: false,
|
||||||
|
|||||||
@@ -59,12 +59,12 @@ describe("entitlements (spec §45–47)", () => {
|
|||||||
expect(ent.status).toBe("trial");
|
expect(ent.status).toBe("trial");
|
||||||
expect(ent.weekPlanning).toBe(true);
|
expect(ent.weekPlanning).toBe(true);
|
||||||
});
|
});
|
||||||
it("free tier: 10 skanningar och användbar grund (spec §46)", () => {
|
it("free tier: 5 skanningar och användbar grund (spec §46)", () => {
|
||||||
const ent = computeEntitlements(null, null, { aiScansUsedThisMonth: 9 }, NOW);
|
const ent = computeEntitlements(null, null, { aiScansUsedThisMonth: 4 }, NOW);
|
||||||
expect(ent.plan).toBe("free");
|
expect(ent.plan).toBe("free");
|
||||||
expect(ent.aiScansPerMonth).toBe(10);
|
expect(ent.aiScansPerMonth).toBe(5);
|
||||||
expect(canUseAiScan(ent)).toBe(true);
|
expect(canUseAiScan(ent)).toBe(true);
|
||||||
expect(canUseAiScan({ ...ent, aiScansUsedThisMonth: 10 })).toBe(false);
|
expect(canUseAiScan({ ...ent, aiScansUsedThisMonth: 5 })).toBe(false);
|
||||||
});
|
});
|
||||||
it("mappar productId → plan (härlett ur brand-konfig, aldrig hårdkodat)", () => {
|
it("mappar productId → plan (härlett ur brand-konfig, aldrig hårdkodat)", () => {
|
||||||
expect(resolvePlanFromProductId(PLAN_DEFINITIONS.family.appleProductId)).toBe("family");
|
expect(resolvePlanFromProductId(PLAN_DEFINITIONS.family.appleProductId)).toBe("family");
|
||||||
|
|||||||
Reference in New Issue
Block a user