@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
@@ -36,6 +36,10 @@ core_principles:
36
36
  - Define entity states and transitions
37
37
  - Capture business rules and validations explicitly
38
38
  - Never assume - always ask
39
+ - **UX Strategist:** Identify the "North Star" action (max 2 clicks from home).
40
+ - **Kano Prioritization:** Tag features as Must-Have vs Delighter.
41
+ - **Duty to Advise:** Challenge layouts with high friction (> 2 clicks). If the user overrides your advice, log it in **Section 11** of the spec and move on.
42
+ - **Spec Drift:** Any changes to the validated spec must be logged in `spec_changes.md` for human review.
39
43
 
40
44
  phase_0_brainstorm:
41
45
  goal: DEEPLY understand the app and produce COMPLETE validated spec
@@ -47,7 +51,7 @@ phase_0_brainstorm:
47
51
  questions:
48
52
  - "Describe your app in one paragraph. What problem does it solve?"
49
53
  - "Who is the primary user? Who else uses it?"
50
- - "What's the ONE thing a user MUST be able to do?"
54
+ - "What's the ONE thing a user MUST be able to do? (The North Star)"
51
55
  - "What makes this different from similar apps?"
52
56
  done_when: "Can explain the app to someone unfamiliar in 2 minutes"
53
57
 
@@ -111,17 +115,26 @@ phase_0_brainstorm:
111
115
  - "What happens when [entity status] changes unexpectedly?"
112
116
  done_when: "Common failure scenarios have defined handling"
113
117
 
114
- output: Filled spec_template.md with ALL sections complete, validated by user
118
+ 7_ux_intent:
119
+ purpose: "Plan the layout hierarchy and navigation flow"
120
+ questions:
121
+ - "Where should the shortcut for the North Star action live? (Goal: < 2 clicks)"
122
+ - "Which features are 'Delighters' (Marketing/Heroes) vs 'Must-Haves' (CRUD)?"
123
+ done_when: "Navigation hierarchy planned; high-friction paths challenged"
124
+
125
+ output: Filled spec_template.md with ALL sections complete, including Section 11 for overrides.
115
126
 
116
127
  phase_1_scaffold:
117
- goal: Create all pages from validated spec
128
+ goal: Create an Interactive Prototype from the validated spec
118
129
  prerequisite: "spec_template.md is COMPLETE with no empty sections or TBDs"
119
130
  steps:
120
131
  - Verify spec is truly complete
121
132
  - Create *Page.tsx files for each route in spec
122
- - Set PageMeta (namespace, icon, auth) from spec
133
+ - Set PageMeta (namespace, icon). **Set auth: false** temporarily so the user can click through the prototype without login.
134
+ - **Interactive Stubs:** Each page must contain its 'Role' (from spec) and 'Next Step' navigation buttons to related pages.
135
+ - **Friction Check:** If North Star path > 2 clicks, propose a 'Global Shortcut' (Header/Sidebar).
123
136
  - Verify app runs with bun dev
124
- output: All routes exist as stub pages with correct PageMeta
137
+ output: All routes exist as **Interactive Prototype Stubs** with navigation buttons.
125
138
 
126
139
  validation_checklist:
127
140
  before_filling_spec:
@@ -129,14 +142,21 @@ validation_checklist:
129
142
  - [ ] Can trace every page back to a user journey
130
143
  - [ ] Can answer "who can do X to Y?" for any entity/action
131
144
  - [ ] Can answer "what happens when Z fails?" for common scenarios
145
+ - [ ] **North Star identified:** Defined a max 2-click path for the core action.
132
146
 
133
147
  before_moving_to_scaffold:
134
148
  - [ ] Every user journey has numbered steps
135
149
  - [ ] Every entity has fields, states, permissions
136
150
  - [ ] Every business rule is explicit
151
+ - [ ] **Overrides logged:** Any intentional UX friction documented in Section 11.
137
152
  - [ ] No empty fields in spec_template.md
138
153
  - [ ] User has validated the spec
139
154
 
155
+ after_scaffold_validation:
156
+ - [ ] App is running and clickable.
157
+ - [ ] User has clicked through the "North Star" path.
158
+ - [ ] Sitemap and click-depth are validated in the browser.
159
+
140
160
  read_files:
141
161
  - "guides/wai-way/blueprints/0_brainstorm.md"
142
162
  - "guides/wai-way/spec_template.md"
@@ -21,7 +21,7 @@ persona:
21
21
 
22
22
  golden_rule: |
23
23
  THE SPEC IS YOUR TEST PLAN.
24
- READ the spec (Phase 0 output) for entities, permissions, journeys.
24
+ READ the spec (Phase 0 output) and `spec_changes.md` for entities, permissions, journeys.
25
25
  READ each entity file for access rules and fields.
26
26
  GENERATE tests that verify the spec is implemented correctly.
27
27
 
@@ -31,6 +31,8 @@ core_principles:
31
31
  - Configuration: app.ts, legal.ts, .env
32
32
  - Mobile check: 375px width
33
33
  - i18n is OPTIONAL and comes LAST
34
+ - **Contract Check:** Consult **Section 11** of the spec for intentional UX overrides. If a layout deviation is documented there, it is a **PASS**.
35
+ - **Heuristic Audit:** Verify 3-click rule for North Star, system status visibility (loaders), and visual hierarchy.
34
36
 
35
37
  test_generation:
36
38
  entity_tests:
@@ -53,6 +55,14 @@ test_generation:
53
55
  - No unauthenticated writes
54
56
  output: "tests/access/access-rules.test.ts"
55
57
 
58
+ ux_audit_checklist:
59
+ - [ ] **Contract Compliance:** Check Section 11 of spec for approved deviations.
60
+ - [ ] **Spec Drift Review:** Ensure all changes in `spec_changes.md` are documented and explained.
61
+ - [ ] **North Star Check:** Is the primary action reachable in < 3 clicks? (Unless overridden)
62
+ - [ ] **Hierarchy:** Does every page have a clear visual anchor (one primary focus)?
63
+ - [ ] **System Status:** Verify framework default feedback (Toasts/Loaders) is visible. Ask if 'North Star' action needs a custom 'Delighter' redirect.
64
+ - [ ] **Mobile:** Touch targets > 44px, no horizontal scroll.
65
+
56
66
  firestore_rules:
57
67
  source: "Entity access definitions"
58
68
  mapping:
@@ -116,7 +126,8 @@ Steps:
116
126
  6. Update app.ts, legal.ts, .env
117
127
  7. Run bun test — all must pass
118
128
  8. Mobile check at 375px
119
- 9. (Optional) Add i18n
129
+ 9. **UX Audit** (3-click rule, Visual Anchor, Mobile targets, and Spec Drift review)
130
+ 10. (Optional) Add i18n
120
131
 
121
132
  Call get_guide("TESTING") for testing patterns.
122
133
  ```
@@ -37,8 +37,7 @@ User provides idea
37
37
 
38
38
  Agent calls list_features() → matches needs to existing framework capabilities
39
39
 
40
- Agent asks IDENTITY questions (who, what, why)
41
-
40
+ Agent asks IDENTITY questions (who, what, why, and **Aesthetic Essence**)
42
41
  Agent asks USER JOURNEY questions (what do users DO step by step?)
43
42
 
44
43
  Agent asks DATA questions (what entities, relationships, states?)
@@ -66,6 +65,7 @@ Start broad, then narrow down:
66
65
  - "Who is the primary user? Secondary users?"
67
66
  - "What's the one thing a user MUST be able to do?"
68
67
  - "What makes this different from [similar apps]?"
68
+ - **Aesthetic Essence:** "Which visual 'vibe' fits the brand? SaaS (Clean/Modern), Luxury (Gold/Serif), or Brutalist (Orange/High-Contrast)?"
69
69
 
70
70
  **Don't proceed until you can explain the app to someone else.**
71
71
 
@@ -11,18 +11,33 @@
11
11
 
12
12
  ## Step 1: Create App
13
13
 
14
+ **`dndev` is an installed CLI — run directly, never via `bunx` or `npx`.**
15
+
14
16
  ```bash
15
- dndev create-app my-app --preset [from spec]
16
- cd my-app && bun install
17
+ # Interactive wizard — prompts for builder, backend, features (no --preset flag)
18
+ dndev create-app
19
+
20
+ # Start emulators (if Firebase backend was selected)
17
21
  dndev emu start
18
- bun dev
22
+
23
+ # Start the dev server
24
+ dndev dev
19
25
  ```
20
26
 
21
- Preset comes from your completed spec (Phase 0).
27
+ ---
28
+
29
+ ## Step 2: Apply Aesthetic Essence
30
+
31
+ **READ:** `guides/dndev/essences_reference.css`
32
+
33
+ Apply the chosen essence (SaaS, Luxury, Brutalist) to your `src/themes.css`.
34
+ - If **SaaS**: Keep defaults.
35
+ - If **Luxury/Brutalist**: Copy the variables from the reference file into `src/themes.css`.
36
+ - If **Custom**: Adjust primary/secondary colors in `:root`.
22
37
 
23
38
  ---
24
39
 
25
- ## Step 2: Review Spec Pages
40
+ ## Step 3: Review Spec Pages
26
41
 
27
42
  From your spec, you have a list of pages. Now create them.
28
43
 
@@ -43,13 +58,16 @@ touch src/pages/ProductPage.tsx
43
58
 
44
59
  ---
45
60
 
46
- ## Step 4: Add PageMeta
61
+ ## Step 4: Create Interactive Prototype Stubs
47
62
 
48
63
  **READ:** `src/pages/HomePage.tsx` for PageMeta pattern.
49
64
 
65
+ For **each page**, create a functional stub that allows the user to validate the flow.
66
+
50
67
  ```tsx
51
68
  import type { PageMeta } from '@donotdev/core';
52
- import { PageContainer } from '@donotdev/ui';
69
+ import { PageContainer, Link } from '@donotdev/ui';
70
+ import { Section, Stack, Text, Card, Button } from '@donotdev/components';
53
71
  import { Info } from 'lucide-react';
54
72
 
55
73
  export const NAMESPACE = 'about';
@@ -57,22 +75,44 @@ export const NAMESPACE = 'about';
57
75
  export const meta: PageMeta = {
58
76
  namespace: NAMESPACE,
59
77
  icon: <Info />,
60
- // From spec:
61
- // auth: true, // Protected
62
- // auth: { required: true, role: 'admin' }, // Admin
63
- // hideFromMenu: true, // Form pages
78
+ // From spec: Set auth: false for the prototype phase so user can click through
79
+ auth: false,
64
80
  };
65
81
 
66
82
  export default function AboutPage() {
67
- return <PageContainer>About Page</PageContainer>;
83
+ return (
84
+ <PageContainer>
85
+ <Section title="About Page (Prototype Stub)">
86
+ <Stack gap="large">
87
+ <Text><strong>Role:</strong> [Describe the purpose of this page from the spec]</Text>
88
+
89
+ <Text level="h3">Navigate Flow:</Text>
90
+ <Stack direction="row" gap="medium">
91
+ <Link path="/dashboard">
92
+ <Button variant="outline">Go to Dashboard</Button>
93
+ </Link>
94
+ <Link path="/contact">
95
+ <Button variant="outline">Go to Contact</Button>
96
+ </Link>
97
+ </Stack>
98
+
99
+ {/* Placeholder for flow validation */}
100
+ <Card variant="outline" content={[`[Placeholder for ${NAMESPACE} core components]`]} />
101
+ </Stack>
102
+ </Section>
103
+ </PageContainer>
104
+ );
68
105
  }
69
106
  ```
70
107
 
108
+ **Goal:** The user should be able to `bun dev` and click through the entire app flow (the "North Star" path) to validate the architecture before you build any logic.
109
+
71
110
  ---
72
111
 
73
112
  ## Output
74
113
 
75
114
  - [ ] App runs with `bun dev`
76
- - [ ] All route files created (from spec)
77
- - [ ] PageMeta set with correct auth levels (from spec)
78
- - [ ] Navigation auto-generated
115
+ - [ ] All route files created as **Interactive Stubs**
116
+ - [ ] PageMeta set (auth: false for prototype validation)
117
+ - [ ] Navigation links included on each stub to related pages
118
+ - [ ] User has "clicked through" the flow and validated sitemap/friction
@@ -9,7 +9,18 @@
9
9
 
10
10
  ---
11
11
 
12
- ## Step 1: Read Page Patterns
12
+ ## Step 1: Apply UX Intent Rules
13
+
14
+ **Every page must follow the Designer Mandate:**
15
+ 1. **70/30 Hierarchy:** Only ONE `primary` variant button/card per view. Use `outline` or `muted` for everything else to direct the user's eye to the North Star.
16
+ 2. **Benefit-First Copy:** Do not use technical titles for Heros/Cards.
17
+ - ❌ "User Management" → ✅ "Empower Your Team"
18
+ - ❌ "Car List" → ✅ "Explore the Fleet"
19
+ 3. **Success Intent:** Ensure framework default toasts are working. Only add a custom celebratory view or Redirect for the **North Star** goal completion.
20
+
21
+ ---
22
+
23
+ ## Step 2: Read Page Patterns
13
24
 
14
25
  **READ:** `guides/wai-way/page_patterns.md` for all patterns:
15
26
  - Dashboard, List Page, Form Page
@@ -18,7 +29,7 @@
18
29
 
19
30
  ---
20
31
 
21
- ## Step 2: CRUD Pages
32
+ ## Step 3: CRUD Pages
22
33
 
23
34
  For each entity in spec:
24
35
 
@@ -60,7 +71,7 @@ export default function ProductPage() {
60
71
 
61
72
  ---
62
73
 
63
- ## Step 3: Dashboard Page
74
+ ## Step 4: Dashboard Page
64
75
 
65
76
  Copy Dashboard pattern from `page_patterns.md`:
66
77
  - Quick actions (cards with onClick)
@@ -69,7 +80,7 @@ Copy Dashboard pattern from `page_patterns.md`:
69
80
 
70
81
  ---
71
82
 
72
- ## Step 4: Landing Pages
83
+ ## Step 5: Landing Pages
73
84
 
74
85
  Copy Landing pattern from `page_patterns.md`:
75
86
  - HeroSection with CTAs
@@ -14,6 +14,7 @@
14
14
  | **Primary User** | _(Who uses this daily?)_ |
15
15
  | **Secondary Users** | _(Who else interacts?)_ |
16
16
  | **Core Value** | _(What problem does it solve?)_ |
17
+ | **Aesthetic Essence** | SaaS (Default) / Luxury / Brutalist / Custom |
17
18
 
18
19
  ---
19
20
 
@@ -275,13 +276,13 @@ _(Copy entity template for each entity)_
275
276
 
276
277
  ---
277
278
 
278
- ## 11. Open Questions
279
+ ## 11. Design Decisions & Overrides
280
+ > **CRITICAL:** These are intentional deviations from framework UX heuristics (e.g., 3-click rule, 70/30 hierarchy).
281
+ > **FOR AGENTS:** If a layout choice is documented here, do NOT challenge or flag it during the Build or Polish phases.
279
282
 
280
- > Anything unresolved? List here. **No coding until resolved.**
281
-
282
- - [ ]
283
- - [ ]
284
- - [ ]
283
+ | Target (Page/Feature) | Override Description | Rationale |
284
+ |-----------------------|----------------------|-----------|
285
+ | | | |
285
286
 
286
287
  ---
287
288
 
@@ -1,11 +0,0 @@
1
- /**
2
- * @fileoverview Lint Command Wrapper
3
- * @description Re-exports lint from tooling for CLI bundling.
4
- * Each command wrapper is bundled separately as a fully self-contained script.
5
- *
6
- * @version 0.0.4
7
- * @since 0.0.1
8
- * @author AMBROISE PARK Consulting
9
- */
10
- export { lint as main } from '@donotdev/tooling';
11
- //# sourceMappingURL=lint.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"lint.d.ts","sourceRoot":"","sources":["../../../src/bin/commands/lint.ts"],"names":[],"mappings":"AACA;;;;;;;;GAQG;AAEH,OAAO,EAAE,IAAI,IAAI,IAAI,EAAE,MAAM,mBAAmB,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"lint.js","sourceRoot":"","sources":["../../../src/bin/commands/lint.ts"],"names":[],"mappings":"AAAA,wCAAwC;AACxC;;;;;;;;GAQG;AAEH,OAAO,EAAE,IAAI,IAAI,IAAI,EAAE,MAAM,mBAAmB,CAAC"}
@@ -1,11 +0,0 @@
1
- /**
2
- * @fileoverview Staging Command Wrapper
3
- * @description Staging is a thin wrapper around deploy with --staging flag.
4
- * Re-exports deploy from tooling — the staging flag is set by the CLI entry point.
5
- *
6
- * @version 0.0.1
7
- * @since 0.0.1
8
- * @author AMBROISE PARK Consulting
9
- */
10
- export { deploy as main } from '@donotdev/tooling';
11
- //# sourceMappingURL=staging.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"staging.d.ts","sourceRoot":"","sources":["../../../src/bin/commands/staging.ts"],"names":[],"mappings":"AACA;;;;;;;;GAQG;AAEH,OAAO,EAAE,MAAM,IAAI,IAAI,EAAE,MAAM,mBAAmB,CAAC"}
@@ -1,12 +0,0 @@
1
- // packages/cli/src/bin/commands/staging.ts
2
- /**
3
- * @fileoverview Staging Command Wrapper
4
- * @description Staging is a thin wrapper around deploy with --staging flag.
5
- * Re-exports deploy from tooling — the staging flag is set by the CLI entry point.
6
- *
7
- * @version 0.0.1
8
- * @since 0.0.1
9
- * @author AMBROISE PARK Consulting
10
- */
11
- export { deploy as main } from '@donotdev/tooling';
12
- //# sourceMappingURL=staging.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"staging.js","sourceRoot":"","sources":["../../../src/bin/commands/staging.ts"],"names":[],"mappings":"AAAA,2CAA2C;AAC3C;;;;;;;;GAQG;AAEH,OAAO,EAAE,MAAM,IAAI,IAAI,EAAE,MAAM,mBAAmB,CAAC"}
@@ -1,28 +0,0 @@
1
- # Payload CMS Configuration
2
- PAYLOAD_SECRET=your-super-secret-key-here
3
- PAYLOAD_PUBLIC_SERVER_URL=http://localhost:3001
4
-
5
- # Database Configuration (MongoDB)
6
- MONGODB_URI=mongodb://localhost:27017/{{projectName}}
7
-
8
- # For production, use MongoDB Atlas or similar
9
- # MONGODB_URI=mongodb+srv://username:password@cluster.mongodb.net/{{projectName}}?retryWrites=true&w=majority
10
-
11
- # Optional: Redis for caching (recommended for production)
12
- # REDIS_URL=redis://localhost:6379
13
-
14
- # CORS Origins (comma-separated)
15
- CORS_ORIGINS=http://localhost:3000,https://{{projectName}}.com,https://admin.{{projectName}}.com
16
-
17
- # File Upload Configuration
18
- PAYLOAD_PUBLIC_MAX_FILE_SIZE=5000000
19
-
20
- # Admin Configuration
21
- PAYLOAD_PUBLIC_ADMIN_EMAIL=admin@{{projectName}}.com
22
- PAYLOAD_PUBLIC_ADMIN_PASSWORD=your-admin-password
23
-
24
- # Optional: Email Configuration (for notifications)
25
- # SMTP_HOST=smtp.gmail.com
26
- # SMTP_PORT=587
27
- # SMTP_USER=your-email@gmail.com
28
- # SMTP_PASS=your-app-password
@@ -1,233 +0,0 @@
1
- # {{projectName}} CMS (Payload)
2
-
3
- This is a **Payload CMS** application that provides a professional content management system for your business website.
4
-
5
- ## 🚀 What is Payload CMS?
6
-
7
- Payload is a **headless CMS** that gives you:
8
- - **Database** - Stores all your content (text, images, etc.)
9
- - **Admin Interface** - Professional web interface for editing content
10
- - **API** - Your website fetches content via REST API calls
11
- - **Media Library** - Upload and manage images/files
12
-
13
- ## 📁 Project Structure
14
-
15
- ```
16
- {{appName}}/
17
- ├── collections/ # Content types (Hero, Services, Products, etc.)
18
- │ ├── Users.ts # Admin users authentication
19
- │ ├── Media.ts # File uploads and media management
20
- │ ├── Hero.ts # Landing page hero section
21
- │ ├── Services.ts # Business services
22
- │ ├── Products.ts # Product offerings
23
- │ ├── Testimonials.ts # Client feedback
24
- │ └── Company.ts # Company information
25
- ├── src/
26
- │ └── server.ts # Express server with Payload
27
- ├── payload.config.ts # Payload configuration
28
- ├── package.json # Dependencies and scripts
29
- └── .env # Environment variables
30
- ```
31
-
32
- ## 🛠️ Content Types
33
-
34
- ### 1. **Hero Section** (`/admin/collections/hero`)
35
- - **Title** - Main headline
36
- - **Subtitle** - Supporting text
37
- - **CTA Button** - Call-to-action text and link
38
- - **Background Image** - Hero background
39
-
40
- ### 2. **Services** (`/admin/collections/services`)
41
- - **Name** - Service name
42
- - **Description** - Detailed description
43
- - **Category** - Consulting, Training, Development, Support
44
- - **Features** - List of service features
45
- - **Pricing** - Pricing information
46
- - **Icon** - Service icon
47
-
48
- ### 3. **Products** (`/admin/collections/products`)
49
- - **Name** - Product name
50
- - **Description** - Product description
51
- - **Category** - Framework, Tool, Platform, Service
52
- - **Features** - Key product features
53
- - **Demo Link** - Live demo URL
54
- - **Documentation** - Documentation link
55
- - **GitHub** - Repository link
56
-
57
- ### 4. **Testimonials** (`/admin/collections/testimonials`)
58
- - **Client Name** - Client's name
59
- - **Company** - Company name
60
- - **Quote** - Testimonial text
61
- - **Rating** - 1-5 star rating
62
- - **Avatar** - Client photo
63
- - **Project** - Related project
64
-
65
- ### 5. **Company Info** (`/admin/collections/company`)
66
- - **Name** - Company name
67
- - **Contact** - Email, phone, address
68
- - **Social Media** - LinkedIn, Twitter, GitHub, etc.
69
- - **Logo** - Company logo
70
- - **Favicon** - Website favicon
71
-
72
- ## 🚀 Quick Start
73
-
74
- ### 1. Install Dependencies
75
- ```bash
76
- bun install
77
- ```
78
-
79
- ### 2. Set Up Environment
80
- ```bash
81
- cp .env.example .env
82
- # Edit .env with your configuration
83
- ```
84
-
85
- ### 3. Set Up Database
86
- **Option A: Local MongoDB**
87
- ```bash
88
- # Install MongoDB locally or use Docker
89
- docker run -d -p 27017:27017 --name mongodb mongo:latest
90
- ```
91
-
92
- **Option B: MongoDB Atlas (Recommended)**
93
- - Create account at [MongoDB Atlas](https://www.mongodb.com/atlas)
94
- - Create cluster and get connection string
95
- - Update `MONGODB_URI` in `.env`
96
-
97
- ### 4. Start Development Server
98
- ```bash
99
- bun run dev
100
- ```
101
-
102
- ### 5. Access Admin Panel
103
- - **URL**: http://localhost:3001/admin
104
- - **Email**: admin@{{projectName}}.com
105
- - **Password**: your-admin-password (from .env)
106
-
107
- ## 🔗 API Endpoints
108
-
109
- ### Content API
110
- - **Hero**: `GET /api/hero`
111
- - **Services**: `GET /api/services`
112
- - **Products**: `GET /api/products`
113
- - **Testimonials**: `GET /api/testimonials`
114
- - **Company**: `GET /api/company`
115
-
116
- ### Example API Call
117
- ```javascript
118
- // Fetch hero content
119
- const response = await fetch('http://localhost:3001/api/hero');
120
- const heroData = await response.json();
121
- console.log(heroData.docs[0]); // Latest hero content
122
- ```
123
-
124
- ## 🎯 How It Works
125
-
126
- ### 1. **Content Management**
127
- - Login to admin panel at `/admin`
128
- - Edit content using the professional interface
129
- - Save changes instantly
130
-
131
- ### 2. **Content Delivery**
132
- - Your website makes API calls to fetch content
133
- - Content is returned as JSON
134
- - Website displays the content dynamically
135
-
136
- ### 3. **Real-time Updates**
137
- - Changes in admin appear immediately on website
138
- - No code deployment needed
139
- - Non-developers can update content
140
-
141
- ## 🔧 Configuration
142
-
143
- ### Environment Variables
144
- ```bash
145
- # Required
146
- PAYLOAD_SECRET=your-secret-key
147
- MONGODB_URI=mongodb://localhost:27017/{{projectName}}
148
-
149
- # Optional
150
- PAYLOAD_PUBLIC_SERVER_URL=http://localhost:3001
151
- CORS_ORIGINS=http://localhost:3000,https://{{projectName}}.com
152
- ```
153
-
154
- ### Customization
155
- - **Add new content types**: Create new files in `collections/`
156
- - **Modify fields**: Edit field definitions in collection files
157
- - **Change admin UI**: Customize admin interface in `payload.config.ts`
158
-
159
- ## 🚀 Deployment
160
-
161
- ### Vercel Deployment
162
- 1. **Connect to Vercel**
163
- 2. **Set environment variables** in Vercel dashboard
164
- 3. **Deploy** - Vercel will build and deploy automatically
165
-
166
- ### Environment Variables for Production
167
- ```bash
168
- PAYLOAD_SECRET=your-production-secret
169
- MONGODB_URI=mongodb+srv://username:password@cluster.mongodb.net/{{projectName}}
170
- PAYLOAD_PUBLIC_SERVER_URL=https://admin.{{projectName}}.com
171
- CORS_ORIGINS=https://{{projectName}}.com,https://admin.{{projectName}}.com
172
- ```
173
-
174
- ## 📊 Admin Features
175
-
176
- - **User Management** - Create admin users
177
- - **Media Library** - Upload and organize images
178
- - **Content Versioning** - Track content changes
179
- - **Draft/Published** - Preview before publishing
180
- - **Rich Text Editor** - Format content easily
181
- - **Image Optimization** - Automatic image resizing
182
- - **File Upload** - Drag & drop file uploads
183
-
184
- ## 🔒 Security
185
-
186
- - **Authentication** - Secure admin login
187
- - **CORS Protection** - Configured for your domains
188
- - **File Upload Limits** - 5MB file size limit
189
- - **Input Validation** - All inputs validated
190
- - **HTTPS Required** - Secure in production
191
-
192
- ## 🎨 Integration with Website
193
-
194
- Your website (Next.js/Vite) connects to this CMS:
195
-
196
- ```typescript
197
- // Example: Fetch hero content
198
- const { data: hero } = await fetch('/api/hero').then(r => r.json());
199
-
200
- // Example: Fetch services
201
- const { data: services } = await fetch('/api/services?where[isActive][equals]=true').then(r => r.json());
202
-
203
- // Example: Fetch testimonials
204
- const { data: testimonials } = await fetch('/api/testimonials?sort=order').then(r => r.json());
205
- ```
206
-
207
- ## 🆘 Troubleshooting
208
-
209
- ### Common Issues
210
-
211
- **"MongoDB connection failed"**
212
- - Check `MONGODB_URI` in `.env`
213
- - Ensure MongoDB is running
214
- - Verify network connectivity
215
-
216
- **"Admin panel not loading"**
217
- - Check `PAYLOAD_SECRET` is set
218
- - Verify `PAYLOAD_PUBLIC_SERVER_URL` is correct
219
- - Check browser console for errors
220
-
221
- **"API calls failing"**
222
- - Verify CORS configuration
223
- - Check server is running on correct port
224
- - Ensure API endpoints are accessible
225
-
226
- ### Getting Help
227
- - Check [Payload Documentation](https://payloadcms.com/docs)
228
- - Review server logs for error messages
229
- - Verify environment variables are set correctly
230
-
231
- ---
232
-
233
- **That's it!** You now have a professional CMS that your website can use to fetch dynamic content. No more hardcoded text - everything is manageable through the admin interface.