@digilogiclabs/create-saas-app 2.9.0 → 2.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/.tsbuildinfo +1 -1
- package/dist/generators/template-generator.d.ts.map +1 -1
- package/dist/generators/template-generator.js +6 -3
- package/dist/generators/template-generator.js.map +1 -1
- package/dist/templates/shared/auth/supabase/web/src/middleware.ts +63 -0
- package/dist/templates/shared/database/supabase/web/src/lib/supabase/server.ts +3 -1
- package/dist/templates/shared/design/web/src/config/design.config.ts +14 -14
- package/dist/templates/shared/landing/web/src/components/LandingPage.tsx +0 -3
- package/dist/templates/shared/security/web/src/lib/api-security.ts +2 -2
- package/dist/templates/web/ai-platform/template/next.config.js +14 -14
- package/dist/templates/web/ai-platform/template/package.json +11 -22
- package/dist/templates/web/ai-platform/template/postcss.config.mjs +8 -0
- package/dist/templates/web/ai-platform/template/src/app/chat/page.tsx +234 -235
- package/dist/templates/web/ai-platform/template/src/app/dashboard/page.tsx +142 -142
- package/dist/templates/web/ai-platform/template/src/app/error.tsx +13 -13
- package/dist/templates/web/ai-platform/template/src/app/globals.css +97 -34
- package/dist/templates/web/ai-platform/template/src/app/layout.tsx +3 -0
- package/dist/templates/web/ai-platform/template/src/app/loading.tsx +22 -22
- package/dist/templates/web/ai-platform/template/src/app/page.tsx +249 -155
- package/dist/templates/web/ai-platform/template/src/components/providers/app-providers.tsx +5 -2
- package/dist/templates/web/ai-platform/template/src/lib/auth-server.ts +32 -33
- package/dist/templates/web/base/template/next.config.js +14 -15
- package/dist/templates/web/base/template/package.json +16 -31
- package/dist/templates/web/base/template/postcss.config.mjs +8 -0
- package/dist/templates/web/base/template/src/app/error.tsx +97 -97
- package/dist/templates/web/base/template/src/app/globals.css +87 -148
- package/dist/templates/web/base/template/src/app/layout.tsx +4 -1
- package/dist/templates/web/base/template/src/app/loading.tsx +52 -52
- package/dist/templates/web/base/template/src/components/providers/app-providers.tsx +5 -2
- package/dist/templates/web/base/template/tsconfig.json +27 -33
- package/dist/templates/web/iot-dashboard/template/next.config.js +14 -14
- package/dist/templates/web/iot-dashboard/template/package.json +12 -16
- package/dist/templates/web/iot-dashboard/template/postcss.config.mjs +8 -0
- package/dist/templates/web/iot-dashboard/template/src/app/dashboard/page.tsx +224 -224
- package/dist/templates/web/iot-dashboard/template/src/app/error.tsx +8 -8
- package/dist/templates/web/iot-dashboard/template/src/app/globals.css +97 -20
- package/dist/templates/web/iot-dashboard/template/src/app/layout.tsx +3 -0
- package/dist/templates/web/iot-dashboard/template/src/app/loading.tsx +5 -5
- package/dist/templates/web/iot-dashboard/template/src/app/page.tsx +266 -189
- package/dist/templates/web/iot-dashboard/template/src/components/providers/app-providers.tsx +5 -2
- package/dist/templates/web/iot-dashboard/template/src/lib/auth-server.ts +32 -33
- package/dist/templates/web/marketplace/template/next.config.js +14 -14
- package/dist/templates/web/marketplace/template/package.json +11 -18
- package/dist/templates/web/marketplace/template/postcss.config.mjs +8 -0
- package/dist/templates/web/marketplace/template/src/app/cart/page.tsx +147 -147
- package/dist/templates/web/marketplace/template/src/app/dashboard/page.tsx +149 -149
- package/dist/templates/web/marketplace/template/src/app/error.tsx +7 -7
- package/dist/templates/web/marketplace/template/src/app/globals.css +97 -20
- package/dist/templates/web/marketplace/template/src/app/layout.tsx +3 -0
- package/dist/templates/web/marketplace/template/src/app/loading.tsx +5 -5
- package/dist/templates/web/marketplace/template/src/app/page.tsx +370 -169
- package/dist/templates/web/marketplace/template/src/app/products/page.tsx +129 -129
- package/dist/templates/web/marketplace/template/src/components/providers/app-providers.tsx +5 -2
- package/dist/templates/web/marketplace/template/src/lib/auth-server.ts +32 -33
- package/dist/templates/web/micro-saas/template/next.config.js +14 -14
- package/dist/templates/web/micro-saas/template/package.json +9 -8
- package/dist/templates/web/micro-saas/template/postcss.config.mjs +8 -0
- package/dist/templates/web/micro-saas/template/src/app/dashboard/page.tsx +145 -117
- package/dist/templates/web/micro-saas/template/src/app/error.tsx +7 -7
- package/dist/templates/web/micro-saas/template/src/app/globals.css +97 -20
- package/dist/templates/web/micro-saas/template/src/app/layout.tsx +3 -0
- package/dist/templates/web/micro-saas/template/src/app/loading.tsx +43 -27
- package/dist/templates/web/micro-saas/template/src/app/login/page.tsx +101 -87
- package/dist/templates/web/micro-saas/template/src/app/page.tsx +227 -137
- package/dist/templates/web/micro-saas/template/src/app/signup/page.tsx +122 -108
- package/dist/templates/web/micro-saas/template/src/components/providers/app-providers.tsx +5 -2
- package/dist/templates/web/micro-saas/template/src/lib/auth-server.ts +32 -33
- package/dist/templates/web/ui-auth/template/next.config.js +14 -12
- package/dist/templates/web/ui-auth/template/package.json +16 -26
- package/dist/templates/web/ui-auth/template/postcss.config.mjs +8 -0
- package/dist/templates/web/ui-auth/template/src/app/error.tsx +67 -67
- package/dist/templates/web/ui-auth/template/src/app/globals.css +85 -84
- package/dist/templates/web/ui-auth/template/src/app/layout.tsx +4 -1
- package/dist/templates/web/ui-auth/template/src/app/loading.tsx +20 -38
- package/dist/templates/web/ui-auth/template/src/components/providers/app-providers.tsx +5 -2
- package/dist/templates/web/ui-auth/template/tsconfig.json +27 -33
- package/dist/templates/web/ui-auth-ai/template/next.config.js +15 -13
- package/dist/templates/web/ui-auth-ai/template/package.json +25 -21
- package/dist/templates/web/ui-auth-ai/template/postcss.config.mjs +8 -0
- package/dist/templates/web/ui-auth-ai/template/src/app/error.tsx +7 -7
- package/dist/templates/web/ui-auth-ai/template/src/app/globals.css +87 -25
- package/dist/templates/web/ui-auth-ai/template/src/app/layout.tsx +3 -0
- package/dist/templates/web/ui-auth-ai/template/src/app/loading.tsx +4 -4
- package/dist/templates/web/ui-auth-ai/template/tsconfig.json +27 -28
- package/dist/templates/web/ui-auth-payments/template/next.config.js +14 -12
- package/dist/templates/web/ui-auth-payments/template/package.json +16 -29
- package/dist/templates/web/ui-auth-payments/template/postcss.config.mjs +8 -0
- package/dist/templates/web/ui-auth-payments/template/src/app/error.tsx +67 -67
- package/dist/templates/web/ui-auth-payments/template/src/app/globals.css +89 -204
- package/dist/templates/web/ui-auth-payments/template/src/app/layout.tsx +4 -1
- package/dist/templates/web/ui-auth-payments/template/src/app/loading.tsx +20 -20
- package/dist/templates/web/ui-auth-payments/template/tsconfig.json +27 -33
- package/dist/templates/web/ui-auth-payments-ai/template/next.config.js +14 -12
- package/dist/templates/web/ui-auth-payments-ai/template/package.json +17 -33
- package/dist/templates/web/ui-auth-payments-ai/template/postcss.config.mjs +8 -0
- package/dist/templates/web/ui-auth-payments-ai/template/src/app/error.tsx +67 -67
- package/dist/templates/web/ui-auth-payments-ai/template/src/app/globals.css +85 -85
- package/dist/templates/web/ui-auth-payments-ai/template/src/app/layout.tsx +4 -1
- package/dist/templates/web/ui-auth-payments-ai/template/src/app/loading.tsx +20 -20
- package/dist/templates/web/ui-auth-payments-ai/template/src/components/providers/app-providers.tsx +5 -2
- package/dist/templates/web/ui-auth-payments-ai/template/tsconfig.json +27 -33
- package/dist/templates/web/ui-auth-payments-audio/template/next.config.js +14 -12
- package/dist/templates/web/ui-auth-payments-audio/template/package.json +17 -30
- package/dist/templates/web/ui-auth-payments-audio/template/postcss.config.mjs +8 -0
- package/dist/templates/web/ui-auth-payments-audio/template/src/app/error.tsx +67 -67
- package/dist/templates/web/ui-auth-payments-audio/template/src/app/globals.css +85 -85
- package/dist/templates/web/ui-auth-payments-audio/template/src/app/layout.tsx +4 -1
- package/dist/templates/web/ui-auth-payments-audio/template/src/app/loading.tsx +20 -20
- package/dist/templates/web/ui-auth-payments-audio/template/src/components/providers/app-providers.tsx +5 -2
- package/dist/templates/web/ui-auth-payments-audio/template/tsconfig.json +27 -33
- package/dist/templates/web/ui-auth-payments-video/template/next.config.js +14 -12
- package/dist/templates/web/ui-auth-payments-video/template/package.json +17 -30
- package/dist/templates/web/ui-auth-payments-video/template/postcss.config.mjs +8 -0
- package/dist/templates/web/ui-auth-payments-video/template/src/app/error.tsx +67 -67
- package/dist/templates/web/ui-auth-payments-video/template/src/app/globals.css +89 -221
- package/dist/templates/web/ui-auth-payments-video/template/src/app/layout.tsx +4 -1
- package/dist/templates/web/ui-auth-payments-video/template/src/app/loading.tsx +20 -20
- package/dist/templates/web/ui-auth-payments-video/template/src/components/providers/app-providers.tsx +5 -2
- package/dist/templates/web/ui-auth-payments-video/template/tsconfig.json +27 -33
- package/dist/templates/web/ui-only/template/next.config.js +14 -12
- package/dist/templates/web/ui-only/template/package.json +15 -25
- package/dist/templates/web/ui-only/template/postcss.config.mjs +8 -0
- package/dist/templates/web/ui-only/template/src/app/error.tsx +67 -67
- package/dist/templates/web/ui-only/template/src/app/globals.css +85 -31
- package/dist/templates/web/ui-only/template/src/app/layout.tsx +4 -1
- package/dist/templates/web/ui-only/template/src/app/loading.tsx +20 -20
- package/dist/templates/web/ui-only/template/src/components/providers/app-providers.tsx +20 -26
- package/dist/templates/web/ui-only/template/tsconfig.json +27 -33
- package/package.json +1 -1
- package/src/templates/shared/auth/supabase/web/src/middleware.ts +63 -0
- package/src/templates/shared/database/supabase/web/src/lib/supabase/server.ts +3 -1
- package/src/templates/shared/design/web/src/config/design.config.ts +14 -14
- package/src/templates/shared/landing/web/src/components/LandingPage.tsx +0 -3
- package/src/templates/shared/security/web/src/lib/api-security.ts +2 -2
- package/src/templates/web/ai-platform/template/next.config.js +14 -14
- package/src/templates/web/ai-platform/template/package.json +11 -22
- package/src/templates/web/ai-platform/template/postcss.config.mjs +8 -0
- package/src/templates/web/ai-platform/template/src/app/chat/page.tsx +234 -235
- package/src/templates/web/ai-platform/template/src/app/dashboard/page.tsx +142 -142
- package/src/templates/web/ai-platform/template/src/app/error.tsx +13 -13
- package/src/templates/web/ai-platform/template/src/app/globals.css +97 -34
- package/src/templates/web/ai-platform/template/src/app/layout.tsx +3 -0
- package/src/templates/web/ai-platform/template/src/app/loading.tsx +22 -22
- package/src/templates/web/ai-platform/template/src/app/page.tsx +249 -155
- package/src/templates/web/ai-platform/template/src/components/providers/app-providers.tsx +5 -2
- package/src/templates/web/ai-platform/template/src/lib/auth-server.ts +32 -33
- package/src/templates/web/base/template/next.config.js +14 -15
- package/src/templates/web/base/template/package.json +16 -31
- package/src/templates/web/base/template/postcss.config.mjs +8 -0
- package/src/templates/web/base/template/src/app/error.tsx +97 -97
- package/src/templates/web/base/template/src/app/globals.css +87 -148
- package/src/templates/web/base/template/src/app/layout.tsx +4 -1
- package/src/templates/web/base/template/src/app/loading.tsx +52 -52
- package/src/templates/web/base/template/src/components/providers/app-providers.tsx +5 -2
- package/src/templates/web/base/template/tsconfig.json +27 -33
- package/src/templates/web/iot-dashboard/template/next.config.js +14 -14
- package/src/templates/web/iot-dashboard/template/package.json +12 -16
- package/src/templates/web/iot-dashboard/template/postcss.config.mjs +8 -0
- package/src/templates/web/iot-dashboard/template/src/app/dashboard/page.tsx +224 -224
- package/src/templates/web/iot-dashboard/template/src/app/error.tsx +8 -8
- package/src/templates/web/iot-dashboard/template/src/app/globals.css +97 -20
- package/src/templates/web/iot-dashboard/template/src/app/layout.tsx +3 -0
- package/src/templates/web/iot-dashboard/template/src/app/loading.tsx +5 -5
- package/src/templates/web/iot-dashboard/template/src/app/page.tsx +266 -189
- package/src/templates/web/iot-dashboard/template/src/components/providers/app-providers.tsx +5 -2
- package/src/templates/web/iot-dashboard/template/src/lib/auth-server.ts +32 -33
- package/src/templates/web/marketplace/template/next.config.js +14 -14
- package/src/templates/web/marketplace/template/package.json +11 -18
- package/src/templates/web/marketplace/template/postcss.config.mjs +8 -0
- package/src/templates/web/marketplace/template/src/app/cart/page.tsx +147 -147
- package/src/templates/web/marketplace/template/src/app/dashboard/page.tsx +149 -149
- package/src/templates/web/marketplace/template/src/app/error.tsx +7 -7
- package/src/templates/web/marketplace/template/src/app/globals.css +97 -20
- package/src/templates/web/marketplace/template/src/app/layout.tsx +3 -0
- package/src/templates/web/marketplace/template/src/app/loading.tsx +5 -5
- package/src/templates/web/marketplace/template/src/app/page.tsx +370 -169
- package/src/templates/web/marketplace/template/src/app/products/page.tsx +129 -129
- package/src/templates/web/marketplace/template/src/components/providers/app-providers.tsx +5 -2
- package/src/templates/web/marketplace/template/src/lib/auth-server.ts +32 -33
- package/src/templates/web/micro-saas/template/next.config.js +14 -14
- package/src/templates/web/micro-saas/template/package.json +9 -8
- package/src/templates/web/micro-saas/template/postcss.config.mjs +8 -0
- package/src/templates/web/micro-saas/template/src/app/dashboard/page.tsx +145 -117
- package/src/templates/web/micro-saas/template/src/app/error.tsx +7 -7
- package/src/templates/web/micro-saas/template/src/app/globals.css +97 -20
- package/src/templates/web/micro-saas/template/src/app/layout.tsx +3 -0
- package/src/templates/web/micro-saas/template/src/app/loading.tsx +43 -27
- package/src/templates/web/micro-saas/template/src/app/login/page.tsx +101 -87
- package/src/templates/web/micro-saas/template/src/app/page.tsx +227 -137
- package/src/templates/web/micro-saas/template/src/app/signup/page.tsx +122 -108
- package/src/templates/web/micro-saas/template/src/components/providers/app-providers.tsx +5 -2
- package/src/templates/web/micro-saas/template/src/lib/auth-server.ts +32 -33
- package/src/templates/web/ui-auth/template/next.config.js +14 -12
- package/src/templates/web/ui-auth/template/package.json +16 -26
- package/src/templates/web/ui-auth/template/postcss.config.mjs +8 -0
- package/src/templates/web/ui-auth/template/src/app/error.tsx +67 -67
- package/src/templates/web/ui-auth/template/src/app/globals.css +85 -84
- package/src/templates/web/ui-auth/template/src/app/layout.tsx +4 -1
- package/src/templates/web/ui-auth/template/src/app/loading.tsx +20 -38
- package/src/templates/web/ui-auth/template/src/components/providers/app-providers.tsx +5 -2
- package/src/templates/web/ui-auth/template/tsconfig.json +27 -33
- package/src/templates/web/ui-auth-ai/template/next.config.js +15 -13
- package/src/templates/web/ui-auth-ai/template/package.json +25 -21
- package/src/templates/web/ui-auth-ai/template/postcss.config.mjs +8 -0
- package/src/templates/web/ui-auth-ai/template/src/app/error.tsx +7 -7
- package/src/templates/web/ui-auth-ai/template/src/app/globals.css +87 -25
- package/src/templates/web/ui-auth-ai/template/src/app/layout.tsx +3 -0
- package/src/templates/web/ui-auth-ai/template/src/app/loading.tsx +4 -4
- package/src/templates/web/ui-auth-ai/template/tsconfig.json +27 -28
- package/src/templates/web/ui-auth-payments/template/next.config.js +14 -12
- package/src/templates/web/ui-auth-payments/template/package.json +16 -29
- package/src/templates/web/ui-auth-payments/template/postcss.config.mjs +8 -0
- package/src/templates/web/ui-auth-payments/template/src/app/error.tsx +67 -67
- package/src/templates/web/ui-auth-payments/template/src/app/globals.css +89 -204
- package/src/templates/web/ui-auth-payments/template/src/app/layout.tsx +4 -1
- package/src/templates/web/ui-auth-payments/template/src/app/loading.tsx +20 -20
- package/src/templates/web/ui-auth-payments/template/tsconfig.json +27 -33
- package/src/templates/web/ui-auth-payments-ai/template/next.config.js +14 -12
- package/src/templates/web/ui-auth-payments-ai/template/package.json +17 -33
- package/src/templates/web/ui-auth-payments-ai/template/postcss.config.mjs +8 -0
- package/src/templates/web/ui-auth-payments-ai/template/src/app/error.tsx +67 -67
- package/src/templates/web/ui-auth-payments-ai/template/src/app/globals.css +85 -85
- package/src/templates/web/ui-auth-payments-ai/template/src/app/layout.tsx +4 -1
- package/src/templates/web/ui-auth-payments-ai/template/src/app/loading.tsx +20 -20
- package/src/templates/web/ui-auth-payments-ai/template/src/components/providers/app-providers.tsx +5 -2
- package/src/templates/web/ui-auth-payments-ai/template/tsconfig.json +27 -33
- package/src/templates/web/ui-auth-payments-audio/template/next.config.js +14 -12
- package/src/templates/web/ui-auth-payments-audio/template/package.json +17 -30
- package/src/templates/web/ui-auth-payments-audio/template/postcss.config.mjs +8 -0
- package/src/templates/web/ui-auth-payments-audio/template/src/app/error.tsx +67 -67
- package/src/templates/web/ui-auth-payments-audio/template/src/app/globals.css +85 -85
- package/src/templates/web/ui-auth-payments-audio/template/src/app/layout.tsx +4 -1
- package/src/templates/web/ui-auth-payments-audio/template/src/app/loading.tsx +20 -20
- package/src/templates/web/ui-auth-payments-audio/template/src/components/providers/app-providers.tsx +5 -2
- package/src/templates/web/ui-auth-payments-audio/template/tsconfig.json +27 -33
- package/src/templates/web/ui-auth-payments-video/template/next.config.js +14 -12
- package/src/templates/web/ui-auth-payments-video/template/package.json +17 -30
- package/src/templates/web/ui-auth-payments-video/template/postcss.config.mjs +8 -0
- package/src/templates/web/ui-auth-payments-video/template/src/app/error.tsx +67 -67
- package/src/templates/web/ui-auth-payments-video/template/src/app/globals.css +89 -221
- package/src/templates/web/ui-auth-payments-video/template/src/app/layout.tsx +4 -1
- package/src/templates/web/ui-auth-payments-video/template/src/app/loading.tsx +20 -20
- package/src/templates/web/ui-auth-payments-video/template/src/components/providers/app-providers.tsx +5 -2
- package/src/templates/web/ui-auth-payments-video/template/tsconfig.json +27 -33
- package/src/templates/web/ui-only/template/next.config.js +14 -12
- package/src/templates/web/ui-only/template/package.json +15 -25
- package/src/templates/web/ui-only/template/postcss.config.mjs +8 -0
- package/src/templates/web/ui-only/template/src/app/error.tsx +67 -67
- package/src/templates/web/ui-only/template/src/app/globals.css +85 -31
- package/src/templates/web/ui-only/template/src/app/layout.tsx +4 -1
- package/src/templates/web/ui-only/template/src/app/loading.tsx +20 -20
- package/src/templates/web/ui-only/template/src/components/providers/app-providers.tsx +20 -26
- package/src/templates/web/ui-only/template/tsconfig.json +27 -33
- package/dist/templates/web/ai-platform/template/middleware.ts +0 -55
- package/dist/templates/web/ai-platform/template/src/lib/supabase/client.ts +0 -8
- package/dist/templates/web/ai-platform/template/src/lib/supabase/server.ts +0 -27
- package/dist/templates/web/base/template/postcss.config.js +0 -7
- package/dist/templates/web/base/template/tailwind.config.js +0 -77
- package/dist/templates/web/iot-dashboard/template/middleware.ts +0 -56
- package/dist/templates/web/iot-dashboard/template/src/lib/supabase/client.ts +0 -8
- package/dist/templates/web/iot-dashboard/template/src/lib/supabase/server.ts +0 -27
- package/dist/templates/web/marketplace/template/middleware.ts +0 -56
- package/dist/templates/web/marketplace/template/src/lib/supabase/client.ts +0 -8
- package/dist/templates/web/marketplace/template/src/lib/supabase/server.ts +0 -27
- package/dist/templates/web/micro-saas/template/middleware.ts +0 -53
- package/dist/templates/web/micro-saas/template/src/lib/supabase/client.ts +0 -8
- package/dist/templates/web/micro-saas/template/src/lib/supabase/server.ts +0 -29
- package/dist/templates/web/ui-auth/template/.claude +0 -21
- package/dist/templates/web/ui-auth/template/context.md +0 -105
- package/dist/templates/web/ui-auth/template/postcss.config.js +0 -7
- package/dist/templates/web/ui-auth/template/tailwind.config.js +0 -77
- package/dist/templates/web/ui-auth-ai/template/postcss.config.js +0 -6
- package/dist/templates/web/ui-auth-ai/template/tailwind.config.js +0 -22
- package/dist/templates/web/ui-auth-payments/template/middleware.ts +0 -68
- package/dist/templates/web/ui-auth-payments/template/package-lock.json +0 -12240
- package/dist/templates/web/ui-auth-payments/template/postcss.config.js +0 -7
- package/dist/templates/web/ui-auth-payments/template/tailwind.config.js +0 -77
- package/dist/templates/web/ui-auth-payments/template/tsconfig.tsbuildinfo +0 -1
- package/dist/templates/web/ui-auth-payments-ai/template/.claude +0 -21
- package/dist/templates/web/ui-auth-payments-ai/template/context.md +0 -169
- package/dist/templates/web/ui-auth-payments-ai/template/middleware.ts +0 -68
- package/dist/templates/web/ui-auth-payments-ai/template/package-lock.json +0 -12241
- package/dist/templates/web/ui-auth-payments-ai/template/postcss.config.js +0 -7
- package/dist/templates/web/ui-auth-payments-ai/template/tailwind.config.js +0 -77
- package/dist/templates/web/ui-auth-payments-ai/template/tsconfig.tsbuildinfo +0 -1
- package/dist/templates/web/ui-auth-payments-audio/template/middleware.ts +0 -68
- package/dist/templates/web/ui-auth-payments-audio/template/package-lock.json +0 -12241
- package/dist/templates/web/ui-auth-payments-audio/template/postcss.config.js +0 -7
- package/dist/templates/web/ui-auth-payments-audio/template/tailwind.config.js +0 -77
- package/dist/templates/web/ui-auth-payments-audio/template/tsconfig.tsbuildinfo +0 -1
- package/dist/templates/web/ui-auth-payments-video/template/postcss.config.js +0 -7
- package/dist/templates/web/ui-auth-payments-video/template/tailwind.config.js +0 -77
- package/dist/templates/web/ui-only/template/postcss.config.js +0 -7
- package/dist/templates/web/ui-only/template/tailwind.config.js +0 -77
- package/src/templates/web/ai-platform/template/middleware.ts +0 -55
- package/src/templates/web/ai-platform/template/src/lib/supabase/client.ts +0 -8
- package/src/templates/web/ai-platform/template/src/lib/supabase/server.ts +0 -27
- package/src/templates/web/base/template/postcss.config.js +0 -7
- package/src/templates/web/base/template/tailwind.config.js +0 -77
- package/src/templates/web/iot-dashboard/template/middleware.ts +0 -56
- package/src/templates/web/iot-dashboard/template/src/lib/supabase/client.ts +0 -8
- package/src/templates/web/iot-dashboard/template/src/lib/supabase/server.ts +0 -27
- package/src/templates/web/marketplace/template/middleware.ts +0 -56
- package/src/templates/web/marketplace/template/src/lib/supabase/client.ts +0 -8
- package/src/templates/web/marketplace/template/src/lib/supabase/server.ts +0 -27
- package/src/templates/web/micro-saas/template/middleware.ts +0 -53
- package/src/templates/web/micro-saas/template/src/lib/supabase/client.ts +0 -8
- package/src/templates/web/micro-saas/template/src/lib/supabase/server.ts +0 -29
- package/src/templates/web/ui-auth/template/.claude +0 -21
- package/src/templates/web/ui-auth/template/context.md +0 -105
- package/src/templates/web/ui-auth/template/postcss.config.js +0 -7
- package/src/templates/web/ui-auth/template/tailwind.config.js +0 -77
- package/src/templates/web/ui-auth-ai/template/postcss.config.js +0 -6
- package/src/templates/web/ui-auth-ai/template/tailwind.config.js +0 -22
- package/src/templates/web/ui-auth-payments/template/middleware.ts +0 -68
- package/src/templates/web/ui-auth-payments/template/package-lock.json +0 -12240
- package/src/templates/web/ui-auth-payments/template/postcss.config.js +0 -7
- package/src/templates/web/ui-auth-payments/template/tailwind.config.js +0 -77
- package/src/templates/web/ui-auth-payments/template/tsconfig.tsbuildinfo +0 -1
- package/src/templates/web/ui-auth-payments-ai/template/.claude +0 -21
- package/src/templates/web/ui-auth-payments-ai/template/context.md +0 -169
- package/src/templates/web/ui-auth-payments-ai/template/middleware.ts +0 -68
- package/src/templates/web/ui-auth-payments-ai/template/package-lock.json +0 -12241
- package/src/templates/web/ui-auth-payments-ai/template/postcss.config.js +0 -7
- package/src/templates/web/ui-auth-payments-ai/template/tailwind.config.js +0 -77
- package/src/templates/web/ui-auth-payments-ai/template/tsconfig.tsbuildinfo +0 -1
- package/src/templates/web/ui-auth-payments-audio/template/middleware.ts +0 -68
- package/src/templates/web/ui-auth-payments-audio/template/package-lock.json +0 -12241
- package/src/templates/web/ui-auth-payments-audio/template/postcss.config.js +0 -7
- package/src/templates/web/ui-auth-payments-audio/template/tailwind.config.js +0 -77
- package/src/templates/web/ui-auth-payments-audio/template/tsconfig.tsbuildinfo +0 -1
- package/src/templates/web/ui-auth-payments-video/template/postcss.config.js +0 -7
- package/src/templates/web/ui-auth-payments-video/template/tailwind.config.js +0 -77
- package/src/templates/web/ui-only/template/postcss.config.js +0 -7
- package/src/templates/web/ui-only/template/tailwind.config.js +0 -77
- /package/dist/templates/shared/admin/web/{components → src/components}/admin-nav.tsx +0 -0
- /package/dist/templates/shared/auth/keycloak/web/{auth.config.ts → src/auth.config.ts} +0 -0
- /package/dist/templates/shared/auth/keycloak/web/{auth.ts → src/auth.ts} +0 -0
- /package/dist/templates/shared/middleware/web/{middleware.ts → src/middleware.ts} +0 -0
- /package/src/templates/shared/admin/web/{components → src/components}/admin-nav.tsx +0 -0
- /package/src/templates/shared/auth/keycloak/web/{auth.config.ts → src/auth.config.ts} +0 -0
- /package/src/templates/shared/auth/keycloak/web/{auth.ts → src/auth.ts} +0 -0
- /package/src/templates/shared/middleware/web/{middleware.ts → src/middleware.ts} +0 -0
|
@@ -1,142 +1,142 @@
|
|
|
1
|
-
import { Suspense } from 'react'
|
|
2
|
-
import { Button, Card } from '@digilogiclabs/saas-factory-ui'
|
|
3
|
-
import { MessageSquare, Zap, Key, CreditCard, BarChart, Settings } from 'lucide-react'
|
|
4
|
-
import { requireAuth } from '@/lib/auth-server'
|
|
5
|
-
import Link from 'next/link'
|
|
6
|
-
|
|
7
|
-
async function getUsageStats(userId: string) {
|
|
8
|
-
await new Promise(resolve => setTimeout(resolve, 100))
|
|
9
|
-
return {
|
|
10
|
-
apiCalls: 1234,
|
|
11
|
-
tokensUsed: 45678,
|
|
12
|
-
modelsUsed: 3,
|
|
13
|
-
creditsRemaining: 850,
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
function StatCard({ title, value, icon: Icon, description }: {
|
|
18
|
-
title: string
|
|
19
|
-
value: string | number
|
|
20
|
-
icon: React.ComponentType<{ className?: string }>
|
|
21
|
-
description?: string
|
|
22
|
-
}) {
|
|
23
|
-
return (
|
|
24
|
-
<Card className="p-6 bg-
|
|
25
|
-
<div className="flex items-center justify-between">
|
|
26
|
-
<div>
|
|
27
|
-
<p className="text-sm font-medium text-
|
|
28
|
-
<p className="text-2xl font-bold text-
|
|
29
|
-
{description && <p className="text-xs text-
|
|
30
|
-
</div>
|
|
31
|
-
<div className="w-12 h-12 bg-
|
|
32
|
-
<Icon className="h-6 w-6 text-
|
|
33
|
-
</div>
|
|
34
|
-
</div>
|
|
35
|
-
</Card>
|
|
36
|
-
)
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
async function UsageStats({ userId }: { userId: string }) {
|
|
40
|
-
const stats = await getUsageStats(userId)
|
|
41
|
-
|
|
42
|
-
return (
|
|
43
|
-
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6 mb-8">
|
|
44
|
-
<StatCard title="API Calls" value={stats.apiCalls.toLocaleString()} icon={Zap} description="This month" />
|
|
45
|
-
<StatCard title="Tokens Used" value={`${(stats.tokensUsed / 1000).toFixed(1)}K`} icon={MessageSquare} description="This month" />
|
|
46
|
-
<StatCard title="Models Used" value={stats.modelsUsed} icon={BarChart} />
|
|
47
|
-
<StatCard title="Credits" value={stats.creditsRemaining} icon={CreditCard} description="Remaining" />
|
|
48
|
-
</div>
|
|
49
|
-
)
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
function StatsSkeleton() {
|
|
53
|
-
return (
|
|
54
|
-
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6 mb-8">
|
|
55
|
-
{[...Array(4)].map((_, i) => (
|
|
56
|
-
<Card key={i} className="p-6 bg-
|
|
57
|
-
<div className="animate-pulse">
|
|
58
|
-
<div className="h-4 bg-
|
|
59
|
-
<div className="h-8 bg-
|
|
60
|
-
</div>
|
|
61
|
-
</Card>
|
|
62
|
-
))}
|
|
63
|
-
</div>
|
|
64
|
-
)
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
export default async function DashboardPage() {
|
|
68
|
-
const user = await requireAuth()
|
|
69
|
-
|
|
70
|
-
return (
|
|
71
|
-
<div className="min-h-screen bg-
|
|
72
|
-
<div className="max-w-7xl mx-auto px-4 py-8">
|
|
73
|
-
{/* Header */}
|
|
74
|
-
<div className="flex items-center justify-between mb-8">
|
|
75
|
-
<div>
|
|
76
|
-
<h1 className="text-3xl font-bold text-
|
|
77
|
-
<p className="text-
|
|
78
|
-
</div>
|
|
79
|
-
<Link href="/chat">
|
|
80
|
-
<Button
|
|
81
|
-
<MessageSquare className="w-4 h-4 mr-2" />
|
|
82
|
-
New Chat
|
|
83
|
-
</Button>
|
|
84
|
-
</Link>
|
|
85
|
-
</div>
|
|
86
|
-
|
|
87
|
-
{/* Stats */}
|
|
88
|
-
<Suspense fallback={<StatsSkeleton />}>
|
|
89
|
-
<UsageStats userId={user.id} />
|
|
90
|
-
</Suspense>
|
|
91
|
-
|
|
92
|
-
{/* Quick Actions */}
|
|
93
|
-
<div className="grid grid-cols-1 md:grid-cols-3 gap-6 mb-8">
|
|
94
|
-
<Card className="p-6 bg-
|
|
95
|
-
<div className="flex items-center mb-4">
|
|
96
|
-
<Key className="h-6 w-6 text-
|
|
97
|
-
<h3 className="text-lg font-semibold text-
|
|
98
|
-
</div>
|
|
99
|
-
<p className="text-
|
|
100
|
-
Manage your API keys for programmatic access.
|
|
101
|
-
</p>
|
|
102
|
-
<Button className="w-full" variant="outline">Manage Keys</Button>
|
|
103
|
-
</Card>
|
|
104
|
-
|
|
105
|
-
<Card className="p-6 bg-
|
|
106
|
-
<div className="flex items-center mb-4">
|
|
107
|
-
<CreditCard className="h-6 w-6 text-
|
|
108
|
-
<h3 className="text-lg font-semibold text-
|
|
109
|
-
</div>
|
|
110
|
-
<p className="text-
|
|
111
|
-
View usage and manage your subscription.
|
|
112
|
-
</p>
|
|
113
|
-
<Button className="w-full" variant="outline">View Billing</Button>
|
|
114
|
-
</Card>
|
|
115
|
-
|
|
116
|
-
<Card className="p-6 bg-
|
|
117
|
-
<div className="flex items-center mb-4">
|
|
118
|
-
<Settings className="h-6 w-6 text-
|
|
119
|
-
<h3 className="text-lg font-semibold text-
|
|
120
|
-
</div>
|
|
121
|
-
<p className="text-
|
|
122
|
-
Configure your account preferences.
|
|
123
|
-
</p>
|
|
124
|
-
<Button className="w-full" variant="outline">Open Settings</Button>
|
|
125
|
-
</Card>
|
|
126
|
-
</div>
|
|
127
|
-
|
|
128
|
-
{/* Recent Activity */}
|
|
129
|
-
<Card className="p-6 bg-
|
|
130
|
-
<h3 className="text-lg font-semibold text-
|
|
131
|
-
<div className="text-center py-8 text-
|
|
132
|
-
<MessageSquare className="w-12 h-12 mx-auto mb-4 opacity-50" />
|
|
133
|
-
<p>No recent conversations. Start a new chat!</p>
|
|
134
|
-
<Link href="/chat">
|
|
135
|
-
<Button className="mt-4
|
|
136
|
-
</Link>
|
|
137
|
-
</div>
|
|
138
|
-
</Card>
|
|
139
|
-
</div>
|
|
140
|
-
</div>
|
|
141
|
-
)
|
|
142
|
-
}
|
|
1
|
+
import { Suspense } from 'react'
|
|
2
|
+
import { Button, Card } from '@digilogiclabs/saas-factory-ui'
|
|
3
|
+
import { MessageSquare, Zap, Key, CreditCard, BarChart, Settings } from 'lucide-react'
|
|
4
|
+
import { requireAuth } from '@/lib/auth-server'
|
|
5
|
+
import Link from 'next/link'
|
|
6
|
+
|
|
7
|
+
async function getUsageStats(userId: string) {
|
|
8
|
+
await new Promise(resolve => setTimeout(resolve, 100))
|
|
9
|
+
return {
|
|
10
|
+
apiCalls: 1234,
|
|
11
|
+
tokensUsed: 45678,
|
|
12
|
+
modelsUsed: 3,
|
|
13
|
+
creditsRemaining: 850,
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
function StatCard({ title, value, icon: Icon, description }: {
|
|
18
|
+
title: string
|
|
19
|
+
value: string | number
|
|
20
|
+
icon: React.ComponentType<{ className?: string }>
|
|
21
|
+
description?: string
|
|
22
|
+
}) {
|
|
23
|
+
return (
|
|
24
|
+
<Card className="p-6 bg-secondary border-border">
|
|
25
|
+
<div className="flex items-center justify-between">
|
|
26
|
+
<div>
|
|
27
|
+
<p className="text-sm font-medium text-muted-foreground">{title}</p>
|
|
28
|
+
<p className="text-2xl font-bold text-foreground">{value}</p>
|
|
29
|
+
{description && <p className="text-xs text-muted-foreground mt-1">{description}</p>}
|
|
30
|
+
</div>
|
|
31
|
+
<div className="w-12 h-12 bg-primary/20 rounded-lg flex items-center justify-center">
|
|
32
|
+
<Icon className="h-6 w-6 text-primary" />
|
|
33
|
+
</div>
|
|
34
|
+
</div>
|
|
35
|
+
</Card>
|
|
36
|
+
)
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
async function UsageStats({ userId }: { userId: string }) {
|
|
40
|
+
const stats = await getUsageStats(userId)
|
|
41
|
+
|
|
42
|
+
return (
|
|
43
|
+
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6 mb-8">
|
|
44
|
+
<StatCard title="API Calls" value={stats.apiCalls.toLocaleString()} icon={Zap} description="This month" />
|
|
45
|
+
<StatCard title="Tokens Used" value={`${(stats.tokensUsed / 1000).toFixed(1)}K`} icon={MessageSquare} description="This month" />
|
|
46
|
+
<StatCard title="Models Used" value={stats.modelsUsed} icon={BarChart} />
|
|
47
|
+
<StatCard title="Credits" value={stats.creditsRemaining} icon={CreditCard} description="Remaining" />
|
|
48
|
+
</div>
|
|
49
|
+
)
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
function StatsSkeleton() {
|
|
53
|
+
return (
|
|
54
|
+
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6 mb-8">
|
|
55
|
+
{[...Array(4)].map((_, i) => (
|
|
56
|
+
<Card key={i} className="p-6 bg-secondary border-border">
|
|
57
|
+
<div className="animate-pulse">
|
|
58
|
+
<div className="h-4 bg-muted rounded w-1/2 mb-2"></div>
|
|
59
|
+
<div className="h-8 bg-muted rounded w-1/3"></div>
|
|
60
|
+
</div>
|
|
61
|
+
</Card>
|
|
62
|
+
))}
|
|
63
|
+
</div>
|
|
64
|
+
)
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
export default async function DashboardPage() {
|
|
68
|
+
const user = await requireAuth()
|
|
69
|
+
|
|
70
|
+
return (
|
|
71
|
+
<div className="min-h-screen bg-background">
|
|
72
|
+
<div className="max-w-7xl mx-auto px-4 py-8">
|
|
73
|
+
{/* Header */}
|
|
74
|
+
<div className="flex items-center justify-between mb-8">
|
|
75
|
+
<div>
|
|
76
|
+
<h1 className="text-3xl font-bold text-foreground">Dashboard</h1>
|
|
77
|
+
<p className="text-muted-foreground mt-1">Welcome back, {user.name || user.email}</p>
|
|
78
|
+
</div>
|
|
79
|
+
<Link href="/chat">
|
|
80
|
+
<Button>
|
|
81
|
+
<MessageSquare className="w-4 h-4 mr-2" />
|
|
82
|
+
New Chat
|
|
83
|
+
</Button>
|
|
84
|
+
</Link>
|
|
85
|
+
</div>
|
|
86
|
+
|
|
87
|
+
{/* Stats */}
|
|
88
|
+
<Suspense fallback={<StatsSkeleton />}>
|
|
89
|
+
<UsageStats userId={user.id} />
|
|
90
|
+
</Suspense>
|
|
91
|
+
|
|
92
|
+
{/* Quick Actions */}
|
|
93
|
+
<div className="grid grid-cols-1 md:grid-cols-3 gap-6 mb-8">
|
|
94
|
+
<Card className="p-6 bg-secondary border-border">
|
|
95
|
+
<div className="flex items-center mb-4">
|
|
96
|
+
<Key className="h-6 w-6 text-primary mr-3" />
|
|
97
|
+
<h3 className="text-lg font-semibold text-foreground">API Keys</h3>
|
|
98
|
+
</div>
|
|
99
|
+
<p className="text-muted-foreground mb-4">
|
|
100
|
+
Manage your API keys for programmatic access.
|
|
101
|
+
</p>
|
|
102
|
+
<Button className="w-full" variant="outline">Manage Keys</Button>
|
|
103
|
+
</Card>
|
|
104
|
+
|
|
105
|
+
<Card className="p-6 bg-secondary border-border">
|
|
106
|
+
<div className="flex items-center mb-4">
|
|
107
|
+
<CreditCard className="h-6 w-6 text-primary mr-3" />
|
|
108
|
+
<h3 className="text-lg font-semibold text-foreground">Billing</h3>
|
|
109
|
+
</div>
|
|
110
|
+
<p className="text-muted-foreground mb-4">
|
|
111
|
+
View usage and manage your subscription.
|
|
112
|
+
</p>
|
|
113
|
+
<Button className="w-full" variant="outline">View Billing</Button>
|
|
114
|
+
</Card>
|
|
115
|
+
|
|
116
|
+
<Card className="p-6 bg-secondary border-border">
|
|
117
|
+
<div className="flex items-center mb-4">
|
|
118
|
+
<Settings className="h-6 w-6 text-primary mr-3" />
|
|
119
|
+
<h3 className="text-lg font-semibold text-foreground">Settings</h3>
|
|
120
|
+
</div>
|
|
121
|
+
<p className="text-muted-foreground mb-4">
|
|
122
|
+
Configure your account preferences.
|
|
123
|
+
</p>
|
|
124
|
+
<Button className="w-full" variant="outline">Open Settings</Button>
|
|
125
|
+
</Card>
|
|
126
|
+
</div>
|
|
127
|
+
|
|
128
|
+
{/* Recent Activity */}
|
|
129
|
+
<Card className="p-6 bg-secondary border-border">
|
|
130
|
+
<h3 className="text-lg font-semibold text-foreground mb-4">Recent Conversations</h3>
|
|
131
|
+
<div className="text-center py-8 text-muted-foreground">
|
|
132
|
+
<MessageSquare className="w-12 h-12 mx-auto mb-4 opacity-50" />
|
|
133
|
+
<p>No recent conversations. Start a new chat!</p>
|
|
134
|
+
<Link href="/chat">
|
|
135
|
+
<Button className="mt-4">Start Chatting</Button>
|
|
136
|
+
</Link>
|
|
137
|
+
</div>
|
|
138
|
+
</Card>
|
|
139
|
+
</div>
|
|
140
|
+
</div>
|
|
141
|
+
)
|
|
142
|
+
}
|
|
@@ -16,38 +16,38 @@ export default function Error({ error, reset }: ErrorProps) {
|
|
|
16
16
|
}, [error])
|
|
17
17
|
|
|
18
18
|
return (
|
|
19
|
-
<div className="min-h-screen bg-gradient-to-br from-
|
|
20
|
-
<Card className="p-8 max-w-lg w-full bg-
|
|
19
|
+
<div className="min-h-screen bg-gradient-to-br from-background via-primary/5 to-background flex items-center justify-center p-4">
|
|
20
|
+
<Card className="p-8 max-w-lg w-full bg-secondary border-border backdrop-blur-sm">
|
|
21
21
|
<div className="flex flex-col items-center space-y-6 text-center">
|
|
22
|
-
<div className="w-16 h-16 bg-
|
|
23
|
-
<AlertTriangle className="w-8 h-8 text-
|
|
22
|
+
<div className="w-16 h-16 bg-destructive/20 rounded-full flex items-center justify-center">
|
|
23
|
+
<AlertTriangle className="w-8 h-8 text-destructive" />
|
|
24
24
|
</div>
|
|
25
25
|
|
|
26
26
|
<div>
|
|
27
|
-
<h1 className="text-2xl font-bold text-
|
|
27
|
+
<h1 className="text-2xl font-bold text-foreground mb-2">
|
|
28
28
|
Something went wrong!
|
|
29
29
|
</h1>
|
|
30
|
-
<p className="text-
|
|
30
|
+
<p className="text-muted-foreground mb-4">
|
|
31
31
|
We encountered an unexpected error. This has been logged and our team will look into it.
|
|
32
32
|
</p>
|
|
33
33
|
|
|
34
34
|
{process.env.NODE_ENV === 'development' && (
|
|
35
35
|
<details className="mt-4 text-left">
|
|
36
|
-
<summary className="cursor-pointer text-sm text-
|
|
36
|
+
<summary className="cursor-pointer text-sm text-muted-foreground hover:text-foreground">
|
|
37
37
|
Error details (development only)
|
|
38
38
|
</summary>
|
|
39
|
-
<div className="mt-2 p-3 bg-
|
|
39
|
+
<div className="mt-2 p-3 bg-muted rounded text-xs font-mono text-muted-foreground overflow-auto max-h-40">
|
|
40
40
|
<div className="mb-2">
|
|
41
|
-
<strong className="text-
|
|
41
|
+
<strong className="text-foreground">Message:</strong> {error.message}
|
|
42
42
|
</div>
|
|
43
43
|
{error.digest && (
|
|
44
44
|
<div className="mb-2">
|
|
45
|
-
<strong className="text-
|
|
45
|
+
<strong className="text-foreground">Digest:</strong> {error.digest}
|
|
46
46
|
</div>
|
|
47
47
|
)}
|
|
48
48
|
{error.stack && (
|
|
49
49
|
<div>
|
|
50
|
-
<strong className="text-
|
|
50
|
+
<strong className="text-foreground">Stack:</strong>
|
|
51
51
|
<pre className="whitespace-pre-wrap mt-1">{error.stack}</pre>
|
|
52
52
|
</div>
|
|
53
53
|
)}
|
|
@@ -57,12 +57,12 @@ export default function Error({ error, reset }: ErrorProps) {
|
|
|
57
57
|
</div>
|
|
58
58
|
|
|
59
59
|
<div className="flex flex-col sm:flex-row gap-3 w-full">
|
|
60
|
-
<Button onClick={reset} className="flex-1
|
|
60
|
+
<Button onClick={reset} className="flex-1" size="lg">
|
|
61
61
|
<RefreshCw className="w-4 h-4 mr-2" />
|
|
62
62
|
Try again
|
|
63
63
|
</Button>
|
|
64
64
|
<Link href="/" className="flex-1">
|
|
65
|
-
<Button variant="outline" className="w-full
|
|
65
|
+
<Button variant="outline" className="w-full" size="lg">
|
|
66
66
|
<Home className="w-4 h-4 mr-2" />
|
|
67
67
|
Go home
|
|
68
68
|
</Button>
|
|
@@ -1,34 +1,97 @@
|
|
|
1
|
-
@import "tailwindcss";
|
|
2
|
-
|
|
3
|
-
@theme {
|
|
4
|
-
--
|
|
5
|
-
|
|
6
|
-
--
|
|
7
|
-
--
|
|
8
|
-
--radius:
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
color: var(--
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
}
|
|
1
|
+
@import "tailwindcss";
|
|
2
|
+
|
|
3
|
+
@theme {
|
|
4
|
+
--font-sans: 'Inter', system-ui, sans-serif;
|
|
5
|
+
|
|
6
|
+
--radius: 0.5rem;
|
|
7
|
+
--radius-sm: calc(var(--radius) - 4px);
|
|
8
|
+
--radius-md: calc(var(--radius) - 2px);
|
|
9
|
+
--radius-lg: var(--radius);
|
|
10
|
+
--radius-xl: calc(var(--radius) + 4px);
|
|
11
|
+
|
|
12
|
+
--color-background: hsl(var(--background));
|
|
13
|
+
--color-foreground: hsl(var(--foreground));
|
|
14
|
+
--color-card: hsl(var(--card));
|
|
15
|
+
--color-card-foreground: hsl(var(--card-foreground));
|
|
16
|
+
--color-popover: hsl(var(--popover));
|
|
17
|
+
--color-popover-foreground: hsl(var(--popover-foreground));
|
|
18
|
+
--color-primary: hsl(var(--primary));
|
|
19
|
+
--color-primary-foreground: hsl(var(--primary-foreground));
|
|
20
|
+
--color-secondary: hsl(var(--secondary));
|
|
21
|
+
--color-secondary-foreground: hsl(var(--secondary-foreground));
|
|
22
|
+
--color-muted: hsl(var(--muted));
|
|
23
|
+
--color-muted-foreground: hsl(var(--muted-foreground));
|
|
24
|
+
--color-accent: hsl(var(--accent));
|
|
25
|
+
--color-accent-foreground: hsl(var(--accent-foreground));
|
|
26
|
+
--color-destructive: hsl(var(--destructive));
|
|
27
|
+
--color-destructive-foreground: hsl(var(--destructive-foreground));
|
|
28
|
+
--color-border: hsl(var(--border));
|
|
29
|
+
--color-input: hsl(var(--input));
|
|
30
|
+
--color-ring: hsl(var(--ring));
|
|
31
|
+
--color-brand-from: hsl(var(--brand-from));
|
|
32
|
+
--color-brand-via: hsl(var(--brand-via));
|
|
33
|
+
--color-brand-to: hsl(var(--brand-to));
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
:root {
|
|
37
|
+
--brand-from: 271 81% 56%;
|
|
38
|
+
--brand-via: 262 83% 58%;
|
|
39
|
+
--brand-to: 250 85% 60%;
|
|
40
|
+
--background: 0 0% 100%;
|
|
41
|
+
--foreground: 240 10% 4%;
|
|
42
|
+
--card: 0 0% 100%;
|
|
43
|
+
--card-foreground: 240 10% 4%;
|
|
44
|
+
--popover: 0 0% 100%;
|
|
45
|
+
--popover-foreground: 240 10% 4%;
|
|
46
|
+
--primary: 271 81% 56%;
|
|
47
|
+
--primary-foreground: 0 0% 100%;
|
|
48
|
+
--secondary: 240 5% 96%;
|
|
49
|
+
--secondary-foreground: 240 6% 10%;
|
|
50
|
+
--muted: 240 5% 96%;
|
|
51
|
+
--muted-foreground: 240 4% 46%;
|
|
52
|
+
--accent: 240 5% 96%;
|
|
53
|
+
--accent-foreground: 240 6% 10%;
|
|
54
|
+
--destructive: 0 84% 60%;
|
|
55
|
+
--destructive-foreground: 0 0% 100%;
|
|
56
|
+
--border: 240 6% 90%;
|
|
57
|
+
--input: 240 6% 90%;
|
|
58
|
+
--ring: 271 81% 56%;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
.dark {
|
|
62
|
+
--brand-from: 271 91% 65%;
|
|
63
|
+
--brand-via: 262 90% 67%;
|
|
64
|
+
--brand-to: 250 90% 69%;
|
|
65
|
+
--background: 240 10% 4%;
|
|
66
|
+
--foreground: 0 0% 95%;
|
|
67
|
+
--card: 240 10% 6%;
|
|
68
|
+
--card-foreground: 0 0% 95%;
|
|
69
|
+
--popover: 240 10% 6%;
|
|
70
|
+
--popover-foreground: 0 0% 95%;
|
|
71
|
+
--primary: 271 91% 65%;
|
|
72
|
+
--primary-foreground: 0 0% 100%;
|
|
73
|
+
--secondary: 240 4% 16%;
|
|
74
|
+
--secondary-foreground: 0 0% 95%;
|
|
75
|
+
--muted: 240 4% 16%;
|
|
76
|
+
--muted-foreground: 240 5% 65%;
|
|
77
|
+
--accent: 240 4% 16%;
|
|
78
|
+
--accent-foreground: 0 0% 95%;
|
|
79
|
+
--destructive: 0 63% 31%;
|
|
80
|
+
--destructive-foreground: 0 0% 95%;
|
|
81
|
+
--border: 240 4% 16%;
|
|
82
|
+
--input: 240 4% 16%;
|
|
83
|
+
--ring: 271 91% 65%;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
@layer base {
|
|
87
|
+
* {
|
|
88
|
+
border-color: hsl(var(--border));
|
|
89
|
+
}
|
|
90
|
+
body {
|
|
91
|
+
font-family: var(--font-sans);
|
|
92
|
+
background-color: hsl(var(--background));
|
|
93
|
+
color: hsl(var(--foreground));
|
|
94
|
+
-webkit-font-smoothing: antialiased;
|
|
95
|
+
-moz-osx-font-smoothing: grayscale;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
@@ -19,6 +19,9 @@ export default function RootLayout({
|
|
|
19
19
|
<html lang="en" suppressHydrationWarning>
|
|
20
20
|
<body className={inter.className}>
|
|
21
21
|
<AppProviders>
|
|
22
|
+
<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">
|
|
23
|
+
Skip to content
|
|
24
|
+
</a>
|
|
22
25
|
{children}
|
|
23
26
|
</AppProviders>
|
|
24
27
|
</body>
|
|
@@ -2,19 +2,19 @@ import { Card, SkeletonText } from '@digilogiclabs/saas-factory-ui'
|
|
|
2
2
|
|
|
3
3
|
export default function Loading() {
|
|
4
4
|
return (
|
|
5
|
-
<div className="min-h-screen bg-gradient-to-br from-
|
|
5
|
+
<div className="min-h-screen bg-gradient-to-br from-background via-primary/5 to-background">
|
|
6
6
|
{/* Header skeleton */}
|
|
7
|
-
<div className="border-b border-
|
|
7
|
+
<div className="border-b border-border bg-card/50 backdrop-blur-sm px-4 py-4">
|
|
8
8
|
<div className="max-w-7xl mx-auto flex items-center justify-between">
|
|
9
|
-
<SkeletonText className="h-8 w-48
|
|
9
|
+
<SkeletonText className="h-8 w-48" />
|
|
10
10
|
<div className="flex gap-6">
|
|
11
|
-
<SkeletonText className="h-4 w-16
|
|
12
|
-
<SkeletonText className="h-4 w-20
|
|
13
|
-
<SkeletonText className="h-4 w-12
|
|
11
|
+
<SkeletonText className="h-4 w-16" />
|
|
12
|
+
<SkeletonText className="h-4 w-20" />
|
|
13
|
+
<SkeletonText className="h-4 w-12" />
|
|
14
14
|
</div>
|
|
15
15
|
<div className="flex gap-2">
|
|
16
|
-
<SkeletonText className="h-8 w-20
|
|
17
|
-
<SkeletonText className="h-8 w-24
|
|
16
|
+
<SkeletonText className="h-8 w-20" />
|
|
17
|
+
<SkeletonText className="h-8 w-24" />
|
|
18
18
|
</div>
|
|
19
19
|
</div>
|
|
20
20
|
</div>
|
|
@@ -22,19 +22,19 @@ export default function Loading() {
|
|
|
22
22
|
<div className="max-w-7xl mx-auto px-4 py-16">
|
|
23
23
|
{/* Hero skeleton */}
|
|
24
24
|
<div className="text-center mb-20">
|
|
25
|
-
<SkeletonText className="h-6 w-40 mx-auto mb-6
|
|
26
|
-
<SkeletonText className="h-16 w-80 mx-auto mb-6
|
|
27
|
-
<SkeletonText className="h-6 w-96 mx-auto mb-8
|
|
25
|
+
<SkeletonText className="h-6 w-40 mx-auto mb-6" />
|
|
26
|
+
<SkeletonText className="h-16 w-80 mx-auto mb-6" />
|
|
27
|
+
<SkeletonText className="h-6 w-96 mx-auto mb-8" />
|
|
28
28
|
</div>
|
|
29
29
|
|
|
30
30
|
{/* Feature cards skeleton */}
|
|
31
31
|
<div className="grid md:grid-cols-2 lg:grid-cols-4 gap-6 mb-20">
|
|
32
32
|
{Array.from({ length: 4 }).map((_, i) => (
|
|
33
|
-
<Card key={i} className="p-6 bg-
|
|
33
|
+
<Card key={i} className="p-6 bg-secondary border-border">
|
|
34
34
|
<div className="animate-pulse">
|
|
35
|
-
<SkeletonText className="h-12 w-12 mb-4
|
|
36
|
-
<SkeletonText className="h-5 w-24 mb-2
|
|
37
|
-
<SkeletonText className="h-4 w-full
|
|
35
|
+
<SkeletonText className="h-12 w-12 mb-4 rounded-lg" />
|
|
36
|
+
<SkeletonText className="h-5 w-24 mb-2" />
|
|
37
|
+
<SkeletonText className="h-4 w-full" />
|
|
38
38
|
</div>
|
|
39
39
|
</Card>
|
|
40
40
|
))}
|
|
@@ -42,13 +42,13 @@ export default function Loading() {
|
|
|
42
42
|
|
|
43
43
|
{/* Models skeleton */}
|
|
44
44
|
<div className="mb-20">
|
|
45
|
-
<SkeletonText className="h-8 w-48 mb-8
|
|
45
|
+
<SkeletonText className="h-8 w-48 mb-8" />
|
|
46
46
|
<div className="grid md:grid-cols-2 lg:grid-cols-4 gap-4">
|
|
47
47
|
{Array.from({ length: 4 }).map((_, i) => (
|
|
48
|
-
<Card key={i} className="p-4 bg-
|
|
48
|
+
<Card key={i} className="p-4 bg-secondary border-border">
|
|
49
49
|
<div className="animate-pulse">
|
|
50
|
-
<SkeletonText className="h-5 w-20 mb-2
|
|
51
|
-
<SkeletonText className="h-4 w-16
|
|
50
|
+
<SkeletonText className="h-5 w-20 mb-2" />
|
|
51
|
+
<SkeletonText className="h-4 w-16" />
|
|
52
52
|
</div>
|
|
53
53
|
</Card>
|
|
54
54
|
))}
|
|
@@ -57,10 +57,10 @@ export default function Loading() {
|
|
|
57
57
|
|
|
58
58
|
{/* Loading indicator */}
|
|
59
59
|
<div className="flex justify-center">
|
|
60
|
-
<div className="flex items-center gap-3 text-
|
|
60
|
+
<div className="flex items-center gap-3 text-muted-foreground">
|
|
61
61
|
<div className="relative">
|
|
62
|
-
<div className="w-8 h-8 border-4 border-
|
|
63
|
-
<div className="absolute top-0 left-0 w-8 h-8 border-4 border-
|
|
62
|
+
<div className="w-8 h-8 border-4 border-border rounded-full"></div>
|
|
63
|
+
<div className="absolute top-0 left-0 w-8 h-8 border-4 border-primary border-t-transparent rounded-full animate-spin"></div>
|
|
64
64
|
</div>
|
|
65
65
|
<p className="text-sm">Loading AI platform...</p>
|
|
66
66
|
</div>
|