@digilogiclabs/create-saas-app 2.11.0 → 2.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +6 -0
- package/dist/.tsbuildinfo +1 -1
- package/dist/cli/index.js +1 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/generators/template-generator.d.ts.map +1 -1
- package/dist/generators/template-generator.js +15 -8
- package/dist/generators/template-generator.js.map +1 -1
- package/dist/templates/shared/admin/web/src/components/admin-nav.tsx +3 -3
- package/dist/templates/shared/auth/supabase/web/src/lib/auth-session.ts +36 -16
- package/dist/templates/shared/auth/supabase/web/src/middleware.ts +6 -0
- package/dist/templates/shared/cookie-consent/web/components/cookie-consent.tsx +5 -5
- package/dist/templates/shared/design/web/src/components/ui/button.tsx +56 -0
- package/dist/templates/shared/email/web/src/lib/email/client.ts +1 -1
- package/dist/templates/shared/error-pages/web/src/app/error.tsx +13 -11
- package/dist/templates/shared/error-pages/web/src/app/global-error.tsx +2 -0
- package/dist/templates/shared/error-pages/web/src/app/not-found.tsx +6 -6
- package/dist/templates/shared/legal/web/src/app/(legal)/privacy/page.tsx +4 -4
- package/dist/templates/shared/legal/web/src/app/(legal)/terms/page.tsx +4 -4
- package/dist/templates/shared/loading/web/components/skeleton.tsx +4 -4
- package/dist/templates/shared/mock/web/.env.local +55 -0
- package/dist/templates/shared/mock/web/src/components/mock-auth-provider.tsx +72 -0
- package/dist/templates/shared/mock/web/src/components/mock-banner.tsx +29 -0
- package/dist/templates/shared/mock/web/src/lib/mock.ts +147 -0
- package/dist/templates/shared/payments/web/src/app/api/webhooks/stripe/route.ts +10 -4
- package/dist/templates/shared/redis/web/src/lib/redis.ts +1 -1
- package/dist/templates/web/base/template/eslint.config.mjs +14 -0
- package/dist/templates/web/base/template/src/app/auth/callback/route.ts +1 -1
- package/dist/templates/web/base/template/src/app/checkout/page.tsx +76 -103
- package/dist/templates/web/base/template/src/app/dashboard/page.tsx +145 -329
- package/dist/templates/web/base/template/src/app/layout.tsx +40 -38
- package/dist/templates/web/base/template/src/app/login/page.tsx +116 -66
- package/dist/templates/web/base/template/src/app/page.tsx +97 -193
- package/dist/templates/web/base/template/src/app/settings/page.tsx +154 -0
- package/dist/templates/web/base/template/src/app/signup/page.tsx +117 -66
- package/dist/templates/web/base/template/src/components/providers/app-providers.tsx +8 -3
- package/dist/templates/web/base/template/src/components/shared/header.tsx +229 -63
- package/dist/templates/web/ui-auth/template/eslint.config.mjs +14 -0
- package/dist/templates/web/ui-auth/template/src/app/checkout/page.tsx +3 -3
- package/dist/templates/web/ui-auth/template/src/app/dev-setup/page.tsx +81 -91
- package/dist/templates/web/ui-auth/template/src/app/layout.tsx +38 -36
- package/dist/templates/web/ui-auth/template/src/app/login/page.tsx +22 -45
- package/dist/templates/web/ui-auth/template/src/app/page.tsx +106 -306
- package/dist/templates/web/ui-auth/template/src/app/setup/page.tsx +387 -402
- package/dist/templates/web/ui-auth/template/src/app/signup/page.tsx +24 -47
- package/dist/templates/web/ui-auth/template/src/components/providers/app-providers.tsx +8 -3
- package/dist/templates/web/ui-auth/template/src/components/shared/header.tsx +229 -94
- package/dist/templates/web/ui-auth-ai/template/src/app/layout.tsx +38 -45
- package/dist/templates/web/ui-auth-ai/template/src/app/login/page.tsx +86 -0
- package/dist/templates/web/ui-auth-ai/template/src/app/page.tsx +107 -193
- package/dist/templates/web/ui-auth-ai/template/src/app/signup/page.tsx +105 -0
- package/dist/templates/web/ui-auth-ai/template/src/components/ai/audio-generator.tsx +144 -140
- package/dist/templates/web/ui-auth-ai/template/src/components/ai/video-generator.tsx +156 -157
- package/dist/templates/web/ui-auth-ai/template/src/components/auth/login-form.tsx +7 -3
- package/dist/templates/web/ui-auth-ai/template/src/components/providers/app-providers.tsx +25 -0
- package/dist/templates/web/ui-auth-ai/template/src/components/shared/footer.tsx +36 -0
- package/dist/templates/web/ui-auth-ai/template/src/components/shared/header.tsx +228 -0
- package/dist/templates/web/ui-auth-ai/template/src/components/ui/button.tsx +5 -5
- package/dist/templates/web/ui-auth-ai/template/src/components/ui/input.tsx +1 -1
- package/dist/templates/web/ui-auth-ai/template/src/components/ui/select.tsx +1 -1
- package/dist/templates/web/ui-auth-ai/template/src/components/ui/textarea.tsx +1 -1
- package/dist/templates/web/ui-auth-ai/template/src/components/ui/theme-toggle.tsx +34 -0
- package/dist/templates/web/ui-auth-ai/template/src/lib/supabase.ts +6 -4
- package/dist/templates/web/ui-auth-ai/template/src/providers/auth-provider.tsx +7 -5
- package/dist/templates/web/ui-auth-payments/template/src/app/billing/page.tsx +63 -192
- package/dist/templates/web/ui-auth-payments/template/src/app/checkout/page.tsx +104 -296
- package/dist/templates/web/ui-auth-payments/template/src/app/dashboard/page.tsx +27 -27
- package/dist/templates/web/ui-auth-payments/template/src/app/dev-setup/page.tsx +70 -81
- package/dist/templates/web/ui-auth-payments/template/src/app/layout.tsx +38 -36
- package/dist/templates/web/ui-auth-payments/template/src/app/login/loading.tsx +9 -9
- package/dist/templates/web/ui-auth-payments/template/src/app/login/page.tsx +4 -104
- package/dist/templates/web/ui-auth-payments/template/src/app/page.tsx +69 -337
- package/dist/templates/web/ui-auth-payments/template/src/app/setup/page.tsx +55 -68
- package/dist/templates/web/ui-auth-payments/template/src/app/signup/loading.tsx +13 -13
- package/dist/templates/web/ui-auth-payments/template/src/app/signup/page.tsx +4 -123
- package/dist/templates/web/ui-auth-payments/template/src/components/client/auth-status.tsx +37 -52
- package/dist/templates/web/ui-auth-payments/template/src/components/client/login-form.tsx +49 -103
- package/dist/templates/web/ui-auth-payments/template/src/components/client/newsletter-signup.tsx +4 -4
- package/dist/templates/web/ui-auth-payments/template/src/components/client/signup-form.tsx +60 -140
- package/dist/templates/web/ui-auth-payments/template/src/components/providers/app-providers.tsx +25 -28
- package/dist/templates/web/ui-auth-payments/template/src/components/shared/header.tsx +229 -230
- package/dist/templates/web/ui-auth-payments/template/src/lib/actions/auth.ts +245 -245
- package/dist/templates/web/ui-auth-payments/template/src/lib/actions/index.ts +339 -339
- package/dist/templates/web/ui-auth-payments-ai/template/src/app/ai/page.tsx +305 -309
- package/dist/templates/web/ui-auth-payments-ai/template/src/app/billing/page.tsx +62 -312
- package/dist/templates/web/ui-auth-payments-ai/template/src/app/checkout/page.tsx +109 -125
- package/dist/templates/web/ui-auth-payments-ai/template/src/app/dashboard/page.tsx +27 -27
- package/dist/templates/web/ui-auth-payments-ai/template/src/app/dev-setup/page.tsx +68 -83
- package/dist/templates/web/ui-auth-payments-ai/template/src/app/layout.tsx +40 -38
- package/dist/templates/web/ui-auth-payments-ai/template/src/app/onboarding/page.tsx +20 -20
- package/dist/templates/web/ui-auth-payments-ai/template/src/app/page.tsx +140 -394
- package/dist/templates/web/ui-auth-payments-ai/template/src/app/settings/page.tsx +28 -27
- package/dist/templates/web/ui-auth-payments-ai/template/src/app/setup/page.tsx +51 -66
- package/dist/templates/web/ui-auth-payments-ai/template/src/components/client/auth-status.tsx +37 -52
- package/dist/templates/web/ui-auth-payments-ai/template/src/components/client/login-form.tsx +50 -79
- package/dist/templates/web/ui-auth-payments-ai/template/src/components/client/signup-form.tsx +58 -111
- package/dist/templates/web/ui-auth-payments-ai/template/src/components/providers/app-providers.tsx +8 -3
- package/dist/templates/web/ui-auth-payments-ai/template/src/components/shared/header.tsx +229 -252
- package/dist/templates/web/ui-auth-payments-ai/template/src/lib/actions/auth.ts +245 -245
- package/dist/templates/web/ui-auth-payments-audio/template/src/app/billing/page.tsx +63 -192
- package/dist/templates/web/ui-auth-payments-audio/template/src/app/checkout/page.tsx +109 -125
- package/dist/templates/web/ui-auth-payments-audio/template/src/app/dashboard/page.tsx +27 -27
- package/dist/templates/web/ui-auth-payments-audio/template/src/app/layout.tsx +40 -38
- package/dist/templates/web/ui-auth-payments-audio/template/src/app/page.tsx +122 -385
- package/dist/templates/web/ui-auth-payments-audio/template/src/app/setup/page.tsx +340 -344
- package/dist/templates/web/ui-auth-payments-audio/template/src/components/client/auth-status.tsx +37 -52
- package/dist/templates/web/ui-auth-payments-audio/template/src/components/client/login-form.tsx +49 -103
- package/dist/templates/web/ui-auth-payments-audio/template/src/components/client/signup-form.tsx +60 -140
- package/dist/templates/web/ui-auth-payments-audio/template/src/components/providers/app-providers.tsx +8 -3
- package/dist/templates/web/ui-auth-payments-audio/template/src/components/shared/header.tsx +229 -252
- package/dist/templates/web/ui-auth-payments-audio/template/src/lib/actions/auth.ts +3 -3
- package/dist/templates/web/ui-auth-payments-video/template/src/app/billing/page.tsx +63 -192
- package/dist/templates/web/ui-auth-payments-video/template/src/app/checkout/page.tsx +109 -125
- package/dist/templates/web/ui-auth-payments-video/template/src/app/layout.tsx +38 -36
- package/dist/templates/web/ui-auth-payments-video/template/src/app/login/page.tsx +9 -109
- package/dist/templates/web/ui-auth-payments-video/template/src/app/page.tsx +132 -392
- package/dist/templates/web/ui-auth-payments-video/template/src/app/setup/page.tsx +346 -350
- package/dist/templates/web/ui-auth-payments-video/template/src/app/signup/page.tsx +9 -128
- package/dist/templates/web/ui-auth-payments-video/template/src/components/client/login-form.tsx +90 -0
- package/dist/templates/web/ui-auth-payments-video/template/src/components/client/signup-form.tsx +105 -0
- package/dist/templates/web/ui-auth-payments-video/template/src/components/providers/app-providers.tsx +8 -3
- package/dist/templates/web/ui-auth-payments-video/template/src/components/shared/header.tsx +229 -246
- package/dist/templates/web/ui-only/template/eslint.config.mjs +14 -0
- package/dist/templates/web/ui-only/template/src/app/checkout/page.tsx +2 -2
- package/dist/templates/web/ui-only/template/src/app/login/page.tsx +69 -63
- package/dist/templates/web/ui-only/template/src/app/page.tsx +69 -91
- package/dist/templates/web/ui-only/template/src/app/signup/page.tsx +94 -79
- package/dist/templates/web/ui-only/template/src/components/providers/app-providers.tsx +1 -6
- package/dist/templates/web/ui-only/template/src/components/shared/header.tsx +90 -53
- package/dist/templates/web/ui-package-test/template/package.json +19 -23
- package/dist/templates/web/ui-package-test/template/postcss.config.mjs +8 -0
- package/dist/templates/web/ui-package-test/template/src/app/globals.css +88 -0
- package/dist/templates/web/ui-package-test/template/src/app/layout.tsx +27 -0
- package/dist/templates/web/ui-package-test/template/src/app/page.tsx +46 -106
- package/package.json +1 -1
- package/src/templates/shared/admin/web/src/components/admin-nav.tsx +3 -3
- package/src/templates/shared/auth/supabase/web/src/lib/auth-session.ts +36 -16
- package/src/templates/shared/auth/supabase/web/src/middleware.ts +6 -0
- package/src/templates/shared/cookie-consent/web/components/cookie-consent.tsx +5 -5
- package/src/templates/shared/design/web/src/components/ui/button.tsx +56 -0
- package/src/templates/shared/email/web/src/lib/email/client.ts +1 -1
- package/src/templates/shared/error-pages/web/src/app/error.tsx +13 -11
- package/src/templates/shared/error-pages/web/src/app/global-error.tsx +2 -0
- package/src/templates/shared/error-pages/web/src/app/not-found.tsx +6 -6
- package/src/templates/shared/legal/web/src/app/(legal)/privacy/page.tsx +4 -4
- package/src/templates/shared/legal/web/src/app/(legal)/terms/page.tsx +4 -4
- package/src/templates/shared/loading/web/components/skeleton.tsx +4 -4
- package/src/templates/shared/mock/web/.env.local +55 -0
- package/src/templates/shared/mock/web/src/components/mock-auth-provider.tsx +72 -0
- package/src/templates/shared/mock/web/src/components/mock-banner.tsx +29 -0
- package/src/templates/shared/mock/web/src/lib/mock.ts +147 -0
- package/src/templates/shared/payments/web/src/app/api/webhooks/stripe/route.ts +10 -4
- package/src/templates/shared/redis/web/src/lib/redis.ts +1 -1
- package/src/templates/web/base/template/eslint.config.mjs +14 -0
- package/src/templates/web/base/template/src/app/auth/callback/route.ts +1 -1
- package/src/templates/web/base/template/src/app/checkout/page.tsx +76 -103
- package/src/templates/web/base/template/src/app/dashboard/page.tsx +145 -329
- package/src/templates/web/base/template/src/app/layout.tsx +40 -38
- package/src/templates/web/base/template/src/app/login/page.tsx +116 -66
- package/src/templates/web/base/template/src/app/page.tsx +97 -193
- package/src/templates/web/base/template/src/app/settings/page.tsx +154 -0
- package/src/templates/web/base/template/src/app/signup/page.tsx +117 -66
- package/src/templates/web/base/template/src/components/providers/app-providers.tsx +8 -3
- package/src/templates/web/base/template/src/components/shared/header.tsx +229 -63
- package/src/templates/web/ui-auth/template/eslint.config.mjs +14 -0
- package/src/templates/web/ui-auth/template/src/app/checkout/page.tsx +3 -3
- package/src/templates/web/ui-auth/template/src/app/dev-setup/page.tsx +81 -91
- package/src/templates/web/ui-auth/template/src/app/layout.tsx +38 -36
- package/src/templates/web/ui-auth/template/src/app/login/page.tsx +22 -45
- package/src/templates/web/ui-auth/template/src/app/page.tsx +106 -306
- package/src/templates/web/ui-auth/template/src/app/setup/page.tsx +387 -402
- package/src/templates/web/ui-auth/template/src/app/signup/page.tsx +24 -47
- package/src/templates/web/ui-auth/template/src/components/providers/app-providers.tsx +8 -3
- package/src/templates/web/ui-auth/template/src/components/shared/header.tsx +229 -94
- package/src/templates/web/ui-auth-ai/template/src/app/layout.tsx +38 -45
- package/src/templates/web/ui-auth-ai/template/src/app/login/page.tsx +86 -0
- package/src/templates/web/ui-auth-ai/template/src/app/page.tsx +107 -193
- package/src/templates/web/ui-auth-ai/template/src/app/signup/page.tsx +105 -0
- package/src/templates/web/ui-auth-ai/template/src/components/ai/audio-generator.tsx +144 -140
- package/src/templates/web/ui-auth-ai/template/src/components/ai/video-generator.tsx +156 -157
- package/src/templates/web/ui-auth-ai/template/src/components/auth/login-form.tsx +7 -3
- package/src/templates/web/ui-auth-ai/template/src/components/providers/app-providers.tsx +25 -0
- package/src/templates/web/ui-auth-ai/template/src/components/shared/footer.tsx +36 -0
- package/src/templates/web/ui-auth-ai/template/src/components/shared/header.tsx +228 -0
- package/src/templates/web/ui-auth-ai/template/src/components/ui/button.tsx +5 -5
- package/src/templates/web/ui-auth-ai/template/src/components/ui/input.tsx +1 -1
- package/src/templates/web/ui-auth-ai/template/src/components/ui/select.tsx +1 -1
- package/src/templates/web/ui-auth-ai/template/src/components/ui/textarea.tsx +1 -1
- package/src/templates/web/ui-auth-ai/template/src/components/ui/theme-toggle.tsx +34 -0
- package/src/templates/web/ui-auth-ai/template/src/lib/supabase.ts +6 -4
- package/src/templates/web/ui-auth-ai/template/src/providers/auth-provider.tsx +7 -5
- package/src/templates/web/ui-auth-payments/template/src/app/billing/page.tsx +63 -192
- package/src/templates/web/ui-auth-payments/template/src/app/checkout/page.tsx +104 -296
- package/src/templates/web/ui-auth-payments/template/src/app/dashboard/page.tsx +27 -27
- package/src/templates/web/ui-auth-payments/template/src/app/dev-setup/page.tsx +70 -81
- package/src/templates/web/ui-auth-payments/template/src/app/layout.tsx +38 -36
- package/src/templates/web/ui-auth-payments/template/src/app/login/loading.tsx +9 -9
- package/src/templates/web/ui-auth-payments/template/src/app/login/page.tsx +4 -104
- package/src/templates/web/ui-auth-payments/template/src/app/page.tsx +69 -337
- package/src/templates/web/ui-auth-payments/template/src/app/setup/page.tsx +55 -68
- package/src/templates/web/ui-auth-payments/template/src/app/signup/loading.tsx +13 -13
- package/src/templates/web/ui-auth-payments/template/src/app/signup/page.tsx +4 -123
- package/src/templates/web/ui-auth-payments/template/src/components/client/auth-status.tsx +37 -52
- package/src/templates/web/ui-auth-payments/template/src/components/client/login-form.tsx +49 -103
- package/src/templates/web/ui-auth-payments/template/src/components/client/newsletter-signup.tsx +4 -4
- package/src/templates/web/ui-auth-payments/template/src/components/client/signup-form.tsx +60 -140
- package/src/templates/web/ui-auth-payments/template/src/components/providers/app-providers.tsx +25 -28
- package/src/templates/web/ui-auth-payments/template/src/components/shared/header.tsx +229 -230
- package/src/templates/web/ui-auth-payments/template/src/lib/actions/auth.ts +245 -245
- package/src/templates/web/ui-auth-payments/template/src/lib/actions/index.ts +339 -339
- package/src/templates/web/ui-auth-payments-ai/template/src/app/ai/page.tsx +305 -309
- package/src/templates/web/ui-auth-payments-ai/template/src/app/billing/page.tsx +62 -312
- package/src/templates/web/ui-auth-payments-ai/template/src/app/checkout/page.tsx +109 -125
- package/src/templates/web/ui-auth-payments-ai/template/src/app/dashboard/page.tsx +27 -27
- package/src/templates/web/ui-auth-payments-ai/template/src/app/dev-setup/page.tsx +68 -83
- package/src/templates/web/ui-auth-payments-ai/template/src/app/layout.tsx +40 -38
- package/src/templates/web/ui-auth-payments-ai/template/src/app/onboarding/page.tsx +20 -20
- package/src/templates/web/ui-auth-payments-ai/template/src/app/page.tsx +140 -394
- package/src/templates/web/ui-auth-payments-ai/template/src/app/settings/page.tsx +28 -27
- package/src/templates/web/ui-auth-payments-ai/template/src/app/setup/page.tsx +51 -66
- package/src/templates/web/ui-auth-payments-ai/template/src/components/client/auth-status.tsx +37 -52
- package/src/templates/web/ui-auth-payments-ai/template/src/components/client/login-form.tsx +50 -79
- package/src/templates/web/ui-auth-payments-ai/template/src/components/client/signup-form.tsx +58 -111
- package/src/templates/web/ui-auth-payments-ai/template/src/components/providers/app-providers.tsx +8 -3
- package/src/templates/web/ui-auth-payments-ai/template/src/components/shared/header.tsx +229 -252
- package/src/templates/web/ui-auth-payments-ai/template/src/lib/actions/auth.ts +245 -245
- package/src/templates/web/ui-auth-payments-audio/template/src/app/billing/page.tsx +63 -192
- package/src/templates/web/ui-auth-payments-audio/template/src/app/checkout/page.tsx +109 -125
- package/src/templates/web/ui-auth-payments-audio/template/src/app/dashboard/page.tsx +27 -27
- package/src/templates/web/ui-auth-payments-audio/template/src/app/layout.tsx +40 -38
- package/src/templates/web/ui-auth-payments-audio/template/src/app/page.tsx +122 -385
- package/src/templates/web/ui-auth-payments-audio/template/src/app/setup/page.tsx +340 -344
- package/src/templates/web/ui-auth-payments-audio/template/src/components/client/auth-status.tsx +37 -52
- package/src/templates/web/ui-auth-payments-audio/template/src/components/client/login-form.tsx +49 -103
- package/src/templates/web/ui-auth-payments-audio/template/src/components/client/signup-form.tsx +60 -140
- package/src/templates/web/ui-auth-payments-audio/template/src/components/providers/app-providers.tsx +8 -3
- package/src/templates/web/ui-auth-payments-audio/template/src/components/shared/header.tsx +229 -252
- package/src/templates/web/ui-auth-payments-audio/template/src/lib/actions/auth.ts +3 -3
- package/src/templates/web/ui-auth-payments-video/template/src/app/billing/page.tsx +63 -192
- package/src/templates/web/ui-auth-payments-video/template/src/app/checkout/page.tsx +109 -125
- package/src/templates/web/ui-auth-payments-video/template/src/app/layout.tsx +38 -36
- package/src/templates/web/ui-auth-payments-video/template/src/app/login/page.tsx +9 -109
- package/src/templates/web/ui-auth-payments-video/template/src/app/page.tsx +132 -392
- package/src/templates/web/ui-auth-payments-video/template/src/app/setup/page.tsx +346 -350
- package/src/templates/web/ui-auth-payments-video/template/src/app/signup/page.tsx +9 -128
- package/src/templates/web/ui-auth-payments-video/template/src/components/client/login-form.tsx +90 -0
- package/src/templates/web/ui-auth-payments-video/template/src/components/client/signup-form.tsx +105 -0
- package/src/templates/web/ui-auth-payments-video/template/src/components/providers/app-providers.tsx +8 -3
- package/src/templates/web/ui-auth-payments-video/template/src/components/shared/header.tsx +229 -246
- package/src/templates/web/ui-only/template/eslint.config.mjs +14 -0
- package/src/templates/web/ui-only/template/src/app/checkout/page.tsx +2 -2
- package/src/templates/web/ui-only/template/src/app/login/page.tsx +69 -63
- package/src/templates/web/ui-only/template/src/app/page.tsx +69 -91
- package/src/templates/web/ui-only/template/src/app/signup/page.tsx +94 -79
- package/src/templates/web/ui-only/template/src/components/providers/app-providers.tsx +1 -6
- package/src/templates/web/ui-only/template/src/components/shared/header.tsx +90 -53
- package/src/templates/web/ui-package-test/template/package.json +19 -23
- package/src/templates/web/ui-package-test/template/postcss.config.mjs +8 -0
- package/src/templates/web/ui-package-test/template/src/app/globals.css +88 -0
- package/src/templates/web/ui-package-test/template/src/app/layout.tsx +27 -0
- package/src/templates/web/ui-package-test/template/src/app/page.tsx +46 -106
- package/dist/templates/mobile/ui-auth-payments-ai-rag/template/README.md +0 -655
- package/dist/templates/mobile/ui-auth-payments-ai-rag/template/app/(tabs)/ai.tsx +0 -683
- package/dist/templates/mobile/ui-auth-payments-ai-rag/template/app/_layout.tsx +0 -124
- package/dist/templates/mobile/ui-auth-payments-ai-rag/template/app.json +0 -74
- package/dist/templates/mobile/ui-auth-payments-ai-rag/template/babel.config.js +0 -25
- package/dist/templates/mobile/ui-auth-payments-ai-rag/template/docs/MOBILE-SETUP.md +0 -787
- package/dist/templates/mobile/ui-auth-payments-ai-rag/template/eas.json +0 -25
- package/dist/templates/mobile/ui-auth-payments-ai-rag/template/expo-env.d.ts +0 -3
- package/dist/templates/mobile/ui-auth-payments-ai-rag/template/hooks/useRAGSystem.ts +0 -346
- package/dist/templates/mobile/ui-auth-payments-ai-rag/template/jest-setup.ts +0 -37
- package/dist/templates/mobile/ui-auth-payments-ai-rag/template/lib/rag/config.ts +0 -180
- package/dist/templates/mobile/ui-auth-payments-ai-rag/template/metro.config.js +0 -11
- package/dist/templates/mobile/ui-auth-payments-ai-rag/template/package.json +0 -122
- package/dist/templates/mobile/ui-auth-payments-ai-rag/template/scripts/setup-rag.js +0 -599
- package/dist/templates/mobile/ui-auth-payments-ai-rag/template/tsconfig.json +0 -32
- package/dist/templates/web/base/template/.eslintrc.js +0 -8
- package/dist/templates/web/base/template/src/components/__tests__/example.test.tsx +0 -49
- package/dist/templates/web/base/template/src/test/setup.ts +0 -74
- package/dist/templates/web/base/template/vitest.config.ts +0 -17
- package/dist/templates/web/ui-auth/template/.eslintrc.js +0 -8
- package/dist/templates/web/ui-auth/template/src/components/__tests__/example.test.tsx +0 -49
- package/dist/templates/web/ui-auth/template/src/test/setup.ts +0 -74
- package/dist/templates/web/ui-auth/template/vitest.config.ts +0 -17
- package/dist/templates/web/ui-auth-payments/template/src/components/__tests__/example.test.tsx +0 -49
- package/dist/templates/web/ui-auth-payments/template/src/test/setup.ts +0 -74
- package/dist/templates/web/ui-auth-payments/template/vitest.config.ts +0 -17
- package/dist/templates/web/ui-auth-payments-ai/template/src/components/__tests__/example.test.tsx +0 -49
- package/dist/templates/web/ui-auth-payments-ai/template/src/test/setup.ts +0 -74
- package/dist/templates/web/ui-auth-payments-ai/template/vitest.config.ts +0 -17
- package/dist/templates/web/ui-auth-payments-ai-rag/template/README.md +0 -434
- package/dist/templates/web/ui-auth-payments-ai-rag/template/components/rag/KnowledgeManager.tsx +0 -642
- package/dist/templates/web/ui-auth-payments-ai-rag/template/components/rag/RAGAnalytics.tsx +0 -466
- package/dist/templates/web/ui-auth-payments-ai-rag/template/components/rag/RAGChatInterface.tsx +0 -393
- package/dist/templates/web/ui-auth-payments-ai-rag/template/docs/GETTING-STARTED.md +0 -457
- package/dist/templates/web/ui-auth-payments-ai-rag/template/hooks/useRAGSystem.ts +0 -478
- package/dist/templates/web/ui-auth-payments-ai-rag/template/lib/rag/config.ts +0 -250
- package/dist/templates/web/ui-auth-payments-ai-rag/template/package.json +0 -73
- package/dist/templates/web/ui-auth-payments-ai-rag/template/scripts/setup-rag.js +0 -622
- package/dist/templates/web/ui-auth-payments-ai-rag/template/src/app/ai/page.tsx +0 -396
- package/dist/templates/web/ui-auth-payments-audio/template/src/components/__tests__/example.test.tsx +0 -49
- package/dist/templates/web/ui-auth-payments-audio/template/src/test/setup.ts +0 -74
- package/dist/templates/web/ui-auth-payments-audio/template/vitest.config.ts +0 -17
- package/dist/templates/web/ui-auth-payments-video/template/src/components/__tests__/example.test.tsx +0 -49
- package/dist/templates/web/ui-auth-payments-video/template/src/test/setup.ts +0 -74
- package/dist/templates/web/ui-auth-payments-video/template/vitest.config.ts +0 -17
- package/dist/templates/web/ui-only/template/.eslintrc.js +0 -8
- package/dist/templates/web/ui-only/template/src/components/__tests__/example.test.tsx +0 -49
- package/dist/templates/web/ui-only/template/src/test/setup.ts +0 -74
- package/dist/templates/web/ui-only/template/vitest.config.ts +0 -17
- package/src/templates/mobile/ui-auth-payments-ai-rag/template/README.md +0 -655
- package/src/templates/mobile/ui-auth-payments-ai-rag/template/app/(tabs)/ai.tsx +0 -683
- package/src/templates/mobile/ui-auth-payments-ai-rag/template/app/_layout.tsx +0 -124
- package/src/templates/mobile/ui-auth-payments-ai-rag/template/app.json +0 -74
- package/src/templates/mobile/ui-auth-payments-ai-rag/template/babel.config.js +0 -25
- package/src/templates/mobile/ui-auth-payments-ai-rag/template/docs/MOBILE-SETUP.md +0 -787
- package/src/templates/mobile/ui-auth-payments-ai-rag/template/eas.json +0 -25
- package/src/templates/mobile/ui-auth-payments-ai-rag/template/expo-env.d.ts +0 -3
- package/src/templates/mobile/ui-auth-payments-ai-rag/template/hooks/useRAGSystem.ts +0 -346
- package/src/templates/mobile/ui-auth-payments-ai-rag/template/jest-setup.ts +0 -37
- package/src/templates/mobile/ui-auth-payments-ai-rag/template/lib/rag/config.ts +0 -180
- package/src/templates/mobile/ui-auth-payments-ai-rag/template/metro.config.js +0 -11
- package/src/templates/mobile/ui-auth-payments-ai-rag/template/package.json +0 -122
- package/src/templates/mobile/ui-auth-payments-ai-rag/template/scripts/setup-rag.js +0 -599
- package/src/templates/mobile/ui-auth-payments-ai-rag/template/tsconfig.json +0 -32
- package/src/templates/web/base/template/.eslintrc.js +0 -8
- package/src/templates/web/base/template/src/components/__tests__/example.test.tsx +0 -49
- package/src/templates/web/base/template/src/test/setup.ts +0 -74
- package/src/templates/web/base/template/vitest.config.ts +0 -17
- package/src/templates/web/ui-auth/template/.eslintrc.js +0 -8
- package/src/templates/web/ui-auth/template/src/components/__tests__/example.test.tsx +0 -49
- package/src/templates/web/ui-auth/template/src/test/setup.ts +0 -74
- package/src/templates/web/ui-auth/template/vitest.config.ts +0 -17
- package/src/templates/web/ui-auth-payments/template/src/components/__tests__/example.test.tsx +0 -49
- package/src/templates/web/ui-auth-payments/template/src/test/setup.ts +0 -74
- package/src/templates/web/ui-auth-payments/template/vitest.config.ts +0 -17
- package/src/templates/web/ui-auth-payments-ai/template/src/components/__tests__/example.test.tsx +0 -49
- package/src/templates/web/ui-auth-payments-ai/template/src/test/setup.ts +0 -74
- package/src/templates/web/ui-auth-payments-ai/template/vitest.config.ts +0 -17
- package/src/templates/web/ui-auth-payments-ai-rag/template/README.md +0 -434
- package/src/templates/web/ui-auth-payments-ai-rag/template/components/rag/KnowledgeManager.tsx +0 -642
- package/src/templates/web/ui-auth-payments-ai-rag/template/components/rag/RAGAnalytics.tsx +0 -466
- package/src/templates/web/ui-auth-payments-ai-rag/template/components/rag/RAGChatInterface.tsx +0 -393
- package/src/templates/web/ui-auth-payments-ai-rag/template/docs/GETTING-STARTED.md +0 -457
- package/src/templates/web/ui-auth-payments-ai-rag/template/hooks/useRAGSystem.ts +0 -478
- package/src/templates/web/ui-auth-payments-ai-rag/template/lib/rag/config.ts +0 -250
- package/src/templates/web/ui-auth-payments-ai-rag/template/package.json +0 -73
- package/src/templates/web/ui-auth-payments-ai-rag/template/scripts/setup-rag.js +0 -622
- package/src/templates/web/ui-auth-payments-ai-rag/template/src/app/ai/page.tsx +0 -396
- package/src/templates/web/ui-auth-payments-audio/template/src/components/__tests__/example.test.tsx +0 -49
- package/src/templates/web/ui-auth-payments-audio/template/src/test/setup.ts +0 -74
- package/src/templates/web/ui-auth-payments-audio/template/vitest.config.ts +0 -17
- package/src/templates/web/ui-auth-payments-video/template/src/components/__tests__/example.test.tsx +0 -49
- package/src/templates/web/ui-auth-payments-video/template/src/test/setup.ts +0 -74
- package/src/templates/web/ui-auth-payments-video/template/vitest.config.ts +0 -17
- package/src/templates/web/ui-only/template/.eslintrc.js +0 -8
- package/src/templates/web/ui-only/template/src/components/__tests__/example.test.tsx +0 -49
- package/src/templates/web/ui-only/template/src/test/setup.ts +0 -74
- package/src/templates/web/ui-only/template/vitest.config.ts +0 -17
|
@@ -1,212 +1,83 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
|
|
3
3
|
import React from 'react';
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import
|
|
4
|
+
import { Card, CardContent, CardHeader, CardTitle } from '@digilogiclabs/saas-factory-ui';
|
|
5
|
+
import { CreditCard, ExternalLink, Receipt } from 'lucide-react';
|
|
6
|
+
import Link from 'next/link';
|
|
7
7
|
|
|
8
8
|
export default function BillingPage() {
|
|
9
|
-
const
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
};
|
|
15
|
-
|
|
16
|
-
const handlePaymentMethodUpdate = () => {
|
|
17
|
-
console.log('Payment method update requested');
|
|
18
|
-
// Handle payment method updates (add, edit, delete, set default)
|
|
19
|
-
};
|
|
20
|
-
|
|
21
|
-
const handleInvoiceDownload = (invoiceId: string) => {
|
|
22
|
-
console.log('Download invoice:', invoiceId);
|
|
23
|
-
// Handle invoice download
|
|
24
|
-
};
|
|
25
|
-
|
|
26
|
-
// Mock current subscription data - in real app this would come from your backend
|
|
27
|
-
const currentSubscription = {
|
|
28
|
-
plan: 'Pro Plan',
|
|
29
|
-
price: 1999,
|
|
30
|
-
interval: 'month',
|
|
31
|
-
status: 'active',
|
|
32
|
-
nextBilling: new Date(Date.now() + 15 * 24 * 60 * 60 * 1000)
|
|
33
|
-
};
|
|
34
|
-
|
|
35
|
-
// Mock payment methods - in real app this would come from your backend
|
|
36
|
-
const paymentMethods = [
|
|
37
|
-
{
|
|
38
|
-
id: 'pm_123',
|
|
39
|
-
type: 'card',
|
|
40
|
-
last4: '4242',
|
|
41
|
-
brand: 'visa',
|
|
42
|
-
expiryMonth: 12,
|
|
43
|
-
expiryYear: 2025,
|
|
44
|
-
isDefault: true
|
|
45
|
-
},
|
|
46
|
-
{
|
|
47
|
-
id: 'pm_456',
|
|
48
|
-
type: 'card',
|
|
49
|
-
last4: '0005',
|
|
50
|
-
brand: 'mastercard',
|
|
51
|
-
expiryMonth: 8,
|
|
52
|
-
expiryYear: 2026,
|
|
53
|
-
isDefault: false
|
|
54
|
-
}
|
|
55
|
-
];
|
|
56
|
-
|
|
57
|
-
// Mock billing history - in real app this would come from your backend
|
|
58
|
-
const invoices = [
|
|
59
|
-
{
|
|
60
|
-
id: 'inv_123',
|
|
61
|
-
amount: 1999,
|
|
62
|
-
currency: 'usd',
|
|
63
|
-
status: 'paid',
|
|
64
|
-
date: new Date(Date.now() - 30 * 24 * 60 * 60 * 1000),
|
|
65
|
-
description: 'Pro Plan - Monthly'
|
|
66
|
-
},
|
|
67
|
-
{
|
|
68
|
-
id: 'inv_456',
|
|
69
|
-
amount: 1999,
|
|
70
|
-
currency: 'usd',
|
|
71
|
-
status: 'paid',
|
|
72
|
-
date: new Date(Date.now() - 60 * 24 * 60 * 60 * 1000),
|
|
73
|
-
description: 'Pro Plan - Monthly'
|
|
74
|
-
},
|
|
75
|
-
{
|
|
76
|
-
id: 'inv_789',
|
|
77
|
-
amount: 999,
|
|
78
|
-
currency: 'usd',
|
|
79
|
-
status: 'paid',
|
|
80
|
-
date: new Date(Date.now() - 90 * 24 * 60 * 60 * 1000),
|
|
81
|
-
description: 'Basic Plan - Monthly'
|
|
9
|
+
const handleManageBilling = async () => {
|
|
10
|
+
const res = await fetch('/api/billing/portal', { method: 'POST' });
|
|
11
|
+
const data = await res.json();
|
|
12
|
+
if (data.url) {
|
|
13
|
+
window.location.href = data.url;
|
|
82
14
|
}
|
|
83
|
-
|
|
15
|
+
};
|
|
84
16
|
|
|
85
17
|
return (
|
|
86
|
-
<div className="
|
|
87
|
-
<
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
<
|
|
96
|
-
<
|
|
97
|
-
<div className="space-y-4">
|
|
18
|
+
<div className="mx-auto max-w-4xl px-4 py-8">
|
|
19
|
+
<h1 className="text-3xl font-bold text-foreground mb-2">Billing</h1>
|
|
20
|
+
<p className="text-muted-foreground mb-8">Manage your subscription and payment methods.</p>
|
|
21
|
+
|
|
22
|
+
<div className="grid gap-6 md:grid-cols-2 mb-8">
|
|
23
|
+
<Card>
|
|
24
|
+
<CardHeader>
|
|
25
|
+
<CardTitle className="text-lg">Current Plan</CardTitle>
|
|
26
|
+
</CardHeader>
|
|
27
|
+
<CardContent>
|
|
28
|
+
<div className="flex items-center justify-between">
|
|
98
29
|
<div>
|
|
99
|
-
<
|
|
100
|
-
<p className="text-
|
|
101
|
-
{formatCurrency(currentSubscription.price)}
|
|
102
|
-
<span className="text-sm font-normal">/{currentSubscription.interval}</span>
|
|
103
|
-
</p>
|
|
30
|
+
<p className="text-2xl font-bold text-foreground">Free</p>
|
|
31
|
+
<p className="text-sm text-muted-foreground">Basic features included</p>
|
|
104
32
|
</div>
|
|
105
|
-
<
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
33
|
+
<Link href="/checkout" className="inline-flex items-center justify-center rounded-md bg-primary px-4 py-2 text-sm font-medium text-primary-foreground hover:bg-primary/90 transition-colors">
|
|
34
|
+
Upgrade
|
|
35
|
+
</Link>
|
|
36
|
+
</div>
|
|
37
|
+
</CardContent>
|
|
38
|
+
</Card>
|
|
39
|
+
|
|
40
|
+
<Card>
|
|
41
|
+
<CardHeader>
|
|
42
|
+
<CardTitle className="text-lg">Payment Method</CardTitle>
|
|
43
|
+
</CardHeader>
|
|
44
|
+
<CardContent>
|
|
45
|
+
<div className="flex items-center gap-3">
|
|
46
|
+
<div className="flex h-10 w-10 items-center justify-center rounded-lg bg-muted">
|
|
47
|
+
<CreditCard className="h-5 w-5 text-muted-foreground" />
|
|
110
48
|
</div>
|
|
111
49
|
<div>
|
|
112
|
-
<p className="text-sm text-
|
|
113
|
-
<p>
|
|
50
|
+
<p className="text-sm font-medium text-foreground">No payment method</p>
|
|
51
|
+
<p className="text-xs text-muted-foreground">Add one to upgrade your plan</p>
|
|
114
52
|
</div>
|
|
115
|
-
<Button
|
|
116
|
-
onClick={handleSubscriptionChange}
|
|
117
|
-
disabled={loading}
|
|
118
|
-
variant="outline"
|
|
119
|
-
className="w-full"
|
|
120
|
-
>
|
|
121
|
-
Change Plan
|
|
122
|
-
</Button>
|
|
123
53
|
</div>
|
|
124
|
-
</
|
|
54
|
+
</CardContent>
|
|
55
|
+
</Card>
|
|
56
|
+
</div>
|
|
125
57
|
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
<
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
</p>
|
|
140
|
-
<p className="text-sm text-gray-600">
|
|
141
|
-
Expires {method.expiryMonth}/{method.expiryYear}
|
|
142
|
-
{method.isDefault && <span className="ml-2 text-blue-600">(Default)</span>}
|
|
143
|
-
</p>
|
|
144
|
-
</div>
|
|
145
|
-
</div>
|
|
146
|
-
<Button
|
|
147
|
-
onClick={handlePaymentMethodUpdate}
|
|
148
|
-
disabled={loading}
|
|
149
|
-
variant="outline"
|
|
150
|
-
size="sm"
|
|
151
|
-
>
|
|
152
|
-
Edit
|
|
153
|
-
</Button>
|
|
154
|
-
</div>
|
|
155
|
-
))}
|
|
156
|
-
<Button
|
|
157
|
-
onClick={handlePaymentMethodUpdate}
|
|
158
|
-
disabled={loading}
|
|
159
|
-
variant="outline"
|
|
160
|
-
className="w-full"
|
|
161
|
-
>
|
|
162
|
-
Add Payment Method
|
|
163
|
-
</Button>
|
|
164
|
-
</div>
|
|
165
|
-
</Card>
|
|
166
|
-
</div>
|
|
58
|
+
<Card>
|
|
59
|
+
<CardHeader>
|
|
60
|
+
<CardTitle className="flex items-center gap-2 text-lg">
|
|
61
|
+
<Receipt className="h-5 w-5" />
|
|
62
|
+
Invoices
|
|
63
|
+
</CardTitle>
|
|
64
|
+
</CardHeader>
|
|
65
|
+
<CardContent>
|
|
66
|
+
<p className="text-sm text-muted-foreground">
|
|
67
|
+
No invoices yet. Invoices will appear here after your first payment.
|
|
68
|
+
</p>
|
|
69
|
+
</CardContent>
|
|
70
|
+
</Card>
|
|
167
71
|
|
|
168
|
-
|
|
169
|
-
<
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
<th className="text-left py-2">Description</th>
|
|
177
|
-
<th className="text-left py-2">Amount</th>
|
|
178
|
-
<th className="text-left py-2">Status</th>
|
|
179
|
-
<th className="text-left py-2">Actions</th>
|
|
180
|
-
</tr>
|
|
181
|
-
</thead>
|
|
182
|
-
<tbody>
|
|
183
|
-
{invoices.map((invoice) => (
|
|
184
|
-
<tr key={invoice.id} className="border-b">
|
|
185
|
-
<td className="py-3">{formatDate(invoice.date)}</td>
|
|
186
|
-
<td className="py-3">{invoice.description}</td>
|
|
187
|
-
<td className="py-3">{formatCurrency(invoice.amount)}</td>
|
|
188
|
-
<td className="py-3">
|
|
189
|
-
<span className="inline-block px-2 py-1 bg-green-100 text-green-800 rounded text-sm">
|
|
190
|
-
{invoice.status}
|
|
191
|
-
</span>
|
|
192
|
-
</td>
|
|
193
|
-
<td className="py-3">
|
|
194
|
-
<Button
|
|
195
|
-
onClick={() => handleInvoiceDownload(invoice.id)}
|
|
196
|
-
variant="outline"
|
|
197
|
-
size="sm"
|
|
198
|
-
>
|
|
199
|
-
Download
|
|
200
|
-
</Button>
|
|
201
|
-
</td>
|
|
202
|
-
</tr>
|
|
203
|
-
))}
|
|
204
|
-
</tbody>
|
|
205
|
-
</table>
|
|
206
|
-
</div>
|
|
207
|
-
</Card>
|
|
72
|
+
<div className="mt-6 flex justify-end">
|
|
73
|
+
<button
|
|
74
|
+
onClick={handleManageBilling}
|
|
75
|
+
className="inline-flex items-center justify-center rounded-md border border-input bg-background px-4 py-2 text-sm font-medium text-foreground hover:bg-accent transition-colors"
|
|
76
|
+
>
|
|
77
|
+
<ExternalLink className="mr-2 h-4 w-4" />
|
|
78
|
+
Manage in Stripe
|
|
79
|
+
</button>
|
|
208
80
|
</div>
|
|
209
81
|
</div>
|
|
210
82
|
);
|
|
211
83
|
}
|
|
212
|
-
|
|
@@ -1,143 +1,127 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
|
|
3
|
-
import React from 'react';
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import
|
|
3
|
+
import React, { useState } from 'react';
|
|
4
|
+
import { Button, Card, CardContent, CardHeader, CardTitle } from '@digilogiclabs/saas-factory-ui';
|
|
5
|
+
import { CreditCard, Check, ArrowLeft } from 'lucide-react';
|
|
6
|
+
import Link from 'next/link';
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
8
|
+
const PLANS = [
|
|
9
|
+
{
|
|
10
|
+
id: 'starter',
|
|
11
|
+
name: 'Starter',
|
|
12
|
+
price: '$9',
|
|
13
|
+
period: '/month',
|
|
14
|
+
features: ['Up to 1,000 users', 'Basic analytics', 'Email support', 'API access'],
|
|
15
|
+
featured: false,
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
id: 'pro',
|
|
19
|
+
name: 'Pro',
|
|
20
|
+
price: '$29',
|
|
21
|
+
period: '/month',
|
|
22
|
+
features: ['Unlimited users', 'Advanced analytics', 'Priority support', 'Custom domains', 'Team management'],
|
|
23
|
+
featured: true,
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
id: 'enterprise',
|
|
27
|
+
name: 'Enterprise',
|
|
28
|
+
price: '$99',
|
|
29
|
+
period: '/month',
|
|
30
|
+
features: ['Everything in Pro', 'SSO/SAML', 'Dedicated support', 'SLA guarantee', 'Custom integrations'],
|
|
31
|
+
featured: false,
|
|
32
|
+
},
|
|
33
|
+
];
|
|
15
34
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
};
|
|
35
|
+
export default function CheckoutPage() {
|
|
36
|
+
const [selectedPlan, setSelectedPlan] = useState('pro');
|
|
37
|
+
const [loading, setLoading] = useState(false);
|
|
20
38
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
{
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
features: ['All Basic features', 'Feature 4', 'Feature 5', 'Priority support'],
|
|
37
|
-
popular: true,
|
|
38
|
-
stripePriceId: 'price_pro_monthly'
|
|
39
|
-
},
|
|
40
|
-
{
|
|
41
|
-
id: 'enterprise',
|
|
42
|
-
name: 'Enterprise Plan',
|
|
43
|
-
price: 4999, // in cents
|
|
44
|
-
interval: 'month',
|
|
45
|
-
features: ['All Pro features', 'Custom integrations', 'Dedicated support', 'SLA guarantee'],
|
|
46
|
-
stripePriceId: 'price_enterprise_monthly'
|
|
39
|
+
const onCheckout = async () => {
|
|
40
|
+
setLoading(true);
|
|
41
|
+
try {
|
|
42
|
+
// TODO: Create Stripe checkout session
|
|
43
|
+
const res = await fetch('/api/checkout', {
|
|
44
|
+
method: 'POST',
|
|
45
|
+
headers: { 'Content-Type': 'application/json' },
|
|
46
|
+
body: JSON.stringify({ planId: selectedPlan }),
|
|
47
|
+
});
|
|
48
|
+
const data = await res.json();
|
|
49
|
+
if (data.url) {
|
|
50
|
+
window.location.href = data.url;
|
|
51
|
+
}
|
|
52
|
+
} finally {
|
|
53
|
+
setLoading(false);
|
|
47
54
|
}
|
|
48
|
-
|
|
55
|
+
};
|
|
49
56
|
|
|
50
57
|
return (
|
|
51
|
-
<div className="min-h-screen bg-
|
|
52
|
-
<div className="max-w-
|
|
53
|
-
<div className="
|
|
54
|
-
<
|
|
55
|
-
|
|
58
|
+
<div className="min-h-screen bg-background py-12">
|
|
59
|
+
<div className="mx-auto max-w-5xl px-4">
|
|
60
|
+
<div className="mb-8">
|
|
61
|
+
<Link
|
|
62
|
+
href="/dashboard"
|
|
63
|
+
className="inline-flex items-center gap-1 text-sm text-muted-foreground hover:text-foreground mb-4"
|
|
64
|
+
>
|
|
65
|
+
<ArrowLeft className="h-3 w-3" />
|
|
66
|
+
Back to Dashboard
|
|
67
|
+
</Link>
|
|
68
|
+
<h1 className="text-3xl font-bold text-foreground">Choose Your Plan</h1>
|
|
69
|
+
<p className="text-muted-foreground mt-1">
|
|
70
|
+
Select the plan that best fits your needs.
|
|
71
|
+
</p>
|
|
56
72
|
</div>
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
{
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
73
|
+
|
|
74
|
+
<div className="grid gap-6 md:grid-cols-3 mb-8">
|
|
75
|
+
{PLANS.map((plan) => (
|
|
76
|
+
<Card
|
|
77
|
+
key={plan.id}
|
|
78
|
+
className={`cursor-pointer transition-all ${
|
|
79
|
+
selectedPlan === plan.id
|
|
80
|
+
? 'ring-2 ring-primary border-primary'
|
|
81
|
+
: 'hover:border-primary/50'
|
|
82
|
+
} ${plan.featured ? 'shadow-lg' : ''}`}
|
|
83
|
+
onClick={() => setSelectedPlan(plan.id)}
|
|
84
|
+
>
|
|
85
|
+
<CardHeader>
|
|
86
|
+
<CardTitle className="flex items-center justify-between">
|
|
87
|
+
{plan.name}
|
|
88
|
+
{plan.featured && (
|
|
89
|
+
<span className="text-xs font-medium bg-primary text-primary-foreground px-2 py-0.5 rounded-full">
|
|
90
|
+
Popular
|
|
91
|
+
</span>
|
|
92
|
+
)}
|
|
93
|
+
</CardTitle>
|
|
94
|
+
<div>
|
|
95
|
+
<span className="text-3xl font-bold text-foreground">{plan.price}</span>
|
|
96
|
+
<span className="text-muted-foreground">{plan.period}</span>
|
|
67
97
|
</div>
|
|
68
|
-
|
|
69
|
-
<
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
</li>
|
|
80
|
-
))}
|
|
81
|
-
</ul>
|
|
82
|
-
<Button
|
|
83
|
-
onClick={() => handlePlanSelect(plan.id)}
|
|
84
|
-
disabled={loading}
|
|
85
|
-
className="w-full"
|
|
86
|
-
variant={plan.popular ? "default" : "outline"}
|
|
87
|
-
>
|
|
88
|
-
{loading ? 'Processing...' : 'Select Plan'}
|
|
89
|
-
</Button>
|
|
98
|
+
</CardHeader>
|
|
99
|
+
<CardContent>
|
|
100
|
+
<ul className="space-y-2">
|
|
101
|
+
{plan.features.map((feat) => (
|
|
102
|
+
<li key={feat} className="flex items-center gap-2 text-sm text-muted-foreground">
|
|
103
|
+
<Check className="h-4 w-4 text-primary shrink-0" />
|
|
104
|
+
{feat}
|
|
105
|
+
</li>
|
|
106
|
+
))}
|
|
107
|
+
</ul>
|
|
108
|
+
</CardContent>
|
|
90
109
|
</Card>
|
|
91
110
|
))}
|
|
92
111
|
</div>
|
|
93
112
|
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
/>
|
|
106
|
-
</div>
|
|
107
|
-
<div className="grid grid-cols-2 gap-4">
|
|
108
|
-
<div>
|
|
109
|
-
<label className="block text-sm font-medium mb-2">Expiry Date</label>
|
|
110
|
-
<input
|
|
111
|
-
type="text"
|
|
112
|
-
placeholder="MM/YY"
|
|
113
|
-
className="w-full p-3 border rounded-lg"
|
|
114
|
-
disabled
|
|
115
|
-
/>
|
|
116
|
-
</div>
|
|
117
|
-
<div>
|
|
118
|
-
<label className="block text-sm font-medium mb-2">CVC</label>
|
|
119
|
-
<input
|
|
120
|
-
type="text"
|
|
121
|
-
placeholder="123"
|
|
122
|
-
className="w-full p-3 border rounded-lg"
|
|
123
|
-
disabled
|
|
124
|
-
/>
|
|
125
|
-
</div>
|
|
126
|
-
</div>
|
|
127
|
-
<Button
|
|
128
|
-
onClick={handlePayment}
|
|
129
|
-
disabled={loading}
|
|
130
|
-
className="w-full"
|
|
131
|
-
>
|
|
132
|
-
{loading ? 'Processing...' : 'Complete Payment'}
|
|
133
|
-
</Button>
|
|
134
|
-
<p className="text-sm text-gray-600 text-center">
|
|
135
|
-
This is a demo. Payment processing requires Stripe integration.
|
|
136
|
-
</p>
|
|
137
|
-
</div>
|
|
138
|
-
</Card>
|
|
113
|
+
<div className="flex justify-center">
|
|
114
|
+
<Button
|
|
115
|
+
onClick={onCheckout}
|
|
116
|
+
size="lg"
|
|
117
|
+
disabled={loading}
|
|
118
|
+
className="min-w-[200px]"
|
|
119
|
+
>
|
|
120
|
+
<CreditCard className="mr-2 h-4 w-4" />
|
|
121
|
+
{loading ? 'Processing...' : 'Continue to Payment'}
|
|
122
|
+
</Button>
|
|
123
|
+
</div>
|
|
139
124
|
</div>
|
|
140
125
|
</div>
|
|
141
126
|
);
|
|
142
127
|
}
|
|
143
|
-
|
|
@@ -36,10 +36,10 @@ function StatsCard({ title, value, icon: Icon, href }: {
|
|
|
36
36
|
<Card className="p-6 hover:shadow-lg transition-shadow">
|
|
37
37
|
<div className="flex items-center justify-between">
|
|
38
38
|
<div>
|
|
39
|
-
<p className="text-sm font-medium text-
|
|
40
|
-
<p className="text-2xl font-bold text-
|
|
39
|
+
<p className="text-sm font-medium text-muted-foreground">{title}</p>
|
|
40
|
+
<p className="text-2xl font-bold text-foreground">{value}</p>
|
|
41
41
|
</div>
|
|
42
|
-
<Icon className="h-8 w-8 text-
|
|
42
|
+
<Icon className="h-8 w-8 text-primary" />
|
|
43
43
|
</div>
|
|
44
44
|
</Card>
|
|
45
45
|
)
|
|
@@ -86,8 +86,8 @@ function UserStatsSkeleton() {
|
|
|
86
86
|
{[...Array(4)].map((_, i) => (
|
|
87
87
|
<Card key={i} className="p-6">
|
|
88
88
|
<div className="animate-pulse">
|
|
89
|
-
<div className="h-4 bg-
|
|
90
|
-
<div className="h-8 bg-
|
|
89
|
+
<div className="h-4 bg-muted rounded w-1/2 mb-2"></div>
|
|
90
|
+
<div className="h-8 bg-muted rounded w-1/3"></div>
|
|
91
91
|
</div>
|
|
92
92
|
</Card>
|
|
93
93
|
))}
|
|
@@ -101,14 +101,14 @@ export default async function DashboardPage() {
|
|
|
101
101
|
|
|
102
102
|
return (
|
|
103
103
|
<DashboardLayout>
|
|
104
|
-
<div className="min-h-screen bg-
|
|
104
|
+
<div className="min-h-screen bg-muted">
|
|
105
105
|
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-8">
|
|
106
106
|
{/* Header */}
|
|
107
107
|
<div className="mb-8" data-tour="overview">
|
|
108
|
-
<h1 className="text-3xl font-bold text-
|
|
108
|
+
<h1 className="text-3xl font-bold text-foreground">
|
|
109
109
|
Welcome back, {user.name || user.email}!
|
|
110
110
|
</h1>
|
|
111
|
-
<p className="text-
|
|
111
|
+
<p className="text-muted-foreground mt-2">
|
|
112
112
|
Here's what's happening with your audio projects today.
|
|
113
113
|
</p>
|
|
114
114
|
</div>
|
|
@@ -124,10 +124,10 @@ export default async function DashboardPage() {
|
|
|
124
124
|
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6 mb-8" data-tour="actions">
|
|
125
125
|
<Card className="p-6">
|
|
126
126
|
<div className="flex items-center mb-4">
|
|
127
|
-
<User className="h-6 w-6 text-
|
|
128
|
-
<h3 className="text-lg font-semibold text-
|
|
127
|
+
<User className="h-6 w-6 text-primary mr-3" />
|
|
128
|
+
<h3 className="text-lg font-semibold text-foreground">Profile</h3>
|
|
129
129
|
</div>
|
|
130
|
-
<p className="text-
|
|
130
|
+
<p className="text-muted-foreground mb-4">
|
|
131
131
|
Update your personal information and preferences
|
|
132
132
|
</p>
|
|
133
133
|
<Link href="/profile">
|
|
@@ -137,10 +137,10 @@ export default async function DashboardPage() {
|
|
|
137
137
|
|
|
138
138
|
<Card className="p-6">
|
|
139
139
|
<div className="flex items-center mb-4">
|
|
140
|
-
<Settings className="h-6 w-6 text-
|
|
141
|
-
<h3 className="text-lg font-semibold text-
|
|
140
|
+
<Settings className="h-6 w-6 text-primary mr-3" />
|
|
141
|
+
<h3 className="text-lg font-semibold text-foreground">Settings</h3>
|
|
142
142
|
</div>
|
|
143
|
-
<p className="text-
|
|
143
|
+
<p className="text-muted-foreground mb-4">
|
|
144
144
|
Configure your account settings and security options
|
|
145
145
|
</p>
|
|
146
146
|
<Link href="/settings">
|
|
@@ -150,10 +150,10 @@ export default async function DashboardPage() {
|
|
|
150
150
|
|
|
151
151
|
<Card className="p-6">
|
|
152
152
|
<div className="flex items-center mb-4">
|
|
153
|
-
<CreditCard className="h-6 w-6 text-
|
|
154
|
-
<h3 className="text-lg font-semibold text-
|
|
153
|
+
<CreditCard className="h-6 w-6 text-primary mr-3" />
|
|
154
|
+
<h3 className="text-lg font-semibold text-foreground">Billing</h3>
|
|
155
155
|
</div>
|
|
156
|
-
<p className="text-
|
|
156
|
+
<p className="text-muted-foreground mb-4">
|
|
157
157
|
View your subscription and payment information
|
|
158
158
|
</p>
|
|
159
159
|
<Link href="/billing">
|
|
@@ -164,28 +164,28 @@ export default async function DashboardPage() {
|
|
|
164
164
|
|
|
165
165
|
{/* Recent Activity */}
|
|
166
166
|
<Card className="p-6">
|
|
167
|
-
<h3 className="text-lg font-semibold text-
|
|
167
|
+
<h3 className="text-lg font-semibold text-foreground mb-4">Recent Activity</h3>
|
|
168
168
|
<div className="space-y-4">
|
|
169
|
-
<div className="flex items-center justify-between py-3 border-b border-
|
|
169
|
+
<div className="flex items-center justify-between py-3 border-b border-border">
|
|
170
170
|
<div className="flex items-center">
|
|
171
171
|
<div className="w-2 h-2 bg-green-500 rounded-full mr-3"></div>
|
|
172
|
-
<span className="text-
|
|
172
|
+
<span className="text-foreground">Account created</span>
|
|
173
173
|
</div>
|
|
174
|
-
<span className="text-sm text-
|
|
174
|
+
<span className="text-sm text-muted-foreground">2 days ago</span>
|
|
175
175
|
</div>
|
|
176
|
-
<div className="flex items-center justify-between py-3 border-b border-
|
|
176
|
+
<div className="flex items-center justify-between py-3 border-b border-border">
|
|
177
177
|
<div className="flex items-center">
|
|
178
|
-
<div className="w-2 h-2 bg-
|
|
179
|
-
<span className="text-
|
|
178
|
+
<div className="w-2 h-2 bg-primary rounded-full mr-3"></div>
|
|
179
|
+
<span className="text-foreground">Profile updated</span>
|
|
180
180
|
</div>
|
|
181
|
-
<span className="text-sm text-
|
|
181
|
+
<span className="text-sm text-muted-foreground">1 week ago</span>
|
|
182
182
|
</div>
|
|
183
183
|
<div className="flex items-center justify-between py-3">
|
|
184
184
|
<div className="flex items-center">
|
|
185
185
|
<div className="w-2 h-2 bg-purple-500 rounded-full mr-3"></div>
|
|
186
|
-
<span className="text-
|
|
186
|
+
<span className="text-foreground">Subscription started</span>
|
|
187
187
|
</div>
|
|
188
|
-
<span className="text-sm text-
|
|
188
|
+
<span className="text-sm text-muted-foreground">2 weeks ago</span>
|
|
189
189
|
</div>
|
|
190
190
|
</div>
|
|
191
191
|
</Card>
|