@donotdev/cli 0.0.17 → 0.0.19

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 (183) hide show
  1. package/dependencies-matrix.json +67 -60
  2. package/dist/bin/commands/coach.js +8177 -0
  3. package/dist/bin/commands/create-app.js +94 -145
  4. package/dist/bin/commands/create-project.js +98 -149
  5. package/dist/bin/commands/deploy.js +81 -59
  6. package/dist/bin/commands/doctor.js +243 -698
  7. package/dist/bin/commands/emu.js +2 -2
  8. package/dist/bin/commands/format.js +4 -1
  9. package/dist/bin/commands/get-demo.js +8351 -0
  10. package/dist/bin/commands/make-admin.js +773 -152
  11. package/dist/bin/commands/setup.js +519 -1711
  12. package/dist/bin/commands/staging.js +17852 -0
  13. package/dist/bin/commands/sync-secrets.js +2 -11
  14. package/dist/bin/commands/type-check.js +7733 -1713
  15. package/dist/bin/dndev.js +913 -182
  16. package/dist/bin/donotdev.js +913 -182
  17. package/dist/index.js +191 -211
  18. package/package.json +1 -1
  19. package/templates/app-demo/index.html.example +147 -10
  20. package/templates/app-demo/src/App.tsx.example +7 -13
  21. package/templates/app-demo/src/config/app.ts.example +12 -48
  22. package/templates/app-demo/src/entities/product.ts.example +38 -0
  23. package/templates/app-demo/src/globals.css.example +5 -1
  24. package/templates/app-demo/src/main.tsx.example +13 -7
  25. package/templates/app-demo/src/pages/ChangelogPage.tsx.example +14 -0
  26. package/templates/app-demo/src/pages/DashboardPage.tsx.example +15 -0
  27. package/templates/app-demo/src/pages/HomePage.tsx.example +3 -77
  28. package/templates/app-demo/src/pages/PricingPage.tsx.example +14 -0
  29. package/templates/app-demo/src/pages/ProductsPage.tsx.example +17 -0
  30. package/templates/app-demo/src/pages/ProfilePage.tsx.example +16 -0
  31. package/templates/app-demo/src/pages/SettingsPage.tsx.example +15 -0
  32. package/templates/app-demo/src/pages/ShowcaseDetailPage.tsx.example +112 -0
  33. package/templates/app-demo/src/pages/ShowcasePage.tsx.example +91 -0
  34. package/templates/app-demo/src/pages/legal/LegalPage.tsx.example +14 -0
  35. package/templates/app-demo/src/pages/legal/PrivacyPage.tsx.example +14 -0
  36. package/templates/app-demo/src/pages/legal/TermsPage.tsx.example +14 -0
  37. package/templates/app-demo/tsconfig.json.example +1 -1
  38. package/templates/app-demo/vite.config.ts.example +23 -48
  39. package/templates/app-expo/README.md.example +1 -1
  40. package/templates/app-expo/app/index.tsx.example +1 -1
  41. package/templates/app-vite/src/pages/HomePage.tsx.example +8 -10
  42. package/templates/overlay-firebase/env.fragment.example +1 -1
  43. package/templates/overlay-firebase/env.fragment.expo.example +1 -1
  44. package/templates/overlay-firebase/env.fragment.nextjs.example +1 -1
  45. package/templates/overlay-supabase/env.fragment.example +1 -1
  46. package/templates/overlay-supabase/env.fragment.expo.example +1 -1
  47. package/templates/overlay-supabase/env.fragment.nextjs.example +1 -1
  48. package/templates/overlay-vercel/env.fragment.example +1 -1
  49. package/templates/overlay-vercel/env.fragment.nextjs.example +1 -1
  50. package/templates/root-consumer/.claude/commands/brainstorm.md.example +15 -1
  51. package/templates/root-consumer/.claude/commands/build.md.example +24 -2
  52. package/templates/root-consumer/.claude/commands/design.md.example +17 -0
  53. package/templates/root-consumer/.claude/commands/polish.md.example +17 -0
  54. package/templates/root-consumer/AI.md.example +54 -21
  55. package/templates/root-consumer/guides/dndev/AGENT_START_HERE.md.example +21 -6
  56. package/templates/root-consumer/guides/dndev/COMPONENTS_ADV.md.example +16 -179
  57. package/templates/root-consumer/guides/dndev/ENV_SETUP.md.example +19 -21
  58. package/templates/root-consumer/guides/dndev/GOTCHAS.md.example +14 -3
  59. package/templates/root-consumer/guides/dndev/INDEX.md.example +2 -2
  60. package/templates/root-consumer/guides/dndev/SETUP_APP_CONFIG.md.example +3 -3
  61. package/templates/root-consumer/guides/dndev/SETUP_BLOG.md.example +19 -2
  62. package/templates/root-consumer/guides/dndev/SETUP_CRUD.md.example +35 -1
  63. package/templates/root-consumer/guides/dndev/SETUP_FIREBASE.md.example +17 -12
  64. package/templates/root-consumer/guides/dndev/SETUP_LAYOUTS.md.example +32 -0
  65. package/templates/root-consumer/guides/dndev/SETUP_OAUTH_PROVIDERS.md.example +1 -1
  66. package/templates/root-consumer/guides/dndev/SETUP_PAGES.md.example +74 -6
  67. package/templates/root-consumer/guides/dndev/SETUP_STRIPE.md.example +2 -2
  68. package/templates/root-consumer/guides/dndev/SETUP_SUPABASE.md.example +17 -12
  69. package/templates/root-consumer/guides/dndev/SETUP_VERCEL.md.example +37 -16
  70. package/templates/root-consumer/guides/dndev/USE_ROUTING.md.example +18 -18
  71. package/templates/root-consumer/guides/dndev/essences_reference.css.example +119 -2
  72. package/templates/root-consumer/guides/wai-way/blueprints/0_brainstorm.md.example +1 -1
  73. package/templates/root-consumer/guides/wai-way/blueprints/1_scaffold.md.example +14 -0
  74. package/templates/root-consumer/guides/wai-way/blueprints/2_entities.md.example +6 -0
  75. package/templates/root-consumer/guides/wai-way/blueprints/3_compose.md.example +14 -0
  76. package/templates/root-consumer/guides/wai-way/entity_patterns.md.example +4 -5
  77. package/templates/root-consumer/guides/wai-way/page_patterns.md.example +2 -2
  78. package/dist/bin/commands/agent-setup.d.ts +0 -6
  79. package/dist/bin/commands/agent-setup.d.ts.map +0 -1
  80. package/dist/bin/commands/agent-setup.js.map +0 -1
  81. package/dist/bin/commands/build.d.ts +0 -11
  82. package/dist/bin/commands/build.d.ts.map +0 -1
  83. package/dist/bin/commands/build.js.map +0 -1
  84. package/dist/bin/commands/bump.d.ts +0 -11
  85. package/dist/bin/commands/bump.d.ts.map +0 -1
  86. package/dist/bin/commands/bump.js.map +0 -1
  87. package/dist/bin/commands/cacheout.d.ts +0 -11
  88. package/dist/bin/commands/cacheout.d.ts.map +0 -1
  89. package/dist/bin/commands/cacheout.js.map +0 -1
  90. package/dist/bin/commands/create-app.d.ts +0 -11
  91. package/dist/bin/commands/create-app.d.ts.map +0 -1
  92. package/dist/bin/commands/create-app.js.map +0 -1
  93. package/dist/bin/commands/create-project.d.ts +0 -11
  94. package/dist/bin/commands/create-project.d.ts.map +0 -1
  95. package/dist/bin/commands/create-project.js.map +0 -1
  96. package/dist/bin/commands/deploy.d.ts +0 -11
  97. package/dist/bin/commands/deploy.d.ts.map +0 -1
  98. package/dist/bin/commands/deploy.js.map +0 -1
  99. package/dist/bin/commands/dev.d.ts +0 -11
  100. package/dist/bin/commands/dev.d.ts.map +0 -1
  101. package/dist/bin/commands/dev.js.map +0 -1
  102. package/dist/bin/commands/doctor.d.ts +0 -6
  103. package/dist/bin/commands/doctor.d.ts.map +0 -1
  104. package/dist/bin/commands/doctor.js.map +0 -1
  105. package/dist/bin/commands/emu.d.ts +0 -11
  106. package/dist/bin/commands/emu.d.ts.map +0 -1
  107. package/dist/bin/commands/emu.js.map +0 -1
  108. package/dist/bin/commands/format.d.ts +0 -11
  109. package/dist/bin/commands/format.d.ts.map +0 -1
  110. package/dist/bin/commands/format.js.map +0 -1
  111. package/dist/bin/commands/make-admin.d.ts +0 -11
  112. package/dist/bin/commands/make-admin.d.ts.map +0 -1
  113. package/dist/bin/commands/make-admin.js.map +0 -1
  114. package/dist/bin/commands/preview.d.ts +0 -11
  115. package/dist/bin/commands/preview.d.ts.map +0 -1
  116. package/dist/bin/commands/preview.js.map +0 -1
  117. package/dist/bin/commands/setup.d.ts +0 -6
  118. package/dist/bin/commands/setup.d.ts.map +0 -1
  119. package/dist/bin/commands/setup.js.map +0 -1
  120. package/dist/bin/commands/sync-secrets.d.ts +0 -11
  121. package/dist/bin/commands/sync-secrets.d.ts.map +0 -1
  122. package/dist/bin/commands/sync-secrets.js.map +0 -1
  123. package/dist/bin/commands/type-check.d.ts +0 -14
  124. package/dist/bin/commands/type-check.d.ts.map +0 -1
  125. package/dist/bin/commands/type-check.js.map +0 -1
  126. package/dist/bin/commands/wai.d.ts +0 -11
  127. package/dist/bin/commands/wai.d.ts.map +0 -1
  128. package/dist/bin/commands/wai.js.map +0 -1
  129. package/dist/index.d.ts +0 -8
  130. package/dist/index.d.ts.map +0 -1
  131. package/dist/index.js.map +0 -1
  132. package/templates/app-demo/src/components/ThemeToggle.tsx.example +0 -48
  133. package/templates/app-demo/src/pages/DetailPage.tsx.example +0 -103
  134. package/templates/app-demo/src/pages/FullPage.tsx.example +0 -142
  135. package/templates/app-demo/src/pages/components/DemoLayout.tsx.example +0 -266
  136. package/templates/app-demo/src/pages/components/LayoutRoute.tsx.example +0 -20
  137. package/templates/functions-firebase/functions-firebase/README.md.example +0 -123
  138. package/templates/functions-firebase/functions-firebase/build.mjs.example +0 -5
  139. package/templates/functions-firebase/functions-firebase/src/auth/getCustomClaims.ts.example +0 -19
  140. package/templates/functions-firebase/functions-firebase/src/auth/getUserAuthStatus.ts.example +0 -21
  141. package/templates/functions-firebase/functions-firebase/src/auth/index.ts.example +0 -11
  142. package/templates/functions-firebase/functions-firebase/src/auth/removeCustomClaims.ts.example +0 -21
  143. package/templates/functions-firebase/functions-firebase/src/auth/setCustomClaims.ts.example +0 -21
  144. package/templates/functions-firebase/functions-firebase/src/billing/handleStripeWebhook.ts.example +0 -24
  145. package/templates/functions-firebase/functions-firebase/src/billing/index.ts.example +0 -10
  146. package/templates/functions-firebase/functions-firebase/src/billing/processPaymentSuccess.ts.example +0 -14
  147. package/templates/functions-firebase/functions-firebase/src/billing/refreshSubscriptionStatus.ts.example +0 -14
  148. package/templates/functions-firebase/functions-firebase/src/index.ts.example +0 -39
  149. package/templates/functions-firebase/functions-firebase/src/oauth/checkGitHubAccess.ts.example +0 -14
  150. package/templates/functions-firebase/functions-firebase/src/oauth/disconnect.ts.example +0 -14
  151. package/templates/functions-firebase/functions-firebase/src/oauth/exchangeToken.ts.example +0 -14
  152. package/templates/functions-firebase/functions-firebase/src/oauth/getConnections.ts.example +0 -14
  153. package/templates/functions-firebase/functions-firebase/src/oauth/grantGitHubAccess.ts.example +0 -14
  154. package/templates/functions-firebase/functions-firebase/src/oauth/index.ts.example +0 -17
  155. package/templates/functions-firebase/functions-firebase/src/oauth/refreshToken.ts.example +0 -14
  156. package/templates/functions-firebase/functions-firebase/src/oauth/revokeGitHubAccess.ts.example +0 -14
  157. package/templates/functions-firebase/functions-firebase/tsconfig.json.example +0 -21
  158. package/templates/functions-vercel/functions-vercel/README.md.example +0 -116
  159. package/templates/functions-vercel/functions-vercel/build.mjs.example +0 -52
  160. package/templates/functions-vercel/functions-vercel/src/api/auth/getCustomClaims.ts.example +0 -20
  161. package/templates/functions-vercel/functions-vercel/src/api/auth/getUserAuthStatus.ts.example +0 -20
  162. package/templates/functions-vercel/functions-vercel/src/api/auth/removeCustomClaims.ts.example +0 -20
  163. package/templates/functions-vercel/functions-vercel/src/api/auth/setCustomClaims.ts.example +0 -20
  164. package/templates/functions-vercel/functions-vercel/src/api/billing/handleStripeWebhook.ts.example +0 -20
  165. package/templates/functions-vercel/functions-vercel/src/api/billing/processPaymentSuccess.ts.example +0 -20
  166. package/templates/functions-vercel/functions-vercel/src/api/billing/refreshSubscriptionStatus.ts.example +0 -20
  167. package/templates/functions-vercel/functions-vercel/src/api/crud/createEntity.ts.example +0 -20
  168. package/templates/functions-vercel/functions-vercel/src/api/crud/deleteEntity.ts.example +0 -20
  169. package/templates/functions-vercel/functions-vercel/src/api/crud/getEntity.ts.example +0 -20
  170. package/templates/functions-vercel/functions-vercel/src/api/crud/listEntities.ts.example +0 -20
  171. package/templates/functions-vercel/functions-vercel/src/api/crud/updateEntity.ts.example +0 -20
  172. package/templates/functions-vercel/functions-vercel/src/api/oauth/checkGitHubAccess.ts.example +0 -20
  173. package/templates/functions-vercel/functions-vercel/src/api/oauth/disconnect.ts.example +0 -20
  174. package/templates/functions-vercel/functions-vercel/src/api/oauth/exchangeToken.ts.example +0 -20
  175. package/templates/functions-vercel/functions-vercel/src/api/oauth/getConnections.ts.example +0 -20
  176. package/templates/functions-vercel/functions-vercel/src/api/oauth/grantGitHubAccess.ts.example +0 -20
  177. package/templates/functions-vercel/functions-vercel/src/api/oauth/refreshToken.ts.example +0 -20
  178. package/templates/functions-vercel/functions-vercel/src/api/oauth/revokeGitHubAccess.ts.example +0 -20
  179. package/templates/functions-vercel/functions-vercel/tsconfig.json.example +0 -21
  180. package/templates/functions-vercel/functions-vercel/vercel.json.example +0 -14
  181. package/templates/github/github/workflows/firebase-deploy.yml.example +0 -79
  182. /package/templates/functions-firebase/{functions-firebase/.env.example.example → .env.example} +0 -0
  183. /package/templates/functions-vercel/{functions-vercel/.env.example.example → .env.example} +0 -0
@@ -0,0 +1,91 @@
1
+ import { useMemo, useState } from 'react';
2
+ import { useNavigate } from 'react-router-dom';
3
+ import { Component } from 'lucide-react';
4
+
5
+ import {
6
+ Badge,
7
+ Card,
8
+ Grid,
9
+ Input,
10
+ Section,
11
+ Stack,
12
+ Tabs,
13
+ } from '@donotdev/components';
14
+
15
+ import {
16
+ COMPONENT_CONFIGS,
17
+ getCSSFamilies,
18
+ } from './components/componentConfig';
19
+
20
+ import type { PageMeta } from '@donotdev/core';
21
+ import type { CSSFamily } from './components/ComponentsData';
22
+
23
+ export const meta: PageMeta = {
24
+ icon: <Component />,
25
+ preset: 'admin',
26
+ };
27
+
28
+ export default function ShowcasePage() {
29
+ const navigate = useNavigate();
30
+ const [selectedTab, setSelectedTab] = useState<CSSFamily | 'all'>('all');
31
+ const [searchQuery, setSearchQuery] = useState('');
32
+
33
+ const componentsInTab = useMemo(() => {
34
+ return COMPONENT_CONFIGS.filter((config) => {
35
+ if (selectedTab !== 'all' && config.cssFamily !== selectedTab)
36
+ return false;
37
+ return (
38
+ searchQuery === '' ||
39
+ config.name.toLowerCase().includes(searchQuery.toLowerCase())
40
+ );
41
+ }).sort((a, b) => a.name.localeCompare(b.name));
42
+ }, [selectedTab, searchQuery]);
43
+
44
+ const cssFamilies = getCSSFamilies();
45
+
46
+ return (
47
+ <Stack gap="large">
48
+ <Stack direction="row" gap="medium" align="end" wrap="wrap">
49
+ <Input
50
+ placeholder="Filter components..."
51
+ value={searchQuery}
52
+ onChange={(e) => setSearchQuery(e.target.value)}
53
+ />
54
+ </Stack>
55
+
56
+ <Tabs
57
+ items={cssFamilies.map((family) => ({
58
+ value: family.id,
59
+ label: family.label,
60
+ content: null,
61
+ }))}
62
+ value={selectedTab}
63
+ onValueChange={(value) => setSelectedTab(value as CSSFamily | 'all')}
64
+ />
65
+
66
+ <Section
67
+ title={
68
+ cssFamilies.find((f) => f.id === selectedTab)?.label || 'Components'
69
+ }
70
+ >
71
+ <Grid cols={[1, 2, 3, 4]} gap="medium">
72
+ {componentsInTab.map((config) => (
73
+ <Card
74
+ key={config.id}
75
+ title={config.name}
76
+ clickable
77
+ onClick={() => navigate(`/showcase/${config.id}`)}
78
+ >
79
+ <Stack direction="row" justify="end">
80
+ <Badge variant="secondary">
81
+ {cssFamilies.find((f) => f.id === config.cssFamily)?.label ||
82
+ config.cssFamily}
83
+ </Badge>
84
+ </Stack>
85
+ </Card>
86
+ ))}
87
+ </Grid>
88
+ </Section>
89
+ </Stack>
90
+ );
91
+ }
@@ -0,0 +1,14 @@
1
+ import { Scale } from 'lucide-react';
2
+
3
+ import { LegalNoticeTemplate } from '@donotdev/templates';
4
+
5
+ import type { PageMeta } from '@donotdev/core';
6
+
7
+ export const meta: PageMeta = {
8
+ icon: <Scale />,
9
+ hideFromMenu: true,
10
+ };
11
+
12
+ export default function LegalPage() {
13
+ return <LegalNoticeTemplate />;
14
+ }
@@ -0,0 +1,14 @@
1
+ import { Shield } from 'lucide-react';
2
+
3
+ import { PrivacyPolicyTemplate } from '@donotdev/templates';
4
+
5
+ import type { PageMeta } from '@donotdev/core';
6
+
7
+ export const meta: PageMeta = {
8
+ icon: <Shield />,
9
+ hideFromMenu: true,
10
+ };
11
+
12
+ export default function PrivacyPage() {
13
+ return <PrivacyPolicyTemplate />;
14
+ }
@@ -0,0 +1,14 @@
1
+ import { FileText } from 'lucide-react';
2
+
3
+ import { TermsOfServiceTemplate } from '@donotdev/templates';
4
+
5
+ import type { PageMeta } from '@donotdev/core';
6
+
7
+ export const meta: PageMeta = {
8
+ icon: <FileText />,
9
+ hideFromMenu: true,
10
+ };
11
+
12
+ export default function TermsPage() {
13
+ return <TermsOfServiceTemplate />;
14
+ }
@@ -1,5 +1,5 @@
1
1
  {
2
- "extends": "../../tsconfig.json",
2
+ "extends": "../../tsconfig.vite.json",
3
3
  "compilerOptions": {
4
4
  "baseUrl": ".",
5
5
  "types": ["node", "vite/client"]
@@ -1,53 +1,28 @@
1
1
  // apps/demo/vite.config.ts
2
- import react from '@vitejs/plugin-react';
3
- import { defineConfig } from 'vite';
4
- import tsconfigPaths from 'vite-tsconfig-paths';
5
- import autoprefixer from 'autoprefixer';
6
- // @ts-expect-error - postcss-import doesn't have type definitions
7
- import postcssImport from 'postcss-import';
8
- import postcssNesting from 'postcss-nesting';
9
- import { resolve as pathResolve } from 'node:path';
10
- import { createRequire } from 'node:module';
11
2
 
12
- const require = createRequire(import.meta.url);
3
+ /**
4
+ * @fileoverview Vite build configuration for the demo app
5
+ * @description Configures Vite build tool with application settings, development server, HMR, and file watching options for the demo application.
6
+ * @version 0.0.1
7
+ * @since 0.0.1
8
+ * @author AMBROISE PARK Consulting
9
+ */
13
10
 
14
- export default defineConfig({
15
- plugins: [
16
- react({
17
- jsxRuntime: 'automatic',
18
- }),
19
- tsconfigPaths({
20
- ignoreConfigErrors: true,
21
- }),
22
- ],
23
- css: {
24
- postcss: {
25
- plugins: [
26
- postcssImport({
27
- resolve: (id: string, basedir: string) => {
28
- // Handle package imports like '@donotdev/components/styles'
29
- if (!id.startsWith('.')) {
30
- try {
31
- return require.resolve(id, { paths: [basedir] });
32
- } catch {
33
- // Fallback to relative resolution
34
- return pathResolve(basedir, id);
35
- }
36
- }
37
- // Relative imports
38
- return pathResolve(basedir, id);
39
- },
40
- }),
41
- postcssNesting,
42
- autoprefixer,
43
- ],
11
+ import { defineViteConfig } from '@donotdev/core/vite';
12
+
13
+ import { appConfig } from './src/config/app';
14
+
15
+ // Features and SEO are now in app.ts (runtime config)
16
+ // Only build-time configs (routes, themes, i18n, assets) go here
17
+ export default defineViteConfig({
18
+ appConfig,
19
+ server: {
20
+ port: 3003,
21
+ https: false,
22
+
23
+ // HMR Configuration - Enabled for debugging
24
+ hmr: {
25
+ overlay: true, // Show error overlay in browser
44
26
  },
45
27
  },
46
- optimizeDeps: {
47
- include: ['react', 'react-dom', 'react/jsx-runtime'],
48
- },
49
- resolve: {
50
- dedupe: ['react', 'react-dom'],
51
- preserveSymlinks: false,
52
- },
53
- });
28
+ });
@@ -8,7 +8,7 @@ Mobile app built with DoNotDev Framework and Expo.
8
8
 
9
9
  - Node.js 20+ and Bun 1.3+
10
10
  - Expo Go app on your phone (for development)
11
- - Firebase project (run `dndev setup firebase`)
11
+ - Provider configured (run `dndev coach` then `dndev setup`)
12
12
 
13
13
  ### Development
14
14
 
@@ -33,7 +33,7 @@ export default function HomePage() {
33
33
  <View>
34
34
  <Text level="h3">1. Backend Setup</Text>
35
35
  <Text level="small">
36
- Run: dndev setup
36
+ Run: dndev coach → fill .env → dndev setup
37
37
  </Text>
38
38
  </View>
39
39
 
@@ -51,17 +51,15 @@ export default function HomePage() {
51
51
  />
52
52
 
53
53
  <Card
54
- title="2. Firebase Setup"
54
+ title="2. Provider Setup"
55
55
  content={[
56
- 'Run: dndev setup firebase',
57
- 'This will:',
58
- ' - Create or select a Firebase project',
59
- ' - Create a web app if needed',
60
- ' - Write Firebase config to your .env automatically',
61
- ' - Update .firebaserc with your project ID',
62
- 'Then follow the prompts for the 2 manual steps:',
63
- ' - Download service account key',
64
- ' - Enable Auth + Firestore in Firebase Console',
56
+ 'Run: dndev coach',
57
+ 'This shows what to configure:',
58
+ ' - Which dashboard to visit',
59
+ ' - What to copy and where to paste it',
60
+ 'Fill in your .env values, then run:',
61
+ ' dndev setup',
62
+ 'Setup validates, automates, and health-checks.',
65
63
  ]}
66
64
  />
67
65
  </Grid>
@@ -3,7 +3,7 @@
3
3
  # Firebase Configuration
4
4
  # =============================================================================
5
5
  # Get these values from your Firebase project settings
6
- # Run `dndev setup firebase` to auto-populate, or copy from Firebase Console
6
+ # Run `dndev coach` to see where to get these, then `dndev setup` to validate
7
7
  VITE_FIREBASE_API_KEY=
8
8
  VITE_FIREBASE_PROJECT_ID=
9
9
  # Copy from Firebase Console. Framework uses APP_URL hostname in production automatically.
@@ -3,7 +3,7 @@
3
3
  # Firebase Configuration
4
4
  # =============================================================================
5
5
  # Get these values from your Firebase project settings
6
- # Run `dndev setup firebase` to auto-populate, or copy from Firebase Console
6
+ # Run `dndev coach` to see where to get these, then `dndev setup` to validate
7
7
  EXPO_PUBLIC_FIREBASE_API_KEY=
8
8
  EXPO_PUBLIC_FIREBASE_PROJECT_ID=
9
9
  # Copy from Firebase Console. Framework uses APP_URL hostname in production automatically.
@@ -3,7 +3,7 @@
3
3
  # Firebase Configuration
4
4
  # =============================================================================
5
5
  # Get these values from your Firebase project settings
6
- # Run `dndev setup firebase` to auto-populate, or copy from Firebase Console
6
+ # Run `dndev coach` to see where to get these, then `dndev setup` to validate
7
7
  NEXT_PUBLIC_FIREBASE_API_KEY=
8
8
  NEXT_PUBLIC_FIREBASE_PROJECT_ID=
9
9
  # Copy from Firebase Console. Framework uses APP_URL hostname in production automatically.
@@ -6,7 +6,7 @@
6
6
  # - Project URL: the https://xxx.supabase.co URL
7
7
  # - Public key: "Publishable key" (sb_publishable_...) or legacy "anon key" (eyJ...)
8
8
  #
9
- # Then run: dndev setup supabase
9
+ # Then run: dndev setup
10
10
  # =============================================================================
11
11
  VITE_SUPABASE_URL=
12
12
  VITE_SUPABASE_PUBLIC_KEY=
@@ -6,7 +6,7 @@
6
6
  # - Project URL: the https://xxx.supabase.co URL
7
7
  # - Public key: "Publishable key" (sb_publishable_...) or legacy "anon key" (eyJ...)
8
8
  #
9
- # Then run: dndev setup supabase
9
+ # Then run: dndev setup
10
10
  # =============================================================================
11
11
  EXPO_PUBLIC_SUPABASE_URL=
12
12
  EXPO_PUBLIC_SUPABASE_PUBLIC_KEY=
@@ -6,7 +6,7 @@
6
6
  # - Project URL: the https://xxx.supabase.co URL
7
7
  # - Public key: "Publishable key" (sb_publishable_...) or legacy "anon key" (eyJ...)
8
8
  #
9
- # Then run: dndev setup supabase
9
+ # Then run: dndev setup
10
10
  # =============================================================================
11
11
  NEXT_PUBLIC_SUPABASE_URL=
12
12
  NEXT_PUBLIC_SUPABASE_PUBLIC_KEY=
@@ -3,7 +3,7 @@
3
3
  # Firebase Configuration (data layer for Vercel-hosted app)
4
4
  # =============================================================================
5
5
  # Get these values from your Firebase project settings
6
- # Run `dndev setup firebase` to auto-populate, or copy from Firebase Console
6
+ # Run `dndev coach` to see where to get these, then `dndev setup` to validate
7
7
  VITE_FIREBASE_API_KEY=
8
8
  VITE_FIREBASE_PROJECT_ID=
9
9
  # Copy from Firebase Console. Framework uses APP_URL hostname in production automatically.
@@ -3,7 +3,7 @@
3
3
  # Firebase Configuration (data layer for Vercel-hosted app)
4
4
  # =============================================================================
5
5
  # Get these values from your Firebase project settings
6
- # Run `dndev setup firebase` to auto-populate, or copy from Firebase Console
6
+ # Run `dndev coach` to see where to get these, then `dndev setup` to validate
7
7
  NEXT_PUBLIC_FIREBASE_API_KEY=
8
8
  NEXT_PUBLIC_FIREBASE_PROJECT_ID=
9
9
  # Copy from Firebase Console. Framework uses APP_URL hostname in production automatically.
@@ -41,6 +41,14 @@ description: Extract requirements and generate complete HLD through conversation
41
41
 
42
42
  ## Process
43
43
 
44
+ ### Step 0: Start Phase (MANDATORY — DO THIS FIRST)
45
+
46
+ **BEFORE asking any questions or doing any work**, call:
47
+ ```
48
+ start_phase(0)
49
+ ```
50
+ This activates Phase 0: BRAINSTORM and loads the blueprint, persona, context, and lessons learned from previous sessions. **Do NOT proceed without this call.**
51
+
44
52
  ### Step 1: Activate EXTRACTOR Agent
45
53
 
46
54
  **Deploy:** `/agents extractor` (BMAD EXTRACTOR persona)
@@ -87,7 +95,7 @@ EXTRACTOR generates `HLD.md` with:
87
95
 
88
96
  ---
89
97
 
90
- ## Validation Gate
98
+ ## Validation Gate & Phase Completion (MANDATORY)
91
99
 
92
100
  **Before proceeding to `/design`:**
93
101
  - [ ] HLD is complete (no empty sections or TBDs)
@@ -97,6 +105,12 @@ EXTRACTOR generates `HLD.md` with:
97
105
  - [ ] Native vs custom analysis complete
98
106
  - [ ] User has validated HLD
99
107
 
108
+ **When HLD is complete**, write the filled-out spec to `docs/HLD.md` (the template at `guides/wai-way/spec_template.md` stays untouched as reference). Then call:
109
+ ```
110
+ complete_phase({ files: ["docs/HLD.md"], summary: "HLD complete — N entities, N pages, N features" })
111
+ ```
112
+ Then wait for the user to call `approve_phase()` before moving to `/design`.
113
+
100
114
  **Quality Over Speed:** Take as long as needed. A complete HLD that takes 4 hours is better than an incomplete one that takes 20 minutes.
101
115
 
102
116
  ---
@@ -36,6 +36,14 @@ description: Two-agent workflow: Prompt Engineer → Coder (AFTER /design)
36
36
 
37
37
  ## Process
38
38
 
39
+ ### Step 0: Start Phase (MANDATORY — DO THIS FIRST)
40
+
41
+ **BEFORE writing any code**, call:
42
+ ```
43
+ start_phase(3)
44
+ ```
45
+ This activates Phase 3: COMPOSE and loads the blueprint, persona, context, and lessons. **Do NOT write code without this call.**
46
+
39
47
  ### Step 1: Activate FORGER Agent
40
48
 
41
49
  **Deploy:** `/agents builder` (BMAD FORGER persona)
@@ -54,10 +62,19 @@ description: Two-agent workflow: Prompt Engineer → Coder (AFTER /design)
54
62
  - Phase 6: Integration (wire everything together)
55
63
  4. Use framework defaults ONLY (no styling, no customization)
56
64
  5. Hardcode all strings (no i18n yet)
57
- 6. Validate each phase before proceeding
65
+ 6. Run `dndev tc` after every file change — type errors must be fixed immediately
66
+ 7. Validate each phase before proceeding
58
67
 
59
68
  **Output:** Working app (functional MVP, no styling)
60
69
 
70
+ ### Phase Completion (MANDATORY)
71
+
72
+ When all pages are built and `dndev tc` passes, call:
73
+ ```
74
+ complete_phase({ files: ["src/pages/...all page files..."], summary: "N pages composed, all type-checking" })
75
+ ```
76
+ Wait for user to call `approve_phase()` before moving to `/polish`.
77
+
61
78
  ---
62
79
 
63
80
  ## Alternative: Two-Agent Workflow
@@ -79,10 +96,15 @@ For complex builds, you can use:
79
96
  - **Builder (FORGER):** Implements exactly what's in LLD, uses framework defaults only
80
97
  - **Framework defaults ONLY:** No styling, no customization (deferred to /polish)
81
98
  - **Hardcode strings:** No i18n yet (deferred to /polish)
82
- - **MCP required:** Use lookup_symbol for ALL components
83
99
  - **Phase by phase:** Complete each phase before proceeding
84
100
  - **User:** Reviews output, proceeds to /polish when functional
85
101
 
102
+ ## STOP — lookup_symbol Before Every Component (Repeated Here On Purpose)
103
+
104
+ **STOP before writing ANY `@donotdev` import.** Call `lookup_symbol({ symbol: "Name" })` first. Do NOT guess props, hooks, or APIs. Do NOT proceed without verification. `complete_phase` will reject un-looked-up symbols.
105
+
106
+ **Import convention:** Always `@donotdev/<package>` — never sub-paths. No `@donotdev/ui/routing`, no `@donotdev/components/card`. The only exceptions are `@donotdev/core/server`, `@donotdev/core/vite`, `@donotdev/core/next`, `@donotdev/core/functions`.
107
+
86
108
  ## Mode Detection
87
109
 
88
110
  **CRITICAL:** Check working mode first.
@@ -36,6 +36,21 @@ description: Design workflow: Architect → Design Document (BEFORE /build)
36
36
 
37
37
  ## Process
38
38
 
39
+ ### Step 0: Start Phase (MANDATORY — DO THIS FIRST)
40
+
41
+ **BEFORE doing any design work**, call the appropriate phase:
42
+ ```
43
+ start_phase(1) # for SCAFFOLD (routes, page stubs)
44
+ start_phase(2) # for ENTITIES (data models, fields, access)
45
+ ```
46
+ This loads the blueprint, persona, context, and lessons. **Do NOT proceed without this call.**
47
+
48
+ When design work is complete, call:
49
+ ```
50
+ complete_phase({ files: ["...affected files..."], summary: "Description of what was designed" })
51
+ ```
52
+ Wait for user to call `approve_phase()` before moving on.
53
+
39
54
  ### Step 1: Architect Phase
40
55
 
41
56
  **Deploy:** `/agents architect` (WAI-WAY architect role)
@@ -102,6 +117,8 @@ UNRESOLVED:
102
117
  - **ALWAYS reference framework architecture** - stay aligned
103
118
  - **ALWAYS identify impacts** - what breaks if we change this?
104
119
  - **ALWAYS prepare for /build** - design should be actionable
120
+ - **ALWAYS use `lookup_symbol`** when referencing @donotdev components in your design — verify the API exists before putting it in the plan
121
+ - **Import convention:** Always `@donotdev/<package>` top-level, never sub-paths. The only exceptions are `@donotdev/core/server`, `@donotdev/core/vite`, `@donotdev/core/next`, `@donotdev/core/functions`
105
122
 
106
123
  ## Integration with WAI-WAY & BMAD
107
124
 
@@ -42,6 +42,14 @@ description: Generate tests, firestore rules, CI/CD, config, fix bugs, i18n (Pha
42
42
 
43
43
  ## Process
44
44
 
45
+ ### Step 0: Start Phase (MANDATORY — DO THIS FIRST)
46
+
47
+ **BEFORE any polish work**, call:
48
+ ```
49
+ start_phase(4)
50
+ ```
51
+ This activates Phase 4: CONFIGURE and loads the blueprint, persona, context, and lessons. **Do NOT proceed without this call.**
52
+
45
53
  ### Step 1: Activate Polisher Agent
46
54
 
47
55
  **Deploy:** `/agents polisher` (Phase 4 Polisher persona)
@@ -112,6 +120,7 @@ Extract strings to `src/locales/`, replace with `useTranslation()`.
112
120
  ## Ship Readiness
113
121
 
114
122
  App is ready to ship when:
123
+ - ✅ `dndev tc` passes
115
124
  - ✅ `bun test` passes
116
125
  - ✅ `firestore.rules` generated
117
126
  - ✅ `.github/workflows/ci.yml` created
@@ -121,6 +130,14 @@ App is ready to ship when:
121
130
  - ✅ Configuration complete
122
131
  - ✅ (Optional) i18n added
123
132
 
133
+ ## Phase Completion (MANDATORY)
134
+
135
+ When all ship readiness checks pass, call:
136
+ ```
137
+ complete_phase({ files: ["...all test/config files..."], summary: "Tests passing, config complete, ready to ship" })
138
+ ```
139
+ Wait for user to call `approve_phase()`.
140
+
124
141
  ---
125
142
 
126
143
  ## Next Step
@@ -2,52 +2,83 @@
2
2
 
3
3
  > **You are building a DoNotDev app.** Read this file completely before doing anything else.
4
4
 
5
+ ## Welcome
6
+
7
+ We'll build your app together in **5 structured phases**: brainstorm requirements, scaffold pages, define data, wire everything up, and polish for production. Each phase has a clear deliverable and validation gate. This isn't freeform coding — there's a proven methodology that produces solid, production-ready apps.
8
+
5
9
  ## What To Do Right Now
6
10
 
7
11
  1. **Verify MCP is working.** Call `list_features()`. If it fails, run `get_guide("AGENT_START_HERE")` for IDE-specific setup.
8
12
  2. Call `start_phase(0)` — begin **Phase 0: BRAINSTORM**
9
- 3. Follow each phase in order. Do not skip phases.
13
+ 3. Follow each phase in order. **Do not skip phases. Do not work outside a phase.**
14
+
15
+ ## The 5 Phases — MANDATORY
10
16
 
11
- ## The 5 Phases
17
+ **ALL work MUST happen inside an active phase.** Call `start_phase(N)` BEFORE writing any code or documents. Call `complete_phase({ files })` BEFORE moving to the next phase. Working outside a phase is a violation — no exceptions.
12
18
 
13
- | Phase | Name | What Happens |
14
- |-------|------|-------------|
15
- | 0 | **BRAINSTORM** | Ask questions, understand requirements, produce validated spec |
16
- | 1 | **SCAFFOLD** | Create all routes and page stubs from spec |
17
- | 2 | **ENTITIES** | Define all data models (fields, access, visibility) |
18
- | 3 | **COMPOSE** | Build pages with framework components (hardcode strings) |
19
- | 4 | **CONFIGURE** | Config, test, polish, i18n. Run `/grill` and `/techdebt` before shipping |
19
+ | Phase | Name | Slash Command | What Happens |
20
+ |-------|------|---------------|-------------|
21
+ | 0 | **BRAINSTORM** | `/brainstorm` | Ask questions, understand requirements, produce validated spec |
22
+ | 1 | **SCAFFOLD** | `/design` | Create all routes and page stubs from spec |
23
+ | 2 | **ENTITIES** | `/design` | Define all data models (fields, access, visibility) |
24
+ | 3 | **COMPOSE** | `/build` | Build pages with framework components (hardcode strings) |
25
+ | 4 | **CONFIGURE** | `/polish` | Config, test, polish, i18n. Run `/grill` and `/techdebt` before shipping |
20
26
 
21
- ## Workflow Per Phase
27
+ ## Workflow Per Phase — NON-NEGOTIABLE
22
28
 
23
29
  ```
24
30
  start_phase(N) → get blueprint + persona + context + lessons
25
31
 
26
32
  work → follow blueprint, lookup_symbol for every component
27
33
 
34
+ dndev tc → type-check MUST pass before completing phase
35
+
28
36
  complete_phase(files) → validate conventions + symbol usage → submit for review
29
37
 
30
- approve_phase() → phase done, move to next
38
+ approve_phase() → user approves, move to next phase
31
39
  ```
32
40
 
33
- ## Component Usage Non-Negotiable
41
+ **You MUST call `start_phase(N)` before ANY work in that phase.**
42
+ **You MUST call `complete_phase({ files })` when the phase is done.**
43
+ **You MUST run `dndev tc` after every code change and before every `complete_phase`.**
44
+ Skipping these steps means the work is untracked, unvalidated, and unacceptable.
45
+
46
+ ## STOP — lookup_symbol Before ANY @donotdev Code
34
47
 
35
- **Never guess component props.** Call `lookup_symbol({ symbol: "ComponentName" })` before writing ANY `@donotdev` component. Every call is tracked `complete_phase` flags components used without lookup.
48
+ **STOP. Before writing ANY `@donotdev` import, call `lookup_symbol({ symbol: "Name" })`.** Do NOT guess. Do NOT proceed without it. `complete_phase` rejects un-looked-up symbols.
36
49
 
37
- Without MCP: read `.d.ts` files directly from `node_modules/@donotdev/*/dist/`.
50
+ **Always import from `@donotdev/<package>` top-level** — never sub-paths. See `get_guide("SETUP_PAGES")` for conventions and patterns.
38
51
 
39
52
  ## CLI Commands
40
53
 
41
- `dndev` is an **installed CLI** (globally via `npm install -g @donotdev/cli`). Run it directly — **never** use `bunx dndev` or `npx dndev`.
54
+ `dndev` is installed globally via `bun install -g` (no sudo needed) and also as a local devDependency. Run it directly — or use `bun run dev` / `bunx dndev` as fallback.
42
55
 
43
56
  | Command | What it does |
44
57
  |---------|-------------|
45
- | `dndev create-app` | Interactive wizard — creates a new app in the monorepo |
46
58
  | `dndev dev` | Start the dev server (Vite/Next.js via Turbo) |
47
- | `dndev emu start` | Start Firebase emulators |
59
+ | `dndev dev:myapp` | Start dev server for a specific app |
60
+ | `dndev build` | Build for production |
61
+ | `dndev preview` | Preview production build |
62
+ | `dndev emu` | Start dev with Firebase emulators |
63
+ | `dndev tc` | **Type-check all packages — run after every code change** |
64
+ | `dndev tc:myapp` | Type-check a specific app |
65
+ | `dndev format` | Format code with Prettier |
48
66
  | `dndev deploy` | Deploy to production |
49
- | `dndev setup firebase` | Configure Firebase project + .env |
50
- | `dndev setup supabase` | Configure Supabase project + .env |
67
+ | `dndev staging` | Deploy to staging/UAT |
68
+ | `dndev coach` | Show what to configure before running setup |
69
+ | `dndev setup` | Validate .env, automate provider setup, health check |
70
+ | `dndev doctor` | Check project health (providers, .env) |
71
+ | `dndev bump` | Update @donotdev packages to latest |
72
+ | `dndev cacheout` | Clear build caches |
73
+ | `dndev sync-secrets` | Sync env vars to Firebase/Vercel/GitHub |
74
+ | `dndev make-admin` | Set a user as admin |
75
+ | `dndev agent` | Configure MCP server for AI agents |
76
+ | `dndev wai` | Output WAI-WAY activation prompt |
77
+ | `dndev create-app` | Interactive wizard — creates a new app in the monorepo |
78
+
79
+ Most commands support `:<app>` syntax: `dndev dev:web`, `dndev tc:admin`, `dndev build:public`.
80
+
81
+ Run `dndev --help` for the full command list.
51
82
 
52
83
  `dndev create-app` is **interactive** — it prompts for builder (Vite/Next.js/Expo), backend (Firebase/Supabase/none), and features. There is no `--preset` flag.
53
84
 
@@ -56,6 +87,7 @@ Without MCP: read `.d.ts` files directly from `node_modules/@donotdev/*/dist/`.
56
87
  - **ESM only** — never `require()`
57
88
  - **RTL safe** — use `start`/`end`, never `left`/`right`
58
89
  - **Import order** — React → vendors → @donotdev → relative
90
+ - **Import convention** — always `@donotdev/<pkg>` top-level, never sub-paths
59
91
  - **Framework-first** — if something's missing, say what and stop
60
92
  - **No .md file creation** — never create documentation/analysis/summary .md files unless explicitly asked. Session notes go in `.dndev/`
61
93
  - **Follow existing patterns** — the scaffolded files ARE your documentation
@@ -64,8 +96,9 @@ Without MCP: read `.d.ts` files directly from `node_modules/@donotdev/*/dist/`.
64
96
 
65
97
  Call `get_guide("AGENT_START_HERE")` for the full tool reference, IDE setup, env var guide, and fallback instructions.
66
98
 
67
- Key tools: `start_phase` · `complete_phase` · `approve_phase` · `lookup_symbol` · `get_guide` · `get_guideline` · `search_framework` · `list_features` · `record_lesson`
99
+ Key tools: `start_phase` · `complete_phase` · `approve_phase` · `lookup_symbol` · `get_guide` · `get_guideline` · `search_framework` · `list_features` · `record_lesson` · `run_typecheck`
68
100
 
69
101
  ## Security Gate
70
102
 
71
- Before production: run `dn soc2`. See `get_guide("SOC2")` for details.
103
+ Before production: run `dndev doctor` and `/grill`. See `get_guide("SOC2")` for details.
104
+ Golden path: `dndev coach` → fill .env → `dndev setup` → `dndev doctor`.