the-grid-cc 1.3.0 → 1.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.grid/plans/blog-PLAN-SUMMARY.md +518 -0
- package/.grid/plans/blog-block-03.md +253 -0
- package/.grid/plans/blog-block-04.md +287 -0
- package/.grid/plans/blog-block-05.md +235 -0
- package/.grid/plans/blog-block-06.md +325 -0
- package/commands/grid/VERSION +1 -1
- package/commands/grid/mc.md +15 -42
- package/package.json +1 -1
- package/test-cli/converter.py +206 -0
- package/test-cli/test_data.json +39 -0
- package/test-cli/test_data.yaml +35 -0
|
@@ -0,0 +1,518 @@
|
|
|
1
|
+
# James Weatherhead Blog - Execution Plan Summary
|
|
2
|
+
|
|
3
|
+
**Cluster:** james-weatherhead-blog
|
|
4
|
+
**Total Blocks:** 6 blocks across 4 waves
|
|
5
|
+
**Estimated Completion:** 4-6 hours (including checkpoints)
|
|
6
|
+
**Target:** Production-ready blog deployable to Vercel
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## Architecture Overview
|
|
11
|
+
|
|
12
|
+
This plan uses **vertical slicing** and **parallel execution** to maximize efficiency:
|
|
13
|
+
|
|
14
|
+
- **Wave 1:** Foundation (project initialization)
|
|
15
|
+
- **Wave 2:** Parallel development (layouts + content - no file overlap)
|
|
16
|
+
- **Wave 3:** Integration (pages + RSS - no file overlap)
|
|
17
|
+
- **Wave 4:** Finalization (verification + documentation)
|
|
18
|
+
|
|
19
|
+
### Dependency Graph
|
|
20
|
+
|
|
21
|
+
```
|
|
22
|
+
Wave 1: [Block 01: Init]
|
|
23
|
+
↓
|
|
24
|
+
Wave 2: [Block 02: Layouts] ← depends on 01
|
|
25
|
+
[Block 03: Content] ← depends on 01
|
|
26
|
+
↓ ↓
|
|
27
|
+
Wave 3: [Block 04: Pages] ← depends on 02, 03
|
|
28
|
+
[Block 05: RSS] ← depends on 01, 03
|
|
29
|
+
↓ ↓
|
|
30
|
+
Wave 4: [Block 06: Final] ← depends on 02, 04, 05
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
## Wave Structure
|
|
36
|
+
|
|
37
|
+
| Wave | Blocks | Can Run Parallel | Autonomous | Checkpoints |
|
|
38
|
+
|------|--------|------------------|------------|-------------|
|
|
39
|
+
| 1 | 01 | No (single block) | Yes | 0 |
|
|
40
|
+
| 2 | 02, 03 | **Yes** (no file overlap) | No | 2 (one per block) |
|
|
41
|
+
| 3 | 04, 05 | **Yes** (no file overlap) | No (04), Yes (05) | 1 (Block 04 only) |
|
|
42
|
+
| 4 | 06 | No (single block) | No | 1 |
|
|
43
|
+
|
|
44
|
+
**Total Checkpoints:** 4 (all human-verify type)
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
## Block Breakdown
|
|
49
|
+
|
|
50
|
+
### Block 01: Project Initialization
|
|
51
|
+
**Wave:** 1 | **Autonomous:** Yes | **Depends:** None
|
|
52
|
+
|
|
53
|
+
**Objective:** Initialize Astro project with Tailwind CSS and Vercel adapter
|
|
54
|
+
|
|
55
|
+
**Files Modified:**
|
|
56
|
+
- package.json
|
|
57
|
+
- astro.config.mjs
|
|
58
|
+
- tsconfig.json
|
|
59
|
+
- .gitignore
|
|
60
|
+
- tailwind.config.mjs
|
|
61
|
+
- vercel.json
|
|
62
|
+
|
|
63
|
+
**Threads:**
|
|
64
|
+
1. Initialize Astro project with dependencies (Tailwind, Vercel, RSS, Shiki)
|
|
65
|
+
2. Configure Tailwind with dark mode (`darkMode: 'class'`)
|
|
66
|
+
3. Add Vercel deployment configuration
|
|
67
|
+
|
|
68
|
+
**Key Outputs:**
|
|
69
|
+
- Working dev server at localhost:4321
|
|
70
|
+
- Tailwind processes styles correctly
|
|
71
|
+
- Build succeeds with Vercel adapter
|
|
72
|
+
|
|
73
|
+
**Verification:**
|
|
74
|
+
- `npm run dev` starts without errors
|
|
75
|
+
- `npm run build` completes successfully
|
|
76
|
+
- Tailwind config has `darkMode: 'class'`
|
|
77
|
+
|
|
78
|
+
---
|
|
79
|
+
|
|
80
|
+
### Block 02: Layout System
|
|
81
|
+
**Wave:** 2 | **Autonomous:** No | **Depends:** 01
|
|
82
|
+
|
|
83
|
+
**Objective:** Build layout system with base layout, header, footer, and dark mode toggle
|
|
84
|
+
|
|
85
|
+
**Files Modified:**
|
|
86
|
+
- src/layouts/BaseLayout.astro
|
|
87
|
+
- src/components/Header.astro
|
|
88
|
+
- src/components/Footer.astro
|
|
89
|
+
- src/components/DarkModeToggle.astro
|
|
90
|
+
- src/styles/global.css
|
|
91
|
+
|
|
92
|
+
**Threads:**
|
|
93
|
+
1. Create BaseLayout with dark mode persistence (localStorage)
|
|
94
|
+
2. Build Header and Footer components
|
|
95
|
+
3. Implement dark mode toggle (interactive button)
|
|
96
|
+
4. **CHECKPOINT:** Human verification of layout and dark mode functionality
|
|
97
|
+
|
|
98
|
+
**Key Outputs:**
|
|
99
|
+
- Responsive layout with navigation (Home, Blog, About)
|
|
100
|
+
- Working dark mode toggle with localStorage persistence
|
|
101
|
+
- No FOUC (flash of unstyled content)
|
|
102
|
+
|
|
103
|
+
**Verification:**
|
|
104
|
+
- Dark mode toggle switches themes
|
|
105
|
+
- Theme persists across refresh
|
|
106
|
+
- Header/footer render correctly
|
|
107
|
+
- Responsive on mobile/desktop
|
|
108
|
+
|
|
109
|
+
**Checkpoint Details:**
|
|
110
|
+
- User tests dark mode toggle
|
|
111
|
+
- Verifies layout appearance
|
|
112
|
+
- Checks responsive behavior
|
|
113
|
+
|
|
114
|
+
---
|
|
115
|
+
|
|
116
|
+
### Block 03: Content System
|
|
117
|
+
**Wave:** 2 | **Autonomous:** No | **Depends:** 01
|
|
118
|
+
|
|
119
|
+
**Objective:** Implement blog content structure using Astro Content Collections
|
|
120
|
+
|
|
121
|
+
**Files Modified:**
|
|
122
|
+
- src/content/config.ts
|
|
123
|
+
- src/content/blog/sample-post.md
|
|
124
|
+
- src/pages/blog/[...slug].astro
|
|
125
|
+
- src/components/PostList.astro
|
|
126
|
+
- src/components/Tag.astro
|
|
127
|
+
|
|
128
|
+
**Threads:**
|
|
129
|
+
1. Configure content collection schema (zod validation)
|
|
130
|
+
2. Create dynamic blog post template with syntax highlighting
|
|
131
|
+
3. Build PostList and Tag components
|
|
132
|
+
4. **CHECKPOINT:** Human verification of content rendering
|
|
133
|
+
|
|
134
|
+
**Key Outputs:**
|
|
135
|
+
- Type-safe content collection for blog posts
|
|
136
|
+
- Dynamic post routes (/blog/{slug})
|
|
137
|
+
- Sample post with frontmatter, markdown, code blocks
|
|
138
|
+
- Syntax highlighting functional
|
|
139
|
+
|
|
140
|
+
**Verification:**
|
|
141
|
+
- Sample post renders at /blog/sample-post
|
|
142
|
+
- Frontmatter displays correctly (title, date, tags)
|
|
143
|
+
- Code blocks have syntax highlighting
|
|
144
|
+
- `npm run build` succeeds
|
|
145
|
+
- `npx astro check` passes
|
|
146
|
+
|
|
147
|
+
**Checkpoint Details:**
|
|
148
|
+
- User visits sample post page
|
|
149
|
+
- Verifies markdown rendering
|
|
150
|
+
- Tests syntax highlighting in code blocks
|
|
151
|
+
- Checks dark mode prose styling
|
|
152
|
+
|
|
153
|
+
**Parallel Execution Note:** Block 02 and 03 run in parallel (Wave 2) because:
|
|
154
|
+
- No file overlap (layouts vs content)
|
|
155
|
+
- Both depend only on Block 01
|
|
156
|
+
- Can be executed simultaneously by different agents
|
|
157
|
+
|
|
158
|
+
---
|
|
159
|
+
|
|
160
|
+
### Block 04: Static Pages
|
|
161
|
+
**Wave:** 3 | **Autonomous:** No | **Depends:** 02, 03
|
|
162
|
+
|
|
163
|
+
**Objective:** Create homepage, blog index, about page, and tag filtering
|
|
164
|
+
|
|
165
|
+
**Files Modified:**
|
|
166
|
+
- src/pages/index.astro
|
|
167
|
+
- src/pages/blog/index.astro
|
|
168
|
+
- src/pages/about.astro
|
|
169
|
+
- src/pages/blog/tags/[tag].astro
|
|
170
|
+
|
|
171
|
+
**Threads:**
|
|
172
|
+
1. Build homepage (hero + recent posts) and blog index (all posts)
|
|
173
|
+
2. Create About page with author bio
|
|
174
|
+
3. Implement tag-based filtering (dynamic tag pages)
|
|
175
|
+
4. **CHECKPOINT:** Human verification of page structure and navigation
|
|
176
|
+
|
|
177
|
+
**Key Outputs:**
|
|
178
|
+
- Homepage with recent posts (5 most recent)
|
|
179
|
+
- Blog index with all posts sorted by date
|
|
180
|
+
- About page with placeholder author content
|
|
181
|
+
- Tag pages filtering posts by tag
|
|
182
|
+
- Complete navigation structure
|
|
183
|
+
|
|
184
|
+
**Verification:**
|
|
185
|
+
- Homepage displays recent posts
|
|
186
|
+
- Blog index lists all posts
|
|
187
|
+
- About page renders
|
|
188
|
+
- Tag filtering works (click tag → filtered posts)
|
|
189
|
+
- All navigation links functional
|
|
190
|
+
|
|
191
|
+
**Checkpoint Details:**
|
|
192
|
+
- User tests all pages (/, /blog, /about)
|
|
193
|
+
- Clicks navigation links
|
|
194
|
+
- Tests tag filtering
|
|
195
|
+
- Verifies responsive behavior
|
|
196
|
+
|
|
197
|
+
---
|
|
198
|
+
|
|
199
|
+
### Block 05: RSS Feed
|
|
200
|
+
**Wave:** 3 | **Autonomous:** Yes | **Depends:** 01, 03
|
|
201
|
+
|
|
202
|
+
**Objective:** Implement RSS feed generation with autodiscovery
|
|
203
|
+
|
|
204
|
+
**Files Modified:**
|
|
205
|
+
- src/pages/rss.xml.ts
|
|
206
|
+
- src/utils/rss.ts
|
|
207
|
+
- src/layouts/BaseLayout.astro (autodiscovery link)
|
|
208
|
+
|
|
209
|
+
**Threads:**
|
|
210
|
+
1. Create RSS feed endpoint using @astrojs/rss
|
|
211
|
+
2. Create RSS utility functions (formatters, sorters)
|
|
212
|
+
3. Add RSS autodiscovery link to BaseLayout
|
|
213
|
+
|
|
214
|
+
**Key Outputs:**
|
|
215
|
+
- Valid RSS 2.0 feed at /rss.xml
|
|
216
|
+
- All published posts in feed
|
|
217
|
+
- Autodiscovery link in site header
|
|
218
|
+
|
|
219
|
+
**Verification:**
|
|
220
|
+
- /rss.xml accessible and loads XML
|
|
221
|
+
- Feed validates against RSS 2.0 spec
|
|
222
|
+
- Contains all non-draft posts
|
|
223
|
+
- Browser detects RSS feed (autodiscovery)
|
|
224
|
+
|
|
225
|
+
**Parallel Execution Note:** Block 04 and 05 run in parallel (Wave 3) because:
|
|
226
|
+
- No file overlap (pages vs rss.xml.ts)
|
|
227
|
+
- Block 04 depends on 02+03, Block 05 depends on 01+03
|
|
228
|
+
- Block 05 is fully autonomous (no checkpoints)
|
|
229
|
+
|
|
230
|
+
---
|
|
231
|
+
|
|
232
|
+
### Block 06: Production Finalization
|
|
233
|
+
**Wave:** 4 | **Autonomous:** No | **Depends:** 02, 04, 05
|
|
234
|
+
|
|
235
|
+
**Objective:** Final verification, documentation, and deployment readiness
|
|
236
|
+
|
|
237
|
+
**Files Modified:**
|
|
238
|
+
- .gitignore
|
|
239
|
+
- README.md
|
|
240
|
+
- vercel.json (verification)
|
|
241
|
+
|
|
242
|
+
**Threads:**
|
|
243
|
+
1. Comprehensive production build verification
|
|
244
|
+
2. Create comprehensive README documentation
|
|
245
|
+
3. Verify and document Vercel configuration
|
|
246
|
+
4. **CHECKPOINT:** Human verification of production readiness
|
|
247
|
+
|
|
248
|
+
**Key Outputs:**
|
|
249
|
+
- Verified production build (all pages generate)
|
|
250
|
+
- Complete README with setup/deployment instructions
|
|
251
|
+
- Deployment-ready Vercel configuration
|
|
252
|
+
- Clean .gitignore
|
|
253
|
+
|
|
254
|
+
**Verification:**
|
|
255
|
+
- `npm run build` succeeds
|
|
256
|
+
- `npm run preview` serves all pages correctly
|
|
257
|
+
- All pages load without errors
|
|
258
|
+
- Dark mode works everywhere
|
|
259
|
+
- Tag filtering functional
|
|
260
|
+
- RSS feed validates
|
|
261
|
+
- README accurate and complete
|
|
262
|
+
|
|
263
|
+
**Checkpoint Details:**
|
|
264
|
+
- User runs full build pipeline
|
|
265
|
+
- Tests production preview
|
|
266
|
+
- Reviews documentation
|
|
267
|
+
- Confirms deployment readiness
|
|
268
|
+
- Approves for Vercel deployment
|
|
269
|
+
|
|
270
|
+
---
|
|
271
|
+
|
|
272
|
+
## Must-Haves Summary
|
|
273
|
+
|
|
274
|
+
### Global Truths (Entire Project)
|
|
275
|
+
1. **Blog is deployable to Vercel** - All configuration present, build succeeds
|
|
276
|
+
2. **Dark mode works globally** - Toggle persists, applies to all pages, no FOUC
|
|
277
|
+
3. **Content is type-safe** - Content collections enforce schema, build validates
|
|
278
|
+
4. **Navigation is complete** - All links work, no 404s, responsive
|
|
279
|
+
5. **RSS feed is functional** - Valid feed, all posts included, autodiscoverable
|
|
280
|
+
|
|
281
|
+
### Critical Artifacts
|
|
282
|
+
| Artifact | Provides | Block |
|
|
283
|
+
|----------|----------|-------|
|
|
284
|
+
| astro.config.mjs | Framework configuration | 01 |
|
|
285
|
+
| tailwind.config.mjs | Dark mode config | 01 |
|
|
286
|
+
| BaseLayout.astro | Theme persistence | 02 |
|
|
287
|
+
| DarkModeToggle.astro | Interactive toggle | 02 |
|
|
288
|
+
| src/content/config.ts | Content schema | 03 |
|
|
289
|
+
| [slug].astro | Post rendering | 03 |
|
|
290
|
+
| index.astro | Homepage | 04 |
|
|
291
|
+
| rss.xml.ts | RSS feed | 05 |
|
|
292
|
+
| README.md | Documentation | 06 |
|
|
293
|
+
|
|
294
|
+
### Critical Links
|
|
295
|
+
| From | To | Via | Why Critical |
|
|
296
|
+
|------|----|----|-------------|
|
|
297
|
+
| BaseLayout | localStorage | theme script | Prevents FOUC, persists preference |
|
|
298
|
+
| DarkModeToggle | document.documentElement | classList.toggle('dark') | Theme switching mechanism |
|
|
299
|
+
| [slug].astro | getCollection('blog') | Astro API | Dynamic post routing |
|
|
300
|
+
| rss.xml.ts | @astrojs/rss | rss() function | Feed generation |
|
|
301
|
+
| [tag].astro | posts.filter | tag filtering | Tag-based navigation |
|
|
302
|
+
|
|
303
|
+
---
|
|
304
|
+
|
|
305
|
+
## File Ownership Matrix
|
|
306
|
+
|
|
307
|
+
**Purpose:** Ensures parallel execution safety (no file conflicts)
|
|
308
|
+
|
|
309
|
+
| File/Directory | Block 01 | Block 02 | Block 03 | Block 04 | Block 05 | Block 06 |
|
|
310
|
+
|----------------|----------|----------|----------|----------|----------|----------|
|
|
311
|
+
| package.json | ✓ | | | | | |
|
|
312
|
+
| astro.config.mjs | ✓ | | | | | |
|
|
313
|
+
| tailwind.config.mjs | ✓ | | | | | |
|
|
314
|
+
| vercel.json | ✓ | | | | | ✓ (verify) |
|
|
315
|
+
| src/layouts/ | | ✓ | | | | |
|
|
316
|
+
| src/components/Header.astro | | ✓ | | | | |
|
|
317
|
+
| src/components/Footer.astro | | ✓ | | | | |
|
|
318
|
+
| src/components/DarkModeToggle.astro | | ✓ | | | | |
|
|
319
|
+
| src/components/PostList.astro | | | ✓ | | | |
|
|
320
|
+
| src/components/Tag.astro | | | ✓ | | | |
|
|
321
|
+
| src/styles/global.css | | ✓ | | | | |
|
|
322
|
+
| src/content/ | | | ✓ | | | |
|
|
323
|
+
| src/pages/blog/[slug].astro | | | ✓ | | | |
|
|
324
|
+
| src/pages/index.astro | | | | ✓ | | |
|
|
325
|
+
| src/pages/blog/index.astro | | | | ✓ | | |
|
|
326
|
+
| src/pages/about.astro | | | | ✓ | | |
|
|
327
|
+
| src/pages/blog/tags/[tag].astro | | | | ✓ | | |
|
|
328
|
+
| src/pages/rss.xml.ts | | | | | ✓ | |
|
|
329
|
+
| src/utils/rss.ts | | | | | ✓ | |
|
|
330
|
+
| .gitignore | ✓ | | | | | ✓ (update) |
|
|
331
|
+
| README.md | | | | | | ✓ |
|
|
332
|
+
|
|
333
|
+
**Wave 2 Safety:** Block 02 (layouts) and Block 03 (content) have zero file overlap ✓
|
|
334
|
+
**Wave 3 Safety:** Block 04 (pages) and Block 05 (rss) have zero file overlap ✓
|
|
335
|
+
|
|
336
|
+
---
|
|
337
|
+
|
|
338
|
+
## Checkpoint Strategy
|
|
339
|
+
|
|
340
|
+
**Total Checkpoints:** 4 (all `human-verify` type)
|
|
341
|
+
**Placement:** End of Blocks 02, 03, 04, 06
|
|
342
|
+
|
|
343
|
+
### Why These Checkpoints?
|
|
344
|
+
|
|
345
|
+
1. **Block 02 Checkpoint (Layout):** Visual verification needed
|
|
346
|
+
- Dark mode toggle is interactive (requires manual testing)
|
|
347
|
+
- Layout appearance is subjective (user approval needed)
|
|
348
|
+
- Theme persistence must be tested with browser refresh
|
|
349
|
+
|
|
350
|
+
2. **Block 03 Checkpoint (Content):** Rendering verification needed
|
|
351
|
+
- Syntax highlighting must be visually confirmed
|
|
352
|
+
- Markdown rendering quality subjective
|
|
353
|
+
- Prose typography on dark mode needs approval
|
|
354
|
+
|
|
355
|
+
3. **Block 04 Checkpoint (Pages):** Integration verification needed
|
|
356
|
+
- Navigation structure requires end-to-end testing
|
|
357
|
+
- Tag filtering is interactive (requires manual testing)
|
|
358
|
+
- Overall UX needs user approval
|
|
359
|
+
|
|
360
|
+
4. **Block 06 Checkpoint (Finalization):** Deployment gate
|
|
361
|
+
- Final production verification before deploy
|
|
362
|
+
- Documentation review
|
|
363
|
+
- User confirms readiness to ship
|
|
364
|
+
|
|
365
|
+
### Why Block 05 Has No Checkpoint?
|
|
366
|
+
- RSS feed generation is deterministic (XML output)
|
|
367
|
+
- Feed validation can be automated (RSS validator)
|
|
368
|
+
- No visual/interactive components requiring human judgment
|
|
369
|
+
- Fully testable with automated checks
|
|
370
|
+
|
|
371
|
+
---
|
|
372
|
+
|
|
373
|
+
## Context Budget Analysis
|
|
374
|
+
|
|
375
|
+
| Block | Threads | Complexity | Est. Context % | Risk |
|
|
376
|
+
|-------|---------|------------|----------------|------|
|
|
377
|
+
| 01 | 3 | Simple (config) | ~30% | Low |
|
|
378
|
+
| 02 | 4 (3 + checkpoint) | Medium (interactive) | ~45% | Medium |
|
|
379
|
+
| 03 | 4 (3 + checkpoint) | Medium (content API) | ~45% | Medium |
|
|
380
|
+
| 04 | 4 (3 + checkpoint) | Medium (integration) | ~50% | Medium |
|
|
381
|
+
| 05 | 3 | Simple (RSS API) | ~25% | Low |
|
|
382
|
+
| 06 | 4 (3 + checkpoint) | Simple (verification) | ~35% | Low |
|
|
383
|
+
|
|
384
|
+
**Assessment:** All blocks stay within ~50% context budget ✓
|
|
385
|
+
|
|
386
|
+
**Rationale:**
|
|
387
|
+
- Max 3 implementation threads per block (4th thread is checkpoint)
|
|
388
|
+
- No block modifies >6 files
|
|
389
|
+
- Each block has clear, focused objective
|
|
390
|
+
- Vertical slices prevent cross-cutting concerns
|
|
391
|
+
|
|
392
|
+
---
|
|
393
|
+
|
|
394
|
+
## Risk Mitigation
|
|
395
|
+
|
|
396
|
+
### Risk 1: Dark Mode Flash (FOUC)
|
|
397
|
+
**Mitigation:** Inline script in BaseLayout `<head>` runs before body renders
|
|
398
|
+
**Verification:** Block 02 checkpoint tests page reload
|
|
399
|
+
|
|
400
|
+
### Risk 2: Content Schema Mismatch
|
|
401
|
+
**Mitigation:** Zod schema in Block 03 validates at build time
|
|
402
|
+
**Verification:** `npx astro check` in Block 03 thread verification
|
|
403
|
+
|
|
404
|
+
### Risk 3: Build Failures
|
|
405
|
+
**Mitigation:** Each block includes build verification in threads
|
|
406
|
+
**Verification:** Block 06 runs full clean build pipeline
|
|
407
|
+
|
|
408
|
+
### Risk 4: Vercel Deployment Issues
|
|
409
|
+
**Mitigation:** Block 01 configures adapter early, Block 06 verifies
|
|
410
|
+
**Verification:** Block 06 tests production preview locally
|
|
411
|
+
|
|
412
|
+
### Risk 5: RSS Feed Invalid
|
|
413
|
+
**Mitigation:** Use official @astrojs/rss (tested, maintained)
|
|
414
|
+
**Verification:** Block 05 includes RSS validator check
|
|
415
|
+
|
|
416
|
+
---
|
|
417
|
+
|
|
418
|
+
## Execution Instructions
|
|
419
|
+
|
|
420
|
+
### For Master Control Program:
|
|
421
|
+
1. **Wave 1:** Execute Block 01 (autonomous, no checkpoint)
|
|
422
|
+
2. **Wave 2:** Spawn 2 parallel executors for Block 02 and Block 03
|
|
423
|
+
- Both blocks have checkpoints (pause for user approval)
|
|
424
|
+
3. **Wave 3:** After Wave 2 approval, spawn executors:
|
|
425
|
+
- Block 04 (has checkpoint)
|
|
426
|
+
- Block 05 (autonomous, runs parallel)
|
|
427
|
+
4. **Wave 4:** After Wave 3 completion, execute Block 06 (final checkpoint)
|
|
428
|
+
|
|
429
|
+
### For Human User:
|
|
430
|
+
- **Expected Interactions:** 4 checkpoints (Blocks 02, 03, 04, 06)
|
|
431
|
+
- **What to Test:** Visual appearance, dark mode, navigation, content rendering
|
|
432
|
+
- **Approval Signal:** Type "approved" or describe issues
|
|
433
|
+
- **Time Estimate:** 15-20 minutes of active testing across 4 checkpoints
|
|
434
|
+
|
|
435
|
+
---
|
|
436
|
+
|
|
437
|
+
## Success Criteria (End State)
|
|
438
|
+
|
|
439
|
+
When all blocks complete and Block 06 checkpoint approved:
|
|
440
|
+
|
|
441
|
+
✅ **Functional Requirements:**
|
|
442
|
+
- [ ] Blog runs locally (`npm run dev`)
|
|
443
|
+
- [ ] All pages accessible (/, /blog, /about, /blog/{slug}, /blog/tags/{tag}, /rss.xml)
|
|
444
|
+
- [ ] Dark mode toggles and persists
|
|
445
|
+
- [ ] Blog posts render with syntax highlighting
|
|
446
|
+
- [ ] Tags filter posts correctly
|
|
447
|
+
- [ ] RSS feed validates
|
|
448
|
+
- [ ] Navigation links work
|
|
449
|
+
|
|
450
|
+
✅ **Technical Requirements:**
|
|
451
|
+
- [ ] Production build succeeds (`npm run build`)
|
|
452
|
+
- [ ] Astro content validation passes (`npx astro check`)
|
|
453
|
+
- [ ] Vercel adapter configured
|
|
454
|
+
- [ ] No console errors
|
|
455
|
+
- [ ] Responsive on mobile/desktop
|
|
456
|
+
|
|
457
|
+
✅ **Documentation Requirements:**
|
|
458
|
+
- [ ] README with setup instructions
|
|
459
|
+
- [ ] README with deployment instructions
|
|
460
|
+
- [ ] Project structure documented
|
|
461
|
+
- [ ] Content management guide included
|
|
462
|
+
|
|
463
|
+
✅ **Deployment Requirements:**
|
|
464
|
+
- [ ] vercel.json configured
|
|
465
|
+
- [ ] .gitignore excludes build artifacts
|
|
466
|
+
- [ ] Site URL set in astro.config.mjs
|
|
467
|
+
- [ ] No hardcoded localhost URLs
|
|
468
|
+
- [ ] Ready to push to GitHub and deploy
|
|
469
|
+
|
|
470
|
+
---
|
|
471
|
+
|
|
472
|
+
## Next Steps After Planning
|
|
473
|
+
|
|
474
|
+
1. **User Confirmation:** Review this plan, ask questions
|
|
475
|
+
2. **Execution Trigger:** User runs `/grid:execute` or Master Control spawns executors
|
|
476
|
+
3. **Wave-Based Execution:** Blocks execute in waves with parallel processing
|
|
477
|
+
4. **Checkpoint Interactions:** User tests and approves at 4 checkpoints
|
|
478
|
+
5. **Completion:** Block 06 approved → Blog ready for Vercel deployment
|
|
479
|
+
|
|
480
|
+
---
|
|
481
|
+
|
|
482
|
+
## Appendix: Technology Decisions
|
|
483
|
+
|
|
484
|
+
### Why Astro?
|
|
485
|
+
- **Requirement:** User specified Astro framework
|
|
486
|
+
- **Benefits:** Content collections, island architecture, excellent DX for blogs
|
|
487
|
+
|
|
488
|
+
### Why Tailwind CSS?
|
|
489
|
+
- **Requirement:** User specified Tailwind
|
|
490
|
+
- **Benefits:** Dark mode support, minimal bundle size, utility-first for rapid styling
|
|
491
|
+
|
|
492
|
+
### Why Content Collections (not /pages/blog/*.md)?
|
|
493
|
+
- **Superior to file-based routing:** Type-safe frontmatter, validation at build time
|
|
494
|
+
- **Standard Astro pattern:** Official recommendation for content-heavy sites
|
|
495
|
+
- **Scalability:** Handles hundreds of posts without performance issues
|
|
496
|
+
|
|
497
|
+
### Why Shiki for Syntax Highlighting?
|
|
498
|
+
- **Integration:** Official Astro integration (@astrojs/shiki)
|
|
499
|
+
- **Quality:** VS Code's highlighter, accurate syntax
|
|
500
|
+
- **Performance:** Compiles at build time (no client-side JS)
|
|
501
|
+
|
|
502
|
+
### Why `darkMode: 'class'` (not media query)?
|
|
503
|
+
- **Requirement:** User wants manual toggle, not auto-detection
|
|
504
|
+
- **UX:** Gives users control over theme preference
|
|
505
|
+
- **Persistence:** Works with localStorage for consistent experience
|
|
506
|
+
|
|
507
|
+
### Why Vercel Serverless Adapter?
|
|
508
|
+
- **Requirement:** User specified Vercel hosting
|
|
509
|
+
- **Flexibility:** Supports SSR if needed later (though blog is static)
|
|
510
|
+
- **Alternative:** Could use @astrojs/vercel/static for fully static (decide in Block 01)
|
|
511
|
+
|
|
512
|
+
---
|
|
513
|
+
|
|
514
|
+
**Plan Status:** ✅ Complete
|
|
515
|
+
**Ready for Execution:** Yes
|
|
516
|
+
**Estimated Duration:** 4-6 hours (including user checkpoint interactions)
|
|
517
|
+
|
|
518
|
+
End of Line.
|