@donotdev/cli 0.0.3
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/LICENSE.md +48 -0
- package/README.md +291 -0
- package/dependencies-matrix.json +694 -0
- package/dist/bin/commands/build.d.ts +11 -0
- package/dist/bin/commands/build.d.ts.map +1 -0
- package/dist/bin/commands/build.js +8162 -0
- package/dist/bin/commands/build.js.map +1 -0
- package/dist/bin/commands/bump.d.ts +11 -0
- package/dist/bin/commands/bump.d.ts.map +1 -0
- package/dist/bin/commands/bump.js +8004 -0
- package/dist/bin/commands/bump.js.map +1 -0
- package/dist/bin/commands/cacheout.d.ts +11 -0
- package/dist/bin/commands/cacheout.d.ts.map +1 -0
- package/dist/bin/commands/cacheout.js +7630 -0
- package/dist/bin/commands/cacheout.js.map +1 -0
- package/dist/bin/commands/create-app.d.ts +11 -0
- package/dist/bin/commands/create-app.d.ts.map +1 -0
- package/dist/bin/commands/create-app.js +9032 -0
- package/dist/bin/commands/create-app.js.map +1 -0
- package/dist/bin/commands/create-project.d.ts +11 -0
- package/dist/bin/commands/create-project.d.ts.map +1 -0
- package/dist/bin/commands/create-project.js +9643 -0
- package/dist/bin/commands/create-project.js.map +1 -0
- package/dist/bin/commands/deploy.d.ts +11 -0
- package/dist/bin/commands/deploy.d.ts.map +1 -0
- package/dist/bin/commands/deploy.js +9007 -0
- package/dist/bin/commands/deploy.js.map +1 -0
- package/dist/bin/commands/dev.d.ts +11 -0
- package/dist/bin/commands/dev.d.ts.map +1 -0
- package/dist/bin/commands/dev.js +7892 -0
- package/dist/bin/commands/dev.js.map +1 -0
- package/dist/bin/commands/emu.d.ts +11 -0
- package/dist/bin/commands/emu.d.ts.map +1 -0
- package/dist/bin/commands/emu.js +8302 -0
- package/dist/bin/commands/emu.js.map +1 -0
- package/dist/bin/commands/format.d.ts +11 -0
- package/dist/bin/commands/format.d.ts.map +1 -0
- package/dist/bin/commands/format.js +8009 -0
- package/dist/bin/commands/format.js.map +1 -0
- package/dist/bin/commands/lint.d.ts +11 -0
- package/dist/bin/commands/lint.d.ts.map +1 -0
- package/dist/bin/commands/lint.js +7481 -0
- package/dist/bin/commands/lint.js.map +1 -0
- package/dist/bin/commands/preview.d.ts +11 -0
- package/dist/bin/commands/preview.d.ts.map +1 -0
- package/dist/bin/commands/preview.js +7909 -0
- package/dist/bin/commands/preview.js.map +1 -0
- package/dist/bin/commands/sync-secrets.d.ts +11 -0
- package/dist/bin/commands/sync-secrets.d.ts.map +1 -0
- package/dist/bin/commands/sync-secrets.js +8227 -0
- package/dist/bin/commands/sync-secrets.js.map +1 -0
- package/dist/bin/dndev.js +222 -0
- package/dist/bin/donotdev.js +222 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +12820 -0
- package/dist/index.js.map +1 -0
- package/package.json +71 -0
- package/templates/app-demo/index.html.example +20 -0
- package/templates/app-demo/public/favicon.ico.example +0 -0
- package/templates/app-demo/public/fonts/Roboto-400-cyrillic-ext.woff2.example +0 -0
- package/templates/app-demo/public/fonts/Roboto-400-cyrillic.woff2.example +0 -0
- package/templates/app-demo/public/fonts/Roboto-400-greek-ext.woff2.example +0 -0
- package/templates/app-demo/public/fonts/Roboto-400-greek.woff2.example +0 -0
- package/templates/app-demo/public/fonts/Roboto-400-latin-ext.woff2.example +0 -0
- package/templates/app-demo/public/fonts/Roboto-400-latin.woff2.example +0 -0
- package/templates/app-demo/public/fonts/Roboto-400-vietnamese.woff2.example +0 -0
- package/templates/app-demo/public/fonts/Roboto-700-cyrillic-ext.woff2.example +0 -0
- package/templates/app-demo/public/fonts/Roboto-700-cyrillic.woff2.example +0 -0
- package/templates/app-demo/public/fonts/Roboto-700-greek-ext.woff2.example +0 -0
- package/templates/app-demo/public/fonts/Roboto-700-greek.woff2.example +0 -0
- package/templates/app-demo/public/fonts/Roboto-700-latin-ext.woff2.example +0 -0
- package/templates/app-demo/public/fonts/Roboto-700-latin.woff2.example +0 -0
- package/templates/app-demo/public/fonts/Roboto-700-vietnamese.woff2.example +0 -0
- package/templates/app-demo/public/fonts/fonts.css.example +144 -0
- package/templates/app-demo/public/logo.png.example +0 -0
- package/templates/app-demo/public/logo.svg.example +1 -0
- package/templates/app-demo/public/manifest.json.example +10 -0
- package/templates/app-demo/src/App.tsx.example +17 -0
- package/templates/app-demo/src/Routes.tsx.example +20 -0
- package/templates/app-demo/src/components/ThemeToggle.tsx.example +48 -0
- package/templates/app-demo/src/globals.css.example +4 -0
- package/templates/app-demo/src/main.tsx.example +27 -0
- package/templates/app-demo/src/pages/DetailPage.tsx.example +103 -0
- package/templates/app-demo/src/pages/FullPage.tsx.example +142 -0
- package/templates/app-demo/src/pages/HomePage.tsx.example +79 -0
- package/templates/app-demo/src/pages/components/ComponentRenderer.tsx.example +511 -0
- package/templates/app-demo/src/pages/components/ComponentsData.tsx.example +152 -0
- package/templates/app-demo/src/pages/components/DemoLayout.tsx.example +266 -0
- package/templates/app-demo/src/pages/components/LayoutRoute.tsx.example +20 -0
- package/templates/app-demo/src/pages/components/componentConfig.ts.example +921 -0
- package/templates/app-demo/src/themes.css.example +179 -0
- package/templates/app-demo/tsconfig.json.example +9 -0
- package/templates/app-demo/vite.config.ts.example +53 -0
- package/templates/app-next/.env.example +92 -0
- package/templates/app-next/next.config.ts.example +8 -0
- package/templates/app-next/postcss.config.js.example +58 -0
- package/templates/app-next/service-account-key.json.example +2 -0
- package/templates/app-next/src/app/ClientLayout.tsx.example +39 -0
- package/templates/app-next/src/app/layout.tsx.example +52 -0
- package/templates/app-next/src/app/not-found.tsx.example +21 -0
- package/templates/app-next/src/config/app.ts.example +75 -0
- package/templates/app-next/src/config/legal.ts.example +170 -0
- package/templates/app-next/src/globals.css.example +15 -0
- package/templates/app-next/src/locales/dndev_en.json.example +516 -0
- package/templates/app-next/src/pages/HomePage.tsx.example +20 -0
- package/templates/app-next/src/pages/legal/LegalNoticePage.tsx.example +75 -0
- package/templates/app-next/src/pages/legal/PrivacyPage.tsx.example +69 -0
- package/templates/app-next/src/pages/legal/TermsPage.tsx.example +71 -0
- package/templates/app-next/src/themes.css.example +179 -0
- package/templates/app-next/tsconfig.json.example +11 -0
- package/templates/app-payload/.env.example +28 -0
- package/templates/app-payload/README.md.example +233 -0
- package/templates/app-payload/collections/Company.ts.example +125 -0
- package/templates/app-payload/collections/Hero.ts.example +62 -0
- package/templates/app-payload/collections/Media.ts.example +41 -0
- package/templates/app-payload/collections/Products.ts.example +115 -0
- package/templates/app-payload/collections/Services.ts.example +104 -0
- package/templates/app-payload/collections/Testimonials.ts.example +92 -0
- package/templates/app-payload/collections/Users.ts.example +35 -0
- package/templates/app-payload/src/server.ts.example +79 -0
- package/templates/app-payload/tsconfig.json.example +24 -0
- package/templates/app-vite/.env.example +77 -0
- package/templates/app-vite/index.html.example +127 -0
- package/templates/app-vite/service-account-key.json.example +2 -0
- package/templates/app-vite/src/App.tsx.example +39 -0
- package/templates/app-vite/src/Routes.tsx.example +16 -0
- package/templates/app-vite/src/config/app.ts.example +75 -0
- package/templates/app-vite/src/config/legal.ts.example +170 -0
- package/templates/app-vite/src/globals.css.example +11 -0
- package/templates/app-vite/src/locales/dndev_en.json.example +516 -0
- package/templates/app-vite/src/main.tsx.example +21 -0
- package/templates/app-vite/src/pages/HomePage.tsx.example +22 -0
- package/templates/app-vite/src/pages/NotFoundPage.tsx.example +33 -0
- package/templates/app-vite/src/pages/legal/LegalNoticePage.tsx.example +75 -0
- package/templates/app-vite/src/pages/legal/PrivacyPage.tsx.example +69 -0
- package/templates/app-vite/src/pages/legal/TermsPage.tsx.example +71 -0
- package/templates/app-vite/src/pages/locales/README.md.example +1 -0
- package/templates/app-vite/src/pages/locales/example_en.json.example +5 -0
- package/templates/app-vite/src/themes.css.example +179 -0
- package/templates/app-vite/tsconfig.json.example +9 -0
- package/templates/app-vite/vite.config.ts.example +9 -0
- package/templates/functions-firebase/README.md.example +129 -0
- package/templates/functions-firebase/build.mjs.example +52 -0
- package/templates/functions-firebase/functions-firebase/.env.example.example +45 -0
- package/templates/functions-firebase/functions-firebase/README.md.example +123 -0
- package/templates/functions-firebase/functions-firebase/build.mjs.example +52 -0
- package/templates/functions-firebase/functions-firebase/src/auth/getCustomClaims.ts.example +19 -0
- package/templates/functions-firebase/functions-firebase/src/auth/getUserAuthStatus.ts.example +21 -0
- package/templates/functions-firebase/functions-firebase/src/auth/index.ts.example +11 -0
- package/templates/functions-firebase/functions-firebase/src/auth/removeCustomClaims.ts.example +21 -0
- package/templates/functions-firebase/functions-firebase/src/auth/setCustomClaims.ts.example +21 -0
- package/templates/functions-firebase/functions-firebase/src/billing/handleStripeWebhook.ts.example +24 -0
- package/templates/functions-firebase/functions-firebase/src/billing/index.ts.example +10 -0
- package/templates/functions-firebase/functions-firebase/src/billing/processPaymentSuccess.ts.example +14 -0
- package/templates/functions-firebase/functions-firebase/src/billing/refreshSubscriptionStatus.ts.example +14 -0
- package/templates/functions-firebase/functions-firebase/src/crud/createEntity.ts.example +19 -0
- package/templates/functions-firebase/functions-firebase/src/crud/deleteEntity.ts.example +14 -0
- package/templates/functions-firebase/functions-firebase/src/crud/getEntity.ts.example +14 -0
- package/templates/functions-firebase/functions-firebase/src/crud/index.ts.example +12 -0
- package/templates/functions-firebase/functions-firebase/src/crud/listEntities.ts.example +14 -0
- package/templates/functions-firebase/functions-firebase/src/crud/updateEntity.ts.example +14 -0
- package/templates/functions-firebase/functions-firebase/src/index.ts.example +45 -0
- package/templates/functions-firebase/functions-firebase/src/oauth/checkGitHubAccess.ts.example +14 -0
- package/templates/functions-firebase/functions-firebase/src/oauth/disconnect.ts.example +14 -0
- package/templates/functions-firebase/functions-firebase/src/oauth/exchangeToken.ts.example +14 -0
- package/templates/functions-firebase/functions-firebase/src/oauth/getConnections.ts.example +14 -0
- package/templates/functions-firebase/functions-firebase/src/oauth/grantGitHubAccess.ts.example +14 -0
- package/templates/functions-firebase/functions-firebase/src/oauth/index.ts.example +17 -0
- package/templates/functions-firebase/functions-firebase/src/oauth/refreshToken.ts.example +14 -0
- package/templates/functions-firebase/functions-firebase/src/oauth/revokeGitHubAccess.ts.example +14 -0
- package/templates/functions-firebase/functions-firebase/tsconfig.json.example +21 -0
- package/templates/functions-firebase/functions.yaml.example +14 -0
- package/templates/functions-firebase/src/auth/getCustomClaims.ts.example +19 -0
- package/templates/functions-firebase/src/auth/getUserAuthStatus.ts.example +21 -0
- package/templates/functions-firebase/src/auth/index.ts.example +11 -0
- package/templates/functions-firebase/src/auth/removeCustomClaims.ts.example +21 -0
- package/templates/functions-firebase/src/auth/setCustomClaims.ts.example +21 -0
- package/templates/functions-firebase/src/billing/handleStripeWebhook.ts.example +24 -0
- package/templates/functions-firebase/src/billing/index.ts.example +10 -0
- package/templates/functions-firebase/src/billing/processPaymentSuccess.ts.example +14 -0
- package/templates/functions-firebase/src/billing/refreshSubscriptionStatus.ts.example +14 -0
- package/templates/functions-firebase/src/crud/createEntity.ts.example +19 -0
- package/templates/functions-firebase/src/crud/deleteEntity.ts.example +14 -0
- package/templates/functions-firebase/src/crud/getEntity.ts.example +14 -0
- package/templates/functions-firebase/src/crud/index.ts.example +12 -0
- package/templates/functions-firebase/src/crud/listEntities.ts.example +14 -0
- package/templates/functions-firebase/src/crud/updateEntity.ts.example +14 -0
- package/templates/functions-firebase/src/index.ts.example +45 -0
- package/templates/functions-firebase/src/oauth/checkGitHubAccess.ts.example +14 -0
- package/templates/functions-firebase/src/oauth/disconnect.ts.example +14 -0
- package/templates/functions-firebase/src/oauth/exchangeToken.ts.example +14 -0
- package/templates/functions-firebase/src/oauth/getConnections.ts.example +14 -0
- package/templates/functions-firebase/src/oauth/grantGitHubAccess.ts.example +14 -0
- package/templates/functions-firebase/src/oauth/index.ts.example +17 -0
- package/templates/functions-firebase/src/oauth/refreshToken.ts.example +14 -0
- package/templates/functions-firebase/src/oauth/revokeGitHubAccess.ts.example +14 -0
- package/templates/functions-firebase/tsconfig.json.example +24 -0
- package/templates/functions-vercel/README.md.example +116 -0
- package/templates/functions-vercel/build.mjs.example +52 -0
- package/templates/functions-vercel/functions-vercel/.env.example.example +37 -0
- package/templates/functions-vercel/functions-vercel/README.md.example +116 -0
- package/templates/functions-vercel/functions-vercel/build.mjs.example +52 -0
- package/templates/functions-vercel/functions-vercel/src/api/auth/getCustomClaims.ts.example +20 -0
- package/templates/functions-vercel/functions-vercel/src/api/auth/getUserAuthStatus.ts.example +20 -0
- package/templates/functions-vercel/functions-vercel/src/api/auth/removeCustomClaims.ts.example +20 -0
- package/templates/functions-vercel/functions-vercel/src/api/auth/setCustomClaims.ts.example +20 -0
- package/templates/functions-vercel/functions-vercel/src/api/billing/handleStripeWebhook.ts.example +20 -0
- package/templates/functions-vercel/functions-vercel/src/api/billing/processPaymentSuccess.ts.example +20 -0
- package/templates/functions-vercel/functions-vercel/src/api/billing/refreshSubscriptionStatus.ts.example +20 -0
- package/templates/functions-vercel/functions-vercel/src/api/crud/createEntity.ts.example +20 -0
- package/templates/functions-vercel/functions-vercel/src/api/crud/deleteEntity.ts.example +20 -0
- package/templates/functions-vercel/functions-vercel/src/api/crud/getEntity.ts.example +20 -0
- package/templates/functions-vercel/functions-vercel/src/api/crud/listEntities.ts.example +20 -0
- package/templates/functions-vercel/functions-vercel/src/api/crud/updateEntity.ts.example +20 -0
- package/templates/functions-vercel/functions-vercel/src/api/oauth/checkGitHubAccess.ts.example +20 -0
- package/templates/functions-vercel/functions-vercel/src/api/oauth/disconnect.ts.example +20 -0
- package/templates/functions-vercel/functions-vercel/src/api/oauth/exchangeToken.ts.example +20 -0
- package/templates/functions-vercel/functions-vercel/src/api/oauth/getConnections.ts.example +20 -0
- package/templates/functions-vercel/functions-vercel/src/api/oauth/grantGitHubAccess.ts.example +20 -0
- package/templates/functions-vercel/functions-vercel/src/api/oauth/refreshToken.ts.example +20 -0
- package/templates/functions-vercel/functions-vercel/src/api/oauth/revokeGitHubAccess.ts.example +20 -0
- package/templates/functions-vercel/functions-vercel/tsconfig.json.example +21 -0
- package/templates/functions-vercel/functions-vercel/vercel.json.example +14 -0
- package/templates/functions-vercel/src/api/auth/getCustomClaims.ts.example +20 -0
- package/templates/functions-vercel/src/api/auth/getUserAuthStatus.ts.example +20 -0
- package/templates/functions-vercel/src/api/auth/removeCustomClaims.ts.example +20 -0
- package/templates/functions-vercel/src/api/auth/setCustomClaims.ts.example +20 -0
- package/templates/functions-vercel/src/api/billing/handleStripeWebhook.ts.example +20 -0
- package/templates/functions-vercel/src/api/billing/processPaymentSuccess.ts.example +20 -0
- package/templates/functions-vercel/src/api/billing/refreshSubscriptionStatus.ts.example +20 -0
- package/templates/functions-vercel/src/api/crud/createEntity.ts.example +20 -0
- package/templates/functions-vercel/src/api/crud/deleteEntity.ts.example +20 -0
- package/templates/functions-vercel/src/api/crud/getEntity.ts.example +20 -0
- package/templates/functions-vercel/src/api/crud/listEntities.ts.example +20 -0
- package/templates/functions-vercel/src/api/crud/updateEntity.ts.example +20 -0
- package/templates/functions-vercel/src/api/oauth/checkGitHubAccess.ts.example +20 -0
- package/templates/functions-vercel/src/api/oauth/disconnect.ts.example +20 -0
- package/templates/functions-vercel/src/api/oauth/exchangeToken.ts.example +20 -0
- package/templates/functions-vercel/src/api/oauth/getConnections.ts.example +20 -0
- package/templates/functions-vercel/src/api/oauth/grantGitHubAccess.ts.example +20 -0
- package/templates/functions-vercel/src/api/oauth/refreshToken.ts.example +20 -0
- package/templates/functions-vercel/src/api/oauth/revokeGitHubAccess.ts.example +20 -0
- package/templates/functions-vercel/tsconfig.json.example +24 -0
- package/templates/functions-vercel/vercel.json.example +14 -0
- package/templates/github/github/workflows/firebase-deploy.yml.example +79 -0
- package/templates/github/workflows/firebase-deploy.yml.example +79 -0
- package/templates/root-consumer/.env.example +19 -0
- package/templates/root-consumer/.gitignore.example +82 -0
- package/templates/root-consumer/.prettierrc.cjs.example +12 -0
- package/templates/root-consumer/CLAUDE.md.example +73 -0
- package/templates/root-consumer/README.md.example +295 -0
- package/templates/root-consumer/bunfig.toml.example +68 -0
- package/templates/root-consumer/eslint.config.js.example +336 -0
- package/templates/root-consumer/firebase.json.example +348 -0
- package/templates/root-consumer/guides/AGENT_START_HERE.md.example +98 -0
- package/templates/root-consumer/guides/APP_CHECK_SETUP.md.example +111 -0
- package/templates/root-consumer/guides/AUTH_SETUP.md.example +92 -0
- package/templates/root-consumer/guides/BILLING_SETUP.md.example +120 -0
- package/templates/root-consumer/guides/CLI.md.example +293 -0
- package/templates/root-consumer/guides/COMPONENTS.md.example +875 -0
- package/templates/root-consumer/guides/CONFIG_SETUP.md.example +132 -0
- package/templates/root-consumer/guides/EMULATOR_SETUP.md.example +48 -0
- package/templates/root-consumer/guides/FEATURES.md.example +286 -0
- package/templates/root-consumer/guides/FRAMEWORK_OVERVIEW.md.example +97 -0
- package/templates/root-consumer/guides/FUNCTIONS.md.example +177 -0
- package/templates/root-consumer/guides/GETTING_STARTED.md.example +451 -0
- package/templates/root-consumer/guides/HOW_TO_USE.md.example +296 -0
- package/templates/root-consumer/guides/I18N_SETUP.md.example +204 -0
- package/templates/root-consumer/guides/IMPORT_PATTERNS.md.example +79 -0
- package/templates/root-consumer/guides/INDEX.md.example +50 -0
- package/templates/root-consumer/guides/INSTALLATION.md.example +296 -0
- package/templates/root-consumer/guides/LAYOUTS.md.example +310 -0
- package/templates/root-consumer/guides/PAGES_SETUP.md.example +123 -0
- package/templates/root-consumer/guides/STYLING.md.example +273 -0
- package/templates/root-consumer/guides/THEMING_SETUP.md.example +119 -0
- package/templates/root-consumer/guides/VERSION_CONTROL.md.example +181 -0
- package/templates/root-consumer/tsconfig.functions.json.example +15 -0
- package/templates/root-consumer/tsconfig.json.example +18 -0
- package/templates/root-consumer/turbo.json.example +46 -0
- package/templates/root-consumer/vercel.json.example +124 -0
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { CollectionConfig } from 'payload/types';
|
|
2
|
+
|
|
3
|
+
export const Hero: CollectionConfig = {
|
|
4
|
+
slug: 'hero',
|
|
5
|
+
admin: {
|
|
6
|
+
useAsTitle: 'title',
|
|
7
|
+
defaultColumns: ['title', 'subtitle', 'updatedAt'],
|
|
8
|
+
},
|
|
9
|
+
access: {
|
|
10
|
+
read: () => true,
|
|
11
|
+
},
|
|
12
|
+
fields: [
|
|
13
|
+
{
|
|
14
|
+
name: 'title',
|
|
15
|
+
type: 'text',
|
|
16
|
+
required: true,
|
|
17
|
+
admin: {
|
|
18
|
+
description: 'Main headline for the hero section',
|
|
19
|
+
},
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
name: 'subtitle',
|
|
23
|
+
type: 'textarea',
|
|
24
|
+
required: true,
|
|
25
|
+
admin: {
|
|
26
|
+
description: 'Supporting text below the main headline',
|
|
27
|
+
},
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
name: 'ctaText',
|
|
31
|
+
type: 'text',
|
|
32
|
+
required: true,
|
|
33
|
+
admin: {
|
|
34
|
+
description: 'Call-to-action button text',
|
|
35
|
+
},
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
name: 'ctaLink',
|
|
39
|
+
type: 'text',
|
|
40
|
+
required: true,
|
|
41
|
+
admin: {
|
|
42
|
+
description: 'Where the CTA button should link to',
|
|
43
|
+
},
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
name: 'backgroundImage',
|
|
47
|
+
type: 'upload',
|
|
48
|
+
relationTo: 'media',
|
|
49
|
+
admin: {
|
|
50
|
+
description: 'Background image for the hero section',
|
|
51
|
+
},
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
name: 'isActive',
|
|
55
|
+
type: 'checkbox',
|
|
56
|
+
defaultValue: true,
|
|
57
|
+
admin: {
|
|
58
|
+
description: 'Whether this hero content should be displayed',
|
|
59
|
+
},
|
|
60
|
+
},
|
|
61
|
+
],
|
|
62
|
+
};
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { CollectionConfig } from 'payload/types';
|
|
2
|
+
|
|
3
|
+
export const Media: CollectionConfig = {
|
|
4
|
+
slug: 'media',
|
|
5
|
+
upload: {
|
|
6
|
+
staticDir: '../public/media',
|
|
7
|
+
imageSizes: [
|
|
8
|
+
{
|
|
9
|
+
name: 'thumbnail',
|
|
10
|
+
width: 400,
|
|
11
|
+
height: 300,
|
|
12
|
+
position: 'centre',
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
name: 'card',
|
|
16
|
+
width: 768,
|
|
17
|
+
height: 1024,
|
|
18
|
+
position: 'centre',
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
name: 'hero',
|
|
22
|
+
width: 1920,
|
|
23
|
+
height: 1080,
|
|
24
|
+
position: 'centre',
|
|
25
|
+
},
|
|
26
|
+
],
|
|
27
|
+
adminThumbnail: 'thumbnail',
|
|
28
|
+
mimeTypes: ['image/*'],
|
|
29
|
+
},
|
|
30
|
+
fields: [
|
|
31
|
+
{
|
|
32
|
+
name: 'alt',
|
|
33
|
+
type: 'text',
|
|
34
|
+
required: true,
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
name: 'caption',
|
|
38
|
+
type: 'text',
|
|
39
|
+
},
|
|
40
|
+
],
|
|
41
|
+
};
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import { CollectionConfig } from 'payload/types';
|
|
2
|
+
|
|
3
|
+
export const Products: CollectionConfig = {
|
|
4
|
+
slug: 'products',
|
|
5
|
+
admin: {
|
|
6
|
+
useAsTitle: 'name',
|
|
7
|
+
defaultColumns: ['name', 'category', 'isActive', 'updatedAt'],
|
|
8
|
+
},
|
|
9
|
+
access: {
|
|
10
|
+
read: () => true,
|
|
11
|
+
},
|
|
12
|
+
fields: [
|
|
13
|
+
{
|
|
14
|
+
name: 'name',
|
|
15
|
+
type: 'text',
|
|
16
|
+
required: true,
|
|
17
|
+
admin: {
|
|
18
|
+
description: 'Name of the product',
|
|
19
|
+
},
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
name: 'description',
|
|
23
|
+
type: 'textarea',
|
|
24
|
+
required: true,
|
|
25
|
+
admin: {
|
|
26
|
+
description: 'Detailed description of the product',
|
|
27
|
+
},
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
name: 'shortDescription',
|
|
31
|
+
type: 'text',
|
|
32
|
+
required: true,
|
|
33
|
+
admin: {
|
|
34
|
+
description: 'Brief description for cards and previews',
|
|
35
|
+
},
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
name: 'category',
|
|
39
|
+
type: 'select',
|
|
40
|
+
required: true,
|
|
41
|
+
options: [
|
|
42
|
+
{ label: 'Framework', value: 'framework' },
|
|
43
|
+
{ label: 'Tool', value: 'tool' },
|
|
44
|
+
{ label: 'Platform', value: 'platform' },
|
|
45
|
+
{ label: 'Service', value: 'service' },
|
|
46
|
+
],
|
|
47
|
+
admin: {
|
|
48
|
+
description: 'Category of the product',
|
|
49
|
+
},
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
name: 'features',
|
|
53
|
+
type: 'array',
|
|
54
|
+
fields: [
|
|
55
|
+
{
|
|
56
|
+
name: 'feature',
|
|
57
|
+
type: 'text',
|
|
58
|
+
required: true,
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
name: 'description',
|
|
62
|
+
type: 'text',
|
|
63
|
+
},
|
|
64
|
+
],
|
|
65
|
+
admin: {
|
|
66
|
+
description: 'List of key features',
|
|
67
|
+
},
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
name: 'demoLink',
|
|
71
|
+
type: 'text',
|
|
72
|
+
admin: {
|
|
73
|
+
description: 'Link path live demo',
|
|
74
|
+
},
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
name: 'documentationLink',
|
|
78
|
+
type: 'text',
|
|
79
|
+
admin: {
|
|
80
|
+
description: 'Link path documentation',
|
|
81
|
+
},
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
name: 'githubLink',
|
|
85
|
+
type: 'text',
|
|
86
|
+
admin: {
|
|
87
|
+
description: 'Link path GitHub repository',
|
|
88
|
+
},
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
name: 'image',
|
|
92
|
+
type: 'upload',
|
|
93
|
+
relationTo: 'media',
|
|
94
|
+
admin: {
|
|
95
|
+
description: 'Product image or logo',
|
|
96
|
+
},
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
name: 'isActive',
|
|
100
|
+
type: 'checkbox',
|
|
101
|
+
defaultValue: true,
|
|
102
|
+
admin: {
|
|
103
|
+
description: 'Whether this product should be displayed',
|
|
104
|
+
},
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
name: 'order',
|
|
108
|
+
type: 'number',
|
|
109
|
+
defaultValue: 0,
|
|
110
|
+
admin: {
|
|
111
|
+
description: 'Display order (lower numbers appear first)',
|
|
112
|
+
},
|
|
113
|
+
},
|
|
114
|
+
],
|
|
115
|
+
};
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { CollectionConfig } from 'payload/types';
|
|
2
|
+
|
|
3
|
+
export const Services: CollectionConfig = {
|
|
4
|
+
slug: 'services',
|
|
5
|
+
admin: {
|
|
6
|
+
useAsTitle: 'name',
|
|
7
|
+
defaultColumns: ['name', 'category', 'isActive', 'updatedAt'],
|
|
8
|
+
},
|
|
9
|
+
access: {
|
|
10
|
+
read: () => true,
|
|
11
|
+
},
|
|
12
|
+
fields: [
|
|
13
|
+
{
|
|
14
|
+
name: 'name',
|
|
15
|
+
type: 'text',
|
|
16
|
+
required: true,
|
|
17
|
+
admin: {
|
|
18
|
+
description: 'Name of the service',
|
|
19
|
+
},
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
name: 'description',
|
|
23
|
+
type: 'textarea',
|
|
24
|
+
required: true,
|
|
25
|
+
admin: {
|
|
26
|
+
description: 'Detailed description of the service',
|
|
27
|
+
},
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
name: 'shortDescription',
|
|
31
|
+
type: 'text',
|
|
32
|
+
required: true,
|
|
33
|
+
admin: {
|
|
34
|
+
description: 'Brief description for cards and previews',
|
|
35
|
+
},
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
name: 'category',
|
|
39
|
+
type: 'select',
|
|
40
|
+
required: true,
|
|
41
|
+
options: [
|
|
42
|
+
{ label: 'Consulting', value: 'consulting' },
|
|
43
|
+
{ label: 'Training', value: 'training' },
|
|
44
|
+
{ label: 'Development', value: 'development' },
|
|
45
|
+
{ label: 'Support', value: 'support' },
|
|
46
|
+
],
|
|
47
|
+
admin: {
|
|
48
|
+
description: 'Category of the service',
|
|
49
|
+
},
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
name: 'icon',
|
|
53
|
+
type: 'text',
|
|
54
|
+
admin: {
|
|
55
|
+
description: 'Icon name (e.g., "Code", "Users", "Settings")',
|
|
56
|
+
},
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
name: 'features',
|
|
60
|
+
type: 'array',
|
|
61
|
+
fields: [
|
|
62
|
+
{
|
|
63
|
+
name: 'feature',
|
|
64
|
+
type: 'text',
|
|
65
|
+
required: true,
|
|
66
|
+
},
|
|
67
|
+
],
|
|
68
|
+
admin: {
|
|
69
|
+
description: 'List of features included in this service',
|
|
70
|
+
},
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
name: 'pricing',
|
|
74
|
+
type: 'text',
|
|
75
|
+
admin: {
|
|
76
|
+
description: 'Pricing information (e.g., "Starting at $500/month")',
|
|
77
|
+
},
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
name: 'image',
|
|
81
|
+
type: 'upload',
|
|
82
|
+
relationTo: 'media',
|
|
83
|
+
admin: {
|
|
84
|
+
description: 'Service image or icon',
|
|
85
|
+
},
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
name: 'isActive',
|
|
89
|
+
type: 'checkbox',
|
|
90
|
+
defaultValue: true,
|
|
91
|
+
admin: {
|
|
92
|
+
description: 'Whether this service should be displayed',
|
|
93
|
+
},
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
name: 'order',
|
|
97
|
+
type: 'number',
|
|
98
|
+
defaultValue: 0,
|
|
99
|
+
admin: {
|
|
100
|
+
description: 'Display order (lower numbers appear first)',
|
|
101
|
+
},
|
|
102
|
+
},
|
|
103
|
+
],
|
|
104
|
+
};
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { CollectionConfig } from 'payload/types';
|
|
2
|
+
|
|
3
|
+
export const Testimonials: CollectionConfig = {
|
|
4
|
+
slug: 'testimonials',
|
|
5
|
+
admin: {
|
|
6
|
+
useAsTitle: 'clientName',
|
|
7
|
+
defaultColumns: ['clientName', 'company', 'rating', 'isActive', 'updatedAt'],
|
|
8
|
+
},
|
|
9
|
+
access: {
|
|
10
|
+
read: () => true,
|
|
11
|
+
},
|
|
12
|
+
fields: [
|
|
13
|
+
{
|
|
14
|
+
name: 'clientName',
|
|
15
|
+
type: 'text',
|
|
16
|
+
required: true,
|
|
17
|
+
admin: {
|
|
18
|
+
description: 'Name of the client',
|
|
19
|
+
},
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
name: 'company',
|
|
23
|
+
type: 'text',
|
|
24
|
+
required: true,
|
|
25
|
+
admin: {
|
|
26
|
+
description: 'Company name',
|
|
27
|
+
},
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
name: 'position',
|
|
31
|
+
type: 'text',
|
|
32
|
+
admin: {
|
|
33
|
+
description: 'Client\'s position at the company',
|
|
34
|
+
},
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
name: 'quote',
|
|
38
|
+
type: 'textarea',
|
|
39
|
+
required: true,
|
|
40
|
+
admin: {
|
|
41
|
+
description: 'The testimonial quote',
|
|
42
|
+
},
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
name: 'rating',
|
|
46
|
+
type: 'select',
|
|
47
|
+
required: true,
|
|
48
|
+
defaultValue: '5',
|
|
49
|
+
options: [
|
|
50
|
+
{ label: '5 Stars', value: '5' },
|
|
51
|
+
{ label: '4 Stars', value: '4' },
|
|
52
|
+
{ label: '3 Stars', value: '3' },
|
|
53
|
+
{ label: '2 Stars', value: '2' },
|
|
54
|
+
{ label: '1 Star', value: '1' },
|
|
55
|
+
],
|
|
56
|
+
admin: {
|
|
57
|
+
description: 'Rating out of 5 stars',
|
|
58
|
+
},
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
name: 'avatar',
|
|
62
|
+
type: 'upload',
|
|
63
|
+
relationTo: 'media',
|
|
64
|
+
admin: {
|
|
65
|
+
description: 'Client avatar or photo',
|
|
66
|
+
},
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
name: 'project',
|
|
70
|
+
type: 'text',
|
|
71
|
+
admin: {
|
|
72
|
+
description: 'Project or service this testimonial is about',
|
|
73
|
+
},
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
name: 'isActive',
|
|
77
|
+
type: 'checkbox',
|
|
78
|
+
defaultValue: true,
|
|
79
|
+
admin: {
|
|
80
|
+
description: 'Whether this testimonial should be displayed',
|
|
81
|
+
},
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
name: 'order',
|
|
85
|
+
type: 'number',
|
|
86
|
+
defaultValue: 0,
|
|
87
|
+
admin: {
|
|
88
|
+
description: 'Display order (lower numbers appear first)',
|
|
89
|
+
},
|
|
90
|
+
},
|
|
91
|
+
],
|
|
92
|
+
};
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { CollectionConfig } from 'payload/types';
|
|
2
|
+
|
|
3
|
+
export const Users: CollectionConfig = {
|
|
4
|
+
slug: 'users',
|
|
5
|
+
auth: { required: true },
|
|
6
|
+
admin: {
|
|
7
|
+
useAsTitle: 'email',
|
|
8
|
+
},
|
|
9
|
+
access: {
|
|
10
|
+
read: () => true,
|
|
11
|
+
},
|
|
12
|
+
fields: [
|
|
13
|
+
{
|
|
14
|
+
name: 'name',
|
|
15
|
+
type: 'text',
|
|
16
|
+
required: true,
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
name: 'role',
|
|
20
|
+
type: 'select',
|
|
21
|
+
required: true,
|
|
22
|
+
defaultValue: 'editor',
|
|
23
|
+
options: [
|
|
24
|
+
{
|
|
25
|
+
label: 'Admin',
|
|
26
|
+
value: 'admin',
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
label: 'Editor',
|
|
30
|
+
value: 'editor',
|
|
31
|
+
},
|
|
32
|
+
],
|
|
33
|
+
},
|
|
34
|
+
],
|
|
35
|
+
};
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import express from 'express';
|
|
2
|
+
import payload from 'payload';
|
|
3
|
+
import { resolve } from 'path';
|
|
4
|
+
import cors from 'cors';
|
|
5
|
+
import helmet from 'helmet';
|
|
6
|
+
import compression from 'compression';
|
|
7
|
+
import dotenv from 'dotenv';
|
|
8
|
+
|
|
9
|
+
// Load environment variables
|
|
10
|
+
dotenv.config();
|
|
11
|
+
|
|
12
|
+
const app = express();
|
|
13
|
+
|
|
14
|
+
// Security middleware
|
|
15
|
+
app.use(helmet({
|
|
16
|
+
contentSecurityPolicy: {
|
|
17
|
+
directives: {
|
|
18
|
+
defaultSrc: ["'self'"],
|
|
19
|
+
styleSrc: ["'self'", "'unsafe-inline'"],
|
|
20
|
+
scriptSrc: ["'self'"],
|
|
21
|
+
imgSrc: ["'self'", "data:", "https:"],
|
|
22
|
+
},
|
|
23
|
+
},
|
|
24
|
+
}));
|
|
25
|
+
|
|
26
|
+
// CORS configuration
|
|
27
|
+
app.use(cors({
|
|
28
|
+
origin: [
|
|
29
|
+
'http://localhost:3000',
|
|
30
|
+
'https://{{projectName}}.com',
|
|
31
|
+
'https://admin.{{projectName}}.com',
|
|
32
|
+
],
|
|
33
|
+
credentials: true,
|
|
34
|
+
}));
|
|
35
|
+
|
|
36
|
+
// Compression
|
|
37
|
+
app.use(compression());
|
|
38
|
+
|
|
39
|
+
// Body parsing
|
|
40
|
+
app.use(express.json({ limit: '10mb' }));
|
|
41
|
+
app.use(express.urlencoded({ extended: true, limit: '10mb' }));
|
|
42
|
+
|
|
43
|
+
// Initialize Payload
|
|
44
|
+
const start = async () => {
|
|
45
|
+
await payload.init({
|
|
46
|
+
secret: process.env.PAYLOAD_SECRET || 'your-secret-key',
|
|
47
|
+
express: app,
|
|
48
|
+
onInit: async () => {
|
|
49
|
+
payload.logger.info(`Payload Admin URL: ${payload.getAdminURL()}`);
|
|
50
|
+
},
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
// Health check endpoint
|
|
54
|
+
app.get('/health', (req, res) => {
|
|
55
|
+
res.json({ status: 'ok', timestamp: new Date().toISOString() });
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
// API documentation
|
|
59
|
+
app.get('/api', (req, res) => {
|
|
60
|
+
res.json({
|
|
61
|
+
message: '{{projectName}} CMS API',
|
|
62
|
+
version: '1.0.0',
|
|
63
|
+
endpoints: {
|
|
64
|
+
admin: payload.getAdminURL(),
|
|
65
|
+
api: '/api',
|
|
66
|
+
health: '/health',
|
|
67
|
+
},
|
|
68
|
+
});
|
|
69
|
+
});
|
|
70
|
+
|
|
71
|
+
const PORT = process.env.PORT || 3001;
|
|
72
|
+
app.listen(PORT, () => {
|
|
73
|
+
console.log(`🚀 {{projectName}} CMS running on port ${PORT}`);
|
|
74
|
+
console.log(`📊 Admin panel: ${payload.getAdminURL()}`);
|
|
75
|
+
console.log(`🔗 API endpoint: http://localhost:${PORT}/api`);
|
|
76
|
+
});
|
|
77
|
+
};
|
|
78
|
+
|
|
79
|
+
start();
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
{
|
|
2
|
+
"extends": "../../tsconfig.json",
|
|
3
|
+
"compilerOptions": {
|
|
4
|
+
"target": "ES2020",
|
|
5
|
+
"lib": ["ES2020"],
|
|
6
|
+
"baseUrl": ".",
|
|
7
|
+
"types": ["node"],
|
|
8
|
+
"paths": {
|
|
9
|
+
"@/*": ["./src/*"],
|
|
10
|
+
"@donotdev/*": ["../dndev/packages/*/src"]
|
|
11
|
+
}
|
|
12
|
+
},
|
|
13
|
+
"include": [
|
|
14
|
+
"src/**/*",
|
|
15
|
+
"collections/**/*",
|
|
16
|
+
"payload.config.ts",
|
|
17
|
+
"src/server.ts"
|
|
18
|
+
],
|
|
19
|
+
"exclude": [
|
|
20
|
+
"node_modules",
|
|
21
|
+
"dist",
|
|
22
|
+
".payload"
|
|
23
|
+
]
|
|
24
|
+
}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
# =============================================================================
|
|
2
|
+
# DoNotDev Framework Environment Variables
|
|
3
|
+
# =============================================================================
|
|
4
|
+
# Copy this file to .env in each app directory and update with your values
|
|
5
|
+
|
|
6
|
+
# =============================================================================
|
|
7
|
+
# App Configuration
|
|
8
|
+
# =============================================================================
|
|
9
|
+
VITE_APP_URL=http://localhost:5173
|
|
10
|
+
|
|
11
|
+
# =============================================================================
|
|
12
|
+
# DoNotDev License Key
|
|
13
|
+
# =============================================================================
|
|
14
|
+
# Get your license key from: https://donotdev.com/pricing
|
|
15
|
+
# Removes watermark and enables all features
|
|
16
|
+
# Can be the same key as in root .env if sharing across apps
|
|
17
|
+
VITE_DONOTDEV_LICENSE_KEY=dndev_your_key_here
|
|
18
|
+
|
|
19
|
+
# =============================================================================
|
|
20
|
+
# Authentication & OAuth Providers
|
|
21
|
+
# =============================================================================
|
|
22
|
+
# Comma-separated list of enabled auth providers
|
|
23
|
+
# Available: github (required for framework), google, facebook, discord, twitter, microsoft, spotify, linkedin, reddit, twitch, yahoo, apple
|
|
24
|
+
# Uncomment when Firebase is configured (requires VITE_FIREBASE_API_KEY and VITE_FIREBASE_PROJECT_ID)
|
|
25
|
+
# VITE_AUTH_PARTNERS=github
|
|
26
|
+
|
|
27
|
+
# Comma-separated list of enabled OAuth partners for API access
|
|
28
|
+
# Available: google, github, facebook, discord, twitter, microsoft, spotify, linkedin, reddit, twitch, yahoo, apple
|
|
29
|
+
# VITE_OAUTH_PARTNERS=google,spotify
|
|
30
|
+
|
|
31
|
+
# Individual OAuth client IDs (only needed for OAuth partners)
|
|
32
|
+
# VITE_GOOGLE_CLIENT_ID=your_google_client_id
|
|
33
|
+
# VITE_GITHUB_CLIENT_ID=your_github_client_id
|
|
34
|
+
# VITE_SPOTIFY_CLIENT_ID=your_spotify_client_id
|
|
35
|
+
|
|
36
|
+
# =============================================================================
|
|
37
|
+
# Firebase Configuration
|
|
38
|
+
# =============================================================================
|
|
39
|
+
# Get these values from your Firebase project settings
|
|
40
|
+
VITE_FIREBASE_API_KEY=
|
|
41
|
+
VITE_FIREBASE_PROJECT_ID=
|
|
42
|
+
VITE_FIREBASE_AUTH_DOMAIN=
|
|
43
|
+
VITE_FIREBASE_STORAGE_BUCKET=
|
|
44
|
+
VITE_FIREBASE_MESSAGING_SENDER_ID=
|
|
45
|
+
VITE_FIREBASE_APP_ID=
|
|
46
|
+
VITE_FIREBASE_MEASUREMENT_ID=
|
|
47
|
+
VITE_FIREBASE_FUNCTIONS_REGION=
|
|
48
|
+
|
|
49
|
+
# =============================================================================
|
|
50
|
+
# Firebase Emulator (Development only)
|
|
51
|
+
# =============================================================================
|
|
52
|
+
# Set to true to use Firebase emulators instead of production services
|
|
53
|
+
VITE_USE_FIREBASE_EMULATOR=false
|
|
54
|
+
VITE_FIREBASE_EMULATOR_HOST=localhost
|
|
55
|
+
VITE_FIREBASE_EMULATOR_PORT=9099
|
|
56
|
+
VITE_FIREBASE_AUTH_EMULATOR_HOST=http://localhost:9099
|
|
57
|
+
VITE_FIREBASE_FIRESTORE_EMULATOR_HOST=localhost:8080
|
|
58
|
+
VITE_FIREBASE_FUNCTIONS_EMULATOR_PORT=5001
|
|
59
|
+
|
|
60
|
+
# =============================================================================
|
|
61
|
+
# Firebase App Check (Abuse Protection)
|
|
62
|
+
# =============================================================================
|
|
63
|
+
# reCAPTCHA v3 site key for App Check
|
|
64
|
+
# VITE_RECAPTCHA_SITE_KEY=6LcXXXX...
|
|
65
|
+
# Optional: Debug token for localhost testing
|
|
66
|
+
# VITE_APPCHECK_DEBUG_TOKEN=XXXX-XXXX-XXXX
|
|
67
|
+
|
|
68
|
+
# =============================================================================
|
|
69
|
+
# Stripe Configuration (if using billing)
|
|
70
|
+
# =============================================================================
|
|
71
|
+
VITE_STRIPE_PUBLISHABLE_KEY=
|
|
72
|
+
|
|
73
|
+
# =============================================================================
|
|
74
|
+
# Sentry (optional - auto-enabled if SENTRY_DSN is set)
|
|
75
|
+
# =============================================================================
|
|
76
|
+
# Framework automatically initializes Sentry if this variable is set
|
|
77
|
+
VITE_SENTRY_DSN=
|