@donotdev/cli 0.0.14 → 0.0.16

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.
Files changed (184) hide show
  1. package/dependencies-matrix.json +372 -88
  2. package/dist/bin/commands/agent-setup.js +7 -1
  3. package/dist/bin/commands/build.js +141 -44
  4. package/dist/bin/commands/bump.js +81 -41
  5. package/dist/bin/commands/cacheout.js +37 -9
  6. package/dist/bin/commands/create-app.js +276 -121
  7. package/dist/bin/commands/create-project.js +506 -217
  8. package/dist/bin/commands/deploy.js +1785 -694
  9. package/dist/bin/commands/dev.js +177 -43
  10. package/dist/bin/commands/doctor.d.ts +6 -0
  11. package/dist/bin/commands/doctor.d.ts.map +1 -0
  12. package/dist/bin/commands/{lint.js → doctor.js} +1215 -156
  13. package/dist/bin/commands/doctor.js.map +1 -0
  14. package/dist/bin/commands/emu.js +451 -104
  15. package/dist/bin/commands/format.js +37 -9
  16. package/dist/bin/commands/make-admin.js +77499 -11
  17. package/dist/bin/commands/preview.js +181 -43
  18. package/dist/bin/commands/setup.d.ts +6 -0
  19. package/dist/bin/commands/setup.d.ts.map +1 -0
  20. package/dist/bin/commands/setup.js +11733 -0
  21. package/dist/bin/commands/setup.js.map +1 -0
  22. package/dist/bin/commands/supabase-setup.d.ts +6 -0
  23. package/dist/bin/commands/supabase-setup.d.ts.map +1 -0
  24. package/dist/bin/commands/supabase-setup.js +7 -0
  25. package/dist/bin/commands/supabase-setup.js.map +1 -0
  26. package/dist/bin/commands/sync-secrets.js +211 -34
  27. package/dist/bin/commands/type-check.d.ts +14 -0
  28. package/dist/bin/commands/type-check.d.ts.map +1 -0
  29. package/dist/bin/commands/type-check.js +2049 -0
  30. package/dist/bin/commands/type-check.js.map +1 -0
  31. package/dist/bin/commands/wai.js +3 -1
  32. package/dist/bin/dndev.js +73 -52
  33. package/dist/bin/donotdev.js +54 -45
  34. package/dist/index.js +4212 -3050
  35. package/package.json +3 -3
  36. package/templates/app-demo/src/App.tsx.example +1 -0
  37. package/templates/app-demo/src/pages/FullPage.tsx.example +2 -2
  38. package/templates/app-demo/src/pages/components/DemoLayout.tsx.example +2 -2
  39. package/templates/app-demo/src/themes.css.example +5 -12
  40. package/templates/app-expo/.env.example +44 -0
  41. package/templates/app-expo/.expo/README.md.example +5 -0
  42. package/templates/app-expo/.gitignore.example +36 -0
  43. package/templates/app-expo/README.md.example +58 -0
  44. package/templates/app-expo/app/.gitkeep +2 -0
  45. package/templates/app-expo/app/_layout.tsx.example +41 -0
  46. package/templates/app-expo/app/form.tsx.example +52 -0
  47. package/templates/app-expo/app/index.tsx.example +89 -0
  48. package/templates/app-expo/app/list.tsx.example +32 -0
  49. package/templates/app-expo/app/profile.tsx.example +76 -0
  50. package/templates/app-expo/app/signin.tsx.example +53 -0
  51. package/templates/app-expo/app.json.example +39 -0
  52. package/templates/app-expo/assets/adaptive-icon.png +0 -0
  53. package/templates/app-expo/assets/favicon.png +0 -0
  54. package/templates/app-expo/assets/icon.png +0 -0
  55. package/templates/app-expo/assets/splash.png +0 -0
  56. package/templates/app-expo/babel.config.js.example +10 -0
  57. package/templates/app-expo/eas.json.example +20 -0
  58. package/templates/app-expo/expo-env.d.ts.example +4 -0
  59. package/templates/app-expo/metro.config.js.example +20 -0
  60. package/templates/app-expo/service-account-key.json.example +12 -0
  61. package/templates/app-expo/src/config/app.ts.example +46 -0
  62. package/templates/app-expo/src/config/providers.ts.example +7 -0
  63. package/templates/app-expo/tsconfig.json.example +19 -0
  64. package/templates/app-next/.env.example +4 -33
  65. package/templates/app-next/src/app/ClientLayout.tsx.example +2 -0
  66. package/templates/app-next/src/app/layout.tsx.example +7 -6
  67. package/templates/app-next/src/config/providers.ts.example +7 -0
  68. package/templates/app-next/src/globals.css.example +2 -11
  69. package/templates/app-next/src/pages/HomePage.tsx.example +1 -1
  70. package/templates/app-next/src/themes.css.example +10 -13
  71. package/templates/app-vite/.env.example +3 -32
  72. package/templates/app-vite/index.html.example +2 -24
  73. package/templates/app-vite/src/App.tsx.example +2 -0
  74. package/templates/app-vite/src/config/providers.ts.example +7 -0
  75. package/templates/app-vite/src/globals.css.example +2 -12
  76. package/templates/app-vite/src/pages/FormPageExample.tsx.example +1 -2
  77. package/templates/app-vite/src/pages/HomePage.tsx.example +2 -2
  78. package/templates/app-vite/src/themes.css.example +109 -79
  79. package/templates/app-vite/vercel.json.example +11 -0
  80. package/templates/functions-firebase/README.md.example +1 -1
  81. package/templates/functions-firebase/build.mjs.example +2 -72
  82. package/templates/functions-firebase/functions-firebase/.env.example.example +24 -26
  83. package/templates/functions-firebase/functions-firebase/README.md.example +1 -1
  84. package/templates/functions-firebase/functions-firebase/build.mjs.example +2 -72
  85. package/templates/functions-firebase/functions-firebase/tsconfig.json.example +1 -1
  86. package/templates/functions-firebase/functions.config.js.example +1 -1
  87. package/templates/functions-supabase/supabase/config.toml.example +59 -0
  88. package/templates/functions-supabase/supabase/functions/.env.example +13 -0
  89. package/templates/functions-supabase/supabase/functions/cancel-subscription/index.ts.example +7 -0
  90. package/templates/functions-supabase/supabase/functions/change-plan/index.ts.example +11 -0
  91. package/templates/functions-supabase/supabase/functions/create-checkout-session/index.ts.example +11 -0
  92. package/templates/functions-supabase/supabase/functions/create-customer-portal/index.ts.example +7 -0
  93. package/templates/functions-supabase/supabase/functions/crud/index.ts.example +16 -0
  94. package/templates/functions-supabase/supabase/functions/delete-account/index.ts.example +7 -0
  95. package/templates/functions-supabase/supabase/functions/deno.json.example +8 -0
  96. package/templates/functions-supabase/supabase/functions/get-custom-claims/index.ts.example +7 -0
  97. package/templates/functions-supabase/supabase/functions/get-user-auth-status/index.ts.example +7 -0
  98. package/templates/functions-supabase/supabase/functions/refresh-subscription-status/index.ts.example +7 -0
  99. package/templates/functions-supabase/supabase/functions/remove-custom-claims/index.ts.example +7 -0
  100. package/templates/functions-supabase/supabase/functions/set-custom-claims/index.ts.example +7 -0
  101. package/templates/functions-supabase/supabase/migrations/20250101000000_idempotency.sql +24 -0
  102. package/templates/functions-supabase/supabase/migrations/20250101000001_rate_limits.sql +22 -0
  103. package/templates/functions-supabase/supabase/migrations/20250101000002_cleanup_jobs.sql +28 -0
  104. package/templates/functions-supabase/supabase/migrations/20250101000003_operation_metrics.sql +28 -0
  105. package/templates/functions-vercel/functions-vercel/tsconfig.json.example +1 -1
  106. package/templates/functions-vercel/functions-vercel/vercel.json.example +1 -1
  107. package/templates/functions-vercel/vercel.json.example +1 -1
  108. package/templates/github/github/workflows/firebase-deploy.yml.example +1 -1
  109. package/templates/github/workflows/firebase-deploy.yml.example +1 -1
  110. package/templates/overlay-firebase/env.fragment.example +34 -0
  111. package/templates/overlay-firebase/env.fragment.expo.example +34 -0
  112. package/templates/overlay-firebase/env.fragment.nextjs.example +34 -0
  113. package/templates/overlay-firebase/src/config/providers.expo.ts.example +49 -0
  114. package/templates/overlay-firebase/src/config/providers.ts.example +23 -0
  115. package/templates/overlay-supabase/env.fragment.example +12 -0
  116. package/templates/overlay-supabase/env.fragment.expo.example +12 -0
  117. package/templates/overlay-supabase/env.fragment.nextjs.example +12 -0
  118. package/templates/overlay-supabase/src/config/providers.expo.ts.example +35 -0
  119. package/templates/overlay-supabase/src/config/providers.ts.example +33 -0
  120. package/templates/overlay-supabase/vercel.headers.example +23 -0
  121. package/templates/overlay-supabase/vercel.json.example +22 -0
  122. package/templates/overlay-vercel/env.fragment.example +34 -0
  123. package/templates/overlay-vercel/env.fragment.nextjs.example +34 -0
  124. package/templates/overlay-vercel/src/config/providers.ts.example +24 -0
  125. package/templates/root-consumer/.claude/agents/architect.md.example +2 -310
  126. package/templates/root-consumer/.claude/agents/builder.md.example +2 -326
  127. package/templates/root-consumer/.claude/agents/coder.md.example +2 -83
  128. package/templates/root-consumer/.claude/agents/extractor.md.example +2 -231
  129. package/templates/root-consumer/.claude/agents/polisher.md.example +2 -132
  130. package/templates/root-consumer/.claude/agents/prompt-engineer.md.example +2 -81
  131. package/templates/root-consumer/.claude/commands/grill.md.example +30 -0
  132. package/templates/root-consumer/.claude/commands/techdebt.md.example +28 -0
  133. package/templates/root-consumer/.clinerules.example +1 -0
  134. package/templates/root-consumer/.cursor/rules/no-docs.mdc.example +15 -0
  135. package/templates/root-consumer/.cursorrules.example +1 -0
  136. package/templates/root-consumer/.github/copilot-instructions.md.example +1 -0
  137. package/templates/root-consumer/.windsurfrules.example +1 -0
  138. package/templates/root-consumer/AI.md.example +44 -123
  139. package/templates/root-consumer/CLAUDE.md.example +1 -134
  140. package/templates/root-consumer/CONVENTIONS.md.example +1 -0
  141. package/templates/root-consumer/GEMINI.md.example +1 -0
  142. package/templates/root-consumer/firebase.json.example +1 -1
  143. package/templates/root-consumer/guides/dndev/AGENT_START_HERE.md.example +22 -2
  144. package/templates/root-consumer/guides/dndev/COMPONENTS_ADV.md.example +0 -18
  145. package/templates/root-consumer/guides/dndev/COMPONENTS_UI.md.example +1 -1
  146. package/templates/root-consumer/guides/dndev/ENV_SETUP.md.example +101 -32
  147. package/templates/root-consumer/guides/dndev/INDEX.md.example +4 -2
  148. package/templates/root-consumer/guides/dndev/SETUP_APP_CONFIG.md.example +3 -3
  149. package/templates/root-consumer/guides/dndev/SETUP_CRUD.md.example +241 -12
  150. package/templates/root-consumer/guides/dndev/SETUP_FIREBASE.md.example +13 -7
  151. package/templates/root-consumer/guides/dndev/SETUP_OAUTH_PROVIDERS.md.example +60 -0
  152. package/templates/root-consumer/guides/dndev/SETUP_SOC2.md.example +234 -0
  153. package/templates/root-consumer/guides/dndev/SETUP_STRIPE.md.example +62 -0
  154. package/templates/root-consumer/guides/dndev/SETUP_SUPABASE.md.example +124 -0
  155. package/templates/root-consumer/guides/dndev/SETUP_THEMES.md.example +6 -2
  156. package/templates/root-consumer/guides/dndev/SETUP_VERCEL.md.example +176 -0
  157. package/templates/root-consumer/guides/dndev/USE_ROUTING.md.example +5 -9
  158. package/templates/root-consumer/guides/dndev/essences_reference.css.example +174 -0
  159. package/templates/root-consumer/guides/wai-way/WAI_WAY_CLI.md.example +7 -8
  160. package/templates/root-consumer/guides/wai-way/agents/builder.md.example +10 -0
  161. package/templates/root-consumer/guides/wai-way/agents/extractor.md.example +25 -5
  162. package/templates/root-consumer/guides/wai-way/agents/polisher.md.example +13 -2
  163. package/templates/root-consumer/guides/wai-way/blueprints/0_brainstorm.md.example +2 -2
  164. package/templates/root-consumer/guides/wai-way/blueprints/1_scaffold.md.example +55 -15
  165. package/templates/root-consumer/guides/wai-way/blueprints/3_compose.md.example +15 -4
  166. package/templates/root-consumer/guides/wai-way/spec_template.md.example +7 -6
  167. package/dist/bin/commands/lint.d.ts +0 -11
  168. package/dist/bin/commands/lint.d.ts.map +0 -1
  169. package/dist/bin/commands/lint.js.map +0 -1
  170. package/dist/bin/commands/staging.d.ts +0 -11
  171. package/dist/bin/commands/staging.d.ts.map +0 -1
  172. package/dist/bin/commands/staging.js +0 -12
  173. package/dist/bin/commands/staging.js.map +0 -1
  174. package/templates/app-payload/.env.example +0 -28
  175. package/templates/app-payload/README.md.example +0 -233
  176. package/templates/app-payload/collections/Company.ts.example +0 -125
  177. package/templates/app-payload/collections/Hero.ts.example +0 -62
  178. package/templates/app-payload/collections/Media.ts.example +0 -41
  179. package/templates/app-payload/collections/Products.ts.example +0 -115
  180. package/templates/app-payload/collections/Services.ts.example +0 -104
  181. package/templates/app-payload/collections/Testimonials.ts.example +0 -92
  182. package/templates/app-payload/collections/Users.ts.example +0 -35
  183. package/templates/app-payload/src/server.ts.example +0 -79
  184. package/templates/app-payload/tsconfig.json.example +0 -24
@@ -0,0 +1,20 @@
1
+ // Learn more https://docs.expo.dev/guides/customizing-metro
2
+ const { getDefaultConfig } = require('expo/metro-config');
3
+ const path = require('path');
4
+
5
+ const projectRoot = __dirname;
6
+ const workspaceRoot = path.resolve(projectRoot, '../..');
7
+
8
+ /** @type {import('expo/metro-config').MetroConfig} */
9
+ const config = getDefaultConfig(projectRoot);
10
+
11
+ // Watch workspace packages (not the entire root — avoids churning on unrelated changes)
12
+ config.watchFolders = [path.resolve(workspaceRoot, 'packages')];
13
+
14
+ // Let Metro resolve from both the app's own node_modules and the workspace root
15
+ config.resolver.nodeModulesDirs = [
16
+ path.resolve(projectRoot, 'node_modules'),
17
+ path.resolve(workspaceRoot, 'node_modules'),
18
+ ];
19
+
20
+ module.exports = config;
@@ -0,0 +1,12 @@
1
+ {
2
+ "type": "service_account",
3
+ "project_id": "{{YOUR_FIREBASE_PROJECT_ID}}",
4
+ "private_key_id": "your_private_key_id",
5
+ "private_key": "-----BEGIN PRIVATE KEY-----\nYour private key here\n-----END PRIVATE KEY-----\n",
6
+ "client_email": "firebase-adminsdk-xxxxx@{{YOUR_FIREBASE_PROJECT_ID}}.iam.gserviceaccount.com",
7
+ "client_id": "your_client_id",
8
+ "auth_uri": "https://accounts.google.com/o/oauth2/auth",
9
+ "token_uri": "https://oauth2.googleapis.com/token",
10
+ "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
11
+ "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/firebase-adminsdk-xxxxx%40{{YOUR_FIREBASE_PROJECT_ID}}.iam.gserviceaccount.com"
12
+ }
@@ -0,0 +1,46 @@
1
+ /**
2
+ * @fileoverview Application Configuration (Expo)
3
+ *
4
+ * THIS FILE IS YOUR MAIN CONFIGURATION. Update the values below.
5
+ *
6
+ * QUICK START:
7
+ * 1. Set APP_NAME and APP_SHORT_NAME
8
+ * 2. Run `bun dev` - everything else is automatic
9
+ */
10
+
11
+ import type { AppConfig } from '@donotdev/core';
12
+
13
+ // ============================================================================
14
+ // APP IDENTITY - Update these values
15
+ // ============================================================================
16
+
17
+ export const APP_NAME = '{{appName}}';
18
+ export const APP_SHORT_NAME = '{{appShortName}}';
19
+ export const APP_DESCRIPTION = 'Built with DoNotDev Framework';
20
+
21
+ // ============================================================================
22
+ // MAIN CONFIGURATION
23
+ // ============================================================================
24
+
25
+ export const appConfig: AppConfig = {
26
+ app: {
27
+ name: APP_NAME,
28
+ shortName: APP_SHORT_NAME,
29
+ description: APP_DESCRIPTION,
30
+ },
31
+
32
+ // ==========================================================================
33
+ // FEATURES - Uncomment to enable
34
+ // ==========================================================================
35
+ features: {
36
+ // debug: true, // Enable debug tools in development
37
+ },
38
+
39
+ // ==========================================================================
40
+ // AUTH CONFIG - Uncomment to customize
41
+ // ==========================================================================
42
+ // auth: {
43
+ // authRoute: '/signin',
44
+ // profilePath: '/profile',
45
+ // },
46
+ };
@@ -0,0 +1,7 @@
1
+ // src/config/providers.ts — Provider bootstrap
2
+ // Auto-generated by DoNotDev scaffolding. Edit freely.
3
+ // When you add a backend (Firebase, Supabase), replace this file with the appropriate provider setup.
4
+ // See: guides/dndev/SETUP_PROVIDERS.md
5
+
6
+ // No backend configured — nothing to register.
7
+ // To add a backend later, run: dndev create-app (in an existing project, it merges)
@@ -0,0 +1,19 @@
1
+ {
2
+ "extends": "expo/tsconfig.base",
3
+ "compilerOptions": {
4
+ "strict": true,
5
+ "baseUrl": ".",
6
+ "paths": {
7
+ "@/*": ["./*"]
8
+ }
9
+ },
10
+ "include": [
11
+ "**/*.ts",
12
+ "**/*.tsx",
13
+ ".expo/types/**/*.ts",
14
+ "expo-env.d.ts"
15
+ ],
16
+ "exclude": [
17
+ "node_modules"
18
+ ]
19
+ }
@@ -36,7 +36,7 @@ NEXT_PUBLIC_DONOTDEV_LICENSE_KEY=dndev_your_key_here
36
36
  # =============================================================================
37
37
  # Comma-separated list of enabled auth providers
38
38
  # Available: github (required for framework), google, facebook, discord, twitter, microsoft, spotify, linkedin, reddit, twitch, yahoo, apple
39
- # Uncomment when Firebase is configured (requires NEXT_PUBLIC_FIREBASE_API_KEY and NEXT_PUBLIC_FIREBASE_PROJECT_ID)
39
+ # Uncomment when your backend is configured
40
40
  # NEXT_PUBLIC_AUTH_PARTNERS=google,github
41
41
 
42
42
  # Comma-separated list of enabled OAuth partners for API access
@@ -49,38 +49,9 @@ NEXT_PUBLIC_DONOTDEV_LICENSE_KEY=dndev_your_key_here
49
49
  # NEXT_PUBLIC_SPOTIFY_CLIENT_ID=your_spotify_client_id
50
50
 
51
51
  # =============================================================================
52
- # Firebase Configuration
52
+ # Backend-specific vars are appended below by your backend choice
53
+ # (Firebase, Supabase, etc.) — see overlay templates
53
54
  # =============================================================================
54
- # Get these values from your Firebase project settings
55
- # Run `dndev firebase:setup` to auto-populate, or copy from Firebase Console
56
- NEXT_PUBLIC_FIREBASE_API_KEY=
57
- NEXT_PUBLIC_FIREBASE_PROJECT_ID=
58
- # Copy from Firebase Console. Framework uses APP_URL hostname in production automatically.
59
- NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN=
60
- NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET=
61
- NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID=
62
- NEXT_PUBLIC_FIREBASE_APP_ID=
63
- NEXT_PUBLIC_FIREBASE_MEASUREMENT_ID=
64
- NEXT_PUBLIC_FIREBASE_FUNCTIONS_REGION=
65
-
66
- # =============================================================================
67
- # Firebase Emulator (Development only)
68
- # =============================================================================
69
- # Set to true to use Firebase emulators instead of production services
70
- NEXT_PUBLIC_USE_FIREBASE_EMULATOR=false
71
- NEXT_PUBLIC_FIREBASE_EMULATOR_HOST=localhost
72
- NEXT_PUBLIC_FIREBASE_EMULATOR_PORT=9099
73
- NEXT_PUBLIC_FIREBASE_AUTH_EMULATOR_HOST=http://localhost:9099
74
- NEXT_PUBLIC_FIREBASE_FIRESTORE_EMULATOR_HOST=localhost:8080
75
- NEXT_PUBLIC_FIREBASE_FUNCTIONS_EMULATOR_PORT=5001
76
-
77
- # =============================================================================
78
- # Firebase App Check (Abuse Protection)
79
- # =============================================================================
80
- # reCAPTCHA v3 site key for App Check
81
- # NEXT_PUBLIC_RECAPTCHA_SITE_KEY=6LcXXXX...
82
- # Optional: Debug token for localhost testing
83
- # NEXT_PUBLIC_APPCHECK_DEBUG_TOKEN=XXXX-XXXX-XXXX
84
55
 
85
56
  # =============================================================================
86
57
  # Stripe Configuration (if using billing)
@@ -91,4 +62,4 @@ NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY=
91
62
  # Sentry (optional - auto-enabled if SENTRY_DSN is set)
92
63
  # =============================================================================
93
64
  # Framework automatically initializes Sentry if this variable is set
94
- NEXT_PUBLIC_SENTRY_DSN=
65
+ NEXT_PUBLIC_SENTRY_DSN=
@@ -2,6 +2,8 @@
2
2
  // src/app/ClientLayout.tsx
3
3
 
4
4
  import { NextJsAppProviders } from '@donotdev/ui/next';
5
+
6
+ import '../config/providers';
5
7
  import { appConfig } from '../config/app';
6
8
 
7
9
  interface ClientLayoutProps {
@@ -1,13 +1,13 @@
1
1
  import type { Metadata } from 'next';
2
+
3
+ import { FontPreloadLinks } from '@donotdev/ui/next';
4
+
2
5
  import '../globals.css';
3
6
  import { ClientLayout } from './ClientLayout';
4
7
 
5
8
  /**
6
- * Framework fonts are loaded via CSS @font-face rules in dndev.css
7
- *
8
- * The framework CSS includes optimized @font-face declarations for Inter
9
- * (default) and Roboto (optional) with proper unicode-range subsetting for performance.
10
- * Fonts are copied from framework to public/fonts/ by AssetDiscovery during build.
9
+ * Framework fonts are loaded via CSS @font-face rules in dndev.css (bundled).
10
+ * Font preload links are injected at build time; FontPreloadLinks reads the manifest for SSR.
11
11
  */
12
12
 
13
13
  export const metadata: Metadata = {
@@ -17,7 +17,7 @@ export const metadata: Metadata = {
17
17
 
18
18
  /**
19
19
  * Root layout for Next.js App Router
20
- *
20
+ *
21
21
  * Theme detection happens client-side via ClientLayout to avoid
22
22
  * Next.js 16 + Turbopack race condition with async layouts.
23
23
  * Brief FOUC possible on first load, but prevents build-manifest.json errors.
@@ -35,6 +35,7 @@ export default function RootLayout({
35
35
  >
36
36
  <head>
37
37
  <link rel="icon" type="image/svg+xml" href="/favicon.svg" />
38
+ <FontPreloadLinks />
38
39
  </head>
39
40
  <body className="light">
40
41
  <ClientLayout>{children}</ClientLayout>
@@ -0,0 +1,7 @@
1
+ // src/config/providers.ts — Provider bootstrap
2
+ // Auto-generated by DoNotDev scaffolding. Edit freely.
3
+ // When you add a backend (Firebase, Supabase), replace this file with the appropriate provider setup.
4
+ // See: guides/dndev/SETUP_PROVIDERS.md
5
+
6
+ // No backend configured — nothing to register.
7
+ // To add a backend later, run: dndev create-app (in an existing project, it merges)
@@ -4,15 +4,6 @@
4
4
  @import './themes.css';
5
5
 
6
6
  /**
7
- * Font configuration
8
- *
9
- * Framework defaults to Inter (defined in @donotdev/components/styles/variables.css).
10
- * Fonts are loaded via CSS @font-face rules in @donotdev/ui/assets/fonts/fonts.css
11
- * and copied to public/fonts/ by AssetDiscovery during build.
12
- *
13
- * To override, uncomment and customize:
14
- * :root {
15
- * --font-sans: 'YourFont', sans-serif;
16
- * --font-family: var(--font-sans);
17
- * }
7
+ * Font choices (--font-family, --font-sans, etc.) belong in themes.css.
8
+ * Fonts (Inter, Space Grotesk, Playfair, Roboto) are bundled via @donotdev/ui; no external fetch, no public/fonts required.
18
9
  */
@@ -103,7 +103,7 @@ export default function HomePage() {
103
103
  areas={`"header header"
104
104
  "sidebar main"
105
105
  "footer footer"`}
106
- templateColumns="1fr 2fr"
106
+ cols="1fr 2fr"
107
107
  gap="tight"
108
108
  >
109
109
  <GridArea name="header">
@@ -1,8 +1,11 @@
1
+ /**
2
+ * src/themes.css — SSOT for essence and theme variables. Import in globals.css only.
3
+ * Default = SaaS (Inter). Optional .brutalist and .luxury do not apply until class is set on <html>.
4
+ */
1
5
  /* src/themes.css */
2
6
 
3
7
  /* ===========================
4
8
  APP-WIDE SETTINGS
5
- Spacing, radius, shadows, animations - apply to all themes
6
9
  =========================== */
7
10
  :root {
8
11
  /* Routing animations (fade | slide | none) */
@@ -115,17 +118,11 @@
115
118
  }
116
119
 
117
120
  /* ===========================
118
- CUSTOM THEMES
119
- Add your brand themes below
121
+ OPTIONAL ESSENCES (do not apply by default; set <html class="brutalist"> or class="luxury" to use)
122
+ See guides/dndev/essences_reference.css for full .brutalist and .luxury blocks.
120
123
  =========================== */
121
124
 
122
- /* Example:
123
- :root.brand {
124
- --theme-icon: 'Zap';
125
- --theme-label: 'Brand';
126
- --theme-is-dark: 0;
127
- --background: #your-color;
128
- --foreground: #your-color;
129
- ...
130
- }
131
- */
125
+ /* ===========================
126
+ CUSTOM THEMES
127
+ =========================== */
128
+ /* Example: .brand { --theme-icon: 'Zap'; --theme-label: 'Brand'; --theme-is-dark: 0; ... } */
@@ -21,7 +21,7 @@ VITE_DONOTDEV_LICENSE_KEY=dndev_your_key_here
21
21
  # =============================================================================
22
22
  # Comma-separated list of enabled auth providers
23
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)
24
+ # Uncomment when your backend is configured
25
25
  # VITE_AUTH_PARTNERS=github
26
26
 
27
27
  # Comma-separated list of enabled OAuth partners for API access
@@ -34,38 +34,9 @@ VITE_DONOTDEV_LICENSE_KEY=dndev_your_key_here
34
34
  # VITE_SPOTIFY_CLIENT_ID=your_spotify_client_id
35
35
 
36
36
  # =============================================================================
37
- # Firebase Configuration
37
+ # Backend-specific vars are appended below by your backend choice
38
+ # (Firebase, Supabase, etc.) — see overlay templates
38
39
  # =============================================================================
39
- # Get these values from your Firebase project settings
40
- # Run `dndev firebase:setup` to auto-populate, or copy from Firebase Console
41
- VITE_FIREBASE_API_KEY=
42
- VITE_FIREBASE_PROJECT_ID=
43
- # Copy from Firebase Console. Framework uses APP_URL hostname in production automatically.
44
- VITE_FIREBASE_AUTH_DOMAIN=
45
- VITE_FIREBASE_STORAGE_BUCKET=
46
- VITE_FIREBASE_MESSAGING_SENDER_ID=
47
- VITE_FIREBASE_APP_ID=
48
- VITE_FIREBASE_MEASUREMENT_ID=
49
- VITE_FIREBASE_FUNCTIONS_REGION=
50
-
51
- # =============================================================================
52
- # Firebase Emulator (Development only)
53
- # =============================================================================
54
- # Set to true to use Firebase emulators instead of production services
55
- VITE_USE_FIREBASE_EMULATOR=false
56
- VITE_FIREBASE_EMULATOR_HOST=localhost
57
- VITE_FIREBASE_EMULATOR_PORT=9099
58
- VITE_FIREBASE_AUTH_EMULATOR_HOST=http://localhost:9099
59
- VITE_FIREBASE_FIRESTORE_EMULATOR_HOST=localhost:8080
60
- VITE_FIREBASE_FUNCTIONS_EMULATOR_PORT=5001
61
-
62
- # =============================================================================
63
- # Firebase App Check (Abuse Protection)
64
- # =============================================================================
65
- # reCAPTCHA v3 site key for App Check
66
- # VITE_RECAPTCHA_SITE_KEY=6LcXXXX...
67
- # Optional: Debug token for localhost testing
68
- # VITE_APPCHECK_DEBUG_TOKEN=XXXX-XXXX-XXXX
69
40
 
70
41
  # =============================================================================
71
42
  # Stripe Configuration (if using billing)
@@ -16,13 +16,8 @@
16
16
  <!-- ✅ PWA: Manifest link (if exists) -->
17
17
  <link rel="manifest" href="/manifest.json" />
18
18
 
19
- <!-- ✅ PERFORMANCE: Preload critical fonts (non-blocking) -->
20
- <link rel="preload" href="/fonts/Inter-latin.woff2" as="font" type="font/woff2" crossorigin="anonymous">
21
- <link rel="preload" href="/fonts/Roboto-400-latin.woff2" as="font" type="font/woff2" crossorigin="anonymous">
22
-
23
- <!-- ✅ PERFORMANCE: Load extended font subsets async (non-blocking) -->
24
- <link rel="stylesheet" href="/fonts/fonts.css" media="print" onload="this.media='all'">
25
- <noscript><link rel="stylesheet" href="/fonts/fonts.css"></noscript>
19
+ <!-- Fonts: Inter, Space Grotesk, Playfair, Roboto loaded via @donotdev/ui/dndev.css (bundled). -->
20
+ <!-- DNDEV_FONT_PRELOADS -->
26
21
 
27
22
  <!-- ✅ PERFORMANCE: Preconnect to external domains (OAuth providers) -->
28
23
  <!-- GitHub OAuth -->
@@ -41,23 +36,6 @@
41
36
 
42
37
  <!-- ✅ PERFORMANCE: Critical CSS inlined here by build -->
43
38
  <style>
44
- /* Critical @font-face declarations - must be inline for preloaded fonts to work */
45
- @font-face {
46
- font-family: Inter;
47
- font-style: normal;
48
- font-weight: 400 700;
49
- font-display: swap;
50
- src: url('/fonts/Inter-latin.woff2') format('woff2');
51
- unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
52
- }
53
- @font-face {
54
- font-family: Roboto;
55
- font-style: normal;
56
- font-weight: 400;
57
- font-display: swap;
58
- src: url('/fonts/Roboto-400-latin.woff2') format('woff2');
59
- unicode-range: U+0000-00FF;
60
- }
61
39
  /* Critical above-the-fold styles */
62
40
  html, body {
63
41
  margin: 0;
@@ -7,6 +7,8 @@
7
7
  */
8
8
 
9
9
  import { ViteAppProviders } from '@donotdev/ui/vite';
10
+
11
+ import './config/providers';
10
12
  import { appConfig } from './config/app';
11
13
 
12
14
  /**
@@ -0,0 +1,7 @@
1
+ // src/config/providers.ts — Provider bootstrap
2
+ // Auto-generated by DoNotDev scaffolding. Edit freely.
3
+ // When you add a backend (Firebase, Supabase), replace this file with the appropriate provider setup.
4
+ // See: guides/dndev/SETUP_PROVIDERS.md
5
+
6
+ // No backend configured — nothing to register.
7
+ // To add a backend later, run: dndev create-app (in an existing project, it merges)
@@ -4,16 +4,6 @@
4
4
  @import './themes.css';
5
5
 
6
6
  /**
7
- * Font configuration
8
- *
9
- * Framework defaults to Inter (defined in @donotdev/components/styles/variables.css).
10
- * Fonts are loaded via CSS @font-face rules in @donotdev/ui/assets/fonts/fonts.css
11
- * and copied to public/fonts/ by AssetDiscovery during build.
12
- *
13
- * To override, uncomment and customize:
14
- * :root {
15
- * --font-sans: 'YourFont', sans-serif;
16
- * --font-mono: 'YourMonoFont', monospace;
17
- * --font-family: var(--font-sans);
18
- * }
7
+ * Font choices (--font-family, --font-sans, etc.) belong in themes.css.
8
+ * Fonts (Inter, Space Grotesk, Playfair, Roboto) are bundled via @donotdev/ui; no external fetch, no public/fonts required.
19
9
  */
@@ -54,8 +54,7 @@ export default function ProductPage() {
54
54
  const isNew = id === 'new';
55
55
 
56
56
  // useCrud provides CRUD operations with optimistic updates
57
- // backend: 'functions' uses Cloud Functions, 'firestore' uses direct Firestore
58
- const { get, add, update, error } = useCrud(productEntity, { backend: 'functions' });
57
+ const { get, add, update, error } = useCrud(productEntity);
59
58
  const [formData, setFormData] = useState<any>(null);
60
59
 
61
60
  // ==========================================================================
@@ -53,7 +53,7 @@ export default function HomePage() {
53
53
  <Card
54
54
  title="2. Firebase Setup"
55
55
  content={[
56
- 'Run: dndev firebase:setup',
56
+ 'Run: dndev setup firebase',
57
57
  'This will:',
58
58
  ' - Create or select a Firebase project',
59
59
  ' - Create a web app if needed',
@@ -176,7 +176,7 @@ export default function HomePage() {
176
176
  {/* ================================================================ */}
177
177
 
178
178
  <Section title="Start Building" tone="muted" align="center">
179
- <Stack align="center" gap="medium">
179
+ <Stack align="center">
180
180
  <Text level="body">
181
181
  Once setup is complete, use WAI-WAY to build your app:
182
182
  </Text>