@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,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Privacy Policy Page
|
|
3
|
+
* @description Privacy policy page using the reusable template
|
|
4
|
+
*
|
|
5
|
+
* @version 0.0.1
|
|
6
|
+
* @since 0.0.1
|
|
7
|
+
* @author AMBROISE PARK Consulting
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import { Shield } from 'lucide-react';
|
|
11
|
+
|
|
12
|
+
import { type PageMeta } from '@donotdev/core';
|
|
13
|
+
import { PrivacyPolicyTemplate } from '@donotdev/templates';
|
|
14
|
+
import { PageContainer } from '@donotdev/ui';
|
|
15
|
+
|
|
16
|
+
import { legalConfig } from '../../config/legal';
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Privacy page translation namespace
|
|
20
|
+
*
|
|
21
|
+
* @version 0.0.1
|
|
22
|
+
* @since 0.0.1
|
|
23
|
+
* @author AMBROISE PARK Consulting
|
|
24
|
+
*/
|
|
25
|
+
export const NAMESPACE = 'privacy';
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Privacy page metadata configuration
|
|
29
|
+
*
|
|
30
|
+
* @version 0.0.1
|
|
31
|
+
* @since 0.0.1
|
|
32
|
+
* @author AMBROISE PARK Consulting
|
|
33
|
+
*/
|
|
34
|
+
export const meta: PageMeta = {
|
|
35
|
+
namespace: NAMESPACE,
|
|
36
|
+
icon: <Shield />,
|
|
37
|
+
hideFromMenu: true,
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Privacy Policy Page Component
|
|
42
|
+
*
|
|
43
|
+
* @version 0.0.1
|
|
44
|
+
* @since 0.0.1
|
|
45
|
+
* @author AMBROISE PARK Consulting
|
|
46
|
+
*
|
|
47
|
+
* Uses the reusable PrivacyPolicyTemplate with centralized legal config
|
|
48
|
+
*/
|
|
49
|
+
function PrivacyPage() {
|
|
50
|
+
return (
|
|
51
|
+
<PageContainer>
|
|
52
|
+
<PrivacyPolicyTemplate
|
|
53
|
+
companyName={legalConfig.company.name}
|
|
54
|
+
websiteUrl={legalConfig.website.url}
|
|
55
|
+
privacyEmail={legalConfig.contact.privacyEmail}
|
|
56
|
+
companyAddress={legalConfig.contact.address}
|
|
57
|
+
dpoEmail={legalConfig.contact.dpoEmail}
|
|
58
|
+
sections={legalConfig.sections.privacy}
|
|
59
|
+
contactInfo={{
|
|
60
|
+
supportEmail: legalConfig.contact.supportEmail,
|
|
61
|
+
}}
|
|
62
|
+
lastUpdated={legalConfig.lastUpdated?.privacy}
|
|
63
|
+
/>
|
|
64
|
+
</PageContainer>
|
|
65
|
+
);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
export default PrivacyPage;
|
|
69
|
+
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Terms of Service Page
|
|
3
|
+
* @description Terms of service page using the reusable template
|
|
4
|
+
*
|
|
5
|
+
* @version 0.0.1
|
|
6
|
+
* @since 0.0.1
|
|
7
|
+
* @author AMBROISE PARK Consulting
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import { FileText } from 'lucide-react';
|
|
11
|
+
|
|
12
|
+
import { type PageMeta } from '@donotdev/core';
|
|
13
|
+
import { TermsOfServiceTemplate } from '@donotdev/templates';
|
|
14
|
+
import { PageContainer } from '@donotdev/ui';
|
|
15
|
+
|
|
16
|
+
import { legalConfig } from '../../config/legal';
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Terms page translation namespace
|
|
20
|
+
*
|
|
21
|
+
* @version 0.0.1
|
|
22
|
+
* @since 0.0.1
|
|
23
|
+
* @author AMBROISE PARK Consulting
|
|
24
|
+
*/
|
|
25
|
+
export const NAMESPACE = 'terms';
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Terms page metadata configuration
|
|
29
|
+
*
|
|
30
|
+
* @version 0.0.1
|
|
31
|
+
* @since 0.0.1
|
|
32
|
+
* @author AMBROISE PARK Consulting
|
|
33
|
+
*/
|
|
34
|
+
export const meta: PageMeta = {
|
|
35
|
+
namespace: NAMESPACE,
|
|
36
|
+
icon: <FileText />,
|
|
37
|
+
hideFromMenu: true,
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Terms of Service Page Component
|
|
42
|
+
*
|
|
43
|
+
* @version 0.0.1
|
|
44
|
+
* @since 0.0.1
|
|
45
|
+
* @author AMBROISE PARK Consulting
|
|
46
|
+
*
|
|
47
|
+
* Uses the reusable TermsOfServiceTemplate with centralized legal config
|
|
48
|
+
*/
|
|
49
|
+
function TermsPage() {
|
|
50
|
+
return (
|
|
51
|
+
<PageContainer>
|
|
52
|
+
<TermsOfServiceTemplate
|
|
53
|
+
companyName={legalConfig.company.name}
|
|
54
|
+
websiteUrl={legalConfig.website.url}
|
|
55
|
+
legalEmail={legalConfig.contact.email}
|
|
56
|
+
companyAddress={legalConfig.contact.address}
|
|
57
|
+
jurisdiction={legalConfig.jurisdiction.country}
|
|
58
|
+
arbitrationOrg={legalConfig.jurisdiction.arbitrationOrg}
|
|
59
|
+
arbitrationLocation={legalConfig.jurisdiction.arbitrationLocation}
|
|
60
|
+
sections={legalConfig.sections.terms}
|
|
61
|
+
contactInfo={{
|
|
62
|
+
supportEmail: legalConfig.contact.supportEmail,
|
|
63
|
+
}}
|
|
64
|
+
lastUpdated={legalConfig.lastUpdated?.terms}
|
|
65
|
+
/>
|
|
66
|
+
</PageContainer>
|
|
67
|
+
);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
export default TermsPage;
|
|
71
|
+
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
/* src/themes.css */
|
|
2
|
+
|
|
3
|
+
/* ===========================
|
|
4
|
+
APP-WIDE SETTINGS
|
|
5
|
+
These apply to all themes - spacing, radius, shadows, routing animations
|
|
6
|
+
=========================== */
|
|
7
|
+
:root {
|
|
8
|
+
/* ===========================
|
|
9
|
+
ROUTING ANIMATIONS
|
|
10
|
+
Customize page transition animations
|
|
11
|
+
Pure CSS - zero JS overhead. Respects prefers-reduced-motion.
|
|
12
|
+
Override in themes.css: --routing-animation: slide; to change animation type
|
|
13
|
+
=========================== */
|
|
14
|
+
/* Single animation type (fade, slide, or none to disable) - app-wide */
|
|
15
|
+
/* --routing-animation: fade; */ /* fade | slide | none */
|
|
16
|
+
/* --routing-default-duration: var(--dur-normal); */ /* Animation duration */
|
|
17
|
+
|
|
18
|
+
/* Breakpoint-specific durations (all inherit from --routing-default-duration) */
|
|
19
|
+
/* --routing-mobile-duration: var(--routing-default-duration); */
|
|
20
|
+
/* --routing-tablet-duration: var(--routing-default-duration); */
|
|
21
|
+
/* --routing-desktop-duration: var(--routing-default-duration); */
|
|
22
|
+
/* --routing-wide-duration: var(--routing-default-duration); */
|
|
23
|
+
|
|
24
|
+
/* Examples: */
|
|
25
|
+
/* --routing-animation: slide; */ /* Use slide animation */
|
|
26
|
+
/* --routing-animation: none; */ /* Disable animations */
|
|
27
|
+
/* --routing-default-duration: 200ms; */ /* Faster animations */
|
|
28
|
+
|
|
29
|
+
/* ===========================
|
|
30
|
+
SPACING OVERRIDES
|
|
31
|
+
Customize spacing scale
|
|
32
|
+
=========================== */
|
|
33
|
+
/* --gap-sm: 0.5rem; */ /* 8px - tight spacing */
|
|
34
|
+
/* --gap-md: 1rem; */ /* 16px - medium spacing (default) */
|
|
35
|
+
/* --gap-lg: 2rem; */ /* 32px - large spacing */
|
|
36
|
+
|
|
37
|
+
/* ===========================
|
|
38
|
+
BORDER RADIUS OVERRIDES
|
|
39
|
+
Customize component corners
|
|
40
|
+
=========================== */
|
|
41
|
+
/* --radius-interactive: var(--radius-none); */ /* Buttons, links (default: square) */
|
|
42
|
+
/* --radius-surface: var(--radius-md); */ /* Cards, dialogs (default: 8px round) */
|
|
43
|
+
/* --radius-floating: var(--radius-none); */ /* Dropdowns, popovers (default: square) */
|
|
44
|
+
|
|
45
|
+
/* ===========================
|
|
46
|
+
SHADOW OVERRIDES
|
|
47
|
+
Customize elevation
|
|
48
|
+
=========================== */
|
|
49
|
+
/* --shadow-sm: ...; */ /* Small shadows */
|
|
50
|
+
/* --shadow-md: ...; */ /* Medium shadows (default) */
|
|
51
|
+
/* --shadow-xl: ...; */ /* Large shadows */
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/* ===========================
|
|
55
|
+
LIGHT THEME (High Contrast Light)
|
|
56
|
+
Background: White
|
|
57
|
+
Foreground: Black
|
|
58
|
+
=========================== */
|
|
59
|
+
:root.light {
|
|
60
|
+
--theme-icon: 'Sun';
|
|
61
|
+
--theme-label: 'Light';
|
|
62
|
+
--theme-is-dark: 0;
|
|
63
|
+
|
|
64
|
+
/* ===========================
|
|
65
|
+
1. USER SETS - 5 BRAND COLORS
|
|
66
|
+
=========================== */
|
|
67
|
+
--foreground: #000000;
|
|
68
|
+
--background: #ffffff;
|
|
69
|
+
--primary: #00bcd4; /* Cyan */
|
|
70
|
+
--secondary: #047857; /* Emerald-700 - WCAG AA compliant (5.48:1 with white) */
|
|
71
|
+
--accent: #ff9800; /* Orange */
|
|
72
|
+
|
|
73
|
+
/* ===========================
|
|
74
|
+
2. FRAMEWORK DEFAULTS - STATUS COLORS
|
|
75
|
+
(Override if needed)
|
|
76
|
+
=========================== */
|
|
77
|
+
--success: #047857; /* Emerald-700 - WCAG AA compliant (5.48:1 with white) */
|
|
78
|
+
--warning: #f59e0b;
|
|
79
|
+
--destructive: #dc2626;
|
|
80
|
+
|
|
81
|
+
/* ===========================
|
|
82
|
+
3. AUTO-COMPUTED - SURFACES
|
|
83
|
+
(Plain sight computation for easy overriding)
|
|
84
|
+
=========================== */
|
|
85
|
+
--muted: color-mix(in oklab, var(--foreground) 5%, var(--background));
|
|
86
|
+
--muted-foreground: color-mix(in oklab, var(--foreground) 75%, transparent);
|
|
87
|
+
--border: color-mix(in oklab, var(--foreground) 15%, var(--background));
|
|
88
|
+
--input: var(--muted);
|
|
89
|
+
--ring: var(--primary);
|
|
90
|
+
|
|
91
|
+
--card: var(--background);
|
|
92
|
+
--card-foreground: var(--foreground);
|
|
93
|
+
--popover: var(--card);
|
|
94
|
+
--popover-foreground: var(--card-foreground);
|
|
95
|
+
--surface-1: var(--card);
|
|
96
|
+
|
|
97
|
+
/* ===========================
|
|
98
|
+
4. AUTO-COMPUTED - TEXT ON BRAND COLORS
|
|
99
|
+
(Mapped to foreground/background for consistency)
|
|
100
|
+
=========================== */
|
|
101
|
+
--primary-foreground: var(--foreground);
|
|
102
|
+
--secondary-foreground: var(--background);
|
|
103
|
+
--accent-foreground: var(--foreground);
|
|
104
|
+
|
|
105
|
+
--success-foreground: var(--background);
|
|
106
|
+
--warning-foreground: var(--foreground);
|
|
107
|
+
--destructive-foreground: var(--background);
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
/* ===========================
|
|
111
|
+
DARK THEME (High Contrast Dark)
|
|
112
|
+
Background: Black
|
|
113
|
+
Foreground: White
|
|
114
|
+
=========================== */
|
|
115
|
+
:root.dark {
|
|
116
|
+
--theme-icon: 'Moon';
|
|
117
|
+
--theme-label: 'Dark';
|
|
118
|
+
--theme-is-dark: 1;
|
|
119
|
+
|
|
120
|
+
/* ===========================
|
|
121
|
+
1. USER SETS - 5 BRAND COLORS
|
|
122
|
+
=========================== */
|
|
123
|
+
--foreground: #ffffff;
|
|
124
|
+
--background: #000000;
|
|
125
|
+
--primary: #00bcd4; /* Cyan */
|
|
126
|
+
--secondary: #047857; /* Emerald-700 - WCAG AA compliant (5.48:1 with white) */
|
|
127
|
+
--accent: #ff9800; /* Orange */
|
|
128
|
+
|
|
129
|
+
/* ===========================
|
|
130
|
+
2. FRAMEWORK DEFAULTS - STATUS COLORS
|
|
131
|
+
=========================== */
|
|
132
|
+
--success: #047857; /* Emerald-700 - WCAG AA compliant (5.48:1 with white) */
|
|
133
|
+
--warning: #f59e0b;
|
|
134
|
+
--destructive: #dc2626; /* Red-600 - WCAG AA compliant (4.83:1 with white) */
|
|
135
|
+
|
|
136
|
+
/* ===========================
|
|
137
|
+
3. AUTO-COMPUTED - SURFACES
|
|
138
|
+
=========================== */
|
|
139
|
+
--muted: color-mix(in oklab, var(--foreground) 10%, var(--background));
|
|
140
|
+
--muted-foreground: color-mix(in oklab, var(--foreground) 75%, transparent);
|
|
141
|
+
--border: color-mix(in oklab, var(--foreground) 15%, var(--background));
|
|
142
|
+
--input: var(--muted);
|
|
143
|
+
--ring: var(--primary);
|
|
144
|
+
|
|
145
|
+
--card: var(--background);
|
|
146
|
+
--card-foreground: var(--foreground);
|
|
147
|
+
--popover: var(--card);
|
|
148
|
+
--popover-foreground: var(--card-foreground);
|
|
149
|
+
--surface-1: var(--card);
|
|
150
|
+
|
|
151
|
+
/* ===========================
|
|
152
|
+
4. AUTO-COMPUTED - TEXT ON BRAND COLORS
|
|
153
|
+
=========================== */
|
|
154
|
+
--primary-foreground: var(--background);
|
|
155
|
+
--secondary-foreground: var(--foreground);
|
|
156
|
+
--accent-foreground: var(--background);
|
|
157
|
+
|
|
158
|
+
--success-foreground: var(--foreground);
|
|
159
|
+
--warning-foreground: var(--background);
|
|
160
|
+
--destructive-foreground: var(--foreground);
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
/* ===========================
|
|
164
|
+
CUSTOM THEMES
|
|
165
|
+
=========================== */
|
|
166
|
+
|
|
167
|
+
/* Add your custom themes here */
|
|
168
|
+
/* Example:
|
|
169
|
+
.brand {
|
|
170
|
+
--theme-icon: 'Zap';
|
|
171
|
+
--theme-label: 'Brand';
|
|
172
|
+
--background: #your-brand-background;
|
|
173
|
+
--foreground: #your-brand-foreground;
|
|
174
|
+
--primary: #your-brand-primary;
|
|
175
|
+
--secondary: #your-brand-secondary;
|
|
176
|
+
--accent: #your-brand-accent;
|
|
177
|
+
... other variables ...
|
|
178
|
+
}
|
|
179
|
+
*/
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
# {{APP_NAME}} Functions
|
|
2
|
+
|
|
3
|
+
This directory contains the Firebase Functions for the {{APP_NAME}} app, generated using the DoNotDev framework's scaffolding system.
|
|
4
|
+
|
|
5
|
+
## Structure
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
functions/
|
|
9
|
+
āāā src/
|
|
10
|
+
ā āāā auth/ # Authentication functions
|
|
11
|
+
ā āāā oauth/ # OAuth functions
|
|
12
|
+
ā āāā billing/ # Billing functions
|
|
13
|
+
ā āāā index.ts # Main functions entry point
|
|
14
|
+
āāā package.json # Dependencies and scripts
|
|
15
|
+
āāā tsconfig.json # TypeScript configuration
|
|
16
|
+
āāā functions.yaml # Firebase function manifest (manually maintained - must match functions exported from src/index.ts)
|
|
17
|
+
āāā .env.example # Environment variables template
|
|
18
|
+
āāā service-account-key.json # Firebase service account key (copy from Firebase Console)
|
|
19
|
+
āāā README.md # This file
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
## Features
|
|
23
|
+
|
|
24
|
+
- **Authentication Management**: User custom claims and auth status
|
|
25
|
+
- **OAuth Integration**: GitHub access management
|
|
26
|
+
- **Billing Processing**: Stripe checkout and webhook handling
|
|
27
|
+
- **Secure API Layer**: Professional frontend-backend communication
|
|
28
|
+
- **Error Handling**: Comprehensive error handling and logging
|
|
29
|
+
|
|
30
|
+
## Environment Variables
|
|
31
|
+
|
|
32
|
+
### File Structure
|
|
33
|
+
|
|
34
|
+
**Functions use a different .env system than Vite/Next.js:**
|
|
35
|
+
- `.env` ā Local development only (not automatically loaded, use with dotenv if needed)
|
|
36
|
+
- Production ā Use Firebase Functions Secrets (synced automatically during `dndev deploy`)
|
|
37
|
+
|
|
38
|
+
**Note:** Functions don't follow Vite/Next.js `.env.local` priority rules. Use Firebase Secrets for production.
|
|
39
|
+
|
|
40
|
+
### Required Environment Variables
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
# Stripe Configuration
|
|
44
|
+
STRIPE_SECRET_KEY=sk_live_...
|
|
45
|
+
STRIPE_WEBHOOK_SECRET=whsec_...
|
|
46
|
+
|
|
47
|
+
# GitHub Configuration
|
|
48
|
+
GITHUB_PERSONAL_ACCESS_TOKEN=ghp_...
|
|
49
|
+
GITHUB_REPO_OWNER=your-org
|
|
50
|
+
GITHUB_REPO_NAME=your-repo
|
|
51
|
+
|
|
52
|
+
# Firebase Configuration
|
|
53
|
+
FIREBASE_PROJECT_ID=your-project-id
|
|
54
|
+
FIREBASE_REGION=us-central1
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
### Setup Instructions
|
|
58
|
+
|
|
59
|
+
1. **Stripe Setup**:
|
|
60
|
+
- Create products in Stripe Dashboard
|
|
61
|
+
- Get price IDs and add to frontend `.env.local` (dev) or `.env.production.local` (prod)
|
|
62
|
+
- Configure webhook endpoint in Stripe
|
|
63
|
+
- Add webhook secret to functions `.env` (local) or Firebase Secrets (production)
|
|
64
|
+
|
|
65
|
+
2. **GitHub Setup**:
|
|
66
|
+
- Create Personal Access Token with `repo` scope
|
|
67
|
+
- Add token to functions `.env` (local) or Firebase Secrets (production)
|
|
68
|
+
- Configure repository owner/name
|
|
69
|
+
|
|
70
|
+
3. **Firebase Setup**:
|
|
71
|
+
- Get service account key: Firebase Console ā Project Settings ā Service Accounts ā "Generate new private key"
|
|
72
|
+
- Copy JSON content into `service-account-key.json` in app root (shared by frontend + functions)
|
|
73
|
+
- Deploy: `dndev deploy` (from workspace root)
|
|
74
|
+
- Update webhook URL in Stripe dashboard
|
|
75
|
+
|
|
76
|
+
## Deployment
|
|
77
|
+
|
|
78
|
+
Use the unified deployment command from workspace root:
|
|
79
|
+
|
|
80
|
+
```bash
|
|
81
|
+
# Deploy everything (interactive)
|
|
82
|
+
dndev deploy
|
|
83
|
+
|
|
84
|
+
# Deploy specific app
|
|
85
|
+
dndev deploy <app-name>
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
**Important:** `functions.yaml` must be manually maintained. Each function exported from `src/index.ts` must have a corresponding entry in `functions.yaml`. The deployment script preserves `functions.yaml` and does not modify it.
|
|
89
|
+
|
|
90
|
+
See [FUNCTIONS.md](../../guides/FUNCTIONS.md) for detailed information about `functions.yaml` and function deployment.
|
|
91
|
+
|
|
92
|
+
## Development
|
|
93
|
+
|
|
94
|
+
```bash
|
|
95
|
+
# Start Firebase emulators
|
|
96
|
+
bun run serve
|
|
97
|
+
|
|
98
|
+
# Start with debugging
|
|
99
|
+
bun run dev
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
## API Endpoints
|
|
103
|
+
|
|
104
|
+
### Stripe Webhook
|
|
105
|
+
|
|
106
|
+
- **URL**: `https://your-project.cloudfunctions.net/stripeWebhook`
|
|
107
|
+
- **Events**: `checkout.session.completed`
|
|
108
|
+
- **Purpose**: Processes purchases and grants access
|
|
109
|
+
|
|
110
|
+
### Checkout Session
|
|
111
|
+
|
|
112
|
+
- **Integration**: Direct Stripe calls (no function needed)
|
|
113
|
+
- **Purpose**: Creates Stripe checkout sessions for purchases
|
|
114
|
+
|
|
115
|
+
## Security
|
|
116
|
+
|
|
117
|
+
- All functions require authentication
|
|
118
|
+
- Webhook signature verification
|
|
119
|
+
- Secure GitHub token management
|
|
120
|
+
- Firebase custom claims for user status
|
|
121
|
+
|
|
122
|
+
## Framework Integration
|
|
123
|
+
|
|
124
|
+
This functions package demonstrates how to:
|
|
125
|
+
|
|
126
|
+
- Use the framework's scaffolding system
|
|
127
|
+
- Implement secure API communication
|
|
128
|
+
- Handle complex purchase flows
|
|
129
|
+
- Integrate with external services (Stripe, GitHub)
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* @fileoverview Build script for {{APP_NAME}} functions
|
|
4
|
+
* @description Bundles @donotdev/types and imports framework functions
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { build } from 'esbuild';
|
|
8
|
+
import { createAppFunctionsConfig } from '@donotdev/core/functions';
|
|
9
|
+
|
|
10
|
+
async function buildFunctions() {
|
|
11
|
+
console.log('šØ Building {{APP_NAME}} functions...');
|
|
12
|
+
|
|
13
|
+
try {
|
|
14
|
+
const config = createAppFunctionsConfig({
|
|
15
|
+
entry: 'src/index.ts',
|
|
16
|
+
outDir: 'lib',
|
|
17
|
+
minify: process.env.NODE_ENV === 'production',
|
|
18
|
+
sourcemap: true,
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
console.log('š¦ Bundling @donotdev/types and importing framework functions...');
|
|
22
|
+
|
|
23
|
+
const result = await build(config);
|
|
24
|
+
|
|
25
|
+
if (result.errors.length > 0) {
|
|
26
|
+
console.error('ā Build errors:', result.errors);
|
|
27
|
+
process.exit(1);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
if (result.warnings.length > 0) {
|
|
31
|
+
console.warn('ā ļø Build warnings:', result.warnings);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
console.log('ā
{{APP_NAME}} functions built successfully!');
|
|
35
|
+
console.log('š Output directory: lib/');
|
|
36
|
+
|
|
37
|
+
// Log bundle info if metafile is available
|
|
38
|
+
if (result.metafile) {
|
|
39
|
+
const { analyzeMetafile } = await import('esbuild');
|
|
40
|
+
const analysis = await analyzeMetafile(result.metafile);
|
|
41
|
+
console.log('\nš Bundle analysis:');
|
|
42
|
+
console.log(analysis);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
} catch (error) {
|
|
46
|
+
console.error('ā Build failed:', error);
|
|
47
|
+
process.exit(1);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
// Run the build
|
|
52
|
+
buildFunctions();
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# =============================================================================
|
|
2
|
+
# {{APP_NAME}} Firebase Functions Environment Variables
|
|
3
|
+
# =============================================================================
|
|
4
|
+
# Copy this file to .env in the functions directory and update with your values
|
|
5
|
+
|
|
6
|
+
# =============================================================================
|
|
7
|
+
# Stripe Configuration
|
|
8
|
+
# =============================================================================
|
|
9
|
+
# Stripe Secret Key (server-side only)
|
|
10
|
+
STRIPE_SECRET_KEY=sk_test_1234567890abcdef
|
|
11
|
+
|
|
12
|
+
# Stripe Webhook Secret (for webhook signature verification)
|
|
13
|
+
STRIPE_WEBHOOK_SECRET=whsec_1234567890abcdef
|
|
14
|
+
|
|
15
|
+
# =============================================================================
|
|
16
|
+
# GitHub Configuration
|
|
17
|
+
# =============================================================================
|
|
18
|
+
# GitHub Personal Access Token (for repository access management)
|
|
19
|
+
# Required scopes: repo (full control of private repositories)
|
|
20
|
+
GITHUB_PERSONAL_ACCESS_TOKEN=ghp_1234567890abcdef
|
|
21
|
+
|
|
22
|
+
# GitHub Repository Configuration
|
|
23
|
+
GITHUB_REPO_OWNER=your-org
|
|
24
|
+
GITHUB_REPO_NAME=your-repo
|
|
25
|
+
|
|
26
|
+
# =============================================================================
|
|
27
|
+
# Firebase Configuration
|
|
28
|
+
# =============================================================================
|
|
29
|
+
# Firebase Project ID (usually auto-detected from Firebase Admin SDK)
|
|
30
|
+
FIREBASE_PROJECT_ID=your-project-id
|
|
31
|
+
|
|
32
|
+
# Firebase Region (default: us-central1)
|
|
33
|
+
FIREBASE_REGION=us-central1
|
|
34
|
+
|
|
35
|
+
# =============================================================================
|
|
36
|
+
# Development Configuration
|
|
37
|
+
# =============================================================================
|
|
38
|
+
# Node Environment
|
|
39
|
+
NODE_ENV=development
|
|
40
|
+
|
|
41
|
+
# =============================================================================
|
|
42
|
+
# Setup Instructions
|
|
43
|
+
# =============================================================================
|
|
44
|
+
# 1. Get Stripe keys from: https://dashboard.stripe.com/apikeys
|
|
45
|
+
# 2. Get GitHub token from: https://github.com/settings/tokens
|