@digilogiclabs/create-saas-app 1.5.0 → 1.5.2
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/dist/.tsbuildinfo +1 -1
- package/dist/cli/commands/add.d.ts +6 -0
- package/dist/cli/commands/add.d.ts.map +1 -0
- package/dist/cli/commands/add.js +39 -0
- package/dist/cli/commands/add.js.map +1 -0
- package/dist/cli/commands/create.d.ts +28 -0
- package/dist/cli/commands/create.d.ts.map +1 -0
- package/dist/cli/commands/create.js +130 -0
- package/dist/cli/commands/create.js.map +1 -0
- package/dist/cli/commands/index.d.ts +4 -0
- package/dist/cli/commands/index.d.ts.map +1 -0
- package/dist/cli/commands/index.js +20 -0
- package/dist/cli/commands/index.js.map +1 -0
- package/dist/cli/commands/update.d.ts +6 -0
- package/dist/cli/commands/update.d.ts.map +1 -0
- package/dist/cli/commands/update.js +68 -0
- package/dist/cli/commands/update.js.map +1 -0
- package/dist/{index.d.ts → cli/index.d.ts} +2 -3
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +59 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/prompts/index.d.ts +2 -0
- package/dist/cli/prompts/index.d.ts.map +1 -0
- package/dist/cli/prompts/index.js +18 -0
- package/dist/cli/prompts/index.js.map +1 -0
- package/dist/cli/prompts/project-setup.d.ts +5 -0
- package/dist/cli/prompts/project-setup.d.ts.map +1 -0
- package/dist/cli/prompts/project-setup.js +251 -0
- package/dist/cli/prompts/project-setup.js.map +1 -0
- package/dist/cli/utils/git.d.ts +9 -0
- package/dist/cli/utils/git.d.ts.map +1 -0
- package/dist/cli/utils/git.js +77 -0
- package/dist/cli/utils/git.js.map +1 -0
- package/dist/cli/utils/index.d.ts +5 -0
- package/dist/cli/utils/index.d.ts.map +1 -0
- package/dist/cli/utils/index.js +21 -0
- package/dist/cli/utils/index.js.map +1 -0
- package/dist/cli/utils/logger.d.ts +16 -0
- package/dist/cli/utils/logger.d.ts.map +1 -0
- package/dist/cli/utils/logger.js +55 -0
- package/dist/cli/utils/logger.js.map +1 -0
- package/dist/cli/utils/package-manager.d.ts +8 -0
- package/dist/cli/utils/package-manager.d.ts.map +1 -0
- package/dist/cli/utils/package-manager.js +92 -0
- package/dist/cli/utils/package-manager.js.map +1 -0
- package/dist/cli/utils/spinner.d.ts +7 -0
- package/dist/cli/utils/spinner.d.ts.map +1 -0
- package/dist/cli/utils/spinner.js +48 -0
- package/dist/cli/utils/spinner.js.map +1 -0
- package/dist/cli/validators/dependencies.d.ts +15 -0
- package/dist/cli/validators/dependencies.d.ts.map +1 -0
- package/dist/cli/validators/dependencies.js +108 -0
- package/dist/cli/validators/dependencies.js.map +1 -0
- package/dist/cli/validators/index.d.ts +3 -0
- package/dist/cli/validators/index.d.ts.map +1 -0
- package/dist/cli/validators/index.js +19 -0
- package/dist/cli/validators/index.js.map +1 -0
- package/dist/cli/validators/project-name.d.ts +5 -0
- package/dist/cli/validators/project-name.d.ts.map +1 -0
- package/dist/cli/validators/project-name.js +151 -0
- package/dist/cli/validators/project-name.js.map +1 -0
- package/dist/generators/file-processor.d.ts +28 -0
- package/dist/generators/file-processor.d.ts.map +1 -0
- package/dist/generators/file-processor.js +203 -0
- package/dist/generators/file-processor.js.map +1 -0
- package/dist/generators/index.d.ts +4 -0
- package/dist/generators/index.d.ts.map +1 -0
- package/dist/generators/index.js +20 -0
- package/dist/generators/index.js.map +1 -0
- package/dist/generators/package-installer.d.ts +29 -0
- package/dist/generators/package-installer.d.ts.map +1 -0
- package/dist/generators/package-installer.js +167 -0
- package/dist/generators/package-installer.js.map +1 -0
- package/dist/generators/template-generator.d.ts +48 -0
- package/dist/generators/template-generator.d.ts.map +1 -0
- package/dist/generators/template-generator.js +276 -0
- package/dist/generators/template-generator.js.map +1 -0
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
- package/src/templates/web/base/template/package.json +58 -58
- package/src/templates/web/base/template/src/test/setup.ts +78 -78
- package/src/templates/web/ui-auth/template/package.json +50 -50
- package/src/templates/web/ui-auth/template/src/test/setup.ts +78 -78
- package/src/templates/web/ui-auth-payments/template/package-lock.json +12240 -0
- package/src/templates/web/ui-auth-payments/template/package.json +52 -52
- package/src/templates/web/ui-auth-payments/template/src/components/client/login-form.tsx +1 -1
- package/src/templates/web/ui-auth-payments/template/src/components/client/signup-form.tsx +3 -3
- package/src/templates/web/ui-auth-payments/template/src/test/setup.ts +78 -78
- package/src/templates/web/ui-auth-payments/template/tsconfig.tsbuildinfo +1 -0
- package/src/templates/web/ui-auth-payments-audio/template/package-lock.json +12241 -0
- package/src/templates/web/ui-auth-payments-audio/template/package.json +53 -52
- package/src/templates/web/ui-auth-payments-audio/template/src/app/login/page.tsx +2 -105
- package/src/templates/web/ui-auth-payments-audio/template/src/app/signup/page.tsx +2 -124
- package/{dist/templates/web/ui-auth-payments → src/templates/web/ui-auth-payments-audio}/template/src/components/client/login-form.tsx +1 -1
- package/{dist/templates/web/ui-auth-payments → src/templates/web/ui-auth-payments-audio}/template/src/components/client/signup-form.tsx +3 -3
- package/src/templates/web/ui-auth-payments-audio/template/src/lib/actions/index.ts +14 -0
- package/src/templates/web/ui-auth-payments-audio/template/src/test/setup.ts +78 -78
- package/src/templates/web/ui-auth-payments-audio/template/tsconfig.tsbuildinfo +1 -0
- package/src/templates/web/ui-auth-payments-video/template/package.json +53 -52
- package/src/templates/web/ui-auth-payments-video/template/src/test/setup.ts +78 -78
- package/src/templates/web/ui-only/template/package.json +49 -49
- package/src/templates/web/ui-only/template/src/test/setup.ts +78 -78
- package/src/templates/web/ui-package-test/template/package.json +42 -42
- package/dist/templates/mobile/base/template/.env.example +0 -15
- package/dist/templates/mobile/base/template/App.tsx +0 -88
- package/dist/templates/mobile/base/template/app/(auth)/login.tsx +0 -44
- package/dist/templates/mobile/base/template/app/(auth)/signup.tsx +0 -43
- package/dist/templates/mobile/base/template/app/checkout.tsx +0 -20
- package/dist/templates/mobile/base/template/package.json +0 -38
- package/dist/templates/shared/auth/firebase/web/config.ts +0 -23
- package/dist/templates/shared/auth/supabase/web/config.ts +0 -8
- package/dist/templates/web/base/template/.env.example +0 -15
- package/dist/templates/web/base/template/.eslintrc.js +0 -8
- package/dist/templates/web/base/template/README.md +0 -68
- package/dist/templates/web/base/template/next.config.js +0 -15
- package/dist/templates/web/base/template/package.json +0 -58
- package/dist/templates/web/base/template/postcss.config.js +0 -7
- package/dist/templates/web/base/template/src/app/auth/callback/route.ts +0 -18
- package/dist/templates/web/base/template/src/app/checkout/page.tsx +0 -28
- package/dist/templates/web/base/template/src/app/error.tsx +0 -97
- package/dist/templates/web/base/template/src/app/globals.css +0 -60
- package/dist/templates/web/base/template/src/app/layout.tsx +0 -35
- package/dist/templates/web/base/template/src/app/loading.tsx +0 -34
- package/dist/templates/web/base/template/src/app/login/page.tsx +0 -39
- package/dist/templates/web/base/template/src/app/page.tsx +0 -132
- package/dist/templates/web/base/template/src/app/signup/page.tsx +0 -39
- package/dist/templates/web/base/template/src/components/__tests__/example.test.tsx +0 -49
- package/dist/templates/web/base/template/src/components/providers/app-providers.tsx +0 -33
- package/dist/templates/web/base/template/src/components/providers/theme-provider.tsx +0 -94
- package/dist/templates/web/base/template/src/components/shared/footer.tsx +0 -36
- package/dist/templates/web/base/template/src/components/shared/header.tsx +0 -44
- package/dist/templates/web/base/template/src/components/ui/badge.tsx +0 -36
- package/dist/templates/web/base/template/src/components/ui/button.tsx +0 -56
- package/dist/templates/web/base/template/src/components/ui/card.tsx +0 -71
- package/dist/templates/web/base/template/src/components/ui/theme-toggle.tsx +0 -34
- package/dist/templates/web/base/template/src/lib/env.ts +0 -46
- package/dist/templates/web/base/template/src/lib/utils.ts +0 -140
- package/dist/templates/web/base/template/src/test/setup.ts +0 -79
- package/dist/templates/web/base/template/tailwind.config.js +0 -77
- package/dist/templates/web/base/template/tsconfig.json +0 -33
- package/dist/templates/web/base/template/vitest.config.ts +0 -17
- package/dist/templates/web/base/template.backup/.env.example +0 -15
- package/dist/templates/web/base/template.backup.20250817/.env.example +0 -15
- package/dist/templates/web/ui-auth/template/.env.example +0 -15
- package/dist/templates/web/ui-auth/template/.eslintrc.js +0 -8
- package/dist/templates/web/ui-auth/template/README.md +0 -68
- package/dist/templates/web/ui-auth/template/next.config.js +0 -12
- package/dist/templates/web/ui-auth/template/package.json +0 -50
- package/dist/templates/web/ui-auth/template/postcss.config.js +0 -7
- package/dist/templates/web/ui-auth/template/src/app/auth/callback/route.ts +0 -12
- package/dist/templates/web/ui-auth/template/src/app/checkout/page.tsx +0 -25
- package/dist/templates/web/ui-auth/template/src/app/error.tsx +0 -67
- package/dist/templates/web/ui-auth/template/src/app/globals.css +0 -42
- package/dist/templates/web/ui-auth/template/src/app/layout.tsx +0 -33
- package/dist/templates/web/ui-auth/template/src/app/loading.tsx +0 -20
- package/dist/templates/web/ui-auth/template/src/app/login/page.tsx +0 -109
- package/dist/templates/web/ui-auth/template/src/app/page.tsx +0 -129
- package/dist/templates/web/ui-auth/template/src/app/signup/page.tsx +0 -128
- package/dist/templates/web/ui-auth/template/src/components/__tests__/example.test.tsx +0 -49
- package/dist/templates/web/ui-auth/template/src/components/providers/app-providers.tsx +0 -29
- package/dist/templates/web/ui-auth/template/src/components/providers/theme-provider.tsx +0 -94
- package/dist/templates/web/ui-auth/template/src/components/shared/footer.tsx +0 -36
- package/dist/templates/web/ui-auth/template/src/components/shared/header.tsx +0 -53
- package/dist/templates/web/ui-auth/template/src/components/ui/badge.tsx +0 -36
- package/dist/templates/web/ui-auth/template/src/components/ui/theme-toggle.tsx +0 -34
- package/dist/templates/web/ui-auth/template/src/lib/env.ts +0 -49
- package/dist/templates/web/ui-auth/template/src/lib/utils.ts +0 -140
- package/dist/templates/web/ui-auth/template/src/test/setup.ts +0 -79
- package/dist/templates/web/ui-auth/template/tailwind.config.js +0 -77
- package/dist/templates/web/ui-auth/template/tsconfig.json +0 -33
- package/dist/templates/web/ui-auth/template/vitest.config.ts +0 -17
- package/dist/templates/web/ui-auth/template.backup/.env.example +0 -15
- package/dist/templates/web/ui-auth/template.backup.20250817/.env.example +0 -15
- package/dist/templates/web/ui-auth-payments/template/.env.example +0 -15
- package/dist/templates/web/ui-auth-payments/template/README.md +0 -165
- package/dist/templates/web/ui-auth-payments/template/next.config.js +0 -12
- package/dist/templates/web/ui-auth-payments/template/package.json +0 -52
- package/dist/templates/web/ui-auth-payments/template/postcss.config.js +0 -7
- package/dist/templates/web/ui-auth-payments/template/src/app/auth/callback/route.ts +0 -12
- package/dist/templates/web/ui-auth-payments/template/src/app/billing/page.tsx +0 -211
- package/dist/templates/web/ui-auth-payments/template/src/app/checkout/page.tsx +0 -142
- package/dist/templates/web/ui-auth-payments/template/src/app/error.tsx +0 -67
- package/dist/templates/web/ui-auth-payments/template/src/app/globals.css +0 -42
- package/dist/templates/web/ui-auth-payments/template/src/app/layout.tsx +0 -33
- package/dist/templates/web/ui-auth-payments/template/src/app/loading.tsx +0 -20
- package/dist/templates/web/ui-auth-payments/template/src/app/login/loading.tsx +0 -38
- package/dist/templates/web/ui-auth-payments/template/src/app/login/page.tsx +0 -109
- package/dist/templates/web/ui-auth-payments/template/src/app/page.tsx +0 -143
- package/dist/templates/web/ui-auth-payments/template/src/app/signup/loading.tsx +0 -50
- package/dist/templates/web/ui-auth-payments/template/src/app/signup/page.tsx +0 -128
- 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/components/client/newsletter-signup.tsx +0 -68
- package/dist/templates/web/ui-auth-payments/template/src/components/providers/app-providers.tsx +0 -32
- package/dist/templates/web/ui-auth-payments/template/src/components/providers/theme-provider.tsx +0 -94
- package/dist/templates/web/ui-auth-payments/template/src/components/shared/footer.tsx +0 -36
- package/dist/templates/web/ui-auth-payments/template/src/components/shared/header.tsx +0 -62
- package/dist/templates/web/ui-auth-payments/template/src/components/ui/badge.tsx +0 -36
- package/dist/templates/web/ui-auth-payments/template/src/components/ui/theme-toggle.tsx +0 -34
- package/dist/templates/web/ui-auth-payments/template/src/lib/actions/index.ts +0 -340
- package/dist/templates/web/ui-auth-payments/template/src/lib/auth-server.ts +0 -177
- package/dist/templates/web/ui-auth-payments/template/src/lib/env.ts +0 -49
- package/dist/templates/web/ui-auth-payments/template/src/lib/utils.ts +0 -140
- package/dist/templates/web/ui-auth-payments/template/src/test/setup.ts +0 -79
- package/dist/templates/web/ui-auth-payments/template/tailwind.config.js +0 -77
- package/dist/templates/web/ui-auth-payments/template/tsconfig.json +0 -33
- package/dist/templates/web/ui-auth-payments/template/vitest.config.ts +0 -17
- package/dist/templates/web/ui-auth-payments-audio/template/.env.example +0 -15
- package/dist/templates/web/ui-auth-payments-audio/template/README.md +0 -187
- package/dist/templates/web/ui-auth-payments-audio/template/next.config.js +0 -12
- package/dist/templates/web/ui-auth-payments-audio/template/package.json +0 -52
- package/dist/templates/web/ui-auth-payments-audio/template/postcss.config.js +0 -7
- package/dist/templates/web/ui-auth-payments-audio/template/src/app/auth/callback/route.ts +0 -12
- package/dist/templates/web/ui-auth-payments-audio/template/src/app/billing/page.tsx +0 -211
- package/dist/templates/web/ui-auth-payments-audio/template/src/app/checkout/page.tsx +0 -142
- package/dist/templates/web/ui-auth-payments-audio/template/src/app/error.tsx +0 -67
- package/dist/templates/web/ui-auth-payments-audio/template/src/app/globals.css +0 -42
- package/dist/templates/web/ui-auth-payments-audio/template/src/app/layout.tsx +0 -35
- package/dist/templates/web/ui-auth-payments-audio/template/src/app/loading.tsx +0 -20
- package/dist/templates/web/ui-auth-payments-audio/template/src/app/login/page.tsx +0 -109
- package/dist/templates/web/ui-auth-payments-audio/template/src/app/page.tsx +0 -181
- package/dist/templates/web/ui-auth-payments-audio/template/src/app/signup/page.tsx +0 -128
- 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/components/providers/app-providers.tsx +0 -32
- package/dist/templates/web/ui-auth-payments-audio/template/src/components/providers/theme-provider.tsx +0 -94
- package/dist/templates/web/ui-auth-payments-audio/template/src/components/shared/footer.tsx +0 -36
- package/dist/templates/web/ui-auth-payments-audio/template/src/components/shared/header.tsx +0 -62
- package/dist/templates/web/ui-auth-payments-audio/template/src/components/ui/badge.tsx +0 -36
- package/dist/templates/web/ui-auth-payments-audio/template/src/components/ui/theme-toggle.tsx +0 -34
- package/dist/templates/web/ui-auth-payments-audio/template/src/lib/env.ts +0 -49
- package/dist/templates/web/ui-auth-payments-audio/template/src/lib/utils.ts +0 -140
- package/dist/templates/web/ui-auth-payments-audio/template/src/test/setup.ts +0 -79
- package/dist/templates/web/ui-auth-payments-audio/template/tailwind.config.js +0 -77
- package/dist/templates/web/ui-auth-payments-audio/template/tsconfig.json +0 -33
- package/dist/templates/web/ui-auth-payments-audio/template/vitest.config.ts +0 -17
- package/dist/templates/web/ui-auth-payments-video/template/.env.example +0 -15
- package/dist/templates/web/ui-auth-payments-video/template/README.md +0 -190
- package/dist/templates/web/ui-auth-payments-video/template/next.config.js +0 -12
- package/dist/templates/web/ui-auth-payments-video/template/package.json +0 -52
- package/dist/templates/web/ui-auth-payments-video/template/postcss.config.js +0 -7
- package/dist/templates/web/ui-auth-payments-video/template/src/app/auth/callback/route.ts +0 -12
- package/dist/templates/web/ui-auth-payments-video/template/src/app/billing/page.tsx +0 -211
- package/dist/templates/web/ui-auth-payments-video/template/src/app/checkout/page.tsx +0 -142
- package/dist/templates/web/ui-auth-payments-video/template/src/app/error.tsx +0 -67
- package/dist/templates/web/ui-auth-payments-video/template/src/app/globals.css +0 -42
- package/dist/templates/web/ui-auth-payments-video/template/src/app/layout.tsx +0 -33
- package/dist/templates/web/ui-auth-payments-video/template/src/app/loading.tsx +0 -20
- package/dist/templates/web/ui-auth-payments-video/template/src/app/login/page.tsx +0 -109
- package/dist/templates/web/ui-auth-payments-video/template/src/app/page.tsx +0 -187
- package/dist/templates/web/ui-auth-payments-video/template/src/app/signup/page.tsx +0 -128
- 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/components/providers/app-providers.tsx +0 -32
- package/dist/templates/web/ui-auth-payments-video/template/src/components/providers/theme-provider.tsx +0 -94
- package/dist/templates/web/ui-auth-payments-video/template/src/components/shared/footer.tsx +0 -36
- package/dist/templates/web/ui-auth-payments-video/template/src/components/shared/header.tsx +0 -62
- package/dist/templates/web/ui-auth-payments-video/template/src/components/ui/badge.tsx +0 -36
- package/dist/templates/web/ui-auth-payments-video/template/src/components/ui/theme-toggle.tsx +0 -34
- package/dist/templates/web/ui-auth-payments-video/template/src/lib/env.ts +0 -49
- package/dist/templates/web/ui-auth-payments-video/template/src/lib/utils.ts +0 -140
- package/dist/templates/web/ui-auth-payments-video/template/src/test/setup.ts +0 -79
- package/dist/templates/web/ui-auth-payments-video/template/tailwind.config.js +0 -77
- package/dist/templates/web/ui-auth-payments-video/template/tsconfig.json +0 -33
- package/dist/templates/web/ui-auth-payments-video/template/vitest.config.ts +0 -17
- package/dist/templates/web/ui-only/template/.env.example +0 -15
- package/dist/templates/web/ui-only/template/.eslintrc.js +0 -8
- package/dist/templates/web/ui-only/template/README.md +0 -68
- package/dist/templates/web/ui-only/template/next.config.js +0 -12
- package/dist/templates/web/ui-only/template/package.json +0 -49
- package/dist/templates/web/ui-only/template/postcss.config.js +0 -7
- package/dist/templates/web/ui-only/template/src/app/auth/callback/route.ts +0 -12
- package/dist/templates/web/ui-only/template/src/app/checkout/page.tsx +0 -25
- package/dist/templates/web/ui-only/template/src/app/error.tsx +0 -67
- package/dist/templates/web/ui-only/template/src/app/globals.css +0 -42
- package/dist/templates/web/ui-only/template/src/app/layout.tsx +0 -33
- package/dist/templates/web/ui-only/template/src/app/loading.tsx +0 -20
- package/dist/templates/web/ui-only/template/src/app/login/page.tsx +0 -63
- package/dist/templates/web/ui-only/template/src/app/page.tsx +0 -91
- package/dist/templates/web/ui-only/template/src/app/signup/page.tsx +0 -79
- package/dist/templates/web/ui-only/template/src/components/__tests__/example.test.tsx +0 -49
- package/dist/templates/web/ui-only/template/src/components/providers/app-providers.tsx +0 -26
- package/dist/templates/web/ui-only/template/src/components/providers/theme-provider.tsx +0 -94
- package/dist/templates/web/ui-only/template/src/components/shared/footer.tsx +0 -36
- package/dist/templates/web/ui-only/template/src/components/shared/header.tsx +0 -53
- package/dist/templates/web/ui-only/template/src/components/ui/badge.tsx +0 -36
- package/dist/templates/web/ui-only/template/src/components/ui/theme-toggle.tsx +0 -34
- package/dist/templates/web/ui-only/template/src/lib/env.ts +0 -49
- package/dist/templates/web/ui-only/template/src/lib/utils.ts +0 -140
- package/dist/templates/web/ui-only/template/src/test/setup.ts +0 -79
- package/dist/templates/web/ui-only/template/tailwind.config.js +0 -77
- package/dist/templates/web/ui-only/template/tsconfig.json +0 -33
- package/dist/templates/web/ui-only/template/vitest.config.ts +0 -17
- package/dist/templates/web/ui-only/template.backup/.env.example +0 -15
- package/dist/templates/web/ui-only/template.backup.20250817/.env.example +0 -15
- package/dist/templates/web/ui-package-test/template/package.json +0 -42
- package/dist/templates/web/ui-package-test/template/src/app/page.tsx +0 -106
- package/dist/templates/web/ui-package-test/template/tsconfig.json +0 -41
- /package/{dist/templates/web/ui-auth-payments → src/templates/web/ui-auth-payments-audio}/template/middleware.ts +0 -0
- /package/{dist/templates/web/ui-auth-payments → src/templates/web/ui-auth-payments-audio}/template/src/app/dashboard/layout.tsx +0 -0
- /package/{dist/templates/web/ui-auth-payments → src/templates/web/ui-auth-payments-audio}/template/src/app/dashboard/page.tsx +0 -0
- /package/{dist/templates/web/ui-auth-payments → src/templates/web/ui-auth-payments-audio}/template/src/components/client/auth-status.tsx +0 -0
- /package/{dist/templates/web/ui-auth-payments → src/templates/web/ui-auth-payments-audio}/template/src/lib/actions/auth.ts +0 -0
- /package/{dist/templates/web/base → src/templates/web/ui-auth-payments-audio}/template/src/lib/auth-server.ts +0 -0
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Optional Environment Configuration with Zod validation
|
|
3
|
-
*
|
|
4
|
-
* This provides type-safe environment variable validation.
|
|
5
|
-
* Usage is optional - existing templates will continue to work without this.
|
|
6
|
-
*
|
|
7
|
-
* To use: import { env } from '@/lib/env' instead of process.env
|
|
8
|
-
*/
|
|
9
|
-
|
|
10
|
-
import { z } from 'zod'
|
|
11
|
-
|
|
12
|
-
const envSchema = z.object({
|
|
13
|
-
// Next.js built-in
|
|
14
|
-
NODE_ENV: z.enum(['development', 'production', 'test']).default('development'),
|
|
15
|
-
|
|
16
|
-
// App configuration
|
|
17
|
-
NEXT_PUBLIC_APP_URL: z.string().url().optional(),
|
|
18
|
-
NEXT_PUBLIC_APP_NAME: z.string().default('{{titleCaseName}}'),
|
|
19
|
-
|
|
20
|
-
// Auth configuration (if using server-side auth)
|
|
21
|
-
SUPABASE_URL: z.string().url().optional(),
|
|
22
|
-
SUPABASE_ANON_KEY: z.string().optional(),
|
|
23
|
-
SUPABASE_SERVICE_ROLE_KEY: z.string().optional(),
|
|
24
|
-
|
|
25
|
-
// Payment configuration
|
|
26
|
-
STRIPE_SECRET_KEY: z.string().optional(),
|
|
27
|
-
STRIPE_WEBHOOK_SECRET: z.string().optional(),
|
|
28
|
-
|
|
29
|
-
// Optional analytics
|
|
30
|
-
ANALYTICS_ID: z.string().optional(),
|
|
31
|
-
})
|
|
32
|
-
|
|
33
|
-
// Parse with fallback to process.env for backward compatibility
|
|
34
|
-
function parseEnv() {
|
|
35
|
-
try {
|
|
36
|
-
return envSchema.parse(process.env)
|
|
37
|
-
} catch (error) {
|
|
38
|
-
if (process.env.NODE_ENV === 'development') {
|
|
39
|
-
console.warn('Environment validation failed. Using process.env fallback:', error)
|
|
40
|
-
}
|
|
41
|
-
// Fallback to process.env for backward compatibility
|
|
42
|
-
return process.env as any
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
export const env = parseEnv()
|
|
47
|
-
|
|
48
|
-
// Type helper for environment variables
|
|
49
|
-
export type Env = z.infer<typeof envSchema>
|
|
@@ -1,140 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Enhanced utility functions for {{titleCaseName}}
|
|
3
|
-
*
|
|
4
|
-
* This extends the basic utils with additional functionality while
|
|
5
|
-
* maintaining compatibility with existing templates.
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
import { type ClassValue, clsx } from "clsx"
|
|
9
|
-
import { twMerge } from "tailwind-merge"
|
|
10
|
-
|
|
11
|
-
// Core utility function (keeps existing functionality)
|
|
12
|
-
export function cn(...inputs: ClassValue[]) {
|
|
13
|
-
return twMerge(clsx(inputs))
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
// Additional utilities for enhanced templates
|
|
17
|
-
|
|
18
|
-
/**
|
|
19
|
-
* Format currency with proper locale support
|
|
20
|
-
*/
|
|
21
|
-
export function formatCurrency(
|
|
22
|
-
amount: number,
|
|
23
|
-
currency: string = 'USD',
|
|
24
|
-
locale: string = 'en-US'
|
|
25
|
-
): string {
|
|
26
|
-
return new Intl.NumberFormat(locale, {
|
|
27
|
-
style: 'currency',
|
|
28
|
-
currency,
|
|
29
|
-
}).format(amount)
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
/**
|
|
33
|
-
* Format date with relative time support
|
|
34
|
-
*/
|
|
35
|
-
export function formatDate(
|
|
36
|
-
date: Date | string,
|
|
37
|
-
options?: Intl.DateTimeFormatOptions
|
|
38
|
-
): string {
|
|
39
|
-
const dateObj = typeof date === 'string' ? new Date(date) : date
|
|
40
|
-
|
|
41
|
-
const defaultOptions: Intl.DateTimeFormatOptions = {
|
|
42
|
-
year: 'numeric',
|
|
43
|
-
month: 'short',
|
|
44
|
-
day: 'numeric',
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
return new Intl.DateTimeFormat('en-US', options || defaultOptions).format(dateObj)
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
/**
|
|
51
|
-
* Get relative time string (e.g., "2 hours ago")
|
|
52
|
-
*/
|
|
53
|
-
export function getRelativeTime(date: Date | string): string {
|
|
54
|
-
const dateObj = typeof date === 'string' ? new Date(date) : date
|
|
55
|
-
const now = new Date()
|
|
56
|
-
const diffInMs = now.getTime() - dateObj.getTime()
|
|
57
|
-
const diffInSeconds = Math.floor(diffInMs / 1000)
|
|
58
|
-
const diffInMinutes = Math.floor(diffInSeconds / 60)
|
|
59
|
-
const diffInHours = Math.floor(diffInMinutes / 60)
|
|
60
|
-
const diffInDays = Math.floor(diffInHours / 24)
|
|
61
|
-
|
|
62
|
-
if (diffInSeconds < 60) return 'just now'
|
|
63
|
-
if (diffInMinutes < 60) return `${diffInMinutes} minute${diffInMinutes > 1 ? 's' : ''} ago`
|
|
64
|
-
if (diffInHours < 24) return `${diffInHours} hour${diffInHours > 1 ? 's' : ''} ago`
|
|
65
|
-
if (diffInDays < 7) return `${diffInDays} day${diffInDays > 1 ? 's' : ''} ago`
|
|
66
|
-
|
|
67
|
-
return formatDate(dateObj)
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
/**
|
|
71
|
-
* Truncate text to specified length with ellipsis
|
|
72
|
-
*/
|
|
73
|
-
export function truncate(text: string, length: number = 50): string {
|
|
74
|
-
if (text.length <= length) return text
|
|
75
|
-
return text.slice(0, length).trim() + '...'
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
/**
|
|
79
|
-
* Generate initials from a name
|
|
80
|
-
*/
|
|
81
|
-
export function getInitials(name: string): string {
|
|
82
|
-
return name
|
|
83
|
-
.split(' ')
|
|
84
|
-
.map(word => word.charAt(0).toUpperCase())
|
|
85
|
-
.slice(0, 2)
|
|
86
|
-
.join('')
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
/**
|
|
90
|
-
* Validate email format
|
|
91
|
-
*/
|
|
92
|
-
export function isValidEmail(email: string): boolean {
|
|
93
|
-
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/
|
|
94
|
-
return emailRegex.test(email)
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
/**
|
|
98
|
-
* Generate a random ID
|
|
99
|
-
*/
|
|
100
|
-
export function generateId(prefix: string = ''): string {
|
|
101
|
-
const timestamp = Date.now().toString(36)
|
|
102
|
-
const randomString = Math.random().toString(36).substring(2)
|
|
103
|
-
return prefix ? `${prefix}-${timestamp}-${randomString}` : `${timestamp}-${randomString}`
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
/**
|
|
107
|
-
* Debounce function
|
|
108
|
-
*/
|
|
109
|
-
export function debounce<T extends (...args: any[]) => any>(
|
|
110
|
-
func: T,
|
|
111
|
-
delay: number
|
|
112
|
-
): (...args: Parameters<T>) => void {
|
|
113
|
-
let timeoutId: NodeJS.Timeout | null = null
|
|
114
|
-
|
|
115
|
-
return (...args: Parameters<T>) => {
|
|
116
|
-
if (timeoutId !== null) {
|
|
117
|
-
clearTimeout(timeoutId)
|
|
118
|
-
}
|
|
119
|
-
timeoutId = setTimeout(() => func(...args), delay)
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
/**
|
|
124
|
-
* Sleep/delay function for async operations
|
|
125
|
-
*/
|
|
126
|
-
export function sleep(ms: number): Promise<void> {
|
|
127
|
-
return new Promise(resolve => setTimeout(resolve, ms))
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
/**
|
|
131
|
-
* Safe JSON parse with fallback
|
|
132
|
-
*/
|
|
133
|
-
export function safeJsonParse<T>(json: string, fallback: T): T {
|
|
134
|
-
try {
|
|
135
|
-
return JSON.parse(json)
|
|
136
|
-
} catch {
|
|
137
|
-
return fallback
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
|
|
@@ -1,79 +0,0 @@
|
|
|
1
|
-
import '@testing-library/jest-dom'
|
|
2
|
-
import { vi } from 'vitest'
|
|
3
|
-
|
|
4
|
-
// Mock Next.js router
|
|
5
|
-
vi.mock('next/navigation', () => ({
|
|
6
|
-
useRouter: () => ({
|
|
7
|
-
push: vi.fn(),
|
|
8
|
-
back: vi.fn(),
|
|
9
|
-
forward: vi.fn(),
|
|
10
|
-
refresh: vi.fn(),
|
|
11
|
-
replace: vi.fn(),
|
|
12
|
-
prefetch: vi.fn(),
|
|
13
|
-
}),
|
|
14
|
-
useSearchParams: () => new URLSearchParams(),
|
|
15
|
-
usePathname: () => '/',
|
|
16
|
-
}))
|
|
17
|
-
|
|
18
|
-
// Mock SaaS Factory Auth (optional - only if testing auth components)
|
|
19
|
-
vi.mock('@digilogiclabs/saas-factory-auth', () => ({
|
|
20
|
-
useAuth: () => ({
|
|
21
|
-
user: null,
|
|
22
|
-
loading: false,
|
|
23
|
-
error: null,
|
|
24
|
-
signIn: vi.fn(),
|
|
25
|
-
signUp: vi.fn(),
|
|
26
|
-
signOut: vi.fn(),
|
|
27
|
-
signInWithOAuth: vi.fn(),
|
|
28
|
-
}),
|
|
29
|
-
AuthProvider: ({ children }: { children: React.ReactNode }) => children,
|
|
30
|
-
}))
|
|
31
|
-
|
|
32
|
-
// Mock SaaS Factory Payments (optional - only if testing payment components)
|
|
33
|
-
vi.mock('@digilogiclabs/saas-factory-payments', () => ({
|
|
34
|
-
usePayments: () => ({
|
|
35
|
-
createCheckoutSession: vi.fn(),
|
|
36
|
-
createPortalSession: vi.fn(),
|
|
37
|
-
subscription: null,
|
|
38
|
-
loading: false,
|
|
39
|
-
}),
|
|
40
|
-
PaymentsProvider: ({ children }: { children: React.ReactNode }) => children,
|
|
41
|
-
}))
|
|
42
|
-
|
|
43
|
-
// Global test utilities
|
|
44
|
-
global.ResizeObserver = vi.fn().mockImplementation(() => ({
|
|
45
|
-
observe: vi.fn(),
|
|
46
|
-
unobserve: vi.fn(),
|
|
47
|
-
disconnect: vi.fn(),
|
|
48
|
-
}))
|
|
49
|
-
|
|
50
|
-
// Suppress console warnings in tests unless needed
|
|
51
|
-
const originalConsoleError = console.error
|
|
52
|
-
const originalConsoleWarn = console.warn
|
|
53
|
-
|
|
54
|
-
beforeEach(() => {
|
|
55
|
-
console.error = (...args: any[]) => {
|
|
56
|
-
if (
|
|
57
|
-
typeof args[0] === 'string' &&
|
|
58
|
-
args[0].includes('Warning: ReactDOM.render is no longer supported')
|
|
59
|
-
) {
|
|
60
|
-
return
|
|
61
|
-
}
|
|
62
|
-
originalConsoleError.call(console, ...args)
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
console.warn = (...args: any[]) => {
|
|
66
|
-
if (
|
|
67
|
-
typeof args[0] === 'string' &&
|
|
68
|
-
args[0].includes('useLayoutEffect does nothing on the server')
|
|
69
|
-
) {
|
|
70
|
-
return
|
|
71
|
-
}
|
|
72
|
-
originalConsoleWarn.call(console, ...args)
|
|
73
|
-
}
|
|
74
|
-
})
|
|
75
|
-
|
|
76
|
-
afterAll(() => {
|
|
77
|
-
console.error = originalConsoleError
|
|
78
|
-
console.warn = originalConsoleWarn
|
|
79
|
-
})
|
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
/** @type {import('tailwindcss').Config} */
|
|
2
|
-
module.exports = {
|
|
3
|
-
darkMode: ["class"],
|
|
4
|
-
content: [
|
|
5
|
-
'./pages/**/*.{ts,tsx}',
|
|
6
|
-
'./components/**/*.{ts,tsx}',
|
|
7
|
-
'./app/**/*.{ts,tsx}',
|
|
8
|
-
'./src/**/*.{ts,tsx}',
|
|
9
|
-
'../../node_modules/@digilogiclabs/saas-factory-ui/dist/**/*.{js,ts,jsx,tsx}',
|
|
10
|
-
],
|
|
11
|
-
theme: {
|
|
12
|
-
container: {
|
|
13
|
-
center: true,
|
|
14
|
-
padding: "2rem",
|
|
15
|
-
screens: {
|
|
16
|
-
"2xl": "1400px",
|
|
17
|
-
},
|
|
18
|
-
},
|
|
19
|
-
extend: {
|
|
20
|
-
colors: {
|
|
21
|
-
border: "hsl(var(--border))",
|
|
22
|
-
input: "hsl(var(--input))",
|
|
23
|
-
ring: "hsl(var(--ring))",
|
|
24
|
-
background: "hsl(var(--background))",
|
|
25
|
-
foreground: "hsl(var(--foreground))",
|
|
26
|
-
primary: {
|
|
27
|
-
DEFAULT: "hsl(var(--primary))",
|
|
28
|
-
foreground: "hsl(var(--primary-foreground))",
|
|
29
|
-
},
|
|
30
|
-
secondary: {
|
|
31
|
-
DEFAULT: "hsl(var(--secondary))",
|
|
32
|
-
foreground: "hsl(var(--secondary-foreground))",
|
|
33
|
-
},
|
|
34
|
-
destructive: {
|
|
35
|
-
DEFAULT: "hsl(var(--destructive))",
|
|
36
|
-
foreground: "hsl(var(--destructive-foreground))",
|
|
37
|
-
},
|
|
38
|
-
muted: {
|
|
39
|
-
DEFAULT: "hsl(var(--muted))",
|
|
40
|
-
foreground: "hsl(var(--muted-foreground))",
|
|
41
|
-
},
|
|
42
|
-
accent: {
|
|
43
|
-
DEFAULT: "hsl(var(--accent))",
|
|
44
|
-
foreground: "hsl(var(--accent-foreground))",
|
|
45
|
-
},
|
|
46
|
-
popover: {
|
|
47
|
-
DEFAULT: "hsl(var(--popover))",
|
|
48
|
-
foreground: "hsl(var(--popover-foreground))",
|
|
49
|
-
},
|
|
50
|
-
card: {
|
|
51
|
-
DEFAULT: "hsl(var(--card))",
|
|
52
|
-
foreground: "hsl(var(--card-foreground))",
|
|
53
|
-
},
|
|
54
|
-
},
|
|
55
|
-
borderRadius: {
|
|
56
|
-
lg: "var(--radius)",
|
|
57
|
-
md: "calc(var(--radius) - 2px)",
|
|
58
|
-
sm: "calc(var(--radius) - 4px)",
|
|
59
|
-
},
|
|
60
|
-
keyframes: {
|
|
61
|
-
"accordion-down": {
|
|
62
|
-
from: { height: 0 },
|
|
63
|
-
to: { height: "var(--radix-accordion-content-height)" },
|
|
64
|
-
},
|
|
65
|
-
"accordion-up": {
|
|
66
|
-
from: { height: "var(--radix-accordion-content-height)" },
|
|
67
|
-
to: { height: 0 },
|
|
68
|
-
},
|
|
69
|
-
},
|
|
70
|
-
animation: {
|
|
71
|
-
"accordion-down": "accordion-down 0.2s ease-out",
|
|
72
|
-
"accordion-up": "accordion-up 0.2s ease-out",
|
|
73
|
-
},
|
|
74
|
-
},
|
|
75
|
-
},
|
|
76
|
-
plugins: [],
|
|
77
|
-
}
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"compilerOptions": {
|
|
3
|
-
"target": "es5",
|
|
4
|
-
"lib": ["dom", "dom.iterable", "es6"],
|
|
5
|
-
"allowJs": true,
|
|
6
|
-
"skipLibCheck": true,
|
|
7
|
-
"strict": true,
|
|
8
|
-
"noEmit": true,
|
|
9
|
-
"esModuleInterop": true,
|
|
10
|
-
"module": "esnext",
|
|
11
|
-
"moduleResolution": "bundler",
|
|
12
|
-
"resolveJsonModule": true,
|
|
13
|
-
"isolatedModules": true,
|
|
14
|
-
"jsx": "preserve",
|
|
15
|
-
"incremental": true,
|
|
16
|
-
"plugins": [
|
|
17
|
-
{
|
|
18
|
-
"name": "next"
|
|
19
|
-
}
|
|
20
|
-
],
|
|
21
|
-
"baseUrl": ".",
|
|
22
|
-
"paths": {
|
|
23
|
-
"@/*": ["./src/*"],
|
|
24
|
-
"@/components/*": ["./src/components/*"],
|
|
25
|
-
"@/lib/*": ["./src/lib/*"],
|
|
26
|
-
"@/hooks/*": ["./src/hooks/*"],
|
|
27
|
-
"@/types/*": ["./src/types/*"]
|
|
28
|
-
}
|
|
29
|
-
},
|
|
30
|
-
"include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"],
|
|
31
|
-
"exclude": ["node_modules"]
|
|
32
|
-
}
|
|
33
|
-
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { defineConfig } from 'vitest/config'
|
|
2
|
-
import react from '@vitejs/plugin-react'
|
|
3
|
-
import path from 'path'
|
|
4
|
-
|
|
5
|
-
export default defineConfig({
|
|
6
|
-
plugins: [react()],
|
|
7
|
-
test: {
|
|
8
|
-
environment: 'jsdom',
|
|
9
|
-
setupFiles: ['./src/test/setup.ts'],
|
|
10
|
-
globals: true,
|
|
11
|
-
},
|
|
12
|
-
resolve: {
|
|
13
|
-
alias: {
|
|
14
|
-
'@': path.resolve(__dirname, './src'),
|
|
15
|
-
},
|
|
16
|
-
},
|
|
17
|
-
})
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
# Auth Configuration
|
|
2
|
-
NEXT_PUBLIC_AUTH_PROVIDER=supabase|firebase
|
|
3
|
-
|
|
4
|
-
# Supabase
|
|
5
|
-
NEXT_PUBLIC_SUPABASE_URL=
|
|
6
|
-
NEXT_PUBLIC_SUPABASE_ANON_KEY=
|
|
7
|
-
|
|
8
|
-
# Firebase
|
|
9
|
-
NEXT_PUBLIC_FIREBASE_API_KEY=
|
|
10
|
-
NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN=
|
|
11
|
-
NEXT_PUBLIC_FIREBASE_PROJECT_ID=
|
|
12
|
-
|
|
13
|
-
# Payments
|
|
14
|
-
NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY=
|
|
15
|
-
STRIPE_SECRET_KEY=
|
|
@@ -1,190 +0,0 @@
|
|
|
1
|
-
# {{titleCaseName}}
|
|
2
|
-
|
|
3
|
-
{{description}}
|
|
4
|
-
|
|
5
|
-
This is a Next.js 15 project created with the **Video Player App** template from `@digilogiclabs/create-saas-app`. It includes:
|
|
6
|
-
|
|
7
|
-
- 🎬 **Video Player** - Advanced video streaming capabilities
|
|
8
|
-
- 🎨 **UI Components** - @digilogiclabs/saas-factory-ui v0.10.0 with video player
|
|
9
|
-
- 🔐 **Authentication** - @digilogiclabs/saas-factory-auth v0.4.4
|
|
10
|
-
- 💳 **Payments** - @digilogiclabs/saas-factory-payments v0.3.0
|
|
11
|
-
- ⚡ **Next.js 15** - Latest React framework
|
|
12
|
-
- 🎯 **TypeScript** - Full type safety
|
|
13
|
-
- 🎨 **Tailwind CSS** - Utility-first styling
|
|
14
|
-
- 🌙 **Dark Mode** - Built-in theme support
|
|
15
|
-
|
|
16
|
-
## Features
|
|
17
|
-
|
|
18
|
-
### Video Player
|
|
19
|
-
- Comprehensive video player with quality selection
|
|
20
|
-
- Fullscreen support and playlist functionality
|
|
21
|
-
- Custom controls overlay with auto-hide
|
|
22
|
-
- Progress tracking and seeking
|
|
23
|
-
- Volume controls and mute
|
|
24
|
-
- Cross-platform support (Web + React Native)
|
|
25
|
-
|
|
26
|
-
### Authentication
|
|
27
|
-
- User registration and login
|
|
28
|
-
- Protected routes
|
|
29
|
-
- Session management
|
|
30
|
-
- Sign out functionality
|
|
31
|
-
|
|
32
|
-
### Payments Integration
|
|
33
|
-
- Subscription plans display
|
|
34
|
-
- Payment form with Stripe integration
|
|
35
|
-
- Billing history
|
|
36
|
-
- Payment method management
|
|
37
|
-
- Subscription management
|
|
38
|
-
|
|
39
|
-
### UI Components
|
|
40
|
-
- Modern, accessible components including VideoPlayer
|
|
41
|
-
- Dark/light theme support
|
|
42
|
-
- Responsive design
|
|
43
|
-
- TypeScript definitions
|
|
44
|
-
|
|
45
|
-
## Getting Started
|
|
46
|
-
|
|
47
|
-
### Prerequisites
|
|
48
|
-
- Node.js 18+
|
|
49
|
-
- npm, yarn, or pnpm
|
|
50
|
-
|
|
51
|
-
### Installation
|
|
52
|
-
|
|
53
|
-
1. Install dependencies:
|
|
54
|
-
```bash
|
|
55
|
-
npm install
|
|
56
|
-
# or
|
|
57
|
-
yarn install
|
|
58
|
-
# or
|
|
59
|
-
pnpm install
|
|
60
|
-
```
|
|
61
|
-
|
|
62
|
-
2. Set up environment variables:
|
|
63
|
-
```bash
|
|
64
|
-
cp .env.example .env.local
|
|
65
|
-
```
|
|
66
|
-
|
|
67
|
-
Edit `.env.local` with your configuration:
|
|
68
|
-
```env
|
|
69
|
-
# Authentication (choose one)
|
|
70
|
-
NEXT_PUBLIC_FIREBASE_API_KEY=your_firebase_api_key
|
|
71
|
-
NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN=your_project.firebaseapp.com
|
|
72
|
-
NEXT_PUBLIC_FIREBASE_PROJECT_ID=your_project_id
|
|
73
|
-
|
|
74
|
-
# OR
|
|
75
|
-
|
|
76
|
-
NEXT_PUBLIC_SUPABASE_URL=your_supabase_url
|
|
77
|
-
NEXT_PUBLIC_SUPABASE_ANON_KEY=your_supabase_anon_key
|
|
78
|
-
|
|
79
|
-
# Payments
|
|
80
|
-
NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY=your_stripe_publishable_key
|
|
81
|
-
STRIPE_SECRET_KEY=your_stripe_secret_key
|
|
82
|
-
```
|
|
83
|
-
|
|
84
|
-
3. Run the development server:
|
|
85
|
-
```bash
|
|
86
|
-
npm run dev
|
|
87
|
-
# or
|
|
88
|
-
yarn dev
|
|
89
|
-
# or
|
|
90
|
-
pnpm dev
|
|
91
|
-
```
|
|
92
|
-
|
|
93
|
-
Open [http://localhost:3000](http://localhost:3000) with your browser to see the result.
|
|
94
|
-
|
|
95
|
-
## Available Pages
|
|
96
|
-
|
|
97
|
-
- `/` - Home page with feature showcase
|
|
98
|
-
- `/login` - User authentication
|
|
99
|
-
- `/signup` - User registration
|
|
100
|
-
- `/checkout` - Subscription plans and payment
|
|
101
|
-
- `/billing` - Subscription and billing management
|
|
102
|
-
|
|
103
|
-
## Package Integration
|
|
104
|
-
|
|
105
|
-
### UI Package (@digilogiclabs/saas-factory-ui)
|
|
106
|
-
```tsx
|
|
107
|
-
import { Button, Card, VideoPlayer } from '@digilogiclabs/saas-factory-ui'
|
|
108
|
-
|
|
109
|
-
<Button variant="primary">Click me</Button>
|
|
110
|
-
<Card>Content here</Card>
|
|
111
|
-
<VideoPlayer
|
|
112
|
-
videos={[
|
|
113
|
-
{
|
|
114
|
-
id: '1',
|
|
115
|
-
title: 'Video Title',
|
|
116
|
-
description: 'Video description',
|
|
117
|
-
duration: 300,
|
|
118
|
-
src: '/path/to/video.mp4',
|
|
119
|
-
thumbnail: '/path/to/thumbnail.jpg',
|
|
120
|
-
qualities: [
|
|
121
|
-
{ label: '480p', src: '/path/to/480p.mp4' },
|
|
122
|
-
{ label: '720p', src: '/path/to/720p.mp4' }
|
|
123
|
-
]
|
|
124
|
-
}
|
|
125
|
-
]}
|
|
126
|
-
/>
|
|
127
|
-
```
|
|
128
|
-
|
|
129
|
-
### Auth Package (@digilogiclabs/saas-factory-auth)
|
|
130
|
-
```tsx
|
|
131
|
-
import { useAuth } from '@digilogiclabs/saas-factory-auth'
|
|
132
|
-
|
|
133
|
-
const { user, signIn, signOut, loading } = useAuth()
|
|
134
|
-
```
|
|
135
|
-
|
|
136
|
-
### Payments Package (@digilogiclabs/saas-factory-payments)
|
|
137
|
-
```tsx
|
|
138
|
-
import {
|
|
139
|
-
PaymentForm,
|
|
140
|
-
SubscriptionPlans,
|
|
141
|
-
SubscriptionManager
|
|
142
|
-
} from '@digilogiclabs/saas-factory-payments'
|
|
143
|
-
|
|
144
|
-
<SubscriptionPlans onPlanSelect={handlePlanSelect} />
|
|
145
|
-
<PaymentForm onSuccess={handleSuccess} onError={handleError} />
|
|
146
|
-
<SubscriptionManager onSubscriptionChange={handleChange} />
|
|
147
|
-
```
|
|
148
|
-
|
|
149
|
-
## Project Structure
|
|
150
|
-
|
|
151
|
-
```
|
|
152
|
-
src/
|
|
153
|
-
├── app/ # Next.js 15 app directory
|
|
154
|
-
│ ├── billing/ # Billing and subscription management
|
|
155
|
-
│ ├── checkout/ # Payment and subscription selection
|
|
156
|
-
│ ├── login/ # Authentication pages
|
|
157
|
-
│ ├── signup/
|
|
158
|
-
│ └── layout.tsx # Root layout with providers
|
|
159
|
-
├── components/
|
|
160
|
-
│ ├── providers/ # App-wide providers (Auth, Payments, Theme)
|
|
161
|
-
│ ├── shared/ # Shared components (Header, etc.)
|
|
162
|
-
│ └── ui/ # UI components
|
|
163
|
-
└── lib/ # Utilities and configurations
|
|
164
|
-
```
|
|
165
|
-
|
|
166
|
-
## Deployment
|
|
167
|
-
|
|
168
|
-
### Vercel (Recommended)
|
|
169
|
-
1. Push your code to GitHub
|
|
170
|
-
2. Connect your repository to Vercel
|
|
171
|
-
3. Add environment variables in Vercel dashboard
|
|
172
|
-
4. Deploy
|
|
173
|
-
|
|
174
|
-
### Other Platforms
|
|
175
|
-
This is a standard Next.js application and can be deployed to any platform that supports Node.js.
|
|
176
|
-
|
|
177
|
-
## Learn More
|
|
178
|
-
|
|
179
|
-
- [Next.js Documentation](https://nextjs.org/docs)
|
|
180
|
-
- [Digi Logic Labs Documentation](https://docs.digilogiclabs.com)
|
|
181
|
-
- [SaaS Factory UI Components](https://ui.digilogiclabs.com)
|
|
182
|
-
- [SaaS Factory Auth Guide](https://auth.digilogiclabs.com)
|
|
183
|
-
- [SaaS Factory Payments Guide](https://payments.digilogiclabs.com)
|
|
184
|
-
|
|
185
|
-
## Support
|
|
186
|
-
|
|
187
|
-
- 📚 [Documentation](https://docs.digilogiclabs.com)
|
|
188
|
-
- 💬 [Discord Community](https://discord.gg/digilogiclabs)
|
|
189
|
-
- 🐛 [Report Issues](https://github.com/DigiLogicLabs/create-saas-app/issues)
|
|
190
|
-
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "{{packageName}}",
|
|
3
|
-
"version": "0.1.0",
|
|
4
|
-
"description": "{{description}} - Video Player App (with UI Package v0.11.1 + Auth v1.0.0 + Payments)",
|
|
5
|
-
"private": true,
|
|
6
|
-
"scripts": {
|
|
7
|
-
"dev": "next dev --turbo",
|
|
8
|
-
"build": "next build",
|
|
9
|
-
"start": "next start",
|
|
10
|
-
"lint": "next lint",
|
|
11
|
-
"type-check": "tsc --noEmit",
|
|
12
|
-
"test": "vitest",
|
|
13
|
-
"test:ui": "vitest --ui",
|
|
14
|
-
"test:run": "vitest run"
|
|
15
|
-
},
|
|
16
|
-
"dependencies": {
|
|
17
|
-
"next": "^15.0.0",
|
|
18
|
-
"react": "^19.0.0",
|
|
19
|
-
"react-dom": "^19.0.0",
|
|
20
|
-
"@digilogiclabs/saas-factory-ui": "^0.11.1",
|
|
21
|
-
"@digilogiclabs/saas-factory-auth": "^1.0.0",
|
|
22
|
-
"@digilogiclabs/saas-factory-payments": "^1.0.0",
|
|
23
|
-
"stripe": "^14.0.0",
|
|
24
|
-
"tailwindcss": "^3.3.0",
|
|
25
|
-
"autoprefixer": "^10.4.16",
|
|
26
|
-
"postcss": "^8.4.31",
|
|
27
|
-
"clsx": "^2.0.0",
|
|
28
|
-
"class-variance-authority": "^0.7.0",
|
|
29
|
-
"tailwind-merge": "^2.0.0",
|
|
30
|
-
"next-themes": "^0.2.1",
|
|
31
|
-
"lucide-react": "^0.542.0",
|
|
32
|
-
"zod": "^3.22.4"
|
|
33
|
-
},
|
|
34
|
-
"devDependencies": {
|
|
35
|
-
"typescript": "^5.0.0",
|
|
36
|
-
"@types/node": "^20.0.0",
|
|
37
|
-
"@types/react": "^19.0.0",
|
|
38
|
-
"@types/react-dom": "^19.0.0",
|
|
39
|
-
"eslint": "^8.0.0",
|
|
40
|
-
"eslint-config-next": "^15.0.0",
|
|
41
|
-
"prettier": "^3.0.0",
|
|
42
|
-
"vitest": "^1.0.0",
|
|
43
|
-
"@vitejs/plugin-react": "^4.0.0",
|
|
44
|
-
"@testing-library/react": "^14.0.0",
|
|
45
|
-
"@testing-library/jest-dom": "^6.0.0",
|
|
46
|
-
"@testing-library/user-event": "^14.0.0",
|
|
47
|
-
"jsdom": "^24.0.0"
|
|
48
|
-
},
|
|
49
|
-
"engines": {
|
|
50
|
-
"node": ">=18.0.0"
|
|
51
|
-
}
|
|
52
|
-
}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { NextResponse } from 'next/server';
|
|
2
|
-
import type { NextRequest } from 'next/server';
|
|
3
|
-
|
|
4
|
-
export async function GET(request: NextRequest) {
|
|
5
|
-
const requestUrl = new URL(request.url);
|
|
6
|
-
|
|
7
|
-
// Placeholder auth callback - requires @digilogiclabs/saas-factory-auth package
|
|
8
|
-
console.log('Auth callback triggered - requires auth package for full functionality');
|
|
9
|
-
|
|
10
|
-
// URL to redirect to after sign in process completes
|
|
11
|
-
return NextResponse.redirect(requestUrl.origin);
|
|
12
|
-
}
|