@digilogiclabs/create-saas-app 2.10.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/README.md +153 -113
- package/dist/.tsbuildinfo +1 -1
- package/dist/cli/commands/create.d.ts.map +1 -1
- package/dist/cli/commands/create.js +2 -6
- package/dist/cli/commands/create.js.map +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/ai-platform/template/src/app/api/auth/route.ts +57 -0
- package/dist/templates/web/ai-platform/template/src/app/login/page.tsx +112 -0
- package/dist/templates/web/ai-platform/template/src/app/models/page.tsx +186 -0
- package/dist/templates/web/ai-platform/template/src/app/playground/page.tsx +251 -0
- package/dist/templates/web/ai-platform/template/src/app/settings/page.tsx +190 -0
- package/dist/templates/web/ai-platform/template/src/app/signup/page.tsx +133 -0
- package/dist/templates/web/ai-platform/template/src/lib/auth-session.ts +52 -0
- 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/iot-dashboard/template/src/app/alerts/page.tsx +157 -0
- package/dist/templates/web/iot-dashboard/template/src/app/api/auth/route.ts +57 -0
- package/dist/templates/web/iot-dashboard/template/src/app/devices/[id]/page.tsx +204 -0
- package/dist/templates/web/iot-dashboard/template/src/app/devices/new/page.tsx +139 -0
- package/dist/templates/web/iot-dashboard/template/src/app/devices/page.tsx +171 -0
- package/dist/templates/web/iot-dashboard/template/src/app/login/page.tsx +112 -0
- package/dist/templates/web/iot-dashboard/template/src/app/settings/page.tsx +186 -0
- package/dist/templates/web/iot-dashboard/template/src/app/signup/page.tsx +133 -0
- package/dist/templates/web/iot-dashboard/template/src/lib/auth-session.ts +52 -0
- package/dist/templates/web/marketplace/template/src/app/api/auth/route.ts +57 -0
- package/dist/templates/web/marketplace/template/src/app/login/page.tsx +112 -0
- package/dist/templates/web/marketplace/template/src/app/orders/page.tsx +160 -0
- package/dist/templates/web/marketplace/template/src/app/products/[id]/page.tsx +218 -0
- package/dist/templates/web/marketplace/template/src/app/settings/page.tsx +150 -0
- package/dist/templates/web/marketplace/template/src/app/signup/page.tsx +133 -0
- package/dist/templates/web/marketplace/template/src/lib/auth-session.ts +52 -0
- package/dist/templates/web/micro-saas/template/src/app/api/auth/route.ts +57 -0
- package/dist/templates/web/micro-saas/template/src/app/login/page.tsx +14 -3
- package/dist/templates/web/micro-saas/template/src/app/signup/page.tsx +15 -4
- package/dist/templates/web/micro-saas/template/src/lib/auth-session.ts +52 -0
- 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/ai-platform/template/src/app/api/auth/route.ts +57 -0
- package/src/templates/web/ai-platform/template/src/app/login/page.tsx +112 -0
- package/src/templates/web/ai-platform/template/src/app/models/page.tsx +186 -0
- package/src/templates/web/ai-platform/template/src/app/playground/page.tsx +251 -0
- package/src/templates/web/ai-platform/template/src/app/settings/page.tsx +190 -0
- package/src/templates/web/ai-platform/template/src/app/signup/page.tsx +133 -0
- package/src/templates/web/ai-platform/template/src/lib/auth-session.ts +52 -0
- 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/iot-dashboard/template/src/app/alerts/page.tsx +157 -0
- package/src/templates/web/iot-dashboard/template/src/app/api/auth/route.ts +57 -0
- package/src/templates/web/iot-dashboard/template/src/app/devices/[id]/page.tsx +204 -0
- package/src/templates/web/iot-dashboard/template/src/app/devices/new/page.tsx +139 -0
- package/src/templates/web/iot-dashboard/template/src/app/devices/page.tsx +171 -0
- package/src/templates/web/iot-dashboard/template/src/app/login/page.tsx +112 -0
- package/src/templates/web/iot-dashboard/template/src/app/settings/page.tsx +186 -0
- package/src/templates/web/iot-dashboard/template/src/app/signup/page.tsx +133 -0
- package/src/templates/web/iot-dashboard/template/src/lib/auth-session.ts +52 -0
- package/src/templates/web/marketplace/template/src/app/api/auth/route.ts +57 -0
- package/src/templates/web/marketplace/template/src/app/login/page.tsx +112 -0
- package/src/templates/web/marketplace/template/src/app/orders/page.tsx +160 -0
- package/src/templates/web/marketplace/template/src/app/products/[id]/page.tsx +218 -0
- package/src/templates/web/marketplace/template/src/app/settings/page.tsx +150 -0
- package/src/templates/web/marketplace/template/src/app/signup/page.tsx +133 -0
- package/src/templates/web/marketplace/template/src/lib/auth-session.ts +52 -0
- package/src/templates/web/micro-saas/template/src/app/api/auth/route.ts +57 -0
- package/src/templates/web/micro-saas/template/src/app/login/page.tsx +14 -3
- package/src/templates/web/micro-saas/template/src/app/signup/page.tsx +15 -4
- package/src/templates/web/micro-saas/template/src/lib/auth-session.ts +52 -0
- 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,109 +1,9 @@
|
|
|
1
|
-
'
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
const [password, setPassword] = useState('');
|
|
11
|
-
const { signIn, signInWithOAuth, loading, error, user } = useAuth();
|
|
12
|
-
const router = useRouter();
|
|
13
|
-
|
|
14
|
-
// Redirect if already logged in
|
|
15
|
-
React.useEffect(() => {
|
|
16
|
-
if (user) {
|
|
17
|
-
router.push('/');
|
|
18
|
-
}
|
|
19
|
-
}, [user, router]);
|
|
20
|
-
|
|
21
|
-
const handleLogin = async (e: React.FormEvent) => {
|
|
22
|
-
e.preventDefault();
|
|
23
|
-
try {
|
|
24
|
-
await signIn(email, password);
|
|
25
|
-
router.push('/');
|
|
26
|
-
} catch (err) {
|
|
27
|
-
console.error('Login error:', err);
|
|
28
|
-
}
|
|
29
|
-
};
|
|
30
|
-
|
|
31
|
-
const handleGoogleLogin = async () => {
|
|
32
|
-
try {
|
|
33
|
-
await signInWithOAuth('google');
|
|
34
|
-
} catch (err) {
|
|
35
|
-
console.error('Google login error:', err);
|
|
36
|
-
}
|
|
37
|
-
};
|
|
38
|
-
|
|
39
|
-
if (loading) {
|
|
40
|
-
return (
|
|
41
|
-
<div className="flex items-center justify-center min-h-screen bg-gray-100">
|
|
42
|
-
<div>Loading...</div>
|
|
43
|
-
</div>
|
|
44
|
-
);
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
return (
|
|
48
|
-
<div className="flex items-center justify-center min-h-screen bg-gray-100">
|
|
49
|
-
<Card className="w-full max-w-md p-8">
|
|
50
|
-
<h1 className="text-2xl font-bold text-center mb-6">Sign In</h1>
|
|
51
|
-
|
|
52
|
-
{error && (
|
|
53
|
-
<div className="mb-4 p-3 bg-red-100 border border-red-400 text-red-700 rounded">
|
|
54
|
-
{error.message}
|
|
55
|
-
</div>
|
|
56
|
-
)}
|
|
57
|
-
|
|
58
|
-
<form onSubmit={handleLogin} className="space-y-4">
|
|
59
|
-
<div>
|
|
60
|
-
<Label htmlFor="email">Email</Label>
|
|
61
|
-
<Input
|
|
62
|
-
id="email"
|
|
63
|
-
type="email"
|
|
64
|
-
value={email}
|
|
65
|
-
onChange={(e) => setEmail(e.target.value)}
|
|
66
|
-
placeholder="Enter your email"
|
|
67
|
-
required
|
|
68
|
-
disabled={loading}
|
|
69
|
-
/>
|
|
70
|
-
</div>
|
|
71
|
-
<div>
|
|
72
|
-
<Label htmlFor="password">Password</Label>
|
|
73
|
-
<Input
|
|
74
|
-
id="password"
|
|
75
|
-
type="password"
|
|
76
|
-
value={password}
|
|
77
|
-
onChange={(e) => setPassword(e.target.value)}
|
|
78
|
-
placeholder="Enter your password"
|
|
79
|
-
required
|
|
80
|
-
disabled={loading}
|
|
81
|
-
/>
|
|
82
|
-
</div>
|
|
83
|
-
<Button type="submit" className="w-full" disabled={loading}>
|
|
84
|
-
{loading ? 'Signing In...' : 'Sign In'}
|
|
85
|
-
</Button>
|
|
86
|
-
<Button
|
|
87
|
-
type="button"
|
|
88
|
-
variant="outline"
|
|
89
|
-
className="w-full"
|
|
90
|
-
onClick={handleGoogleLogin}
|
|
91
|
-
disabled={loading}
|
|
92
|
-
>
|
|
93
|
-
Sign in with Google
|
|
94
|
-
</Button>
|
|
95
|
-
</form>
|
|
96
|
-
|
|
97
|
-
<div className="mt-4 text-center">
|
|
98
|
-
<p className="text-sm text-gray-600">
|
|
99
|
-
Don't have an account?{' '}
|
|
100
|
-
<a href="/signup" className="text-blue-600 hover:underline">
|
|
101
|
-
Sign up
|
|
102
|
-
</a>
|
|
103
|
-
</p>
|
|
104
|
-
</div>
|
|
105
|
-
</Card>
|
|
106
|
-
</div>
|
|
107
|
-
);
|
|
108
|
-
}
|
|
109
|
-
|
|
1
|
+
import { LoginForm } from '@/components/client/login-form'
|
|
2
|
+
|
|
3
|
+
export default function LoginPage() {
|
|
4
|
+
return (
|
|
5
|
+
<div className="flex min-h-screen items-center justify-center bg-background px-4">
|
|
6
|
+
<LoginForm />
|
|
7
|
+
</div>
|
|
8
|
+
)
|
|
9
|
+
}
|
|
@@ -1,392 +1,132 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
import
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
</div>
|
|
109
|
-
<
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
{networkInfo?.effectiveType && (
|
|
134
|
-
<span className="bg-green-100 text-green-800 px-2 py-1 rounded text-xs">
|
|
135
|
-
{networkInfo.effectiveType.toUpperCase()}
|
|
136
|
-
</span>
|
|
137
|
-
)}
|
|
138
|
-
</div>
|
|
139
|
-
) : (
|
|
140
|
-
<div className="flex items-center gap-2 text-red-600">
|
|
141
|
-
<WifiOff className="w-4 h-4" />
|
|
142
|
-
<span>Offline - Cached videos available</span>
|
|
143
|
-
</div>
|
|
144
|
-
)}
|
|
145
|
-
</div>
|
|
146
|
-
</div>
|
|
147
|
-
|
|
148
|
-
<MobileHero
|
|
149
|
-
badge={heroConfig.badge}
|
|
150
|
-
title={heroConfig.title}
|
|
151
|
-
description={heroConfig.description}
|
|
152
|
-
actions={[
|
|
153
|
-
{
|
|
154
|
-
label: "Start Watching",
|
|
155
|
-
href: "/checkout",
|
|
156
|
-
icon: Play,
|
|
157
|
-
variant: "default",
|
|
158
|
-
size: "lg"
|
|
159
|
-
},
|
|
160
|
-
{
|
|
161
|
-
label: "Learn More",
|
|
162
|
-
variant: "outline",
|
|
163
|
-
size: "lg"
|
|
164
|
-
}
|
|
165
|
-
]}
|
|
166
|
-
className="text-center mb-16"
|
|
167
|
-
/>
|
|
168
|
-
|
|
169
|
-
{/* Video Player Showcase */}
|
|
170
|
-
<NetworkAwareContent
|
|
171
|
-
showOnSlow={
|
|
172
|
-
<div className="max-w-4xl mx-auto mb-16">
|
|
173
|
-
<Card className="p-6">
|
|
174
|
-
<div className="text-center mb-6">
|
|
175
|
-
<div className="mx-auto w-12 h-12 bg-red-100 dark:bg-red-900 rounded-full flex items-center justify-center mb-4">
|
|
176
|
-
<Video className="h-6 w-6 text-red-600 dark:text-red-400" />
|
|
177
|
-
</div>
|
|
178
|
-
<h2 className="text-xl font-bold mb-2">Mobile Video Player</h2>
|
|
179
|
-
<p className="text-sm text-gray-600 dark:text-gray-300">
|
|
180
|
-
Optimized for slower connections - automatically serves lower quality
|
|
181
|
-
</p>
|
|
182
|
-
</div>
|
|
183
|
-
<VideoPlayer
|
|
184
|
-
playlist={[
|
|
185
|
-
{
|
|
186
|
-
id: '1',
|
|
187
|
-
title: 'Getting Started Guide',
|
|
188
|
-
description: 'Learn the basics in this quick tutorial',
|
|
189
|
-
duration: 300,
|
|
190
|
-
url: 'https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4',
|
|
191
|
-
thumbnail: 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzIwIiBoZWlnaHQ9IjE4MCIgdmlld0JveD0iMCAwIDMyMCAxODAiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHJlY3Qgd2lkdGg9IjMyMCIgaGVpZ2h0PSIxODAiIGZpbGw9IiM0Qjc2ODgiLz48Y2lyY2xlIGN4PSIxNjAiIGN5PSI5MCIgcj0iMzAiIGZpbGw9IndoaXRlIiBmaWxsLW9wYWNpdHk9IjAuMyIvPjxwYXRoIGQ9Ik0xNDUgNzVWMTA1TDE3NSA5MEwxNDUgNzVaIiBmaWxsPSJ3aGl0ZSIvPjwvc3ZnPg==',
|
|
192
|
-
qualities: [
|
|
193
|
-
{ label: '360p', url: 'https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4' }
|
|
194
|
-
]
|
|
195
|
-
}
|
|
196
|
-
]}
|
|
197
|
-
mobileOptimized={true}
|
|
198
|
-
touchFriendly={true}
|
|
199
|
-
autoQuality="low"
|
|
200
|
-
className="max-w-lg mx-auto"
|
|
201
|
-
/>
|
|
202
|
-
</Card>
|
|
203
|
-
</div>
|
|
204
|
-
}
|
|
205
|
-
showOnOffline={
|
|
206
|
-
<div className="max-w-4xl mx-auto mb-16">
|
|
207
|
-
<Card className="p-6 bg-yellow-50 border-yellow-200">
|
|
208
|
-
<div className="text-center">
|
|
209
|
-
<WifiOff className="mx-auto w-12 h-12 text-yellow-600 mb-4" />
|
|
210
|
-
<h2 className="text-xl font-bold mb-2">Offline Mode</h2>
|
|
211
|
-
<p className="text-gray-600">Videos are cached for offline viewing when connection is restored.</p>
|
|
212
|
-
</div>
|
|
213
|
-
</Card>
|
|
214
|
-
</div>
|
|
215
|
-
}
|
|
216
|
-
>
|
|
217
|
-
<SwipeableCard
|
|
218
|
-
leftActions={[
|
|
219
|
-
{
|
|
220
|
-
id: 'previous',
|
|
221
|
-
label: 'Previous',
|
|
222
|
-
onAction: () => console.log('Previous video'),
|
|
223
|
-
color: 'blue',
|
|
224
|
-
icon: ArrowRight
|
|
225
|
-
},
|
|
226
|
-
{
|
|
227
|
-
id: 'quality',
|
|
228
|
-
label: 'Quality',
|
|
229
|
-
onAction: () => console.log('Toggle quality'),
|
|
230
|
-
color: 'purple'
|
|
231
|
-
}
|
|
232
|
-
]}
|
|
233
|
-
rightActions={[
|
|
234
|
-
{
|
|
235
|
-
id: 'next',
|
|
236
|
-
label: 'Next',
|
|
237
|
-
onAction: () => console.log('Next video'),
|
|
238
|
-
color: 'green',
|
|
239
|
-
icon: ArrowRight
|
|
240
|
-
},
|
|
241
|
-
{
|
|
242
|
-
id: 'fullscreen',
|
|
243
|
-
label: 'Fullscreen',
|
|
244
|
-
onAction: () => console.log('Toggle fullscreen'),
|
|
245
|
-
color: 'orange'
|
|
246
|
-
}
|
|
247
|
-
]}
|
|
248
|
-
threshold={60}
|
|
249
|
-
hapticFeedback={true}
|
|
250
|
-
showActionLabels={true}
|
|
251
|
-
className="max-w-4xl mx-auto mb-16"
|
|
252
|
-
>
|
|
253
|
-
<Card className="p-8">
|
|
254
|
-
<div className="text-center mb-8">
|
|
255
|
-
<div className="mx-auto w-16 h-16 bg-red-100 dark:bg-red-900 rounded-full flex items-center justify-center mb-4">
|
|
256
|
-
<Video className="h-8 w-8 text-red-600 dark:text-red-400" />
|
|
257
|
-
</div>
|
|
258
|
-
<h2 className="text-3xl font-bold mb-4">Touch-Optimized Video Player</h2>
|
|
259
|
-
<p className="text-gray-600 dark:text-gray-300 mb-2">
|
|
260
|
-
Experience our mobile-first video player with gesture controls, adaptive quality, and offline caching
|
|
261
|
-
</p>
|
|
262
|
-
<p className="text-sm text-gray-500">
|
|
263
|
-
Swipe for controls • Double tap for fullscreen • Pull to refresh playlist
|
|
264
|
-
</p>
|
|
265
|
-
</div>
|
|
266
|
-
<VideoPlayer
|
|
267
|
-
playlist={[
|
|
268
|
-
{
|
|
269
|
-
id: '1',
|
|
270
|
-
title: 'Getting Started Guide',
|
|
271
|
-
description: 'Learn the basics in this comprehensive tutorial',
|
|
272
|
-
duration: 300,
|
|
273
|
-
url: 'https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4',
|
|
274
|
-
thumbnail: 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNjQwIiBoZWlnaHQ9IjM2MCIgdmlld0JveD0iMCAwIDY0MCAzNjAiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHJlY3Qgd2lkdGg9IjY0MCIgaGVpZ2h0PSIzNjAiIGZpbGw9IiM0Qjc2ODgiLz48Y2lyY2xlIGN4PSIzMjAiIGN5PSIxODAiIHI9IjUwIiBmaWxsPSJ3aGl0ZSIgZmlsbC1vcGFjaXR5PSIwLjMiLz48cGF0aCBkPSJNMjkwIDE1MFYyMTBMMzUwIDE4MEwyOTAgMTUwWiIgZmlsbD0id2hpdGUiLz48L3N2Zz4=',
|
|
275
|
-
qualities: [
|
|
276
|
-
{ label: '360p', url: 'https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4' },
|
|
277
|
-
{ label: '480p', url: 'https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4' },
|
|
278
|
-
{ label: '720p', url: 'https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4' }
|
|
279
|
-
]
|
|
280
|
-
},
|
|
281
|
-
{
|
|
282
|
-
id: '2',
|
|
283
|
-
title: 'Advanced Features',
|
|
284
|
-
description: 'Explore powerful features and customization options',
|
|
285
|
-
duration: 240,
|
|
286
|
-
url: 'https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/ElephantsDream.mp4',
|
|
287
|
-
thumbnail: 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNjQwIiBoZWlnaHQ9IjM2MCIgdmlld0JveD0iMCAwIDY0MCAzNjAiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHJlY3Qgd2lkdGg9IjY0MCIgaGVpZ2h0PSIzNjAiIGZpbGw9IiNFRjQ0NDQiLz48Y2lyY2xlIGN4PSIzMjAiIGN5PSIxODAiIHI9IjUwIiBmaWxsPSJ3aGl0ZSIgZmlsbC1vcGFjaXR5PSIwLjMiLz48cGF0aCBkPSJNMjkwIDE1MFYyMTBMMzUwIDE4MEwyOTAgMTUwWiIgZmlsbD0id2hpdGUiLz48L3N2Zz4=',
|
|
288
|
-
qualities: [
|
|
289
|
-
{ label: '360p', url: 'https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/ElephantsDream.mp4' },
|
|
290
|
-
{ label: '480p', url: 'https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/ElephantsDream.mp4' },
|
|
291
|
-
{ label: '720p', url: 'https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/ElephantsDream.mp4' }
|
|
292
|
-
]
|
|
293
|
-
},
|
|
294
|
-
{
|
|
295
|
-
id: '3',
|
|
296
|
-
title: 'Best Practices',
|
|
297
|
-
description: 'Tips and tricks for getting the most out of the platform',
|
|
298
|
-
duration: 180,
|
|
299
|
-
url: 'https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4',
|
|
300
|
-
thumbnail: 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNjQwIiBoZWlnaHQ9IjM2MCIgdmlld0JveD0iMCAwIDY0MCAzNjAiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHJlY3Qgd2lkdGg9IjY0MCIgaGVpZ2h0PSIzNjAiIGZpbGw9IiMwNjkyQzUiLz48Y2lyY2xlIGN4PSIzMjAiIGN5PSIxODAiIHI9IjUwIiBmaWxsPSJ3aGl0ZSIgZmlsbC1vcGFjaXR5PSIwLjMiLz48cGF0aCBkPSJNMjkwIDE1MFYyMTBMMzUwIDE4MEwyOTAgMTUwWiIgZmlsbD0id2hpdGUiLz48L3N2Zz4=',
|
|
301
|
-
qualities: [
|
|
302
|
-
{ label: '360p', url: 'https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4' },
|
|
303
|
-
{ label: '720p', url: 'https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4' }
|
|
304
|
-
]
|
|
305
|
-
}
|
|
306
|
-
]}
|
|
307
|
-
mobileOptimized={true}
|
|
308
|
-
touchFriendly={true}
|
|
309
|
-
hapticFeedback={true}
|
|
310
|
-
gestureControls={true}
|
|
311
|
-
networkAware={true}
|
|
312
|
-
offlineSupport={true}
|
|
313
|
-
autoQuality="adaptive"
|
|
314
|
-
className="max-w-4xl mx-auto"
|
|
315
|
-
/>
|
|
316
|
-
</Card>
|
|
317
|
-
</SwipeableCard>
|
|
318
|
-
</NetworkAwareContent>
|
|
319
|
-
|
|
320
|
-
{/* Component Showcase */}
|
|
321
|
-
<ResponsiveGrid columns={gridConfig.columns_1_sm2_md4} gap={6} className="mb-16">
|
|
322
|
-
<Card className="text-center p-6">
|
|
323
|
-
<div className="mx-auto w-12 h-12 bg-blue-100 dark:bg-blue-900 rounded-lg flex items-center justify-center mb-4">
|
|
324
|
-
<Zap className="h-6 w-6 text-blue-600 dark:text-blue-400" />
|
|
325
|
-
</div>
|
|
326
|
-
<h3 className="text-lg font-semibold mb-2">Mobile Video UI</h3>
|
|
327
|
-
<p className="text-sm text-gray-600 dark:text-gray-300">
|
|
328
|
-
Touch-optimized Video Player with gesture controls from @digilogiclabs/saas-factory-ui v0.13.3
|
|
329
|
-
</p>
|
|
330
|
-
</Card>
|
|
331
|
-
|
|
332
|
-
<Card className="text-center p-6">
|
|
333
|
-
<div className="mx-auto w-12 h-12 bg-green-100 dark:bg-green-900 rounded-lg flex items-center justify-center mb-4">
|
|
334
|
-
<Shield className="h-6 w-6 text-green-600 dark:text-green-400" />
|
|
335
|
-
</div>
|
|
336
|
-
<h3 className="text-lg font-semibold mb-2">Cross-Device Auth</h3>
|
|
337
|
-
<p className="text-sm text-gray-600 dark:text-gray-300">
|
|
338
|
-
Secure authentication across all devices with @digilogiclabs/saas-factory-auth v1.0.0
|
|
339
|
-
</p>
|
|
340
|
-
</Card>
|
|
341
|
-
|
|
342
|
-
<Card className="text-center p-6">
|
|
343
|
-
<div className="mx-auto w-12 h-12 bg-purple-100 dark:bg-purple-900 rounded-lg flex items-center justify-center mb-4">
|
|
344
|
-
<Rocket className="h-6 w-6 text-purple-600 dark:text-purple-400" />
|
|
345
|
-
</div>
|
|
346
|
-
<h3 className="text-lg font-semibold mb-2">Performance First</h3>
|
|
347
|
-
<p className="text-sm text-gray-600 dark:text-gray-300">
|
|
348
|
-
Network-aware video streaming with adaptive quality and caching
|
|
349
|
-
</p>
|
|
350
|
-
</Card>
|
|
351
|
-
|
|
352
|
-
<Card className="text-center p-6">
|
|
353
|
-
<div className="mx-auto w-12 h-12 bg-orange-100 dark:bg-orange-900 rounded-lg flex items-center justify-center mb-4">
|
|
354
|
-
<svg className="h-6 w-6 text-orange-600 dark:text-orange-400" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
355
|
-
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M3 10h18M7 15h1m4 0h1m-7 4h12a3 3 0 003-3V8a3 3 0 00-3-3H6a3 3 0 00-3 3v8a3 3 0 003 3z" />
|
|
356
|
-
</svg>
|
|
357
|
-
</div>
|
|
358
|
-
<h3 className="text-lg font-semibold mb-2">Mobile Payments</h3>
|
|
359
|
-
<p className="text-sm text-gray-600 dark:text-gray-300">
|
|
360
|
-
Touch-optimized subscription flows with @digilogiclabs/saas-factory-payments v1.0.0
|
|
361
|
-
</p>
|
|
362
|
-
</Card>
|
|
363
|
-
</ResponsiveGrid>
|
|
364
|
-
|
|
365
|
-
{/* Button Variants Showcase */}
|
|
366
|
-
<Card className="max-w-4xl mx-auto p-8">
|
|
367
|
-
<div className="text-center mb-6">
|
|
368
|
-
<h2 className="text-2xl font-bold mb-2">Full SaaS Package Integration</h2>
|
|
369
|
-
<p className="text-gray-600 dark:text-gray-300">
|
|
370
|
-
Complete integration of UI, Auth, and Payments packages
|
|
371
|
-
</p>
|
|
372
|
-
</div>
|
|
373
|
-
<div className="flex flex-wrap justify-center gap-4 mb-6">
|
|
374
|
-
<Button>Default Button</Button>
|
|
375
|
-
<Button variant="secondary">Secondary Button</Button>
|
|
376
|
-
<Button variant="outline">Outline Button</Button>
|
|
377
|
-
<Button disabled>Disabled Button</Button>
|
|
378
|
-
</div>
|
|
379
|
-
<div className="text-center">
|
|
380
|
-
<p className="text-sm text-gray-500">
|
|
381
|
-
All mobile-optimized components from @digilogiclabs/saas-factory-ui v0.13.3 + auth v1.0.0 + payments
|
|
382
|
-
</p>
|
|
383
|
-
</div>
|
|
384
|
-
</Card>
|
|
385
|
-
</MobileContainer>
|
|
386
|
-
</div>
|
|
387
|
-
</main>
|
|
388
|
-
</PullToRefresh>
|
|
389
|
-
</OfflineWrapper>
|
|
390
|
-
</PageTransition>
|
|
391
|
-
)
|
|
392
|
-
}
|
|
1
|
+
import { ArrowRight, Shield, CreditCard, CheckCircle, Video, Play, Film, Upload, MonitorPlay, Tv } from 'lucide-react'
|
|
2
|
+
|
|
3
|
+
import Link from 'next/link'
|
|
4
|
+
|
|
5
|
+
const FEATURES = [
|
|
6
|
+
{
|
|
7
|
+
icon: Video,
|
|
8
|
+
title: 'Video Streaming',
|
|
9
|
+
description: 'Adaptive bitrate streaming with HLS. Built-in video player with full controls.',
|
|
10
|
+
color: 'text-red-600 dark:text-red-400 bg-red-100 dark:bg-red-900/30',
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
icon: Upload,
|
|
14
|
+
title: 'Upload & Transcode',
|
|
15
|
+
description: 'Video upload with automatic transcoding, thumbnail generation, and metadata.',
|
|
16
|
+
color: 'text-violet-600 dark:text-violet-400 bg-violet-100 dark:bg-violet-900/30',
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
icon: Shield,
|
|
20
|
+
title: 'Secure Auth',
|
|
21
|
+
description: 'Complete authentication with Supabase — login, signup, and sessions.',
|
|
22
|
+
color: 'text-emerald-600 dark:text-emerald-400 bg-emerald-100 dark:bg-emerald-900/30',
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
icon: CreditCard,
|
|
26
|
+
title: 'Stripe Billing',
|
|
27
|
+
description: 'Subscription tiers, pay-per-view, and creator monetization.',
|
|
28
|
+
color: 'text-blue-600 dark:text-blue-400 bg-blue-100 dark:bg-blue-900/30',
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
icon: MonitorPlay,
|
|
32
|
+
title: 'Course Platform',
|
|
33
|
+
description: 'Chapter-based content, progress tracking, and completion certificates.',
|
|
34
|
+
color: 'text-amber-600 dark:text-amber-400 bg-amber-100 dark:bg-amber-900/30',
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
icon: Tv,
|
|
38
|
+
title: 'Live Streaming',
|
|
39
|
+
description: 'WebRTC-ready architecture for live video broadcasts and interactive rooms.',
|
|
40
|
+
color: 'text-pink-600 dark:text-pink-400 bg-pink-100 dark:bg-pink-900/30',
|
|
41
|
+
},
|
|
42
|
+
]
|
|
43
|
+
|
|
44
|
+
export default function Home() {
|
|
45
|
+
return (
|
|
46
|
+
<main className="min-h-screen bg-background">
|
|
47
|
+
{/* Hero */}
|
|
48
|
+
<section className="mx-auto max-w-5xl px-4 py-24 text-center">
|
|
49
|
+
<div className="inline-flex items-center rounded-full border border-border bg-muted px-3 py-1 text-sm text-muted-foreground mb-6">
|
|
50
|
+
<Film className="mr-1.5 h-3.5 w-3.5" />
|
|
51
|
+
Video SaaS Starter
|
|
52
|
+
</div>
|
|
53
|
+
<h1 className="text-4xl font-bold tracking-tight text-foreground sm:text-6xl mb-4">
|
|
54
|
+
Build your video{' '}
|
|
55
|
+
<span className="text-primary">platform</span>
|
|
56
|
+
</h1>
|
|
57
|
+
<p className="mx-auto max-w-2xl text-lg text-muted-foreground mb-8">
|
|
58
|
+
A production-ready starter for video streaming, course platforms, and video SaaS.
|
|
59
|
+
Auth, payments, transcoding, and analytics included.
|
|
60
|
+
</p>
|
|
61
|
+
<div className="flex items-center justify-center gap-4">
|
|
62
|
+
|
|
63
|
+
<Link href="/signup" className="inline-flex items-center justify-center rounded-md bg-primary px-8 py-3 text-sm font-medium text-primary-foreground hover:bg-primary/90 transition-colors">
|
|
64
|
+
Get Started <ArrowRight className="ml-2 h-4 w-4" />
|
|
65
|
+
</Link>
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
<Link href="/login" className="inline-flex items-center justify-center rounded-md border border-input bg-background px-8 py-3 text-sm font-medium text-foreground hover:bg-accent transition-colors">Sign In</Link>
|
|
69
|
+
|
|
70
|
+
</div>
|
|
71
|
+
</section>
|
|
72
|
+
|
|
73
|
+
{/* Video Player Preview */}
|
|
74
|
+
<section className="mx-auto max-w-3xl px-4 pb-16">
|
|
75
|
+
<div className="rounded-xl border border-border bg-card overflow-hidden shadow-lg">
|
|
76
|
+
<div className="aspect-video bg-foreground/5 relative flex items-center justify-center">
|
|
77
|
+
<button className="flex h-16 w-16 items-center justify-center rounded-full bg-primary/90 text-primary-foreground shadow-lg hover:bg-primary transition-colors">
|
|
78
|
+
<Play className="h-7 w-7 ml-1" />
|
|
79
|
+
</button>
|
|
80
|
+
<div className="absolute bottom-4 left-4 right-4">
|
|
81
|
+
<div className="h-1 rounded-full bg-muted overflow-hidden">
|
|
82
|
+
<div className="h-full w-1/3 rounded-full bg-primary" />
|
|
83
|
+
</div>
|
|
84
|
+
<div className="flex items-center justify-between mt-2 text-xs text-muted-foreground">
|
|
85
|
+
<span>2:15</span>
|
|
86
|
+
<span>6:30</span>
|
|
87
|
+
</div>
|
|
88
|
+
</div>
|
|
89
|
+
</div>
|
|
90
|
+
<div className="p-4 border-t border-border">
|
|
91
|
+
<h3 className="font-semibold text-card-foreground">Getting Started with Your Video Platform</h3>
|
|
92
|
+
<p className="text-sm text-muted-foreground mt-1">Learn how to set up and customize your video app</p>
|
|
93
|
+
</div>
|
|
94
|
+
</div>
|
|
95
|
+
</section>
|
|
96
|
+
|
|
97
|
+
{/* Features */}
|
|
98
|
+
<section className="mx-auto max-w-5xl px-4 pb-24">
|
|
99
|
+
<div className="text-center mb-12">
|
|
100
|
+
<h2 className="text-3xl font-bold text-foreground mb-2">Everything for Video</h2>
|
|
101
|
+
<p className="text-muted-foreground">Build any video platform — courses, streaming, VOD, or live broadcasts.</p>
|
|
102
|
+
</div>
|
|
103
|
+
<div className="grid gap-6 md:grid-cols-2 lg:grid-cols-3">
|
|
104
|
+
{FEATURES.map((feature) => (
|
|
105
|
+
<div key={feature.title} className="rounded-xl border border-border bg-card p-6">
|
|
106
|
+
<div className={`mb-4 flex h-10 w-10 items-center justify-center rounded-lg ${feature.color}`}>
|
|
107
|
+
<feature.icon className="h-5 w-5" />
|
|
108
|
+
</div>
|
|
109
|
+
<h3 className="text-lg font-semibold text-card-foreground mb-2">{feature.title}</h3>
|
|
110
|
+
<p className="text-sm text-muted-foreground">{feature.description}</p>
|
|
111
|
+
</div>
|
|
112
|
+
))}
|
|
113
|
+
</div>
|
|
114
|
+
</section>
|
|
115
|
+
|
|
116
|
+
{/* CTA */}
|
|
117
|
+
<section className="mx-auto max-w-5xl px-4 pb-24">
|
|
118
|
+
<div className="rounded-xl border border-primary/20 bg-primary/5 p-8 md:p-12 text-center">
|
|
119
|
+
<h2 className="text-2xl font-bold text-foreground mb-2">Ready to build your video platform?</h2>
|
|
120
|
+
<p className="text-muted-foreground mb-6 max-w-lg mx-auto">
|
|
121
|
+
Everything you need to launch — auth, payments, and video streaming pre-configured.
|
|
122
|
+
</p>
|
|
123
|
+
|
|
124
|
+
<Link href="/signup" className="inline-flex items-center justify-center rounded-md bg-primary px-8 py-3 text-sm font-medium text-primary-foreground hover:bg-primary/90 transition-colors">
|
|
125
|
+
Start Building <ArrowRight className="ml-2 h-4 w-4" />
|
|
126
|
+
</Link>
|
|
127
|
+
|
|
128
|
+
</div>
|
|
129
|
+
</section>
|
|
130
|
+
</main>
|
|
131
|
+
)
|
|
132
|
+
}
|