the-grid-cc 1.4.0 → 1.6.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.
@@ -1,518 +0,0 @@
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.
@@ -1,180 +0,0 @@
1
- ---
2
- cluster: james-weatherhead-blog
3
- block: 01
4
- type: execute
5
- wave: 1
6
- depends_on: []
7
- files_modified: [package.json, astro.config.mjs, tsconfig.json, .gitignore, tailwind.config.mjs, vercel.json]
8
- autonomous: true
9
-
10
- must_haves:
11
- truths:
12
- - "Project runs locally with npm run dev"
13
- - "Tailwind CSS styles are processed correctly"
14
- - "Vercel adapter is configured for deployment"
15
- artifacts:
16
- - path: "package.json"
17
- provides: "Project dependencies and scripts"
18
- min_lines: 20
19
- - path: "astro.config.mjs"
20
- provides: "Astro configuration with Vercel adapter and Tailwind"
21
- exports: ["default"]
22
- - path: "tailwind.config.mjs"
23
- provides: "Tailwind configuration with dark mode"
24
- exports: ["default"]
25
- key_links:
26
- - from: "astro.config.mjs"
27
- to: "@astrojs/vercel/serverless"
28
- via: "adapter import"
29
- pattern: "import.*@astrojs/vercel"
30
- - from: "astro.config.mjs"
31
- to: "@astrojs/tailwind"
32
- via: "integration"
33
- pattern: "tailwind\\(\\)"
34
- ---
35
-
36
- <objective>
37
- Initialize Astro project with Tailwind CSS and Vercel deployment configuration.
38
-
39
- Purpose: Establish the foundational project structure with all necessary dependencies and configuration for a modern, deployable blog.
40
- Output: Fully configured Astro project ready for local development and Vercel deployment.
41
- </objective>
42
-
43
- <context>
44
- This is a greenfield blog project for James Weatherhead. Requirements specify:
45
- - Astro framework (latest version)
46
- - Tailwind CSS for styling
47
- - Dark mode support
48
- - Vercel hosting
49
- - Minimal design aesthetic
50
-
51
- This block establishes the technical foundation. No prior work exists. Subsequent blocks will build the layout system, content structure, and features on top of this base.
52
- </context>
53
-
54
- <threads>
55
-
56
- <thread type="auto">
57
- <name>Thread 1: Initialize Astro project with dependencies</name>
58
- <files>package.json, astro.config.mjs, tsconfig.json, .gitignore</files>
59
- <action>
60
- Create new Astro project from scratch in /Users/jacweath/grid/blog directory:
61
-
62
- 1. Run: npm create astro@latest blog -- --template minimal --no-install --no-git --typescript strict
63
- 2. cd blog && npm install
64
- 3. Add Tailwind: npx astro add tailwind --yes
65
- 4. Add Vercel adapter: npx astro add vercel --yes
66
- 5. Add RSS integration: npm install @astrojs/rss
67
- 6. Add syntax highlighting: npm install @astrojs/shiki
68
-
69
- Configure astro.config.mjs:
70
- - Import vercel adapter
71
- - Import tailwind integration
72
- - Set site URL: https://jamesweatherhead.com (placeholder)
73
- - Enable markdown code highlighting with shiki
74
-
75
- Update package.json scripts:
76
- - "dev": "astro dev"
77
- - "build": "astro check && astro build"
78
- - "preview": "astro preview"
79
- - "astro": "astro"
80
-
81
- AVOID: Do not use SSR features unless needed (keep it static for performance). Do not add unnecessary dependencies (keep bundle small per minimal design requirement).
82
- </action>
83
- <verify>
84
- Run: cd /Users/jacweath/grid/blog && npm run dev
85
- Check: Server starts on localhost:4321 without errors
86
- Check: npm run build completes successfully
87
- </verify>
88
- <done>
89
- - package.json exists with all required dependencies (astro, @astrojs/vercel, @astrojs/tailwind, @astrojs/rss, @astrojs/shiki)
90
- - astro.config.mjs exports valid configuration with vercel adapter and tailwind integration
91
- - npm run dev starts server without errors
92
- - npm run build completes successfully
93
- </done>
94
- </thread>
95
-
96
- <thread type="auto">
97
- <name>Thread 2: Configure Tailwind with dark mode</name>
98
- <files>tailwind.config.mjs</files>
99
- <action>
100
- Configure Tailwind for dark mode and minimal design aesthetic:
101
-
102
- 1. Set darkMode: 'class' (allow manual toggle, not media query)
103
- 2. Extend theme with custom colors:
104
- - Background colors: bg-gray-50 (light), bg-gray-900 (dark)
105
- - Text colors: text-gray-900 (light), text-gray-100 (dark)
106
- - Accent color: text-blue-600 (light), text-blue-400 (dark)
107
- 3. Configure content paths: ['./src/**/*.{astro,html,js,jsx,md,mdx,svelte,ts,tsx,vue}']
108
- 4. Add typography plugin if needed for markdown styling: npm install -D @tailwindcss/typography
109
-
110
- AVOID: Do not add excessive color variants (keep minimal). Do not use CSS-in-JS patterns (use Tailwind utilities). WHY: Requirements specify "minimal design" - extra variants add complexity and bundle size.
111
- </action>
112
- <verify>
113
- Check: tailwind.config.mjs exports config with darkMode: 'class'
114
- Check: Content paths include all Astro file types
115
- Run: npm run build to ensure Tailwind processes correctly
116
- </verify>
117
- <done>
118
- - tailwind.config.mjs has darkMode: 'class' configured
119
- - Custom theme colors defined for dark/light modes
120
- - @tailwindcss/typography plugin installed and configured
121
- - Build completes with Tailwind processing styles
122
- </done>
123
- </thread>
124
-
125
- <thread type="auto">
126
- <name>Thread 3: Add Vercel deployment configuration</name>
127
- <files>vercel.json</files>
128
- <action>
129
- Create vercel.json for deployment configuration:
130
-
131
- 1. Create vercel.json in project root
132
- 2. Configure build settings:
133
- {
134
- "buildCommand": "npm run build",
135
- "devCommand": "npm run dev",
136
- "installCommand": "npm install",
137
- "framework": "astro",
138
- "outputDirectory": "dist"
139
- }
140
- 3. Ensure .gitignore includes:
141
- - node_modules/
142
- - dist/
143
- - .vercel/
144
- - .astro/
145
-
146
- AVOID: Do not add environment variables yet (none needed for static blog). Do not add redirects/rewrites yet (add when needed). WHY: Keep configuration minimal until features require it.
147
- </action>
148
- <verify>
149
- Check: vercel.json exists with correct build configuration
150
- Check: .gitignore includes all build artifacts
151
- Run: npm run build && ls dist/ to verify output directory
152
- </verify>
153
- <done>
154
- - vercel.json exists with framework set to "astro"
155
- - Build command and output directory configured correctly
156
- - .gitignore excludes all build artifacts and dependencies
157
- - dist/ directory created successfully after build
158
- </done>
159
- </thread>
160
-
161
- </threads>
162
-
163
- <verification>
164
- Run the following to verify block completion:
165
- 1. cd /Users/jacweath/grid/blog
166
- 2. npm run dev (server starts on port 4321)
167
- 3. npm run build (completes without errors)
168
- 4. ls dist/ (contains built files)
169
- 5. Check astro.config.mjs imports vercel adapter and tailwind
170
- 6. Check tailwind.config.mjs has darkMode: 'class'
171
- 7. Check vercel.json exists with correct framework setting
172
- </verification>
173
-
174
- <success_criteria>
175
- - Project initializes and runs locally at localhost:4321
176
- - Tailwind CSS processes styles correctly
177
- - Build completes successfully with Vercel adapter
178
- - All configuration files present and valid
179
- - Ready for layout development in next block
180
- </success_criteria>