create-claudecraft 1.0.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/LICENSE +21 -0
- package/README.md +194 -0
- package/bin/cli.js +2 -0
- package/dist/constants.d.ts +71 -0
- package/dist/constants.js +128 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +229 -0
- package/dist/ink-prompts.d.ts +12 -0
- package/dist/ink-prompts.js +363 -0
- package/dist/prompts.d.ts +16 -0
- package/dist/prompts.js +434 -0
- package/dist/scaffold.d.ts +19 -0
- package/dist/scaffold.js +303 -0
- package/dist/ui.d.ts +27 -0
- package/dist/ui.js +254 -0
- package/package.json +74 -0
- package/templates/app/App.tsx +21 -0
- package/templates/base/CLAUDE.md +332 -0
- package/templates/base/eslint.config.js +28 -0
- package/templates/base/index.html +17 -0
- package/templates/base/package.json +43 -0
- package/templates/base/postcss.config.js +6 -0
- package/templates/base/tailwind.config.js +81 -0
- package/templates/base/tsconfig.json +25 -0
- package/templates/base/vite.config.ts +16 -0
- package/templates/commands/brainstorm.md +6 -0
- package/templates/commands/build.md +41 -0
- package/templates/commands/execute-plan.md +6 -0
- package/templates/commands/lint.md +41 -0
- package/templates/commands/ralph.md +113 -0
- package/templates/commands/typecheck.md +44 -0
- package/templates/commands/write-plan.md +6 -0
- package/templates/components/ErrorBoundary.tsx +49 -0
- package/templates/components/ui/Button.tsx +60 -0
- package/templates/components/ui/CodeBlock.tsx +46 -0
- package/templates/components/ui/CopyCommand.tsx +38 -0
- package/templates/components/ui/FilePreview.tsx +46 -0
- package/templates/components/ui/SkipLink.tsx +7 -0
- package/templates/components/ui/ThemeSelector.tsx +41 -0
- package/templates/components/ui/UICarousel.tsx +309 -0
- package/templates/context/ThemeContext.tsx +61 -0
- package/templates/homepage/HomePage.tsx +534 -0
- package/templates/homepage/NotFoundPage.tsx +17 -0
- package/templates/hooks/README.md +82 -0
- package/templates/hooks/check-branch.js +27 -0
- package/templates/hooks/typecheck-after-edit.js +51 -0
- package/templates/index.css +67 -0
- package/templates/lib/utils.ts +9 -0
- package/templates/main.tsx +16 -0
- package/templates/settings/MCP_SETUP.md +76 -0
- package/templates/settings/settings.json +16 -0
- package/templates/settings/settings.local.json +37 -0
- package/templates/skills/design/a11y-audit/SKILL.md +173 -0
- package/templates/skills/design/design-polish/SKILL.md +75 -0
- package/templates/skills/design/figma-to-code/SKILL.md +157 -0
- package/templates/skills/design/json-ld/SKILL.md +125 -0
- package/templates/skills/design/microcopy/SKILL.md +197 -0
- package/templates/skills/design/og-image/SKILL.md +157 -0
- package/templates/skills/design/ralph-wiggum-loops/SKILL.md +299 -0
- package/templates/skills/design/react-best-practices/SKILL.md +106 -0
- package/templates/skills/design/react-best-practices/references/react-performance-guidelines.md +143 -0
- package/templates/skills/design/seo-review/SKILL.md +96 -0
- package/templates/skills/design/sitemap-generator/SKILL.md +66 -0
- package/templates/skills/design/testing-patterns/SKILL.md +276 -0
- package/templates/skills/design/ui-skills/SKILL.md +85 -0
- package/templates/skills/design/visual-iteration/SKILL.md +88 -0
- package/templates/skills/workflow/brainstorming/SKILL.md +54 -0
- package/templates/skills/workflow/dispatching-parallel-agents/SKILL.md +180 -0
- package/templates/skills/workflow/executing-plans/SKILL.md +76 -0
- package/templates/skills/workflow/finishing-a-development-branch/SKILL.md +200 -0
- package/templates/skills/workflow/receiving-code-review/SKILL.md +213 -0
- package/templates/skills/workflow/requesting-code-review/SKILL.md +105 -0
- package/templates/skills/workflow/requesting-code-review/code-reviewer.md +146 -0
- package/templates/skills/workflow/subagent-driven-development/SKILL.md +240 -0
- package/templates/skills/workflow/subagent-driven-development/code-quality-reviewer-prompt.md +20 -0
- package/templates/skills/workflow/subagent-driven-development/implementer-prompt.md +78 -0
- package/templates/skills/workflow/subagent-driven-development/spec-reviewer-prompt.md +61 -0
- package/templates/skills/workflow/systematic-debugging/CREATION-LOG.md +119 -0
- package/templates/skills/workflow/systematic-debugging/SKILL.md +296 -0
- package/templates/skills/workflow/systematic-debugging/condition-based-waiting-example.ts +158 -0
- package/templates/skills/workflow/systematic-debugging/condition-based-waiting.md +115 -0
- package/templates/skills/workflow/systematic-debugging/defense-in-depth.md +122 -0
- package/templates/skills/workflow/systematic-debugging/find-polluter.sh +63 -0
- package/templates/skills/workflow/systematic-debugging/root-cause-tracing.md +169 -0
- package/templates/skills/workflow/systematic-debugging/test-academic.md +14 -0
- package/templates/skills/workflow/systematic-debugging/test-pressure-1.md +58 -0
- package/templates/skills/workflow/systematic-debugging/test-pressure-2.md +68 -0
- package/templates/skills/workflow/systematic-debugging/test-pressure-3.md +69 -0
- package/templates/skills/workflow/test-driven-development/SKILL.md +371 -0
- package/templates/skills/workflow/test-driven-development/testing-anti-patterns.md +299 -0
- package/templates/skills/workflow/using-git-worktrees/SKILL.md +217 -0
- package/templates/skills/workflow/using-superpowers/SKILL.md +87 -0
- package/templates/skills/workflow/verification-before-completion/SKILL.md +139 -0
- package/templates/skills/workflow/writing-plans/SKILL.md +116 -0
- package/templates/skills/workflow/writing-skills/SKILL.md +655 -0
- package/templates/skills/workflow/writing-skills/anthropic-best-practices.md +1150 -0
- package/templates/skills/workflow/writing-skills/examples/CLAUDE_MD_TESTING.md +189 -0
- package/templates/skills/workflow/writing-skills/graphviz-conventions.dot +172 -0
- package/templates/skills/workflow/writing-skills/persuasion-principles.md +187 -0
- package/templates/skills/workflow/writing-skills/render-graphs.js +168 -0
- package/templates/skills/workflow/writing-skills/testing-skills-with-subagents.md +384 -0
- package/templates/types/index.ts +17 -0
- package/templates/vite-env.d.ts +1 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { Routes, Route } from 'react-router-dom'
|
|
2
|
+
import { HomePage } from './pages/HomePage'
|
|
3
|
+
import { NotFoundPage } from './pages/NotFoundPage'
|
|
4
|
+
import { ErrorBoundary } from './components/ErrorBoundary'
|
|
5
|
+
import { SkipLink } from './components/ui/SkipLink'
|
|
6
|
+
|
|
7
|
+
function App() {
|
|
8
|
+
return (
|
|
9
|
+
<ErrorBoundary>
|
|
10
|
+
<SkipLink />
|
|
11
|
+
<main id="main-content">
|
|
12
|
+
<Routes>
|
|
13
|
+
<Route path="/" element={<HomePage />} />
|
|
14
|
+
<Route path="*" element={<NotFoundPage />} />
|
|
15
|
+
</Routes>
|
|
16
|
+
</main>
|
|
17
|
+
</ErrorBoundary>
|
|
18
|
+
)
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export default App
|
|
@@ -0,0 +1,332 @@
|
|
|
1
|
+
# claudecraft
|
|
2
|
+
|
|
3
|
+
Shipshape from the start. This file provides guidance to Claude Code when working with this project.
|
|
4
|
+
|
|
5
|
+
## Quick Reference
|
|
6
|
+
|
|
7
|
+
| Aspect | Value |
|
|
8
|
+
|--------|-------|
|
|
9
|
+
| **Framework** | React 18 + TypeScript |
|
|
10
|
+
| **Styling** | Tailwind CSS + DaisyUI |
|
|
11
|
+
| **Build Tool** | Vite |
|
|
12
|
+
| **Package Manager** | Bun |
|
|
13
|
+
| **Port** | 6969 |
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## Development Commands
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
bun install # Install dependencies
|
|
21
|
+
bun dev # Start dev server (port 6969)
|
|
22
|
+
bun run build # TypeScript check + Vite build
|
|
23
|
+
bun run lint # Run ESLint
|
|
24
|
+
bun test # Run tests
|
|
25
|
+
bun run preview # Preview production build
|
|
26
|
+
|
|
27
|
+
# Package management
|
|
28
|
+
bun add <package> # Add dependency
|
|
29
|
+
bun add -d <package> # Add dev dependency
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
|
|
34
|
+
## Project Architecture
|
|
35
|
+
|
|
36
|
+
<!-- Replace with your project description -->
|
|
37
|
+
Brief description of what this project does and its purpose.
|
|
38
|
+
|
|
39
|
+
### Directory Structure
|
|
40
|
+
|
|
41
|
+
```
|
|
42
|
+
src/
|
|
43
|
+
├── components/ # Reusable UI components
|
|
44
|
+
│ └── ui/ # Base UI primitives
|
|
45
|
+
├── context/ # React Context providers
|
|
46
|
+
├── pages/ # Route-level components
|
|
47
|
+
├── lib/ # Utilities and helpers
|
|
48
|
+
├── types/ # TypeScript type definitions
|
|
49
|
+
├── hooks/ # Custom React hooks
|
|
50
|
+
└── data/ # Constants and mock data
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
### Key Files
|
|
54
|
+
|
|
55
|
+
- `src/App.tsx` - Main application component with routing
|
|
56
|
+
- `src/main.tsx` - Application entry point with providers
|
|
57
|
+
- `src/context/ThemeContext.tsx` - Theme switching logic
|
|
58
|
+
- `vite.config.ts` - Vite configuration with path aliases
|
|
59
|
+
- `tailwind.config.js` - Tailwind + DaisyUI configuration
|
|
60
|
+
|
|
61
|
+
---
|
|
62
|
+
|
|
63
|
+
## Design System
|
|
64
|
+
|
|
65
|
+
### UI Framework: DaisyUI
|
|
66
|
+
|
|
67
|
+
This project uses [DaisyUI](https://daisyui.com/) for UI components with 32 pre-installed themes.
|
|
68
|
+
|
|
69
|
+
### Theme Management
|
|
70
|
+
|
|
71
|
+
```tsx
|
|
72
|
+
import { useTheme } from '@/context/ThemeContext'
|
|
73
|
+
|
|
74
|
+
function MyComponent() {
|
|
75
|
+
const { theme, setTheme, themes } = useTheme()
|
|
76
|
+
// theme: current theme name
|
|
77
|
+
// setTheme: function to change theme
|
|
78
|
+
// themes: array of all available themes
|
|
79
|
+
}
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
### DaisyUI Component Classes
|
|
83
|
+
|
|
84
|
+
```tsx
|
|
85
|
+
// Buttons
|
|
86
|
+
<button className="btn btn-primary">Primary</button>
|
|
87
|
+
<button className="btn btn-secondary btn-outline">Outline</button>
|
|
88
|
+
<button className="btn btn-lg">Large</button>
|
|
89
|
+
|
|
90
|
+
// Cards
|
|
91
|
+
<div className="card bg-base-100 shadow-xl">
|
|
92
|
+
<div className="card-body">
|
|
93
|
+
<h2 className="card-title">Title</h2>
|
|
94
|
+
<p>Content</p>
|
|
95
|
+
</div>
|
|
96
|
+
</div>
|
|
97
|
+
|
|
98
|
+
// Form inputs
|
|
99
|
+
<input className="input input-bordered" />
|
|
100
|
+
<select className="select select-bordered" />
|
|
101
|
+
<input type="checkbox" className="checkbox checkbox-primary" />
|
|
102
|
+
<input type="checkbox" className="toggle toggle-primary" />
|
|
103
|
+
|
|
104
|
+
// Alerts
|
|
105
|
+
<div className="alert alert-info">Info message</div>
|
|
106
|
+
<div className="alert alert-success">Success message</div>
|
|
107
|
+
|
|
108
|
+
// Badges
|
|
109
|
+
<span className="badge badge-primary">Badge</span>
|
|
110
|
+
|
|
111
|
+
// Loading
|
|
112
|
+
<span className="loading loading-spinner" />
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
See [DaisyUI docs](https://daisyui.com/components/) for full component list.
|
|
116
|
+
|
|
117
|
+
---
|
|
118
|
+
|
|
119
|
+
## Styling Guidelines - IMPORTANT
|
|
120
|
+
|
|
121
|
+
### DO ✅
|
|
122
|
+
|
|
123
|
+
- Use **DaisyUI component classes** first (`btn`, `card`, `input`)
|
|
124
|
+
- Use **DaisyUI semantic colors** (`bg-base-100`, `text-primary`, `bg-neutral`)
|
|
125
|
+
- Use **solid colors with opacity** when needed (`bg-black/50`, `border-primary/30`)
|
|
126
|
+
- Use **clean borders** for separation and visual hierarchy
|
|
127
|
+
- Apply **hover states** with `transition-all`
|
|
128
|
+
- Include **dark mode variants** using DaisyUI themes
|
|
129
|
+
- Keep it **minimal**: lots of whitespace, subtle shadows
|
|
130
|
+
|
|
131
|
+
### DON'T ❌
|
|
132
|
+
|
|
133
|
+
- **NO excessive gradients** - Don't overuse `bg-gradient-to-*` for decorative effects
|
|
134
|
+
- **NO fake glows** - Avoid `blur-*`, `shadow-*-glow` for artificial light emission
|
|
135
|
+
- **NO heavy shadows** - Prefer `shadow-sm` or `shadow-md` over `shadow-2xl`
|
|
136
|
+
- **DON'T mix design systems** - Stay consistent with DaisyUI patterns
|
|
137
|
+
- **DON'T forget accessibility** - Always include focus states and ARIA attributes
|
|
138
|
+
|
|
139
|
+
---
|
|
140
|
+
|
|
141
|
+
## Component Patterns
|
|
142
|
+
|
|
143
|
+
### Standard Component Structure
|
|
144
|
+
|
|
145
|
+
```tsx
|
|
146
|
+
interface Props {
|
|
147
|
+
title: string
|
|
148
|
+
variant?: 'primary' | 'secondary'
|
|
149
|
+
onAction?: () => void
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
export function ComponentName({ title, variant = 'primary', onAction }: Props) {
|
|
153
|
+
return (
|
|
154
|
+
<div className="card bg-base-100 shadow-xl">
|
|
155
|
+
<div className="card-body">
|
|
156
|
+
<h2 className="card-title">{title}</h2>
|
|
157
|
+
<button className={`btn btn-${variant}`} onClick={onAction}>
|
|
158
|
+
Action
|
|
159
|
+
</button>
|
|
160
|
+
</div>
|
|
161
|
+
</div>
|
|
162
|
+
)
|
|
163
|
+
}
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
### Icon Pattern
|
|
167
|
+
|
|
168
|
+
```tsx
|
|
169
|
+
import { IconName } from 'lucide-react'
|
|
170
|
+
|
|
171
|
+
// Icons inherit text color
|
|
172
|
+
<IconName className="w-5 h-5 text-base-content" />
|
|
173
|
+
<IconName className="w-6 h-6 text-primary" />
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
### Form Pattern
|
|
177
|
+
|
|
178
|
+
```tsx
|
|
179
|
+
<div className="form-control w-full">
|
|
180
|
+
<label className="label">
|
|
181
|
+
<span className="label-text">Label</span>
|
|
182
|
+
</label>
|
|
183
|
+
<input
|
|
184
|
+
type="text"
|
|
185
|
+
placeholder="Placeholder"
|
|
186
|
+
className="input input-bordered w-full"
|
|
187
|
+
/>
|
|
188
|
+
<label className="label">
|
|
189
|
+
<span className="label-text-alt">Helper text</span>
|
|
190
|
+
</label>
|
|
191
|
+
</div>
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
---
|
|
195
|
+
|
|
196
|
+
## Coding Guidelines
|
|
197
|
+
|
|
198
|
+
### Naming Conventions
|
|
199
|
+
|
|
200
|
+
| Type | Convention | Example |
|
|
201
|
+
|------|------------|---------|
|
|
202
|
+
| Components | PascalCase | `UserProfile.tsx` |
|
|
203
|
+
| Functions/hooks | camelCase | `useAuth.ts`, `formatDate.ts` |
|
|
204
|
+
| Types/interfaces | PascalCase | `UserData`, `ApiResponse` |
|
|
205
|
+
| Constants | SCREAMING_SNAKE_CASE | `MAX_RETRIES` |
|
|
206
|
+
| Files | Match export name | `UserProfile.tsx` exports `UserProfile` |
|
|
207
|
+
|
|
208
|
+
### TypeScript Guidelines
|
|
209
|
+
|
|
210
|
+
- Use TypeScript interfaces in separate `types.ts` files for shared types
|
|
211
|
+
- Prefer `interface` over `type` for object shapes
|
|
212
|
+
- Always type component props
|
|
213
|
+
- Use strict mode (enabled in tsconfig)
|
|
214
|
+
|
|
215
|
+
### State Management
|
|
216
|
+
|
|
217
|
+
- Theme state via `ThemeContext`
|
|
218
|
+
- Local state with `useState` for component-specific data
|
|
219
|
+
- Consider Zustand for complex global state
|
|
220
|
+
|
|
221
|
+
---
|
|
222
|
+
|
|
223
|
+
## File Organization
|
|
224
|
+
|
|
225
|
+
### Component Files
|
|
226
|
+
|
|
227
|
+
```
|
|
228
|
+
src/components/
|
|
229
|
+
├── ui/ # Base primitives (Button, Input, Modal)
|
|
230
|
+
├── layout/ # Layout components (Header, Sidebar, Footer)
|
|
231
|
+
├── features/ # Feature-specific components
|
|
232
|
+
└── shared/ # Shared across features
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
### Types Files
|
|
236
|
+
|
|
237
|
+
```
|
|
238
|
+
src/types/
|
|
239
|
+
├── index.ts # Common types, re-exports
|
|
240
|
+
├── api.ts # API response types
|
|
241
|
+
└── [feature].ts # Feature-specific types
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
---
|
|
245
|
+
|
|
246
|
+
## Testing
|
|
247
|
+
|
|
248
|
+
```bash
|
|
249
|
+
bun test # Run all tests
|
|
250
|
+
bun test --watch # Watch mode
|
|
251
|
+
bun run test:coverage # With coverage report
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
- Tests live next to source files: `Component.tsx` → `Component.test.tsx`
|
|
255
|
+
- Use React Testing Library for component tests
|
|
256
|
+
- Test behavior, not implementation
|
|
257
|
+
|
|
258
|
+
---
|
|
259
|
+
|
|
260
|
+
## Environment Variables
|
|
261
|
+
|
|
262
|
+
Create `.env.local` for local development (never commit):
|
|
263
|
+
|
|
264
|
+
```env
|
|
265
|
+
VITE_API_URL=http://localhost:3001
|
|
266
|
+
VITE_DEBUG=true
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
Access in code: `import.meta.env.VITE_API_URL`
|
|
270
|
+
|
|
271
|
+
---
|
|
272
|
+
|
|
273
|
+
## Common Tasks
|
|
274
|
+
|
|
275
|
+
### Adding a New Theme
|
|
276
|
+
|
|
277
|
+
Edit `tailwind.config.js` and add to the `daisyui.themes` array:
|
|
278
|
+
|
|
279
|
+
```js
|
|
280
|
+
{
|
|
281
|
+
mytheme: {
|
|
282
|
+
"primary": "#6366f1",
|
|
283
|
+
"secondary": "#f472b6",
|
|
284
|
+
// ... other colors
|
|
285
|
+
},
|
|
286
|
+
}
|
|
287
|
+
```
|
|
288
|
+
|
|
289
|
+
### Adding a New Component
|
|
290
|
+
|
|
291
|
+
1. Create file in `src/components/ui/`
|
|
292
|
+
2. Use DaisyUI classes for styling
|
|
293
|
+
3. Export from component file
|
|
294
|
+
4. Add types if needed
|
|
295
|
+
|
|
296
|
+
### Adding a New Page
|
|
297
|
+
|
|
298
|
+
1. Create component in `src/pages/`
|
|
299
|
+
2. Add route in `src/App.tsx`
|
|
300
|
+
3. Update navigation if needed
|
|
301
|
+
|
|
302
|
+
---
|
|
303
|
+
|
|
304
|
+
## Common Mistakes to Avoid
|
|
305
|
+
|
|
306
|
+
❌ **Don't** use inline styles when Tailwind/DaisyUI classes exist
|
|
307
|
+
✅ **Do** use utility classes: `className="p-4 rounded-lg"`
|
|
308
|
+
|
|
309
|
+
❌ **Don't** create custom CSS for standard components
|
|
310
|
+
✅ **Do** use DaisyUI: `className="btn btn-primary"`
|
|
311
|
+
|
|
312
|
+
❌ **Don't** hardcode colors like `text-[#333]`
|
|
313
|
+
✅ **Do** use semantic colors: `text-base-content`
|
|
314
|
+
|
|
315
|
+
❌ **Don't** forget loading and error states
|
|
316
|
+
✅ **Do** handle all UI states: loading, error, empty, success
|
|
317
|
+
|
|
318
|
+
❌ **Don't** mix different icon libraries
|
|
319
|
+
✅ **Do** stick to Lucide React for consistency
|
|
320
|
+
|
|
321
|
+
❌ **Don't** skip TypeScript types
|
|
322
|
+
✅ **Do** type all props and return values
|
|
323
|
+
|
|
324
|
+
---
|
|
325
|
+
|
|
326
|
+
## Notes
|
|
327
|
+
|
|
328
|
+
<!-- Add project-specific notes, gotchas, or important context -->
|
|
329
|
+
- Uses **bun** as package manager (faster than npm/yarn)
|
|
330
|
+
- Theme persists in localStorage
|
|
331
|
+
- Path alias `@/` maps to `src/`
|
|
332
|
+
- All DaisyUI themes are pre-installed
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import js from '@eslint/js'
|
|
2
|
+
import globals from 'globals'
|
|
3
|
+
import reactHooks from 'eslint-plugin-react-hooks'
|
|
4
|
+
import reactRefresh from 'eslint-plugin-react-refresh'
|
|
5
|
+
import tseslint from 'typescript-eslint'
|
|
6
|
+
|
|
7
|
+
export default tseslint.config(
|
|
8
|
+
{ ignores: ['dist'] },
|
|
9
|
+
{
|
|
10
|
+
extends: [js.configs.recommended, ...tseslint.configs.recommended],
|
|
11
|
+
files: ['**/*.{ts,tsx}'],
|
|
12
|
+
languageOptions: {
|
|
13
|
+
ecmaVersion: 2020,
|
|
14
|
+
globals: globals.browser,
|
|
15
|
+
},
|
|
16
|
+
plugins: {
|
|
17
|
+
'react-hooks': reactHooks,
|
|
18
|
+
'react-refresh': reactRefresh,
|
|
19
|
+
},
|
|
20
|
+
rules: {
|
|
21
|
+
...reactHooks.configs.recommended.rules,
|
|
22
|
+
'react-refresh/only-export-components': [
|
|
23
|
+
'warn',
|
|
24
|
+
{ allowConstantExport: true },
|
|
25
|
+
],
|
|
26
|
+
},
|
|
27
|
+
},
|
|
28
|
+
)
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en" data-theme="halloween">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8" />
|
|
5
|
+
<link rel="icon" type="image/svg+xml" href="/vite.svg" />
|
|
6
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
7
|
+
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
|
8
|
+
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
|
|
9
|
+
<link href="https://fonts.googleapis.com/css2?family=Caveat:wght@500;600&display=swap" rel="stylesheet" />
|
|
10
|
+
<meta name="description" content="Shipshape from the start. A designer-first boilerplate for building non-slop with Claude Code." />
|
|
11
|
+
<title>claudecraft — Shipshape from the start</title>
|
|
12
|
+
</head>
|
|
13
|
+
<body>
|
|
14
|
+
<div id="root"></div>
|
|
15
|
+
<script type="module" src="/src/main.tsx"></script>
|
|
16
|
+
</body>
|
|
17
|
+
</html>
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "claudecraft",
|
|
3
|
+
"private": true,
|
|
4
|
+
"version": "0.0.1",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"scripts": {
|
|
7
|
+
"dev": "vite",
|
|
8
|
+
"build": "tsc -b && vite build",
|
|
9
|
+
"lint": "eslint .",
|
|
10
|
+
"preview": "vite preview",
|
|
11
|
+
"test": "vitest",
|
|
12
|
+
"test:coverage": "vitest run --coverage"
|
|
13
|
+
},
|
|
14
|
+
"dependencies": {
|
|
15
|
+
"react": "^18.3.1",
|
|
16
|
+
"react-dom": "^18.3.1",
|
|
17
|
+
"react-router-dom": "^7.12.0",
|
|
18
|
+
"lucide-react": "^0.460.0",
|
|
19
|
+
"clsx": "^2.1.1",
|
|
20
|
+
"tailwind-merge": "^2.5.4"
|
|
21
|
+
},
|
|
22
|
+
"devDependencies": {
|
|
23
|
+
"@eslint/js": "^9.13.0",
|
|
24
|
+
"@tailwindcss/typography": "^0.5.19",
|
|
25
|
+
"@testing-library/jest-dom": "^6.6.2",
|
|
26
|
+
"@testing-library/react": "^16.0.1",
|
|
27
|
+
"@types/react": "^18.3.12",
|
|
28
|
+
"@types/react-dom": "^18.3.1",
|
|
29
|
+
"@vitejs/plugin-react": "^4.3.3",
|
|
30
|
+
"autoprefixer": "^10.4.20",
|
|
31
|
+
"daisyui": "^4.12.14",
|
|
32
|
+
"eslint": "^9.13.0",
|
|
33
|
+
"eslint-plugin-react-hooks": "^5.0.0",
|
|
34
|
+
"eslint-plugin-react-refresh": "^0.4.13",
|
|
35
|
+
"globals": "^15.11.0",
|
|
36
|
+
"postcss": "^8.4.47",
|
|
37
|
+
"tailwindcss": "^3.4.14",
|
|
38
|
+
"typescript": "~5.6.2",
|
|
39
|
+
"typescript-eslint": "^8.10.0",
|
|
40
|
+
"vite": "^5.4.10",
|
|
41
|
+
"vitest": "^2.1.4"
|
|
42
|
+
}
|
|
43
|
+
}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/** @type {import('tailwindcss').Config} */
|
|
2
|
+
export default {
|
|
3
|
+
content: [
|
|
4
|
+
"./index.html",
|
|
5
|
+
"./src/**/*.{js,ts,jsx,tsx}",
|
|
6
|
+
],
|
|
7
|
+
theme: {
|
|
8
|
+
extend: {},
|
|
9
|
+
},
|
|
10
|
+
plugins: [require("@tailwindcss/typography"), require("daisyui")],
|
|
11
|
+
daisyui: {
|
|
12
|
+
themes: [
|
|
13
|
+
// Light themes
|
|
14
|
+
"light",
|
|
15
|
+
"cupcake",
|
|
16
|
+
"bumblebee",
|
|
17
|
+
"emerald",
|
|
18
|
+
"corporate",
|
|
19
|
+
"garden",
|
|
20
|
+
"lofi",
|
|
21
|
+
"pastel",
|
|
22
|
+
"fantasy",
|
|
23
|
+
"wireframe",
|
|
24
|
+
"cmyk",
|
|
25
|
+
"autumn",
|
|
26
|
+
"acid",
|
|
27
|
+
"lemonade",
|
|
28
|
+
"winter",
|
|
29
|
+
"nord",
|
|
30
|
+
|
|
31
|
+
// Dark themes
|
|
32
|
+
"dark",
|
|
33
|
+
"synthwave",
|
|
34
|
+
"retro",
|
|
35
|
+
"cyberpunk",
|
|
36
|
+
"valentine",
|
|
37
|
+
"halloween",
|
|
38
|
+
"aqua",
|
|
39
|
+
"forest",
|
|
40
|
+
"black",
|
|
41
|
+
"luxury",
|
|
42
|
+
"dracula",
|
|
43
|
+
"business",
|
|
44
|
+
"night",
|
|
45
|
+
"coffee",
|
|
46
|
+
"dim",
|
|
47
|
+
"sunset",
|
|
48
|
+
|
|
49
|
+
// Custom theme from theme generator
|
|
50
|
+
{
|
|
51
|
+
custom: {
|
|
52
|
+
"primary": "#6366f1",
|
|
53
|
+
"primary-content": "#ffffff",
|
|
54
|
+
"secondary": "#f472b6",
|
|
55
|
+
"secondary-content": "#ffffff",
|
|
56
|
+
"accent": "#22d3ee",
|
|
57
|
+
"accent-content": "#000000",
|
|
58
|
+
"neutral": "#1f2937",
|
|
59
|
+
"neutral-content": "#d1d5db",
|
|
60
|
+
"base-100": "#ffffff",
|
|
61
|
+
"base-200": "#f3f4f6",
|
|
62
|
+
"base-300": "#e5e7eb",
|
|
63
|
+
"base-content": "#1f2937",
|
|
64
|
+
"info": "#3b82f6",
|
|
65
|
+
"info-content": "#ffffff",
|
|
66
|
+
"success": "#22c55e",
|
|
67
|
+
"success-content": "#ffffff",
|
|
68
|
+
"warning": "#f59e0b",
|
|
69
|
+
"warning-content": "#000000",
|
|
70
|
+
"error": "#ef4444",
|
|
71
|
+
"error-content": "#ffffff",
|
|
72
|
+
},
|
|
73
|
+
},
|
|
74
|
+
],
|
|
75
|
+
darkTheme: "dark",
|
|
76
|
+
base: true,
|
|
77
|
+
styled: true,
|
|
78
|
+
utils: true,
|
|
79
|
+
logs: false,
|
|
80
|
+
},
|
|
81
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"target": "ES2022",
|
|
4
|
+
"useDefineForClassFields": true,
|
|
5
|
+
"lib": ["ES2022", "DOM", "DOM.Iterable"],
|
|
6
|
+
"module": "ESNext",
|
|
7
|
+
"skipLibCheck": true,
|
|
8
|
+
"moduleResolution": "bundler",
|
|
9
|
+
"allowImportingTsExtensions": true,
|
|
10
|
+
"isolatedModules": true,
|
|
11
|
+
"moduleDetection": "force",
|
|
12
|
+
"noEmit": true,
|
|
13
|
+
"jsx": "react-jsx",
|
|
14
|
+
"strict": true,
|
|
15
|
+
"noUnusedLocals": true,
|
|
16
|
+
"noUnusedParameters": true,
|
|
17
|
+
"noFallthroughCasesInSwitch": true,
|
|
18
|
+
"noUncheckedSideEffectImports": true,
|
|
19
|
+
"baseUrl": ".",
|
|
20
|
+
"paths": {
|
|
21
|
+
"@/*": ["./src/*"]
|
|
22
|
+
}
|
|
23
|
+
},
|
|
24
|
+
"include": ["src"]
|
|
25
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { defineConfig } from 'vite'
|
|
2
|
+
import react from '@vitejs/plugin-react'
|
|
3
|
+
import path from 'path'
|
|
4
|
+
|
|
5
|
+
export default defineConfig({
|
|
6
|
+
plugins: [react()],
|
|
7
|
+
resolve: {
|
|
8
|
+
alias: {
|
|
9
|
+
'@': path.resolve(__dirname, './src'),
|
|
10
|
+
},
|
|
11
|
+
},
|
|
12
|
+
server: {
|
|
13
|
+
port: 6969,
|
|
14
|
+
host: true,
|
|
15
|
+
},
|
|
16
|
+
})
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: "You MUST use this before any creative work - creating features, building components, adding functionality, or modifying behavior. Explores requirements and design before implementation."
|
|
3
|
+
disable-model-invocation: true
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Invoke the superpowers:brainstorming skill and follow it exactly as presented to you
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# /build Command
|
|
2
|
+
|
|
3
|
+
Run the project build and provide a structured summary of results.
|
|
4
|
+
|
|
5
|
+
## Steps
|
|
6
|
+
|
|
7
|
+
1. Run `bun run build` to execute TypeScript compilation and Vite build
|
|
8
|
+
|
|
9
|
+
2. Parse the output for:
|
|
10
|
+
- TypeScript errors (with file locations)
|
|
11
|
+
- Build warnings
|
|
12
|
+
- Bundle size information
|
|
13
|
+
- Build success/failure status
|
|
14
|
+
|
|
15
|
+
3. Format results as:
|
|
16
|
+
|
|
17
|
+
```markdown
|
|
18
|
+
## Build Results
|
|
19
|
+
|
|
20
|
+
**Status:** ✅ Success | ❌ Failed
|
|
21
|
+
|
|
22
|
+
### TypeScript Errors (if any)
|
|
23
|
+
| File | Line | Error |
|
|
24
|
+
|------|------|-------|
|
|
25
|
+
| ... | ... | ... |
|
|
26
|
+
|
|
27
|
+
### Warnings (if any)
|
|
28
|
+
- ...
|
|
29
|
+
|
|
30
|
+
### Bundle Info
|
|
31
|
+
- Output directory: dist/
|
|
32
|
+
- Total size: X KB
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
4. If errors found:
|
|
36
|
+
- Suggest fixes for common issues
|
|
37
|
+
- Offer to fix automatically if straightforward
|
|
38
|
+
|
|
39
|
+
5. If successful:
|
|
40
|
+
- Report build time
|
|
41
|
+
- Note any optimization opportunities
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# /lint Command
|
|
2
|
+
|
|
3
|
+
Run ESLint and provide a structured summary of linting issues.
|
|
4
|
+
|
|
5
|
+
## Steps
|
|
6
|
+
|
|
7
|
+
1. Run `bun run lint` to execute ESLint
|
|
8
|
+
|
|
9
|
+
2. Parse the output for:
|
|
10
|
+
- Errors (blocking issues)
|
|
11
|
+
- Warnings (suggestions)
|
|
12
|
+
- File locations and line numbers
|
|
13
|
+
|
|
14
|
+
3. Format results as:
|
|
15
|
+
|
|
16
|
+
```markdown
|
|
17
|
+
## Lint Results
|
|
18
|
+
|
|
19
|
+
**Status:** ✅ No issues | ⚠️ X warnings | ❌ Y errors
|
|
20
|
+
|
|
21
|
+
### Errors
|
|
22
|
+
| File | Line | Rule | Message |
|
|
23
|
+
|------|------|------|---------|
|
|
24
|
+
| ... | ... | ... | ... |
|
|
25
|
+
|
|
26
|
+
### Warnings
|
|
27
|
+
| File | Line | Rule | Message |
|
|
28
|
+
|------|------|------|---------|
|
|
29
|
+
| ... | ... | ... | ... |
|
|
30
|
+
|
|
31
|
+
### Summary
|
|
32
|
+
- Files checked: X
|
|
33
|
+
- Errors: Y
|
|
34
|
+
- Warnings: Z
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
4. For fixable issues:
|
|
38
|
+
- Offer to run `bun run lint --fix`
|
|
39
|
+
|
|
40
|
+
5. For manual fixes:
|
|
41
|
+
- Suggest specific code changes
|