the-grid-cc 1.2.0 → 1.3.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.
@@ -0,0 +1,180 @@
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>
@@ -0,0 +1,229 @@
1
+ ---
2
+ cluster: james-weatherhead-blog
3
+ block: 02
4
+ type: execute
5
+ wave: 2
6
+ depends_on: [01]
7
+ files_modified: [src/layouts/BaseLayout.astro, src/components/Header.astro, src/components/Footer.astro, src/components/DarkModeToggle.astro, src/styles/global.css]
8
+ autonomous: false
9
+
10
+ must_haves:
11
+ truths:
12
+ - "Dark mode toggles between light and dark themes"
13
+ - "Navigation links are visible and functional"
14
+ - "Layout is responsive on mobile and desktop"
15
+ artifacts:
16
+ - path: "src/layouts/BaseLayout.astro"
17
+ provides: "Base HTML structure with dark mode support"
18
+ min_lines: 40
19
+ - path: "src/components/Header.astro"
20
+ provides: "Site navigation with logo/title and links"
21
+ min_lines: 20
22
+ - path: "src/components/DarkModeToggle.astro"
23
+ provides: "Interactive dark mode toggle button"
24
+ min_lines: 30
25
+ key_links:
26
+ - from: "DarkModeToggle.astro"
27
+ to: "document.documentElement"
28
+ via: "classList.toggle('dark')"
29
+ pattern: "classList\\.toggle\\('dark'\\)"
30
+ - from: "BaseLayout.astro"
31
+ to: "localStorage"
32
+ via: "theme persistence script"
33
+ pattern: "localStorage\\.getItem\\('theme'\\)"
34
+ ---
35
+
36
+ <objective>
37
+ Build the layout system with base layout, header, footer, and dark mode functionality.
38
+
39
+ Purpose: Create reusable layout components that provide consistent structure, navigation, and theming across all pages.
40
+ Output: Responsive layout with working dark mode toggle, navigation header, and footer.
41
+ </objective>
42
+
43
+ <context>
44
+ Block 01 completed: Astro project initialized with Tailwind (darkMode: 'class') and Vercel adapter.
45
+
46
+ This block builds the visual foundation. The layout system must:
47
+ - Support dark mode toggle (class-based, not media query)
48
+ - Be minimal and clean (per requirements)
49
+ - Work on mobile and desktop
50
+ - Include header with site title and nav links
51
+ - Include footer with copyright/contact info
52
+
53
+ No blog content yet - that comes in Block 03. This focuses purely on structure and theming.
54
+ </context>
55
+
56
+ <threads>
57
+
58
+ <thread type="auto">
59
+ <name>Thread 1: Create base layout with dark mode persistence</name>
60
+ <files>src/layouts/BaseLayout.astro, src/styles/global.css</files>
61
+ <action>
62
+ Create BaseLayout.astro as the foundational layout component:
63
+
64
+ 1. Create src/layouts/BaseLayout.astro with props interface:
65
+ - title: string
66
+ - description?: string
67
+ - ogImage?: string
68
+
69
+ 2. Structure:
70
+ - HTML doctype and head with meta tags (viewport, charset, description)
71
+ - SEO meta tags (og:title, og:description, twitter:card)
72
+ - Link to global.css
73
+ - Inline script in head (before body renders) to prevent flash:
74
+ ```js
75
+ const theme = localStorage.getItem('theme') || 'dark'; // default dark per minimal aesthetic
76
+ if (theme === 'dark') document.documentElement.classList.add('dark');
77
+ ```
78
+ - Body with dark:bg-gray-900 bg-gray-50 dark:text-gray-100 text-gray-900
79
+ - Slot for page content
80
+
81
+ 3. Create src/styles/global.css:
82
+ - @tailwind base/components/utilities
83
+ - Custom font stack: system-ui, -apple-system, sans-serif
84
+ - Smooth scroll behavior
85
+ - Focus styles for accessibility
86
+
87
+ AVOID: Do not use media query dark mode (requirements specify toggle, not auto). Do not add analytics scripts yet (keep minimal). WHY: User wants control over theme, not automatic switching based on system preference.
88
+ </action>
89
+ <verify>
90
+ Check: src/layouts/BaseLayout.astro exists with inline theme script
91
+ Check: localStorage persistence script runs before body render
92
+ Check: global.css imports Tailwind directives
93
+ Run: grep -r "localStorage.getItem" src/layouts/BaseLayout.astro
94
+ </verify>
95
+ <done>
96
+ - BaseLayout.astro exports layout with title, description props
97
+ - Inline script prevents FOUC (flash of unstyled content)
98
+ - Dark mode classes applied to html element
99
+ - global.css configures Tailwind and typography
100
+ </done>
101
+ </thread>
102
+
103
+ <thread type="auto">
104
+ <name>Thread 2: Build Header and Footer components</name>
105
+ <files>src/components/Header.astro, src/components/Footer.astro</files>
106
+ <action>
107
+ Create navigation header and footer components:
108
+
109
+ Header.astro:
110
+ 1. Create header element with container max-w-3xl mx-auto px-4 py-8
111
+ 2. Site title "James Weatherhead" as h1 or logo
112
+ 3. Navigation links: Home (/) | Blog (/blog) | About (/about)
113
+ 4. Include DarkModeToggle component (will create in next thread)
114
+ 5. Make responsive: stack on mobile, horizontal on desktop (md:flex)
115
+ 6. Style links with hover:text-blue-600 dark:hover:text-blue-400
116
+
117
+ Footer.astro:
118
+ 1. Create footer element with border-t border-gray-200 dark:border-gray-800
119
+ 2. Container max-w-3xl mx-auto px-4 py-8
120
+ 3. Copyright text: © 2024 James Weatherhead
121
+ 4. Optional: Contact links or social media (GitHub, Twitter) if provided
122
+ 5. Small text size: text-sm text-gray-600 dark:text-gray-400
123
+
124
+ AVOID: Do not add complex navigation menus (keep minimal - 3 links max). Do not add social media icons unless assets provided. WHY: Requirements specify "minimal design" - extra navigation adds visual clutter.
125
+ </action>
126
+ <verify>
127
+ Check: src/components/Header.astro exists with nav links
128
+ Check: src/components/Footer.astro exists with copyright
129
+ Check: Both use max-w-3xl for content width consistency
130
+ Run: grep -r "max-w-3xl" src/components/
131
+ </verify>
132
+ <done>
133
+ - Header.astro contains site title and 3 navigation links
134
+ - Footer.astro contains copyright and minimal info
135
+ - Both components use consistent container width (max-w-3xl)
136
+ - Responsive styles applied with Tailwind breakpoints
137
+ </done>
138
+ </thread>
139
+
140
+ <thread type="auto">
141
+ <name>Thread 3: Implement dark mode toggle component</name>
142
+ <files>src/components/DarkModeToggle.astro</files>
143
+ <action>
144
+ Create interactive dark mode toggle button:
145
+
146
+ 1. Create DarkModeToggle.astro with client:load directive (needs JS)
147
+ 2. Button element with aria-label="Toggle dark mode" for accessibility
148
+ 3. Icon: Use Unicode characters (☀️ sun / 🌙 moon) or SVG for sun/moon icons
149
+ 4. Client-side script:
150
+ ```js
151
+ const toggle = document.querySelector('#dark-mode-toggle');
152
+ toggle.addEventListener('click', () => {
153
+ const isDark = document.documentElement.classList.toggle('dark');
154
+ localStorage.setItem('theme', isDark ? 'dark' : 'light');
155
+ });
156
+ ```
157
+ 5. Style: rounded-full p-2 hover:bg-gray-200 dark:hover:bg-gray-800 transition
158
+ 6. Position in Header component (top-right corner)
159
+
160
+ AVOID: Do not use React or Vue (keep Astro-native for simplicity). Do not add animations beyond simple transition. WHY: Requirements don't specify framework components, and excessive animations conflict with minimal aesthetic.
161
+ </action>
162
+ <verify>
163
+ Check: DarkModeToggle.astro exists with client:load directive
164
+ Check: Toggle button has click handler that updates localStorage
165
+ Check: classList.toggle('dark') targets documentElement
166
+ Run: grep -r "client:load" src/components/DarkModeToggle.astro
167
+ </verify>
168
+ <done>
169
+ - DarkModeToggle.astro component created with interactive button
170
+ - Click handler toggles 'dark' class on html element
171
+ - Theme preference persists in localStorage
172
+ - Accessible with aria-label
173
+ </done>
174
+ </thread>
175
+
176
+ <thread type="checkpoint:human-verify" gate="blocking">
177
+ <what-built>
178
+ Complete layout system with:
179
+ - BaseLayout.astro (theme persistence, no FOUC)
180
+ - Header.astro (navigation: Home, Blog, About)
181
+ - Footer.astro (copyright, minimal info)
182
+ - DarkModeToggle.astro (interactive toggle with localStorage)
183
+ - global.css (Tailwind config, typography)
184
+ </what-built>
185
+ <how-to-verify>
186
+ 1. cd /Users/jacweath/grid/blog && npm run dev
187
+ 2. Create test page at src/pages/index.astro using BaseLayout
188
+ 3. Visit http://localhost:4321
189
+ 4. Check:
190
+ - Header appears with "James Weatherhead" title and nav links
191
+ - Footer appears with copyright
192
+ - Dark mode toggle button visible (sun/moon icon)
193
+ 5. Click dark mode toggle:
194
+ - Background switches from light to dark (or vice versa)
195
+ - Text color changes appropriately
196
+ - Refresh page - theme persists
197
+ 6. Test responsive:
198
+ - Resize browser to mobile width
199
+ - Header should stack vertically or remain readable
200
+ 7. Check browser console for errors (should be none)
201
+ </how-to-verify>
202
+ <resume-signal>Type "approved" if layout and dark mode work correctly, or describe any issues (e.g., "toggle not working", "colors wrong")</resume-signal>
203
+ </thread>
204
+
205
+ </threads>
206
+
207
+ <verification>
208
+ Complete verification checklist:
209
+ 1. BaseLayout.astro exists with theme persistence script
210
+ 2. Header.astro has navigation links (/, /blog, /about)
211
+ 3. Footer.astro has copyright text
212
+ 4. DarkModeToggle.astro has client:load and click handler
213
+ 5. global.css imports Tailwind directives
214
+ 6. Dark mode toggle switches theme without page reload
215
+ 7. Theme persists across page refresh (localStorage)
216
+ 8. Layout is responsive on mobile and desktop
217
+ 9. No FOUC (flash of unstyled content) on page load
218
+ 10. Browser console has no errors
219
+ </verification>
220
+
221
+ <success_criteria>
222
+ - Layout system renders correctly in browser
223
+ - Dark mode toggle switches between light and dark themes
224
+ - Theme preference persists in localStorage
225
+ - Navigation links are visible and clickable
226
+ - Responsive on mobile and desktop
227
+ - No console errors
228
+ - User approves visual appearance and functionality
229
+ </success_criteria>
@@ -1 +1 @@
1
- 1.2.0
1
+ 1.3.0
@@ -50,6 +50,67 @@ No boxes. No bloat. Just direct communication.
50
50
 
51
51
  ---
52
52
 
53
+ ## MODE SELECTION
54
+
55
+ After User states what they want to build, ask ONE question:
56
+
57
+ ```
58
+ /\
59
+ / \
60
+ / IO \
61
+ /______\
62
+ |
63
+ Mode selection...
64
+
65
+ How involved do you want to be?
66
+
67
+ HANDS OFF - I make all technical decisions. You approve the final plan.
68
+ HANDS ON - We discuss stack, features, architecture together.
69
+
70
+ End of Line.
71
+ ```
72
+
73
+ ### HANDS OFF Mode
74
+
75
+ User wants results, not questions. You:
76
+
77
+ 1. **Research first** - Spawn parallel research agents to find best practices:
78
+ ```python
79
+ # Spawn 3 research agents in parallel
80
+ Task(prompt="Research best tech stack for {project_type} in 2024-2025. Return top recommendation with reasoning.", ...)
81
+ Task(prompt="Research best practices and common patterns for {project_type}. Return key patterns to implement.", ...)
82
+ Task(prompt="Research deployment options for {project_type}. Return recommended approach.", ...)
83
+ ```
84
+
85
+ 2. **Make decisions** - Based on research, YOU choose the stack. Don't ask.
86
+
87
+ 3. **Present plan** - Show User ONE summary for approval:
88
+ ```
89
+ PROPOSED BUILD
90
+ ══════════════
91
+
92
+ Project: {name}
93
+ Stack: {your choices based on research}
94
+ Features: {sensible defaults}
95
+ Timeline: {blocks/threads}
96
+
97
+ Approve to begin? [y/n]
98
+ ```
99
+
100
+ 4. **Build** - On approval, spawn Planner → Executors → Recognizer
101
+
102
+ ### HANDS ON Mode
103
+
104
+ User wants control. Use dream extraction questioning (but keep it minimal):
105
+ - Max 2-3 questions total
106
+ - Present options, not open-ended questions
107
+ - Get to building fast
108
+
109
+ **ANTI-PATTERN:** Never do checklist walking (Framework? Hosting? Features? Domain? etc.)
110
+ Instead: "Here's what I recommend: X, Y, Z. Any changes?"
111
+
112
+ ---
113
+
53
114
  ## PROGRAM SPAWNING PROTOCOL
54
115
 
55
116
  ### Available Programs
@@ -198,11 +259,12 @@ When a Program hits a checkpoint, it returns structured data:
198
259
  When you need User input:
199
260
 
200
261
  ```
201
- ╱╲
202
-
203
- IO
204
- ╱══════╲
205
- ↑ Disc ascending...
262
+ /\
263
+ / \
264
+ / IO \
265
+ /______\
266
+ |
267
+ Disc ascending...
206
268
 
207
269
  [Question]
208
270
  ```
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "the-grid-cc",
3
- "version": "1.2.0",
3
+ "version": "1.3.0",
4
4
  "description": "Agent orchestration for Claude Code. You talk to Master Control. Master Control handles the rest.",
5
5
  "main": "index.js",
6
6
  "bin": {