@donotdev/cli 0.0.12 → 0.0.14

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 (85) hide show
  1. package/dependencies-matrix.json +32 -118
  2. package/dist/bin/commands/agent-setup.d.ts +6 -0
  3. package/dist/bin/commands/agent-setup.d.ts.map +1 -0
  4. package/dist/bin/commands/agent-setup.js +623 -0
  5. package/dist/bin/commands/agent-setup.js.map +1 -0
  6. package/dist/bin/commands/build.js +13 -12
  7. package/dist/bin/commands/bump.js +103 -35
  8. package/dist/bin/commands/cacheout.js +13 -12
  9. package/dist/bin/commands/create-app.js +53 -151
  10. package/dist/bin/commands/create-project.js +109 -167
  11. package/dist/bin/commands/deploy.js +7620 -30
  12. package/dist/bin/commands/dev.js +13 -12
  13. package/dist/bin/commands/emu.js +13 -12
  14. package/dist/bin/commands/firebase-setup.d.ts +6 -0
  15. package/dist/bin/commands/firebase-setup.d.ts.map +1 -0
  16. package/dist/bin/commands/firebase-setup.js +7 -0
  17. package/dist/bin/commands/firebase-setup.js.map +1 -0
  18. package/dist/bin/commands/format.js +13 -12
  19. package/dist/bin/commands/lint.js +13 -12
  20. package/dist/bin/commands/preview.js +13 -12
  21. package/dist/bin/commands/staging.d.ts +11 -0
  22. package/dist/bin/commands/staging.d.ts.map +1 -0
  23. package/dist/bin/commands/staging.js +12 -0
  24. package/dist/bin/commands/staging.js.map +1 -0
  25. package/dist/bin/commands/sync-secrets.js +13 -12
  26. package/dist/bin/commands/wai.js +7397 -11
  27. package/dist/bin/dndev.js +28 -3
  28. package/dist/bin/donotdev.js +28 -3
  29. package/dist/index.d.ts +1 -1
  30. package/dist/index.d.ts.map +1 -1
  31. package/dist/index.js +7760 -109
  32. package/dist/index.js.map +1 -1
  33. package/package.json +1 -1
  34. package/templates/app-demo/src/pages/DetailPage.tsx.example +1 -1
  35. package/templates/app-demo/src/pages/FullPage.tsx.example +3 -3
  36. package/templates/app-demo/src/pages/HomePage.tsx.example +1 -1
  37. package/templates/app-demo/src/pages/components/ComponentRenderer.tsx.example +5 -5
  38. package/templates/app-demo/src/pages/components/DemoLayout.tsx.example +3 -3
  39. package/templates/app-next/.env.example +2 -0
  40. package/templates/app-next/src/pages/HomePage.tsx.example +1 -1
  41. package/templates/app-vite/.env.example +2 -0
  42. package/templates/app-vite/src/pages/HomePage.tsx.example +163 -73
  43. package/templates/functions-firebase/build.mjs.example +26 -10
  44. package/templates/functions-firebase/functions-firebase/build.mjs.example +26 -10
  45. package/templates/functions-firebase/functions.config.js.example +11 -15
  46. package/templates/github-consumer/.github/workflows/ci.yml.example +36 -0
  47. package/templates/root-consumer/.claude/agents/architect.md.example +2 -2
  48. package/templates/root-consumer/.claude/agents/builder.md.example +2 -2
  49. package/templates/root-consumer/.claude/agents/coder.md.example +2 -2
  50. package/templates/root-consumer/.claude/agents/extractor.md.example +2 -3
  51. package/templates/root-consumer/.claude/agents/polisher.md.example +67 -291
  52. package/templates/root-consumer/.claude/agents/prompt-engineer.md.example +4 -4
  53. package/templates/root-consumer/.claude/commands/brainstorm.md.example +1 -1
  54. package/templates/root-consumer/.claude/commands/build.md.example +3 -3
  55. package/templates/root-consumer/.claude/commands/design.md.example +1 -1
  56. package/templates/root-consumer/.claude/commands/polish.md.example +66 -82
  57. package/templates/root-consumer/.dndev/args.json.example +6 -0
  58. package/templates/root-consumer/.env.example +13 -13
  59. package/templates/root-consumer/.gemini/settings.json.example +9 -0
  60. package/templates/root-consumer/.gitignore.example +3 -1
  61. package/templates/root-consumer/AI.md.example +150 -0
  62. package/templates/root-consumer/CLAUDE.md.example +19 -104
  63. package/templates/root-consumer/README.md.example +81 -255
  64. package/templates/root-consumer/entities/Contact.ts.example +126 -0
  65. package/templates/root-consumer/entities/index.ts.example +6 -3
  66. package/templates/root-consumer/guides/dndev/AGENT_START_HERE.md.example +59 -326
  67. package/templates/root-consumer/guides/dndev/COMPONENTS_ADV.md.example +2 -1
  68. package/templates/root-consumer/guides/dndev/ENV_SETUP.md.example +144 -9
  69. package/templates/root-consumer/guides/dndev/GOTCHAS.md.example +186 -0
  70. package/templates/root-consumer/guides/dndev/INDEX.md.example +10 -0
  71. package/templates/root-consumer/guides/dndev/SETUP_APP_CONFIG.md.example +13 -16
  72. package/templates/root-consumer/guides/dndev/SETUP_BLOG.md.example +263 -0
  73. package/templates/root-consumer/guides/dndev/SETUP_CRUD.md.example +1 -1
  74. package/templates/root-consumer/guides/dndev/SETUP_FIREBASE.md.example +168 -0
  75. package/templates/root-consumer/guides/dndev/SETUP_FUNCTIONS.md.example +17 -19
  76. package/templates/root-consumer/guides/dndev/SETUP_TESTING.md.example +184 -0
  77. package/templates/root-consumer/guides/wai-way/WAI_WAY_CLI.md.example +134 -69
  78. package/templates/root-consumer/guides/wai-way/agents/polisher.md.example +66 -44
  79. package/templates/root-consumer/guides/wai-way/blueprints/0_brainstorm.md.example +18 -1
  80. package/templates/root-consumer/guides/wai-way/blueprints/1_scaffold.md.example +1 -0
  81. package/templates/root-consumer/guides/wai-way/blueprints/2_entities.md.example +2 -1
  82. package/templates/root-consumer/guides/wai-way/blueprints/3_compose.md.example +2 -1
  83. package/templates/root-consumer/guides/wai-way/blueprints/4_configure.md.example +180 -108
  84. package/templates/root-consumer/guides/wai-way/context_map.json.example +8 -7
  85. package/templates/root-consumer/guides/wai-way/page_patterns.md.example +4 -4
@@ -2,7 +2,16 @@
2
2
 
3
3
  **Goal:** Deeply understand the app and document ALL requirements before any code.
4
4
 
5
- **Done when:** spec_template.md is COMPLETE with user flows, business rules, and entity relationships - AND user has validated it.
5
+ **MCP:** `start_phase(0)` to begin. `complete_phase()` when done.
6
+ **Done when:** `spec_template.md` is COMPLETE and user has validated it.
7
+
8
+ ---
9
+
10
+ ## First: Call list_features()
11
+
12
+ **Before probing the user or designing anything**, call `list_features()`.
13
+
14
+ It returns a one-line summary from each framework package README (core, ui, templates, auth, billing, etc.). Use it to avoid designing custom solutions when the framework already provides them (e.g. blog, CRUD, billing pages). If you skip this, you may propose work that already exists in `@donotdev/templates` or other packages.
6
15
 
7
16
  ---
8
17
 
@@ -26,6 +35,8 @@ Before moving to Phase 1, you MUST have:
26
35
  ```
27
36
  User provides idea
28
37
 
38
+ Agent calls list_features() → matches needs to existing framework capabilities
39
+
29
40
  Agent asks IDENTITY questions (who, what, why)
30
41
 
31
42
  Agent asks USER JOURNEY questions (what do users DO step by step?)
@@ -277,5 +288,11 @@ Completed spec_template.md with:
277
288
  - All permissions defined
278
289
  - User validation
279
290
 
291
+ **After spec validation, generate the implementation tracker:**
292
+ ```
293
+ init_implementation({ from_spec: true })
294
+ ```
295
+ This creates `.dndev/implementation.md` with checklist items for all phases (pages, entities, composition, config). Agents will read and update this file across sessions.
296
+
280
297
  **Spec validated AND complete? Move to Phase 1: SCAFFOLD.**
281
298
  **Anything unclear? Keep asking questions.**
@@ -2,6 +2,7 @@
2
2
 
3
3
  **Goal:** Running app with all routes defined.
4
4
 
5
+ **MCP:** `start_phase(1)` to begin. `complete_phase()` when done.
5
6
  **Done when:** All routes listed, all *Page.tsx files created with correct PageMeta.
6
7
 
7
8
  **Prerequisite:** Phase 0 (spec) must be complete.
@@ -1,7 +1,8 @@
1
1
  # BLUEPRINT: 2_ENTITIES
2
2
 
3
- **Goal:** Define all data models from spec.
3
+ **Goal:** Define all data models from spec (Single Source of Truth).
4
4
 
5
+ **MCP:** `start_phase(2)` to begin. Use `lookup_symbol('defineEntity')` for types. `complete_phase()` when done.
5
6
  **Done when:** All entities defined with fields, access rules, visibility. Exported from index.ts.
6
7
 
7
8
  **Prerequisite:** Phase 0 (spec) and Phase 1 (scaffold) complete.
@@ -2,6 +2,7 @@
2
2
 
3
3
  **Goal:** Build pages with components. HARDCODE ALL STRINGS.
4
4
 
5
+ **MCP:** `start_phase(3)` to begin. Use `lookup_symbol(component_name)` for types. `complete_phase()` when done.
5
6
  **Done when:** All pages functional with content. CRUD pages use EntityList/EntityFormRenderer. All strings hardcoded.
6
7
 
7
8
  **Prerequisite:** Phase 0-2 complete. Spec validated, entities defined.
@@ -111,7 +112,7 @@ Copy Landing pattern from `page_patterns.md`:
111
112
  />
112
113
  ```
113
114
 
114
- Validate UX in one language. Add i18n in Phase 5.
115
+ Validate UX in one language. Add i18n in Phase 4 (CONFIGURE) after validation.
115
116
 
116
117
  ---
117
118
 
@@ -1,165 +1,237 @@
1
- # BLUEPRINT: 4_CONFIGURE + POLISH
1
+ # BLUEPRINT: 4_CONFIGURE + TEST
2
2
 
3
- **Goal:** Finalize configuration, test, and optionally add i18n.
3
+ **Goal:** Generate test files, configure the app, verify everything works.
4
4
 
5
- **Done when:** Config complete, tests pass, mobile responsive.
5
+ **MCP:** `start_phase(4)` to begin. `complete_phase({ files: [...], lesson: "..." })` when done.
6
+ **Done when:** Tests pass, config complete, firestore rules generated.
6
7
 
7
- **Prerequisite:** Phase 0-3 complete. App is functional.
8
+ **Prerequisite:** Phase 0-3 complete. App is functional with hardcoded strings.
8
9
 
9
10
  ---
10
11
 
11
- ## Step 1: Update Configuration
12
+ ## Step 1: Generate Test Setup
12
13
 
13
- ### app.ts
14
+ Create these files:
14
15
 
15
- **READ:** `src/config/app.ts`
16
+ ### vitest.config.ts
17
+ ```ts
18
+ import { defineConfig } from 'vitest/config';
19
+ import react from '@vitejs/plugin-react';
16
20
 
17
- - [ ] `APP_NAME` - Your app name (from spec)
18
- - [ ] `APP_SHORT_NAME` - Abbreviation
19
- - [ ] `preset` - From spec (landing/admin/moolti/docs/blog/game/plain)
20
- - [ ] Footer legal links
21
+ export default defineConfig({
22
+ plugins: [react()],
23
+ test: {
24
+ environment: 'jsdom',
25
+ setupFiles: ['./tests/setup.ts'],
26
+ globals: true,
27
+ include: ['tests/**/*.test.ts', 'tests/**/*.test.tsx'],
28
+ },
29
+ });
30
+ ```
21
31
 
22
- ### legal.ts
32
+ ### tests/setup.ts
33
+ ```ts
34
+ import '@testing-library/jest-dom';
35
+ ```
23
36
 
24
- **READ:** `src/config/legal.ts`
37
+ **READ** `get_guide("TESTING")` for full testing patterns.
25
38
 
26
- - [ ] Company name and registration
27
- - [ ] Contact emails
28
- - [ ] Hosting provider info
29
- - [ ] Jurisdiction
39
+ ---
30
40
 
31
- ### .env
41
+ ## Step 2: Generate Entity Tests
42
+
43
+ **READ:** `entities/index.ts` — get the list of all entities.
44
+ **READ:** `guides/wai-way/spec_template.md` — get the permissions matrix and business rules.
32
45
 
33
- Required:
34
- - [ ] `VITE_FIREBASE_*` - Firebase config
35
- - [ ] `VITE_DONOTDEV_LICENSE_KEY` - License key
46
+ For **each entity** in `entities/`, create `tests/entities/[EntityName].test.ts`:
36
47
 
37
- Optional (from spec features):
38
- - [ ] `VITE_STRIPE_*` - If billing enabled
39
- - [ ] `VITE_SENTRY_DSN` - If error tracking
48
+ - [ ] All required fields are defined
49
+ - [ ] Field types match spec
50
+ - [ ] Access rules match spec (create/read/update/delete per role)
51
+ - [ ] State transitions are valid (if entity has states)
52
+ - [ ] Default values set correctly
40
53
 
41
54
  ---
42
55
 
43
- ## Step 2: Firebase Setup
56
+ ## Step 3: Generate Page Tests
57
+
58
+ **READ:** Every `src/pages/*Page.tsx` file.
44
59
 
45
- 1. Go to [Firebase Console](https://console.firebase.google.com)
46
- 2. Enable auth providers (from spec):
47
- - [ ] Email/Password
48
- - [ ] Google
49
- - [ ] GitHub
50
- - [ ] etc.
51
- 3. Create Firestore Database
52
- 4. Deploy rules: `firebase deploy --only firestore:rules`
60
+ For **each page**, create `tests/pages/[PageName].test.tsx`:
61
+
62
+ - [ ] Page renders without error
63
+ - [ ] PageMeta is defined (title, auth, admin)
64
+ - [ ] Route protection matches spec (public pages have `auth: false`, protected have `auth: true`, admin have `admin: true`)
53
65
 
54
66
  ---
55
67
 
56
- ## Step 3: Test with Emulators
68
+ ## Step 4: Generate Access Control Tests
57
69
 
58
- ```bash
59
- dndev emu start
60
- bun dev
61
- ```
70
+ **READ:** The spec's permissions section.
71
+
72
+ Create `tests/access/access-rules.test.ts`:
62
73
 
63
- ### Auth Tests
64
- - [ ] Can create user account
65
- - [ ] Can login/logout
66
- - [ ] Public pages work without auth
67
- - [ ] Protected pages redirect to login
68
- - [ ] Admin pages require admin role
69
-
70
- ### CRUD Tests
71
- - [ ] Can create entities
72
- - [ ] Can read/list entities
73
- - [ ] Can update entities
74
- - [ ] Can delete entities
75
- - [ ] Data persists
76
-
77
- ### Access Control Tests
78
- - [ ] Guest can only see guest-visible fields
79
- - [ ] User can only edit own data (if owner access)
80
- - [ ] Admin can edit all data
74
+ - [ ] Admin-only entities require admin access
75
+ - [ ] User-owned entities have owner access on update/delete
76
+ - [ ] Public entities allow guest read
77
+ - [ ] No entity allows unauthenticated write
81
78
 
82
79
  ---
83
80
 
84
- ## Step 4: Theme Customization
81
+ ## Step 5: Generate Firestore Rules
82
+
83
+ **READ:** All entities' access definitions.
85
84
 
86
- **READ:** `src/themes.css`
85
+ Create `firestore.rules` from entity access rules:
87
86
 
88
- Key variables:
89
- - `--primary` - Brand color
90
- - `--accent` - Accent color
91
- - `--background` - Page background
92
- - `--foreground` - Text color
93
- - `--radius` - Border radius
87
+ - Each entity's collection maps to a Firestore match rule
88
+ - `create` access `allow create` condition
89
+ - `read` access `allow read` condition
90
+ - `update` access `allow update` condition
91
+ - `delete` access `allow delete` condition
92
+ - `owner` `resource.data.userId == request.auth.uid`
93
+ - `admin` → `request.auth.token.admin == true`
94
+ - `authenticated` → `request.auth != null`
94
95
 
95
96
  ---
96
97
 
97
- ## Step 5: Mobile Check
98
+ ## Step 6: Update Configuration
99
+
100
+ ### app.ts
101
+ **READ:** `src/config/app.ts`
102
+ - [ ] `APP_NAME` from spec
103
+ - [ ] `APP_SHORT_NAME` abbreviation
104
+ - [ ] `preset` from spec (landing/admin/moolti/docs/blog/game/plain)
105
+ - [ ] Footer legal links
98
106
 
99
- 1. Open DevTools (F12)
100
- 2. Toggle device toolbar (Ctrl+Shift+M)
101
- 3. Test at 375px width
107
+ ### legal.ts
108
+ **READ:** `src/config/legal.ts`
109
+ - [ ] Company name and registration
110
+ - [ ] Contact emails
111
+ - [ ] Hosting provider
112
+ - [ ] Jurisdiction
102
113
 
103
- Check:
104
- - [ ] Navigation works (mobile menu)
105
- - [ ] Forms are usable
106
- - [ ] Text is readable
107
- - [ ] Buttons are tappable (44px min)
108
- - [ ] No horizontal scroll
114
+ ### .env
115
+ - [ ] `VITE_FIREBASE_*` Firebase config values
116
+ - [ ] `VITE_DONOTDEV_LICENSE_KEY` License key
117
+ - [ ] Optional: `VITE_STRIPE_*`, `VITE_SENTRY_DSN`
109
118
 
110
119
  ---
111
120
 
112
- ## Step 6: i18n (Optional)
121
+ ## Step 7: Generate CI/CD
122
+
123
+ Create `.github/workflows/ci.yml`:
124
+
125
+ ```yaml
126
+ name: CI/CD
127
+
128
+ on:
129
+ push:
130
+ branches: [main]
131
+ pull_request:
132
+ branches: [main]
133
+
134
+ env:
135
+ NODE_VERSION: '20'
136
+
137
+ jobs:
138
+ quality:
139
+ runs-on: ubuntu-latest
140
+ steps:
141
+ - uses: actions/checkout@v4
142
+ - uses: oven-sh/setup-bun@v2
143
+ - run: bun install --frozen-lockfile
144
+ - run: bun run type-check
145
+ - run: bun test
146
+
147
+ deploy:
148
+ needs: quality
149
+ if: github.ref == 'refs/heads/main' && github.event_name == 'push'
150
+ runs-on: ubuntu-latest
151
+ steps:
152
+ - uses: actions/checkout@v4
153
+ - uses: oven-sh/setup-bun@v2
154
+ - run: bun install --frozen-lockfile
155
+ - run: bun run build
156
+ - uses: FirebaseExtended/action-hosting-deploy@v0
157
+ with:
158
+ repoToken: ${{ secrets.GITHUB_TOKEN }}
159
+ firebaseServiceAccount: ${{ secrets.FIREBASE_SERVICE_ACCOUNT }}
160
+ channelId: live
161
+ ```
113
162
 
114
- **Only after Steps 1-5 are validated!**
163
+ Adapt based on spec:
164
+ - If **functions** enabled → add `firebase deploy --only functions` step
165
+ - If **staging** environment → add staging job with `dndev staging`
166
+ - If **no Firebase** (Vercel) → replace deploy job with Vercel action
167
+
168
+ ---
115
169
 
116
- ### Extract Strings
170
+ ## Step 8: Run Tests
117
171
 
118
- Create `src/locales/[namespace]_en.json`:
119
- ```json
120
- {
121
- "hero": {
122
- "title": "Your App Name",
123
- "subtitle": "Your tagline"
124
- }
125
- }
172
+ ```bash
173
+ bun test
126
174
  ```
127
175
 
128
- ### Replace Hardcoded Strings
176
+ Fix any failures. All tests must pass.
129
177
 
130
- ```tsx
131
- const { t } = useTranslation('home');
178
+ ---
132
179
 
133
- <HeroSection
134
- title={t('hero.title')}
135
- subtitle={t('hero.subtitle')}
136
- />
137
- ```
180
+ ## Step 9: Mobile Check
181
+
182
+ 1. Open DevTools (F12) → device toolbar (Ctrl+Shift+M) → 375px
183
+ 2. Check:
184
+ - [ ] Navigation works (mobile menu)
185
+ - [ ] Forms are usable
186
+ - [ ] Text is readable
187
+ - [ ] Buttons tappable (44px min)
188
+ - [ ] No horizontal scroll
189
+
190
+ ---
191
+
192
+ ## Step 10: i18n (Optional)
138
193
 
139
- ### Add Languages
194
+ **Only after Steps 1-9 pass!**
140
195
 
141
- Copy `home_en.json` `home_fr.json`, translate values.
196
+ Extract hardcoded strings to `src/locales/[namespace]_en.json`, replace with `useTranslation()`.
142
197
 
143
198
  ---
144
199
 
145
200
  ## Final Checklist
146
201
 
147
- - [ ] app.ts configured
148
- - [ ] legal.ts configured
149
- - [ ] .env configured
150
- - [ ] Firebase connected
151
- - [ ] Auth working
152
- - [ ] CRUD working
153
- - [ ] Access control working
154
- - [ ] Mobile responsive
202
+ - [ ] `vitest.config.ts` created
203
+ - [ ] Entity tests generated (one per entity)
204
+ - [ ] Page tests generated (one per page)
205
+ - [ ] Access control tests generated
206
+ - [ ] `firestore.rules` generated from entities
207
+ - [ ] `.github/workflows/ci.yml` generated
208
+ - [ ] `app.ts` configured
209
+ - [ ] `legal.ts` configured
210
+ - [ ] `.env` configured
211
+ - [ ] `bun test` passes
212
+ - [ ] Mobile responsive at 375px
155
213
  - [ ] (Optional) i18n added
156
214
 
157
215
  ---
158
216
 
159
217
  ## Output
160
218
 
161
- Production-ready app with:
162
- - Complete configuration
163
- - Working auth & CRUD
164
- - Mobile responsive
165
- - (Optional) Multi-language support
219
+ Call `complete_phase` with ALL generated test files + config files:
220
+
221
+ ```
222
+ complete_phase({
223
+ files: [
224
+ "vitest.config.ts",
225
+ "tests/setup.ts",
226
+ "tests/entities/Task.test.ts",
227
+ "tests/entities/User.test.ts",
228
+ "tests/pages/DashboardPage.test.tsx",
229
+ "tests/access/access-rules.test.ts",
230
+ "firestore.rules",
231
+ ".github/workflows/ci.yml",
232
+ "src/config/app.ts",
233
+ "src/config/legal.ts"
234
+ ],
235
+ lesson: "..."
236
+ })
237
+ ```
@@ -49,17 +49,18 @@
49
49
  ],
50
50
  "output": "All pages functional with hardcoded content"
51
51
  },
52
- "4_configure_polish": {
52
+ "4_configure_test": {
53
53
  "agent": "polisher",
54
- "goal": "Finalize config, test, optional i18n",
55
- "done_when": "Config complete, tests pass, mobile responsive",
54
+ "goal": "Generate tests from spec, firestore rules from entities, finalize config",
55
+ "done_when": "Tests pass, firestore.rules generated, config complete, mobile responsive",
56
56
  "read_files": [
57
+ "guides/wai-way/spec_template.md",
58
+ "entities/index.ts",
57
59
  "src/config/app.ts",
58
60
  "src/config/legal.ts",
59
- "src/themes.css",
60
- ".env"
61
+ "guides/dndev/SETUP_TESTING.md"
61
62
  ],
62
- "output": "Working app with auth, CRUD, and config complete"
63
+ "output": "Test files, firestore.rules, configured app"
63
64
  }
64
65
  },
65
66
  "key_files": {
@@ -89,7 +90,7 @@
89
90
  }
90
91
  },
91
92
  "workflow": {
92
- "summary": "BRAINSTORM → SPEC → SCAFFOLD → ENTITIES → COMPOSE → CONFIGURE",
93
+ "summary": "BRAINSTORM (spec) → SCAFFOLD → ENTITIES → COMPOSE → CONFIGURE + TEST",
93
94
  "critical_rule": "Spec is OUTPUT of brainstorming. User validates before coding. Validated spec = mechanical build."
94
95
  }
95
96
  }
@@ -291,7 +291,7 @@ export default function HomePage() {
291
291
  </Section>
292
292
 
293
293
  <Section title="How It Works">
294
- <Grid cols={[1, 1, 3, 3]} gap="medium">
294
+ <Grid cols={[1, 1, 3, 3]}>
295
295
  <Card title="1. Sign Up" content="Create your account in seconds." />
296
296
  <Card title="2. Configure" content="Set up your preferences." />
297
297
  <Card title="3. Launch" content="Start using immediately." />
@@ -415,7 +415,7 @@ export default function SettingsPage() {
415
415
 
416
416
  <Section title="Notifications">
417
417
  <Card>
418
- <Stack direction="column" gap="medium">
418
+ <Stack direction="column">
419
419
  <Stack direction="row" justify="between" align="center">
420
420
  <Text>Email notifications</Text>
421
421
  <Switch defaultChecked />
@@ -485,7 +485,7 @@ export default function ProfilePage() {
485
485
 
486
486
  <Section title="Account Details">
487
487
  <Card>
488
- <Stack direction="column" gap="medium">
488
+ <Stack direction="column">
489
489
  <Stack direction="row" justify="between">
490
490
  <Text variant="muted">Email</Text>
491
491
  <Text>{user?.email}</Text>
@@ -559,7 +559,7 @@ export default function ProductDetailPage() {
559
559
  </Card>
560
560
 
561
561
  {/* Details */}
562
- <Stack direction="column" gap="medium">
562
+ <Stack direction="column">
563
563
  <Text level="h1">{product.name}</Text>
564
564
  <Badge>{product.category}</Badge>
565
565
  <Text level="h2">${product.price}</Text>