feat: dashboard Second Brain, essai 7 jours et vérification e-mail
All checks were successful
CI / Lint, Unit Tests & Build (push) Successful in 7m14s
CI / Deploy production (on server) (push) Successful in 1m25s

Rendre le dashboard actionnable (inbox, peek, carte mentale), aligner la facturation sur l’essai 7 jours, et bloquer le login e-mail tant que l’adresse n’est pas confirmée.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Antigravity
2026-08-30 07:19:36 +00:00
parent 69c99e4f4f
commit 80ccc1f6de
95 changed files with 4158 additions and 618 deletions

View File

@@ -38,7 +38,24 @@
"privacyTerms": "© 2025 Memento Labs — 개인정보 · 약관",
"sessionExpired": "사이트가 탐색 및 목차와 함께 생성됩니다",
"welcomeBack": "다시 오신 것을 환영합니다",
"welcomeBackSubtitle": "노트에 액세스하려면 자격 증명을 입력하세요."
"welcomeBackSubtitle": "노트에 액세스하려면 자격 증명을 입력하세요.",
"checkEmailTitle": "이메일을 확인하세요",
"checkEmailDescription": "{email}(으)로 확인 링크를 보냈습니다. 로그인하기 전에 열어 계정을 활성화하세요.",
"checkEmailDescriptionGeneric": "확인 링크를 이메일로 보냈습니다. 로그인하기 전에 열어 계정을 활성화하세요.",
"resendVerification": "확인 이메일 다시 보내기",
"verifyResent": "확인 이메일을 보냈습니다. 받은편지함을 확인하세요.",
"verifyResendFailed": "확인 이메일을 보낼 수 없습니다. 나중에 다시 시도하세요.",
"verifyMissingEmail": "이메일 주소를 입력하세요.",
"verifyLoading": "이메일을 확인하는 중…",
"verifySuccessTitle": "이메일 확인 완료",
"verifySuccessDescription": "계정이 준비되었습니다. 이제 로그인할 수 있습니다.",
"verifyExpiredTitle": "링크 만료",
"verifyExpiredDescription": "이 확인 링크는 만료되었습니다. 새 링크를 요청하세요.",
"verifyInvalidTitle": "유효하지 않은 링크",
"verifyInvalidDescription": "이 확인 링크는 유효하지 않거나 이미 사용되었습니다.",
"emailNotVerified": "로그인하기 전에 이메일을 확인하세요.",
"emailVerifiedBanner": "이메일이 확인되었습니다. 이제 로그인할 수 있습니다.",
"invalidCredentials": "이메일 또는 비밀번호가 올바르지 않습니다."
},
"sidebar": {
"notes": "노트",
@@ -1580,7 +1597,58 @@
"STRIPE_PRICE_CREDITS_S": "Pack S — 100 credits (price ID)",
"STRIPE_PRICE_CREDITS_M": "Pack M — 500 credits (price ID)",
"STRIPE_PRICE_CREDITS_L": "Pack L — 2,000 credits (price ID)",
"packsCatalogTitle": "Pack catalogue (code)"
"packsCatalogTitle": "Pack catalogue (code)",
"healthTitle": "Stripe health check",
"healthDescription": "Runtime status of keys, webhooks, price IDs and billing flag (secrets are never shown).",
"healthSecret": "Secret key (server)",
"healthPublishable": "Publishable key",
"healthWebhook": "Webhook secret",
"healthBillingFlag": "Billing enabled",
"healthTrial": "Free trial",
"trialDaysValue": "{days} days on first checkout",
"modeTest": "Test mode (sk_test_…)",
"modeLive": "Live mode (sk_live_…)",
"modePlaceholder": "Placeholder / invalid key",
"modeMissing": "Not configured",
"configured": "Configured",
"missing": "Missing",
"enabled": "Enabled",
"disabled": "Disabled",
"priceStatusTitle": "Price IDs vs Stripe",
"colKey": "Plan",
"colPriceId": "Price ID",
"colSource": "Source",
"colStripe": "Stripe amount",
"priceError": "Lookup failed",
"inactive": "inactive",
"notChecked": "Not checked (no Stripe key)",
"subsTitle": "Subscriptions overview",
"subsDescription": "Counts from the local database (synced via Stripe webhooks).",
"statPaid": "Active + trial",
"statTrialing": "On trial",
"statPastDue": "Past due",
"statCanceling": "Cancel at period end",
"byTier": "By tier",
"byStatus": "By status",
"usersWithoutSub": "Users with no Subscription row",
"noSubs": "No subscriptions yet",
"recentSubs": "Recent paid / trial accounts",
"colUser": "User",
"colTier": "Tier",
"colStatus": "Status",
"colPeriod": "Period / trial end",
"canceling": "canceling",
"manualTier": "manual (no Stripe sub)",
"trialUntil": "Trial until {date}",
"testGuideTitle": "How to test Stripe locally",
"testGuideDescription": "Checklist to validate checkout, webhooks and trial.",
"testStep1": "Stripe Dashboard → Test mode ON. Create Pro/Business products + monthly/annual prices + credit packs.",
"testStep2": "Put sk_test_…, pk_test_… in .env. Put price_… IDs in Admin → Billing (or env) and enable billing.",
"testStep3": "Copy the whsec_… into STRIPE_WEBHOOK_SECRET and restart the app.",
"testStep4": "npm run dev → open /settings/billing as a BASIC user.",
"testStep5": "Start Pro checkout. Card: 4242 4242 4242 4242, any future expiry, any CVC. Expect a 7-day trial.",
"testStep6": "Confirm Admin → Billing shows TRIALING, and /settings/billing shows the trial end date.",
"testCardHint": "Other cards: 4000000000009995 = payment fails · 4000002500003155 = 3D Secure. Never use real cards in test mode."
}
},
"about": {
@@ -3113,7 +3181,11 @@
"packLName": "파워 팩",
"buyPack": "구매",
"packCheckoutSuccess": "크레딧 팩이 잔액에 추가되었습니다!",
"packCheckoutFailed": "구매를 시작할 수 없습니다. Stripe 설정을 확인하거나 다시 시도하세요."
"packCheckoutFailed": "구매를 시작할 수 없습니다. Stripe 설정을 확인하거나 다시 시도하세요.",
"startTrialCta": "{days}일 무료로 시작",
"trialFeature": "{days}일 무료 체험 (카드 등록 필요)",
"trialEndsOn": "무료 체험이 {date}에 종료됩니다. 이후 자동으로 결제됩니다.",
"trialEndsLabel": "체험 종료"
},
"landing": {
"nav": {
@@ -3295,7 +3367,16 @@
"feature4": "전담 지원",
"feature5": "라이브 온보딩"
},
"basicPrice": "무료"
"basicPrice": "무료",
"savePercent": "약 17% 절약",
"proMonthly": "€9.90",
"proAnnualMonthly": "€8.25",
"businessMonthly": "€29.90",
"businessAnnualMonthly": "€24.92",
"enterprisePrice": "맞춤 견적",
"trialBadge": "{days}일 무료 체험",
"trialFeature": "{days}일 무료 체험 (카드 등록 필요)",
"trialCta": "{days}일 무료로 시작"
},
"cta": {
"title": "최고의 아이디어를 잃는 일을 멈추세요.",