@digilogiclabs/create-saas-app 2.11.0 → 2.12.1
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 +12 -0
- package/dist/.tsbuildinfo +1 -1
- package/dist/cli/index.js +1 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/generators/template-generator.d.ts +0 -2
- package/dist/generators/template-generator.d.ts.map +1 -1
- package/dist/generators/template-generator.js +18 -17
- package/dist/generators/template-generator.js.map +1 -1
- package/dist/templates/mobile/base/template/App.tsx +7 -4
- package/dist/templates/mobile/base/template/app/checkout.tsx +5 -2
- package/dist/templates/mobile/ui-auth-payments/template/app/(tabs)/_layout.tsx +6 -2
- package/dist/templates/mobile/ui-auth-payments/template/app/(tabs)/billing.tsx +7 -3
- package/dist/templates/mobile/ui-auth-payments/template/app/(tabs)/index.tsx +5 -2
- package/dist/templates/mobile/ui-auth-payments/template/app/(tabs)/profile.tsx +7 -2
- package/dist/templates/mobile/ui-auth-payments/template/app/_layout.tsx +2 -4
- package/dist/templates/mobile/ui-auth-payments/template/app/auth/login.tsx +6 -3
- package/dist/templates/mobile/ui-auth-payments/template/app/auth/signup.tsx +6 -3
- package/dist/templates/mobile/ui-auth-payments-ai/template/app/(tabs)/_layout.tsx +6 -2
- package/dist/templates/mobile/ui-auth-payments-ai/template/app/(tabs)/billing.tsx +7 -3
- package/dist/templates/mobile/ui-auth-payments-ai/template/app/(tabs)/index.tsx +5 -2
- package/dist/templates/mobile/ui-auth-payments-ai/template/app/(tabs)/profile.tsx +7 -2
- package/dist/templates/mobile/ui-auth-payments-ai/template/app/_layout.tsx +2 -4
- package/dist/templates/mobile/ui-auth-payments-ai/template/app/auth/login.tsx +6 -3
- package/dist/templates/mobile/ui-auth-payments-ai/template/app/auth/signup.tsx +6 -3
- 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/config/web/next.config.mjs +0 -1
- 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/package.json +0 -1
- package/dist/templates/web/ai-platform/template/src/app/chat/page.tsx +5 -2
- package/dist/templates/web/ai-platform/template/src/app/playground/page.tsx +5 -2
- package/dist/templates/web/ai-platform/template/src/components/providers/app-providers.tsx +2 -5
- 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/package.json +0 -1
- package/dist/templates/web/iot-dashboard/template/src/components/providers/app-providers.tsx +2 -5
- package/dist/templates/web/marketplace/template/package.json +0 -1
- package/dist/templates/web/marketplace/template/src/components/providers/app-providers.tsx +2 -5
- package/dist/templates/web/micro-saas/template/package.json +0 -1
- package/dist/templates/web/micro-saas/template/src/components/providers/app-providers.tsx +2 -5
- 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/mobile/base/template/App.tsx +7 -4
- package/src/templates/mobile/base/template/app/checkout.tsx +5 -2
- package/src/templates/mobile/ui-auth-payments/template/app/(tabs)/_layout.tsx +6 -2
- package/src/templates/mobile/ui-auth-payments/template/app/(tabs)/billing.tsx +7 -3
- package/src/templates/mobile/ui-auth-payments/template/app/(tabs)/index.tsx +5 -2
- package/src/templates/mobile/ui-auth-payments/template/app/(tabs)/profile.tsx +7 -2
- package/src/templates/mobile/ui-auth-payments/template/app/_layout.tsx +2 -4
- package/src/templates/mobile/ui-auth-payments/template/app/auth/login.tsx +6 -3
- package/src/templates/mobile/ui-auth-payments/template/app/auth/signup.tsx +6 -3
- package/src/templates/mobile/ui-auth-payments-ai/template/app/(tabs)/_layout.tsx +6 -2
- package/src/templates/mobile/ui-auth-payments-ai/template/app/(tabs)/billing.tsx +7 -3
- package/src/templates/mobile/ui-auth-payments-ai/template/app/(tabs)/index.tsx +5 -2
- package/src/templates/mobile/ui-auth-payments-ai/template/app/(tabs)/profile.tsx +7 -2
- package/src/templates/mobile/ui-auth-payments-ai/template/app/_layout.tsx +2 -4
- package/src/templates/mobile/ui-auth-payments-ai/template/app/auth/login.tsx +6 -3
- package/src/templates/mobile/ui-auth-payments-ai/template/app/auth/signup.tsx +6 -3
- 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/config/web/next.config.mjs +0 -1
- 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/package.json +0 -1
- package/src/templates/web/ai-platform/template/src/app/chat/page.tsx +5 -2
- package/src/templates/web/ai-platform/template/src/app/playground/page.tsx +5 -2
- package/src/templates/web/ai-platform/template/src/components/providers/app-providers.tsx +2 -5
- 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/package.json +0 -1
- package/src/templates/web/iot-dashboard/template/src/components/providers/app-providers.tsx +2 -5
- package/src/templates/web/marketplace/template/package.json +0 -1
- package/src/templates/web/marketplace/template/src/components/providers/app-providers.tsx +2 -5
- package/src/templates/web/micro-saas/template/package.json +0 -1
- package/src/templates/web/micro-saas/template/src/components/providers/app-providers.tsx +2 -5
- 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,12 +1,8 @@
|
|
|
1
1
|
'use client'
|
|
2
2
|
|
|
3
|
-
import {
|
|
4
|
-
Card,
|
|
5
|
-
Button
|
|
6
|
-
PageTransition,
|
|
7
|
-
MobileContainer,
|
|
8
|
-
useAnimationTokens,
|
|
9
|
-
useGlassmorphism
|
|
3
|
+
import {
|
|
4
|
+
Card,
|
|
5
|
+
Button
|
|
10
6
|
} from '@digilogiclabs/saas-factory-ui'
|
|
11
7
|
import {
|
|
12
8
|
ArrowLeft,
|
|
@@ -46,8 +42,6 @@ interface DeploymentOption {
|
|
|
46
42
|
}
|
|
47
43
|
|
|
48
44
|
export default function DevSetupPage() {
|
|
49
|
-
const animations = useAnimationTokens()
|
|
50
|
-
const glass = useGlassmorphism()
|
|
51
45
|
const [copiedItem, setCopiedItem] = useState<string | null>(null)
|
|
52
46
|
const [activeTab, setActiveTab] = useState<'claude' | 'deployment'>('claude')
|
|
53
47
|
|
|
@@ -55,9 +49,9 @@ export default function DevSetupPage() {
|
|
|
55
49
|
const templateName = "{{ai.enabled ? 'Full-Stack AI Platform' : 'SaaS Platform'}}"
|
|
56
50
|
const hasAuth = true
|
|
57
51
|
const hasPayments = true
|
|
58
|
-
const hasAI = "{{ai.enabled}}" === "true"
|
|
59
|
-
const hasAudio = "{{ai.hasAudio}}" === "true"
|
|
60
|
-
const hasVideo = "{{ai.hasVideo}}" === "true"
|
|
52
|
+
const hasAI = String("{{ai.enabled}}") === "true"
|
|
53
|
+
const hasAudio = String("{{ai.hasAudio}}") === "true"
|
|
54
|
+
const hasVideo = String("{{ai.hasVideo}}") === "true"
|
|
61
55
|
|
|
62
56
|
const copyToClipboard = async (text: string, itemName: string) => {
|
|
63
57
|
await navigator.clipboard.writeText(text)
|
|
@@ -75,8 +69,8 @@ export default function DevSetupPage() {
|
|
|
75
69
|
}] : []),
|
|
76
70
|
{
|
|
77
71
|
name: "@digilogiclabs/saas-factory-ui",
|
|
78
|
-
description: "Modern UI components with
|
|
79
|
-
key_exports: ["Button", "Card", "
|
|
72
|
+
description: "Modern UI components with design tokens and responsive design",
|
|
73
|
+
key_exports: ["Button", "Card", "CardHeader", "CardTitle", "CardContent", "Badge"],
|
|
80
74
|
docs_link: "https://docs.digilogiclabs.com/packages/ui"
|
|
81
75
|
},
|
|
82
76
|
...(hasPayments ? [{
|
|
@@ -121,7 +115,7 @@ export default function DevSetupPage() {
|
|
|
121
115
|
## Project Architecture
|
|
122
116
|
- **Framework**: Next.js 15.3 with App Router
|
|
123
117
|
- **Database**: Supabase (PostgreSQL with real-time features)
|
|
124
|
-
- **Styling**: Tailwind CSS v4 with
|
|
118
|
+
- **Styling**: Tailwind CSS v4 with design tokens
|
|
125
119
|
${hasAuth ? '- **Authentication**: Supabase Auth with @digilogiclabs/saas-factory-auth' : ''}
|
|
126
120
|
${hasPayments ? '- **Payments**: Stripe integration with @digilogiclabs/saas-factory-payments' : ''}
|
|
127
121
|
${hasAI ? '- **AI Platform**: Multi-modal AI with @digilogiclabs/saas-factory-ai' : ''}
|
|
@@ -133,7 +127,7 @@ ${packageDocs.map(pkg => `- **${pkg.name}**: ${pkg.description}`).join('\n')}
|
|
|
133
127
|
1. Follow Next.js 15 best practices with Server Components by default
|
|
134
128
|
2. Use TypeScript strictly - all components should be typed
|
|
135
129
|
3. Implement proper error boundaries and loading states
|
|
136
|
-
4.
|
|
130
|
+
4. Use semantic design tokens (bg-background, text-foreground, bg-card, border-border)
|
|
137
131
|
5. Use Server Actions for mutations and API routes for complex logic
|
|
138
132
|
${hasAuth ? '6. Always check authentication state with useAuth hook' : ''}
|
|
139
133
|
${hasPayments ? '7. Handle payment states and subscription status properly' : ''}
|
|
@@ -163,7 +157,7 @@ This project is a ${templateName} built with modern technologies and Digi Logic
|
|
|
163
157
|
### Core Technologies
|
|
164
158
|
- **Next.js 15.3**: App Router, Server Components, Server Actions
|
|
165
159
|
- **TypeScript**: Strict typing throughout
|
|
166
|
-
- **Tailwind CSS v4**: Design tokens,
|
|
160
|
+
- **Tailwind CSS v4**: Design tokens, semantic color system
|
|
167
161
|
- **Supabase**: Database, authentication, real-time features
|
|
168
162
|
|
|
169
163
|
### Package Integration
|
|
@@ -201,7 +195,7 @@ ${hasVideo ? '- **video_content**: Generated video files and metadata' : ''}
|
|
|
201
195
|
|
|
202
196
|
### Authentication Flow
|
|
203
197
|
${hasAuth ? `\`\`\`typescript
|
|
204
|
-
import { useAuth } from '
|
|
198
|
+
import { useAuth } from '@/hooks/useAuth'
|
|
205
199
|
|
|
206
200
|
export function ProtectedComponent() {
|
|
207
201
|
const { user, loading } = useAuth()
|
|
@@ -215,29 +209,25 @@ export function ProtectedComponent() {
|
|
|
215
209
|
|
|
216
210
|
### UI Components
|
|
217
211
|
\`\`\`typescript
|
|
218
|
-
import {
|
|
219
|
-
Card,
|
|
220
|
-
Button,
|
|
221
|
-
PageTransition,
|
|
222
|
-
useGlassmorphism
|
|
223
|
-
} from '@digilogiclabs/saas-factory-ui'
|
|
212
|
+
import { Card, CardHeader, CardTitle, CardContent, Button } from '@digilogiclabs/saas-factory-ui'
|
|
224
213
|
|
|
225
214
|
export function ExampleComponent() {
|
|
226
|
-
const glass = useGlassmorphism()
|
|
227
|
-
|
|
228
215
|
return (
|
|
229
|
-
<
|
|
230
|
-
<
|
|
216
|
+
<Card>
|
|
217
|
+
<CardHeader>
|
|
218
|
+
<CardTitle>Title</CardTitle>
|
|
219
|
+
</CardHeader>
|
|
220
|
+
<CardContent>
|
|
231
221
|
<Button variant="default">Action</Button>
|
|
232
|
-
</
|
|
233
|
-
</
|
|
222
|
+
</CardContent>
|
|
223
|
+
</Card>
|
|
234
224
|
)
|
|
235
225
|
}
|
|
236
226
|
\`\`\`
|
|
237
227
|
|
|
238
228
|
${hasPayments ? `### Payment Integration
|
|
239
229
|
\`\`\`typescript
|
|
240
|
-
import { usePayments } from '
|
|
230
|
+
import { usePayments } from '@/hooks/usePayments'
|
|
241
231
|
|
|
242
232
|
export function CheckoutPage() {
|
|
243
233
|
const { createCheckoutSession, loading } = usePayments()
|
|
@@ -439,35 +429,35 @@ CMD ["npm", "start"]`
|
|
|
439
429
|
]
|
|
440
430
|
|
|
441
431
|
return (
|
|
442
|
-
<
|
|
443
|
-
<main className=
|
|
444
|
-
<div className=
|
|
432
|
+
<div>
|
|
433
|
+
<main className="min-h-screen bg-background text-foreground relative overflow-hidden">
|
|
434
|
+
<div className="absolute inset-0 bg-muted opacity-30" />
|
|
445
435
|
<div className="relative z-10">
|
|
446
|
-
<
|
|
436
|
+
<div className="max-w-4xl mx-auto px-4 py-8">
|
|
447
437
|
{/* Header */}
|
|
448
438
|
<div className="flex items-center justify-between mb-8">
|
|
449
439
|
<div className="flex items-center gap-4">
|
|
450
|
-
<Link href="/setup" className=
|
|
440
|
+
<Link href="/setup" className="border border-border bg-card p-2 rounded-xl hover:scale-[1.02] transition-transform">
|
|
451
441
|
<ArrowLeft className="w-5 h-5" />
|
|
452
442
|
</Link>
|
|
453
443
|
<div>
|
|
454
444
|
<h1 className="text-2xl font-bold">Development & Deployment</h1>
|
|
455
|
-
<p className="text-
|
|
445
|
+
<p className="text-muted-foreground">Claude AI setup and hosting guides</p>
|
|
456
446
|
</div>
|
|
457
447
|
</div>
|
|
458
|
-
<div className={
|
|
448
|
+
<div className={`border border-border bg-card px-4 py-2 rounded-xl`}>
|
|
459
449
|
<span className="text-sm font-medium">{projectName}</span>
|
|
460
450
|
</div>
|
|
461
451
|
</div>
|
|
462
452
|
|
|
463
453
|
{/* Tab Navigation */}
|
|
464
|
-
<div className={
|
|
454
|
+
<div className={`border border-border bg-card rounded-2xl p-1 mb-8 inline-flex`}>
|
|
465
455
|
<button
|
|
466
456
|
onClick={() => setActiveTab('claude')}
|
|
467
457
|
className={`px-4 py-2 rounded-xl text-sm font-medium transition-all duration-200 ${
|
|
468
458
|
activeTab === 'claude'
|
|
469
459
|
? 'bg-purple-500 text-white shadow-lg'
|
|
470
|
-
: 'text-
|
|
460
|
+
: 'text-muted-foreground hover:bg-white/10'
|
|
471
461
|
}`}
|
|
472
462
|
>
|
|
473
463
|
<Bot className="w-4 h-4 inline mr-2" />
|
|
@@ -477,8 +467,8 @@ CMD ["npm", "start"]`
|
|
|
477
467
|
onClick={() => setActiveTab('deployment')}
|
|
478
468
|
className={`px-4 py-2 rounded-xl text-sm font-medium transition-all duration-200 ${
|
|
479
469
|
activeTab === 'deployment'
|
|
480
|
-
? 'bg-
|
|
481
|
-
: 'text-
|
|
470
|
+
? 'bg-primary text-primary-foreground shadow-lg'
|
|
471
|
+
: 'text-muted-foreground hover:bg-white/10'
|
|
482
472
|
}`}
|
|
483
473
|
>
|
|
484
474
|
<Rocket className="w-4 h-4 inline mr-2" />
|
|
@@ -489,14 +479,14 @@ CMD ["npm", "start"]`
|
|
|
489
479
|
{activeTab === 'claude' && (
|
|
490
480
|
<>
|
|
491
481
|
{/* Claude AI Development Setup */}
|
|
492
|
-
<div className={
|
|
482
|
+
<div className={`border border-border bg-card rounded-2xl p-6 mb-8`}>
|
|
493
483
|
<div className="flex items-center gap-4 mb-6">
|
|
494
484
|
<div className={`w-12 h-12 rounded-xl bg-gradient-to-r from-purple-500 to-blue-500 flex items-center justify-center`}>
|
|
495
485
|
<Bot className="w-6 h-6 text-white" />
|
|
496
486
|
</div>
|
|
497
487
|
<div>
|
|
498
488
|
<h2 className="text-xl font-semibold">Claude AI Development Setup</h2>
|
|
499
|
-
<p className="text-
|
|
489
|
+
<p className="text-muted-foreground">Supercharge your development workflow with AI assistance</p>
|
|
500
490
|
</div>
|
|
501
491
|
</div>
|
|
502
492
|
|
|
@@ -504,17 +494,17 @@ CMD ["npm", "start"]`
|
|
|
504
494
|
<div className="text-center p-4 rounded-xl bg-purple-500/10">
|
|
505
495
|
<Terminal className="w-8 h-8 text-purple-400 mx-auto mb-2" />
|
|
506
496
|
<div className="font-medium">Claude CLI</div>
|
|
507
|
-
<div className="text-sm text-
|
|
497
|
+
<div className="text-sm text-muted-foreground">Command-line AI assistant</div>
|
|
508
498
|
</div>
|
|
509
|
-
<div className="text-center p-4 rounded-xl bg-
|
|
510
|
-
<FileText className="w-8 h-8 text-
|
|
499
|
+
<div className="text-center p-4 rounded-xl bg-primary/10">
|
|
500
|
+
<FileText className="w-8 h-8 text-primary mx-auto mb-2" />
|
|
511
501
|
<div className="font-medium">Smart Context</div>
|
|
512
|
-
<div className="text-sm text-
|
|
502
|
+
<div className="text-sm text-muted-foreground">Project-aware assistance</div>
|
|
513
503
|
</div>
|
|
514
504
|
<div className="text-center p-4 rounded-xl bg-green-500/10">
|
|
515
505
|
<Zap className="w-8 h-8 text-green-400 mx-auto mb-2" />
|
|
516
506
|
<div className="font-medium">Auto-Setup</div>
|
|
517
|
-
<div className="text-sm text-
|
|
507
|
+
<div className="text-sm text-muted-foreground">Generated configuration</div>
|
|
518
508
|
</div>
|
|
519
509
|
</div>
|
|
520
510
|
|
|
@@ -526,14 +516,14 @@ CMD ["npm", "start"]`
|
|
|
526
516
|
</div>
|
|
527
517
|
<div className="flex-1">
|
|
528
518
|
<h3 className="font-semibold mb-2">Install Claude CLI</h3>
|
|
529
|
-
<p className="text-sm text-
|
|
519
|
+
<p className="text-sm text-muted-foreground mb-3">
|
|
530
520
|
Install the Claude CLI to get AI assistance directly in your terminal
|
|
531
521
|
</p>
|
|
532
|
-
<div className="bg-
|
|
522
|
+
<div className="bg-background rounded-xl p-4">
|
|
533
523
|
<pre className="text-green-400 text-sm">npm install -g @anthropic-ai/claude-cli</pre>
|
|
534
524
|
<button
|
|
535
525
|
onClick={() => copyToClipboard('npm install -g @anthropic-ai/claude-cli', 'claude-install')}
|
|
536
|
-
className="mt-2 flex items-center gap-2 text-xs text-
|
|
526
|
+
className="mt-2 flex items-center gap-2 text-xs text-muted-foreground hover:text-white transition-colors"
|
|
537
527
|
>
|
|
538
528
|
<Copy className="w-3 h-3" />
|
|
539
529
|
{copiedItem === 'claude-install' ? 'Copied!' : 'Copy command'}
|
|
@@ -549,16 +539,16 @@ CMD ["npm", "start"]`
|
|
|
549
539
|
</div>
|
|
550
540
|
<div className="flex-1">
|
|
551
541
|
<h3 className="font-semibold mb-2">Create .claude Configuration</h3>
|
|
552
|
-
<p className="text-sm text-
|
|
542
|
+
<p className="text-sm text-muted-foreground mb-3">
|
|
553
543
|
Create a .claude file in your project root with this optimized configuration
|
|
554
544
|
</p>
|
|
555
|
-
<div className="bg-
|
|
545
|
+
<div className="bg-background rounded-xl p-4 overflow-x-auto">
|
|
556
546
|
<pre className="text-green-400 text-xs">
|
|
557
547
|
{JSON.stringify(claudeConfig, null, 2)}
|
|
558
548
|
</pre>
|
|
559
549
|
<button
|
|
560
550
|
onClick={() => copyToClipboard(JSON.stringify(claudeConfig, null, 2), 'claude-config')}
|
|
561
|
-
className="mt-2 flex items-center gap-2 text-xs text-
|
|
551
|
+
className="mt-2 flex items-center gap-2 text-xs text-muted-foreground hover:text-white transition-colors"
|
|
562
552
|
>
|
|
563
553
|
<Copy className="w-3 h-3" />
|
|
564
554
|
{copiedItem === 'claude-config' ? 'Copied!' : 'Copy .claude configuration'}
|
|
@@ -574,18 +564,18 @@ CMD ["npm", "start"]`
|
|
|
574
564
|
</div>
|
|
575
565
|
<div className="flex-1">
|
|
576
566
|
<h3 className="font-semibold mb-2">Create Context Documentation</h3>
|
|
577
|
-
<p className="text-sm text-
|
|
567
|
+
<p className="text-sm text-muted-foreground mb-3">
|
|
578
568
|
Create a context.md file with comprehensive project documentation
|
|
579
569
|
</p>
|
|
580
570
|
<details className="mb-3">
|
|
581
|
-
<summary className="text-sm text-
|
|
571
|
+
<summary className="text-sm text-primary cursor-pointer hover:text-primary/80">
|
|
582
572
|
Show context.md content
|
|
583
573
|
</summary>
|
|
584
|
-
<div className="bg-
|
|
574
|
+
<div className="bg-background rounded-xl p-4 mt-2 overflow-x-auto max-h-64">
|
|
585
575
|
<pre className="text-green-400 text-xs whitespace-pre-wrap">{contextContent}</pre>
|
|
586
576
|
<button
|
|
587
577
|
onClick={() => copyToClipboard(contextContent, 'context-content')}
|
|
588
|
-
className="mt-2 flex items-center gap-2 text-xs text-
|
|
578
|
+
className="mt-2 flex items-center gap-2 text-xs text-muted-foreground hover:text-white transition-colors"
|
|
589
579
|
>
|
|
590
580
|
<Copy className="w-3 h-3" />
|
|
591
581
|
{copiedItem === 'context-content' ? 'Copied!' : 'Copy context.md content'}
|
|
@@ -602,20 +592,20 @@ CMD ["npm", "start"]`
|
|
|
602
592
|
</div>
|
|
603
593
|
<div className="flex-1">
|
|
604
594
|
<h3 className="font-semibold mb-2">Start Using Claude AI</h3>
|
|
605
|
-
<p className="text-sm text-
|
|
595
|
+
<p className="text-sm text-muted-foreground mb-3">
|
|
606
596
|
Common commands to supercharge your development workflow
|
|
607
597
|
</p>
|
|
608
598
|
<div className="space-y-3">
|
|
609
|
-
<div className="bg-
|
|
610
|
-
<div className="text-
|
|
611
|
-
<code className="text-green-400 text-xs">claude "Create a new user profile component with
|
|
599
|
+
<div className="bg-background rounded-lg p-3">
|
|
600
|
+
<div className="text-primary text-sm mb-1">Generate new component:</div>
|
|
601
|
+
<code className="text-green-400 text-xs">claude "Create a new user profile component with Tailwind styling"</code>
|
|
612
602
|
</div>
|
|
613
|
-
<div className="bg-
|
|
614
|
-
<div className="text-
|
|
603
|
+
<div className="bg-background rounded-lg p-3">
|
|
604
|
+
<div className="text-primary text-sm mb-1">Debug issues:</div>
|
|
615
605
|
<code className="text-green-400 text-xs">claude "Help me debug this authentication error"</code>
|
|
616
606
|
</div>
|
|
617
|
-
<div className="bg-
|
|
618
|
-
<div className="text-
|
|
607
|
+
<div className="bg-background rounded-lg p-3">
|
|
608
|
+
<div className="text-primary text-sm mb-1">Add features:</div>
|
|
619
609
|
<code className="text-green-400 text-xs">claude "Add a dark mode toggle to the header component"</code>
|
|
620
610
|
</div>
|
|
621
611
|
</div>
|
|
@@ -625,25 +615,25 @@ CMD ["npm", "start"]`
|
|
|
625
615
|
</div>
|
|
626
616
|
|
|
627
617
|
{/* Package Documentation Quick Reference */}
|
|
628
|
-
<div className={
|
|
618
|
+
<div className={`border border-border bg-card rounded-2xl p-6 mb-8`}>
|
|
629
619
|
<h3 className="text-lg font-semibold mb-4 flex items-center gap-2">
|
|
630
|
-
<Book className="w-5 h-5 text-
|
|
620
|
+
<Book className="w-5 h-5 text-primary" />
|
|
631
621
|
Package Documentation Quick Reference
|
|
632
622
|
</h3>
|
|
633
623
|
<div className="grid grid-cols-1 md:grid-cols-2 gap-4">
|
|
634
624
|
{packageDocs.map((pkg, index) => (
|
|
635
|
-
<div key={index} className={
|
|
625
|
+
<div key={index} className={`border border-border bg-card rounded-xl p-4`}>
|
|
636
626
|
<h4 className="font-semibold text-sm mb-2">{pkg.name}</h4>
|
|
637
|
-
<p className="text-xs text-
|
|
627
|
+
<p className="text-xs text-muted-foreground mb-3">{pkg.description}</p>
|
|
638
628
|
<div className="text-xs">
|
|
639
|
-
<div className="text-
|
|
640
|
-
<div className="text-
|
|
629
|
+
<div className="text-primary mb-1">Key Exports:</div>
|
|
630
|
+
<div className="text-muted-foreground">{pkg.key_exports.join(', ')}</div>
|
|
641
631
|
</div>
|
|
642
632
|
<a
|
|
643
633
|
href={pkg.docs_link}
|
|
644
634
|
target="_blank"
|
|
645
635
|
rel="noopener noreferrer"
|
|
646
|
-
className="inline-flex items-center gap-1 text-xs text-
|
|
636
|
+
className="inline-flex items-center gap-1 text-xs text-primary hover:text-primary/80 mt-2"
|
|
647
637
|
>
|
|
648
638
|
View Docs <ExternalLink className="w-3 h-3" />
|
|
649
639
|
</a>
|
|
@@ -663,10 +653,10 @@ CMD ["npm", "start"]`
|
|
|
663
653
|
{deploymentOptions.map((option, index) => {
|
|
664
654
|
const OptionIcon = option.icon
|
|
665
655
|
return (
|
|
666
|
-
<div key={index} className={
|
|
656
|
+
<div key={index} className={`border border-border bg-card rounded-2xl p-6`}>
|
|
667
657
|
<div className="flex items-start justify-between mb-4">
|
|
668
658
|
<div className="flex items-center gap-4">
|
|
669
|
-
<div className={`w-12 h-12 rounded-xl bg-
|
|
659
|
+
<div className={`w-12 h-12 rounded-xl bg-card flex items-center justify-center`}>
|
|
670
660
|
<OptionIcon className="w-6 h-6 text-white" />
|
|
671
661
|
</div>
|
|
672
662
|
<div>
|
|
@@ -680,8 +670,8 @@ CMD ["npm", "start"]`
|
|
|
680
670
|
{option.complexity}
|
|
681
671
|
</span>
|
|
682
672
|
</h3>
|
|
683
|
-
<p className="text-sm text-
|
|
684
|
-
<div className="text-xs text-
|
|
673
|
+
<p className="text-sm text-muted-foreground">{option.description}</p>
|
|
674
|
+
<div className="text-xs text-primary mt-1">⏱️ {option.timeEstimate}</div>
|
|
685
675
|
</div>
|
|
686
676
|
</div>
|
|
687
677
|
</div>
|
|
@@ -705,14 +695,14 @@ CMD ["npm", "start"]`
|
|
|
705
695
|
<div className="space-y-3">
|
|
706
696
|
{option.steps.map((step, stepIndex) => (
|
|
707
697
|
<div key={stepIndex} className="flex gap-3">
|
|
708
|
-
<div className="w-6 h-6 rounded-full bg-
|
|
698
|
+
<div className="w-6 h-6 rounded-full bg-primary text-primary-foreground text-xs flex items-center justify-center flex-shrink-0 mt-0.5">
|
|
709
699
|
{stepIndex + 1}
|
|
710
700
|
</div>
|
|
711
701
|
<div className="flex-1">
|
|
712
702
|
<h5 className="font-medium">{step.title}</h5>
|
|
713
|
-
<p className="text-sm text-
|
|
703
|
+
<p className="text-sm text-muted-foreground mb-2">{step.description}</p>
|
|
714
704
|
{step.code && (
|
|
715
|
-
<div className="bg-
|
|
705
|
+
<div className="bg-background rounded-lg p-3 mt-2">
|
|
716
706
|
<pre className="text-green-400 text-xs whitespace-pre-wrap">{step.code}</pre>
|
|
717
707
|
</div>
|
|
718
708
|
)}
|
|
@@ -721,7 +711,7 @@ CMD ["npm", "start"]`
|
|
|
721
711
|
href={step.link}
|
|
722
712
|
target="_blank"
|
|
723
713
|
rel="noopener noreferrer"
|
|
724
|
-
className="inline-flex items-center gap-1 text-sm text-
|
|
714
|
+
className="inline-flex items-center gap-1 text-sm text-primary hover:text-primary/80 mt-2"
|
|
725
715
|
>
|
|
726
716
|
Learn More <ExternalLink className="w-3 h-3" />
|
|
727
717
|
</a>
|
|
@@ -737,7 +727,7 @@ CMD ["npm", "start"]`
|
|
|
737
727
|
</div>
|
|
738
728
|
|
|
739
729
|
{/* Pre-Deployment Checklist */}
|
|
740
|
-
<div className={
|
|
730
|
+
<div className={`border border-border bg-card rounded-2xl p-6 mt-8`}>
|
|
741
731
|
<h3 className="text-lg font-semibold mb-4 flex items-center gap-2">
|
|
742
732
|
<CheckCircle className="w-5 h-5 text-green-400" />
|
|
743
733
|
Pre-Deployment Checklist
|
|
@@ -759,11 +749,11 @@ CMD ["npm", "start"]`
|
|
|
759
749
|
)}
|
|
760
750
|
<div className="flex items-center gap-3">
|
|
761
751
|
<CheckCircle className="w-5 h-5 text-green-400" />
|
|
762
|
-
<span>Build succeeds locally: <code className="px-2 py-1 bg-
|
|
752
|
+
<span>Build succeeds locally: <code className="px-2 py-1 bg-card rounded">npm run build</code></span>
|
|
763
753
|
</div>
|
|
764
754
|
<div className="flex items-center gap-3">
|
|
765
755
|
<CheckCircle className="w-5 h-5 text-green-400" />
|
|
766
|
-
<span>Tests pass: <code className="px-2 py-1 bg-
|
|
756
|
+
<span>Tests pass: <code className="px-2 py-1 bg-card rounded">npm run test</code></span>
|
|
767
757
|
</div>
|
|
768
758
|
<div className="flex items-center gap-3">
|
|
769
759
|
<CheckCircle className="w-5 h-5 text-green-400" />
|
|
@@ -775,27 +765,27 @@ CMD ["npm", "start"]`
|
|
|
775
765
|
)}
|
|
776
766
|
|
|
777
767
|
{/* Support Section */}
|
|
778
|
-
<div className={
|
|
768
|
+
<div className={`border border-border bg-card rounded-2xl p-6 mt-8 text-center`}>
|
|
779
769
|
<h3 className="text-lg font-semibold mb-4">Need Help?</h3>
|
|
780
|
-
<p className="text-
|
|
770
|
+
<p className="text-muted-foreground mb-4">
|
|
781
771
|
Our community and support team are here to help with development and deployment.
|
|
782
772
|
</p>
|
|
783
773
|
<div className="flex justify-center gap-4">
|
|
784
|
-
<Button variant="outline" size="sm"
|
|
774
|
+
<Button variant="outline" size="sm">
|
|
785
775
|
<a href="https://discord.gg/digilogiclabs" target="_blank" rel="noopener noreferrer">
|
|
786
776
|
Join Discord
|
|
787
777
|
</a>
|
|
788
778
|
</Button>
|
|
789
|
-
<Button size="sm"
|
|
779
|
+
<Button size="sm">
|
|
790
780
|
<a href="https://docs.digilogiclabs.com" target="_blank" rel="noopener noreferrer">
|
|
791
781
|
View Docs
|
|
792
782
|
</a>
|
|
793
783
|
</Button>
|
|
794
784
|
</div>
|
|
795
785
|
</div>
|
|
796
|
-
</
|
|
786
|
+
</div>
|
|
797
787
|
</div>
|
|
798
788
|
</main>
|
|
799
|
-
</
|
|
789
|
+
</div>
|
|
800
790
|
)
|
|
801
791
|
}
|
|
@@ -1,36 +1,38 @@
|
|
|
1
|
-
import type { Metadata } from 'next'
|
|
2
|
-
import { Inter } from 'next/font/google'
|
|
3
|
-
import './globals.css'
|
|
4
|
-
import { AppProviders } from '@/components/providers/app-providers'
|
|
5
|
-
import { Header } from '@/components/shared/header'
|
|
6
|
-
import {
|
|
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
|
-
|
|
1
|
+
import type { Metadata } from 'next'
|
|
2
|
+
import { Inter } from 'next/font/google'
|
|
3
|
+
import './globals.css'
|
|
4
|
+
import { AppProviders } from '@/components/providers/app-providers'
|
|
5
|
+
import { Header } from '@/components/shared/header'
|
|
6
|
+
import { MockBanner } from '@/components/mock-banner'
|
|
7
|
+
import { Footer } from '@/components/shared/footer'
|
|
8
|
+
|
|
9
|
+
const inter = Inter({ subsets: ['latin'] })
|
|
10
|
+
|
|
11
|
+
export const metadata: Metadata = {
|
|
12
|
+
title: '{{titleCaseName}}',
|
|
13
|
+
description: '{{description}}',
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export default function RootLayout({
|
|
17
|
+
children,
|
|
18
|
+
}: {
|
|
19
|
+
children: React.ReactNode
|
|
20
|
+
}) {
|
|
21
|
+
return (
|
|
22
|
+
<html lang="en" suppressHydrationWarning>
|
|
23
|
+
<body className={`${inter.className} min-h-screen flex flex-col`}>
|
|
24
|
+
<AppProviders>
|
|
25
|
+
<MockBanner />
|
|
26
|
+
<a href="#main-content" className="sr-only focus:not-sr-only focus:absolute focus:top-4 focus:left-4 focus:z-[90] focus:px-4 focus:py-2 focus:bg-primary focus:text-primary-foreground focus:rounded-lg focus:outline-none">
|
|
27
|
+
Skip to content
|
|
28
|
+
</a>
|
|
29
|
+
<Header />
|
|
30
|
+
<main id="main-content" className="flex-1">
|
|
31
|
+
{children}
|
|
32
|
+
</main>
|
|
33
|
+
<Footer />
|
|
34
|
+
</AppProviders>
|
|
35
|
+
</body>
|
|
36
|
+
</html>
|
|
37
|
+
)
|
|
38
|
+
}
|
|
@@ -2,56 +2,43 @@
|
|
|
2
2
|
|
|
3
3
|
import React, { useState } from 'react';
|
|
4
4
|
import { Button, Card, Input, Label } from '@digilogiclabs/saas-factory-ui';
|
|
5
|
-
import { useAuth } from '@digilogiclabs/app-sdk';
|
|
6
5
|
import { useRouter } from 'next/navigation';
|
|
6
|
+
import Link from 'next/link';
|
|
7
7
|
|
|
8
8
|
export default function LoginPage() {
|
|
9
9
|
const [email, setEmail] = useState('');
|
|
10
10
|
const [password, setPassword] = useState('');
|
|
11
|
-
const
|
|
11
|
+
const [loading, setLoading] = useState(false);
|
|
12
|
+
const [error, setError] = useState<string | null>(null);
|
|
12
13
|
const router = useRouter();
|
|
13
14
|
|
|
14
|
-
// Redirect if already logged in
|
|
15
|
-
React.useEffect(() => {
|
|
16
|
-
if (user) {
|
|
17
|
-
router.push('/');
|
|
18
|
-
}
|
|
19
|
-
}, [user, router]);
|
|
20
|
-
|
|
21
15
|
const handleLogin = async (e: React.FormEvent) => {
|
|
22
16
|
e.preventDefault();
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
router.push('/');
|
|
26
|
-
} catch (err) {
|
|
27
|
-
console.error('Login error:', err);
|
|
28
|
-
}
|
|
29
|
-
};
|
|
17
|
+
setLoading(true);
|
|
18
|
+
setError(null);
|
|
30
19
|
|
|
31
|
-
const handleGoogleLogin = async () => {
|
|
32
20
|
try {
|
|
33
|
-
|
|
21
|
+
// TODO: Replace with your auth provider (Supabase, NextAuth, etc.)
|
|
22
|
+
// Example with Supabase:
|
|
23
|
+
// const { error } = await supabase.auth.signInWithPassword({ email, password });
|
|
24
|
+
// if (error) throw error;
|
|
25
|
+
console.log('Sign in with:', email);
|
|
26
|
+
router.push('/');
|
|
34
27
|
} catch (err) {
|
|
35
|
-
|
|
28
|
+
setError(err instanceof Error ? err.message : 'An error occurred during sign in');
|
|
29
|
+
} finally {
|
|
30
|
+
setLoading(false);
|
|
36
31
|
}
|
|
37
32
|
};
|
|
38
33
|
|
|
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
34
|
return (
|
|
48
|
-
<div className="flex items-center justify-center min-h-screen bg-
|
|
35
|
+
<div className="flex items-center justify-center min-h-screen bg-muted">
|
|
49
36
|
<Card className="w-full max-w-md p-8">
|
|
50
|
-
<h1 className="text-2xl font-bold text-center mb-6">Sign In</h1>
|
|
51
|
-
|
|
37
|
+
<h1 className="text-2xl font-bold text-center mb-6 text-foreground">Sign In</h1>
|
|
38
|
+
|
|
52
39
|
{error && (
|
|
53
|
-
<div className="mb-4 p-3
|
|
54
|
-
{error
|
|
40
|
+
<div className="mb-4 p-3 rounded border border-destructive/50 bg-destructive/10 text-destructive text-sm">
|
|
41
|
+
{error}
|
|
55
42
|
</div>
|
|
56
43
|
)}
|
|
57
44
|
|
|
@@ -83,27 +70,17 @@ export default function LoginPage() {
|
|
|
83
70
|
<Button type="submit" className="w-full" disabled={loading}>
|
|
84
71
|
{loading ? 'Signing In...' : 'Sign In'}
|
|
85
72
|
</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
73
|
</form>
|
|
96
74
|
|
|
97
75
|
<div className="mt-4 text-center">
|
|
98
|
-
<p className="text-sm text-
|
|
76
|
+
<p className="text-sm text-muted-foreground">
|
|
99
77
|
Don't have an account?{' '}
|
|
100
|
-
<
|
|
78
|
+
<Link href="/signup" className="text-primary hover:underline">
|
|
101
79
|
Sign up
|
|
102
|
-
</
|
|
80
|
+
</Link>
|
|
103
81
|
</p>
|
|
104
82
|
</div>
|
|
105
83
|
</Card>
|
|
106
84
|
</div>
|
|
107
85
|
);
|
|
108
86
|
}
|
|
109
|
-
|