Skip to content

Add Pro/Agency monetization layer#2

Open
hellokariburt wants to merge 9 commits intomainfrom
feat/powered-by-link
Open

Add Pro/Agency monetization layer#2
hellokariburt wants to merge 9 commits intomainfrom
feat/powered-by-link

Conversation

@hellokariburt
Copy link
Copy Markdown
Owner

Summary

  • Stripe checkout + webhook with automatic license key generation
  • Supabase license table integration (Pro + Agency plans)
  • Resend transactional email delivers license key after payment
  • Key validation API with domain allowlist support for Agency
  • Pro languages (44 languages) gated behind project key, lazy-loaded on demand
  • Core bundle stays ~5kb gzipped; Pro translations load from separate JSON asset
  • Branding removal and language unlock on valid Pro/Agency key
  • /upgrade, /upgrade/success, /pricing, /privacy pages
  • SiteFooter component with nav links
  • Docs updated: data-lang, data-google-consent, accurate language and blocking copy

Before merging

  • Create Supabase licenses table
  • Create Stripe products (Pro $9/mo, Agency $29/mo)
  • Add all env vars to Vercel production: RESEND_API_KEY, SUPABASE_URL, SUPABASE_SERVICE_ROLE_KEY, STRIPE_SECRET_KEY, STRIPE_WEBHOOK_SECRET, STRIPE_PRO_PRICE_ID, STRIPE_AGENCY_PRICE_ID, NEXT_PUBLIC_BASE_URL
  • Update Stripe webhook endpoint to production URL
  • Verify Resend domain for safebanner.com

Test plan

  • Test checkout flow end-to-end on preview branch (use Stripe test card 4242 4242 4242 4242)
  • Confirm license key email arrives after payment
  • Confirm key validation removes branding on banner
  • Confirm Pro language loads correctly with valid key

🤖 Generated with Claude Code

hellokariburt and others added 8 commits March 27, 2026 03:23
- Stripe checkout + webhook with license key generation
- Supabase license table integration via licenses.ts
- Resend transactional email delivers key after payment
- Key validation API with domain allowlist support for Agency
- Pro languages (ES/IT/NL/PT) gated behind project key in script
- Async license validation with 24hr localStorage cache
- Branding removal on valid Pro/Agency key
- /upgrade and /upgrade/success pages
- /pricing and /privacy pages
- SiteFooter component with nav links
- Docs updated: data-lang, data-google-consent, honest blocking copy
- .env.example updated with all required vars

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Rebuild safebanner.js with Pro language gating, key validation, and branding removal
- Add vercel.json to set rootDirectory to apps/web (fixes deploy detection)
- Update bundle size claim to ~5kb across README and homepage

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Split Pro languages into safebanner-pro-translations.json
- Script fetches Pro translations on demand (only when key is valid + Pro lang requested)
- Core bundle back to ~5kb gzipped
- Docs updated to reflect lazy-load behavior and accurate language copy

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@vercel
Copy link
Copy Markdown

vercel bot commented Mar 27, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
safe-banner-web Ready Ready Preview, Comment Mar 29, 2026 4:29pm

  Pro billing, new features, updated copy
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant