aiblueprint-cli 1.4.59 → 1.4.61
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/README.md +16 -36
- package/agents-config/agents/action.md +1 -1
- package/agents-config/agents/explore-codebase.md +53 -53
- package/agents-config/agents/explore-docs.md +50 -69
- package/agents-config/agents/websearch.md +36 -40
- package/agents-config/claude-config/scripts/.claude/skills/fix-on-my-computer/SKILL.md +81 -0
- package/agents-config/claude-config/scripts/CLAUDE.md +10 -4
- package/agents-config/claude-config/scripts/bun.lockb +0 -0
- package/agents-config/claude-config/scripts/package.json +22 -30
- package/agents-config/claude-config/scripts/statusline/CLAUDE.md +37 -155
- package/agents-config/claude-config/scripts/statusline/README.md +18 -94
- package/agents-config/claude-config/scripts/statusline/defaults.json +13 -10
- package/agents-config/claude-config/scripts/statusline/fixtures/mock-transcript.jsonl +4 -4
- package/agents-config/claude-config/scripts/statusline/fixtures/test-input.json +4 -4
- package/agents-config/claude-config/scripts/statusline/src/commands/interactive-config.ts +403 -0
- package/agents-config/claude-config/scripts/statusline/src/index.ts +33 -82
- package/agents-config/claude-config/scripts/statusline/src/lib/config-types.ts +7 -1
- package/agents-config/claude-config/scripts/statusline/src/lib/formatters.ts +40 -0
- package/agents-config/claude-config/scripts/statusline/src/lib/presets.ts +13 -13
- package/agents-config/claude-config/scripts/statusline/src/lib/render-pure.ts +24 -5
- package/agents-config/claude-config/scripts/statusline/statusline.config.free.json +79 -0
- package/agents-config/claude-config/scripts/statusline/statusline.config.json +77 -77
- package/agents-config/codex-config/config.toml +9 -0
- package/agents-config/codex-config/hooks/command-deny-list.ts +203 -0
- package/agents-config/commands/prompts/create-vitejs-app.md +272 -0
- package/agents-config/commands/prompts/nextjs-add-prisma-db.md +136 -0
- package/agents-config/commands/prompts/nextjs-setup-better-auth.md +173 -0
- package/agents-config/commands/prompts/nextjs-setup-project.md +200 -0
- package/agents-config/commands/prompts/prompt.md +55 -0
- package/agents-config/commands/prompts/saas-challenge-idea.md +135 -0
- package/agents-config/commands/prompts/saas-create-architecture.md +242 -0
- package/agents-config/commands/prompts/saas-create-headline.md +132 -0
- package/agents-config/commands/prompts/saas-create-landing-copywritting.md +267 -0
- package/agents-config/commands/prompts/saas-create-legals-docs.md +176 -0
- package/agents-config/commands/prompts/saas-create-logos.md +240 -0
- package/agents-config/commands/prompts/saas-create-prd.md +195 -0
- package/agents-config/commands/prompts/saas-create-tasks.md +240 -0
- package/agents-config/commands/prompts/saas-define-pricing.md +293 -0
- package/agents-config/commands/prompts/saas-find-domain-name.md +190 -0
- package/agents-config/commands/prompts/saas-implement-landing-page.md +257 -0
- package/agents-config/commands/prompts/setup-tmux.md +160 -0
- package/agents-config/commands/prompts/tools.md +148 -0
- package/agents-config/scripts/.claude/skills/fix-on-my-computer/SKILL.md +81 -0
- package/agents-config/scripts/CLAUDE.md +37 -0
- package/agents-config/scripts/biome.json +37 -0
- package/agents-config/scripts/bun.lockb +0 -0
- package/agents-config/scripts/package.json +24 -0
- package/agents-config/scripts/statusline/CLAUDE.md +87 -0
- package/agents-config/scripts/statusline/README.md +117 -0
- package/agents-config/scripts/statusline/__tests__/context.test.ts +229 -0
- package/agents-config/scripts/statusline/__tests__/formatters.test.ts +108 -0
- package/agents-config/scripts/statusline/__tests__/statusline.test.ts +309 -0
- package/agents-config/scripts/statusline/defaults.json +82 -0
- package/agents-config/scripts/statusline/fixtures/mock-transcript.jsonl +4 -0
- package/agents-config/scripts/statusline/fixtures/test-input.json +35 -0
- package/agents-config/scripts/statusline/src/commands/interactive-config.ts +403 -0
- package/agents-config/scripts/statusline/src/index.ts +141 -0
- package/agents-config/scripts/statusline/src/lib/config-types.ts +110 -0
- package/agents-config/scripts/statusline/src/lib/config.ts +21 -0
- package/agents-config/scripts/statusline/src/lib/context.ts +103 -0
- package/agents-config/scripts/statusline/src/lib/formatters.ts +426 -0
- package/agents-config/scripts/statusline/src/lib/git.ts +100 -0
- package/agents-config/scripts/statusline/src/lib/menu-factories.ts +224 -0
- package/agents-config/scripts/statusline/src/lib/presets.ts +177 -0
- package/agents-config/scripts/statusline/src/lib/render-pure.ts +516 -0
- package/agents-config/scripts/statusline/src/lib/types.ts +36 -0
- package/agents-config/scripts/statusline/src/lib/utils.ts +15 -0
- package/agents-config/scripts/statusline/statusline.config.free.json +79 -0
- package/agents-config/scripts/statusline/statusline.config.json +79 -0
- package/agents-config/scripts/statusline/test-with-fixtures.ts +37 -0
- package/agents-config/scripts/statusline/test.ts +20 -0
- package/agents-config/scripts/statusline/tsconfig.json +27 -0
- package/agents-config/scripts/tsconfig.json +27 -0
- package/agents-config/skills/{subagent-creator → agents-managers}/SKILL.md +47 -47
- package/agents-config/skills/{subagent-creator/references/subagents.md → agents-managers/references/agents.md} +45 -45
- package/agents-config/skills/{subagent-creator → agents-managers}/references/context-management.md +20 -20
- package/agents-config/skills/{subagent-creator → agents-managers}/references/debugging-agents.md +27 -27
- package/agents-config/skills/{subagent-creator → agents-managers}/references/error-handling-and-recovery.md +19 -19
- package/agents-config/skills/{subagent-creator → agents-managers}/references/evaluation-and-testing.md +29 -29
- package/agents-config/skills/{subagent-creator → agents-managers}/references/orchestration-patterns.md +5 -5
- package/agents-config/skills/{subagent-creator/references/writing-subagent-prompts.md → agents-managers/references/writing-agent-prompts.md} +23 -23
- package/agents-config/skills/codex-environment/SKILL.md +2 -0
- package/agents-config/skills/commit/SKILL.md +2 -0
- package/agents-config/skills/create-pr/SKILL.md +2 -0
- package/agents-config/skills/environments-manager/SKILL.md +271 -0
- package/agents-config/skills/environments-manager/examples/claude/.worktreeinclude +3 -0
- package/agents-config/skills/environments-manager/examples/claude/commands/dev.md +5 -0
- package/agents-config/skills/environments-manager/examples/claude/commands/lint.md +5 -0
- package/agents-config/skills/environments-manager/examples/claude/commands/test.md +5 -0
- package/agents-config/skills/environments-manager/examples/claude/commands/typecheck.md +5 -0
- package/agents-config/skills/environments-manager/examples/claude/settings.json +24 -0
- package/agents-config/skills/environments-manager/examples/codex/environments/environment.toml +29 -0
- package/agents-config/skills/environments-manager/examples/cursor/worktrees.json +3 -0
- package/agents-config/skills/environments-manager/examples/scripts/claude-worktree-create.sh +96 -0
- package/agents-config/skills/environments-manager/examples/scripts/claude-worktree-remove.sh +66 -0
- package/agents-config/skills/environments-manager/examples/scripts/dev.sh +15 -0
- package/agents-config/skills/environments-manager/examples/scripts/worktree-down.sh +22 -0
- package/agents-config/skills/environments-manager/examples/scripts/worktree-up.sh +50 -0
- package/agents-config/skills/environments-manager/references/claude.md +156 -0
- package/agents-config/skills/environments-manager/references/codex.md +97 -0
- package/agents-config/skills/environments-manager/references/cursor.md +88 -0
- package/agents-config/skills/fix-pr-comments/SKILL.md +2 -0
- package/agents-config/skills/grill-me/SKILL.md +10 -0
- package/agents-config/skills/merge/SKILL.md +2 -0
- package/agents-config/skills/rules-manager/SKILL.md +191 -0
- package/agents-config/skills/rules-manager/references/agents-vs-claude.md +66 -0
- package/agents-config/skills/rules-manager/references/examples.md +117 -0
- package/agents-config/skills/skill-manager/SKILL.md +101 -0
- package/agents-config/skills/skill-manager/references/claude-code.md +81 -0
- package/agents-config/skills/skill-manager/references/codex.md +288 -0
- package/agents-config/skills/skill-manager/references/cursor.md +125 -0
- package/agents-config/skills/skill-manager/references/description-recommandation.md +97 -0
- package/agents-config/skills/skill-manager/scripts/inspect-description.ts +743 -0
- package/agents-config/skills/ultrathink/SKILL.md +2 -0
- package/dist/cli.js +581 -299
- package/package.json +1 -1
- package/agents-config/claude-config/scripts/statusline/data/.gitignore +0 -8
- package/agents-config/claude-config/scripts/statusline/data/.gitkeep +0 -0
- package/agents-config/claude-config/scripts/statusline/docs/ARCHITECTURE.md +0 -166
- package/agents-config/claude-config/scripts/statusline/src/tests/spend-v2.test.ts +0 -306
- package/agents-config/skills/apex/SKILL.md +0 -261
- package/agents-config/skills/apex/scripts/setup-templates.sh +0 -100
- package/agents-config/skills/apex/scripts/update-progress.sh +0 -80
- package/agents-config/skills/apex/steps/step-00-init.md +0 -267
- package/agents-config/skills/apex/steps/step-00b-branch.md +0 -126
- package/agents-config/skills/apex/steps/step-00b-economy.md +0 -244
- package/agents-config/skills/apex/steps/step-00b-interactive.md +0 -153
- package/agents-config/skills/apex/steps/step-01-analyze.md +0 -361
- package/agents-config/skills/apex/steps/step-02-plan.md +0 -264
- package/agents-config/skills/apex/steps/step-03-execute.md +0 -239
- package/agents-config/skills/apex/steps/step-04-validate.md +0 -251
- package/agents-config/skills/apex/templates/00-context.md +0 -43
- package/agents-config/skills/apex/templates/01-analyze.md +0 -10
- package/agents-config/skills/apex/templates/02-plan.md +0 -10
- package/agents-config/skills/apex/templates/03-execute.md +0 -10
- package/agents-config/skills/apex/templates/04-validate.md +0 -10
- package/agents-config/skills/apex/templates/README.md +0 -176
- package/agents-config/skills/apex/templates/step-complete.md +0 -7
- package/agents-config/skills/claude-memory/SKILL.md +0 -293
- package/agents-config/skills/claude-memory/references/comprehensive-example.md +0 -175
- package/agents-config/skills/claude-memory/references/optimize-guide.md +0 -300
- package/agents-config/skills/claude-memory/references/project-patterns.md +0 -334
- package/agents-config/skills/claude-memory/references/prompting-techniques.md +0 -411
- package/agents-config/skills/claude-memory/references/rules-directory-guide.md +0 -298
- package/agents-config/skills/claude-memory/references/section-templates.md +0 -347
- package/agents-config/skills/fix-errors/SKILL.md +0 -61
- package/agents-config/skills/fix-grammar/SKILL.md +0 -59
- package/agents-config/skills/ralph-loop/SKILL.md +0 -117
- package/agents-config/skills/ralph-loop/scripts/setup.sh +0 -278
- package/agents-config/skills/ralph-loop/steps/step-00-init.md +0 -215
- package/agents-config/skills/ralph-loop/steps/step-01-interactive-prd.md +0 -366
- package/agents-config/skills/ralph-loop/steps/step-02-create-stories.md +0 -273
- package/agents-config/skills/ralph-loop/steps/step-03-finish.md +0 -245
- package/agents-config/skills/skill-creator/LICENSE.txt +0 -202
- package/agents-config/skills/skill-creator/SKILL.md +0 -421
- package/agents-config/skills/skill-creator/package.json +0 -5
- package/agents-config/skills/skill-creator/references/output-patterns.md +0 -82
- package/agents-config/skills/skill-creator/references/progressive-disclosure-patterns.md +0 -374
- package/agents-config/skills/skill-creator/references/prompting-integration.md +0 -363
- package/agents-config/skills/skill-creator/references/real-world-examples.md +0 -513
- package/agents-config/skills/skill-creator/references/script-patterns.md +0 -385
- package/agents-config/skills/skill-creator/references/workflows.md +0 -28
- package/agents-config/skills/skill-creator/references/xml-tag-guide.md +0 -606
- package/agents-config/skills/skill-creator/scripts/init-skill.ts +0 -214
- package/agents-config/skills/skill-creator/scripts/package-skill.ts +0 -146
- package/agents-config/skills/skill-creator/scripts/validate.ts +0 -138
- package/agents-config/skills/workflow-apex-free/SKILL.md +0 -261
- package/agents-config/skills/workflow-apex-free/scripts/setup-templates.sh +0 -100
- package/agents-config/skills/workflow-apex-free/scripts/update-progress.sh +0 -80
- package/agents-config/skills/workflow-apex-free/steps/step-00-init.md +0 -267
- package/agents-config/skills/workflow-apex-free/steps/step-00b-branch.md +0 -126
- package/agents-config/skills/workflow-apex-free/steps/step-00b-economy.md +0 -244
- package/agents-config/skills/workflow-apex-free/steps/step-00b-interactive.md +0 -153
- package/agents-config/skills/workflow-apex-free/steps/step-01-analyze.md +0 -361
- package/agents-config/skills/workflow-apex-free/steps/step-02-plan.md +0 -264
- package/agents-config/skills/workflow-apex-free/steps/step-03-execute.md +0 -239
- package/agents-config/skills/workflow-apex-free/steps/step-04-validate.md +0 -251
- package/agents-config/skills/workflow-apex-free/templates/00-context.md +0 -43
- package/agents-config/skills/workflow-apex-free/templates/01-analyze.md +0 -10
- package/agents-config/skills/workflow-apex-free/templates/02-plan.md +0 -10
- package/agents-config/skills/workflow-apex-free/templates/03-execute.md +0 -10
- package/agents-config/skills/workflow-apex-free/templates/04-validate.md +0 -10
- package/agents-config/skills/workflow-apex-free/templates/README.md +0 -176
- package/agents-config/skills/workflow-apex-free/templates/step-complete.md +0 -7
|
@@ -0,0 +1,272 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Create a Vite.js app with Tailwind CSS v4 and shadcn/ui in the current directory
|
|
3
|
+
argument-hint: [template]
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
<objective>
|
|
7
|
+
Create a Vite.js project with Tailwind CSS v4 and shadcn/ui in the current directory, handling all edge cases intelligently.
|
|
8
|
+
|
|
9
|
+
Templates: vanilla, vanilla-ts, vue, vue-ts, react, react-ts, react-swc, react-swc-ts, preact, preact-ts, lit, lit-ts, svelte, svelte-ts, solid, solid-ts, qwik, qwik-ts
|
|
10
|
+
|
|
11
|
+
Default: react-ts (if no template specified)
|
|
12
|
+
|
|
13
|
+
Note: shadcn/ui only works with React templates (react, react-ts, react-swc, react-swc-ts)
|
|
14
|
+
</objective>
|
|
15
|
+
|
|
16
|
+
<context>
|
|
17
|
+
Directory contents: !`ls -la 2>/dev/null || echo "EMPTY"`
|
|
18
|
+
Package.json exists: !`test -f package.json && echo "YES" || echo "NO"`
|
|
19
|
+
Vite config exists: !`ls vite.config.* 2>/dev/null || echo "NONE"`
|
|
20
|
+
</context>
|
|
21
|
+
|
|
22
|
+
<verified_sources>
|
|
23
|
+
- Vite docs: https://vite.dev/guide/
|
|
24
|
+
- Tailwind v4 docs: https://tailwindcss.com/docs/installation/using-vite
|
|
25
|
+
- shadcn/ui Vite: https://ui.shadcn.com/docs/installation/vite
|
|
26
|
+
- shadcn/ui Tailwind v4: https://ui.shadcn.com/docs/tailwind-v4
|
|
27
|
+
</verified_sources>
|
|
28
|
+
|
|
29
|
+
<process>
|
|
30
|
+
1. **Determine template**: Use `$ARGUMENTS` if provided, otherwise `react-ts`
|
|
31
|
+
|
|
32
|
+
2. **Analyze current directory**:
|
|
33
|
+
- Has `package.json` with vite? → Existing Vite project, add Tailwind + shadcn
|
|
34
|
+
- Has `package.json` without vite? → Add Vite + Tailwind + shadcn
|
|
35
|
+
- No `package.json`? → Create fresh Vite project
|
|
36
|
+
|
|
37
|
+
3. **Create Vite project** (if needed):
|
|
38
|
+
```bash
|
|
39
|
+
npm create vite@latest . -- --template <template>
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
If this fails (rare), use subfolder workaround:
|
|
43
|
+
```bash
|
|
44
|
+
npm create vite@latest .vite-temp -- --template <template>
|
|
45
|
+
mv .vite-temp/* .vite-temp/.* . 2>/dev/null
|
|
46
|
+
rmdir .vite-temp
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
4. **Install dependencies**:
|
|
50
|
+
```bash
|
|
51
|
+
npm install
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
5. **Install Tailwind CSS v4**:
|
|
55
|
+
```bash
|
|
56
|
+
npm install tailwindcss@latest @tailwindcss/vite@latest
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
6. **Install @types/node** (required for path aliases):
|
|
60
|
+
```bash
|
|
61
|
+
npm install -D @types/node
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
7. **Configure TypeScript paths** - Edit `tsconfig.json`:
|
|
65
|
+
```json
|
|
66
|
+
{
|
|
67
|
+
"compilerOptions": {
|
|
68
|
+
"baseUrl": ".",
|
|
69
|
+
"paths": {
|
|
70
|
+
"@/*": ["./src/*"]
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
Also edit `tsconfig.app.json` if it exists:
|
|
77
|
+
```json
|
|
78
|
+
{
|
|
79
|
+
"compilerOptions": {
|
|
80
|
+
"baseUrl": ".",
|
|
81
|
+
"paths": {
|
|
82
|
+
"@/*": ["./src/*"]
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
8. **Configure Vite** - Edit `vite.config.ts`:
|
|
89
|
+
```typescript
|
|
90
|
+
import path from "path"
|
|
91
|
+
import tailwindcss from "@tailwindcss/vite"
|
|
92
|
+
import react from "@vitejs/plugin-react"
|
|
93
|
+
import { defineConfig } from "vite"
|
|
94
|
+
|
|
95
|
+
export default defineConfig({
|
|
96
|
+
plugins: [react(), tailwindcss()],
|
|
97
|
+
resolve: {
|
|
98
|
+
alias: {
|
|
99
|
+
"@": path.resolve(__dirname, "./src"),
|
|
100
|
+
},
|
|
101
|
+
},
|
|
102
|
+
})
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
9. **Setup CSS** - Update `src/index.css`:
|
|
106
|
+
```css
|
|
107
|
+
@import "tailwindcss";
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
10. **Initialize shadcn/ui** (React templates only):
|
|
111
|
+
```bash
|
|
112
|
+
npx shadcn@latest init
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
When prompted:
|
|
116
|
+
- Style: Default or New York
|
|
117
|
+
- Base color: Neutral (recommended)
|
|
118
|
+
- CSS variables: Yes
|
|
119
|
+
|
|
120
|
+
Or non-interactive:
|
|
121
|
+
```bash
|
|
122
|
+
npx shadcn@latest init -y -b neutral
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
11. **Add shadcn components**:
|
|
126
|
+
```bash
|
|
127
|
+
npx shadcn@latest add button badge
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
12. **Create landing page** - Replace `src/App.tsx` with:
|
|
131
|
+
```tsx
|
|
132
|
+
import { Button } from "@/components/ui/button"
|
|
133
|
+
import { Badge } from "@/components/ui/badge"
|
|
134
|
+
|
|
135
|
+
function App() {
|
|
136
|
+
return (
|
|
137
|
+
<div className="min-h-svh bg-gradient-to-b from-background to-muted">
|
|
138
|
+
{/* Hero Section */}
|
|
139
|
+
<div className="container mx-auto px-4 py-16 sm:py-24">
|
|
140
|
+
<div className="flex flex-col items-center text-center space-y-8">
|
|
141
|
+
{/* Badge */}
|
|
142
|
+
<Badge variant="secondary" className="px-4 py-1.5 text-sm">
|
|
143
|
+
Powered by Vite + Tailwind v4 + shadcn/ui
|
|
144
|
+
</Badge>
|
|
145
|
+
|
|
146
|
+
{/* Main Heading */}
|
|
147
|
+
<h1 className="text-4xl sm:text-6xl lg:text-7xl font-bold tracking-tight">
|
|
148
|
+
<span className="bg-gradient-to-r from-foreground via-foreground/80 to-foreground bg-clip-text">
|
|
149
|
+
ViteJS
|
|
150
|
+
</span>
|
|
151
|
+
<span className="text-primary"> Ready</span>
|
|
152
|
+
</h1>
|
|
153
|
+
|
|
154
|
+
{/* Subtitle */}
|
|
155
|
+
<p className="max-w-2xl text-lg sm:text-xl text-muted-foreground">
|
|
156
|
+
Your project is set up with the modern stack. Start building something amazing.
|
|
157
|
+
</p>
|
|
158
|
+
|
|
159
|
+
{/* CTA Buttons */}
|
|
160
|
+
<div className="flex flex-col sm:flex-row gap-4 pt-4">
|
|
161
|
+
<Button size="lg" className="min-w-40">
|
|
162
|
+
Get Started
|
|
163
|
+
</Button>
|
|
164
|
+
<Button size="lg" variant="outline" className="min-w-40">
|
|
165
|
+
Documentation
|
|
166
|
+
</Button>
|
|
167
|
+
</div>
|
|
168
|
+
|
|
169
|
+
{/* Tech Stack */}
|
|
170
|
+
<div className="pt-12 flex flex-wrap justify-center gap-8 text-muted-foreground">
|
|
171
|
+
<div className="flex items-center gap-2">
|
|
172
|
+
<div className="size-2 rounded-full bg-yellow-500" />
|
|
173
|
+
<span className="text-sm font-medium">Vite</span>
|
|
174
|
+
</div>
|
|
175
|
+
<div className="flex items-center gap-2">
|
|
176
|
+
<div className="size-2 rounded-full bg-cyan-500" />
|
|
177
|
+
<span className="text-sm font-medium">Tailwind v4</span>
|
|
178
|
+
</div>
|
|
179
|
+
<div className="flex items-center gap-2">
|
|
180
|
+
<div className="size-2 rounded-full bg-blue-500" />
|
|
181
|
+
<span className="text-sm font-medium">React</span>
|
|
182
|
+
</div>
|
|
183
|
+
<div className="flex items-center gap-2">
|
|
184
|
+
<div className="size-2 rounded-full bg-neutral-500" />
|
|
185
|
+
<span className="text-sm font-medium">shadcn/ui</span>
|
|
186
|
+
</div>
|
|
187
|
+
</div>
|
|
188
|
+
</div>
|
|
189
|
+
</div>
|
|
190
|
+
|
|
191
|
+
{/* Feature Cards */}
|
|
192
|
+
<div className="container mx-auto px-4 pb-16">
|
|
193
|
+
<div className="grid sm:grid-cols-2 lg:grid-cols-3 gap-6">
|
|
194
|
+
{[
|
|
195
|
+
{ title: "Lightning Fast", desc: "Instant HMR and optimized builds with Vite" },
|
|
196
|
+
{ title: "Type Safe", desc: "Full TypeScript support out of the box" },
|
|
197
|
+
{ title: "Beautiful UI", desc: "Pre-built components with shadcn/ui" },
|
|
198
|
+
].map((feature) => (
|
|
199
|
+
<div
|
|
200
|
+
key={feature.title}
|
|
201
|
+
className="group rounded-xl border bg-card p-6 transition-colors hover:bg-accent"
|
|
202
|
+
>
|
|
203
|
+
<h3 className="font-semibold text-lg mb-2">{feature.title}</h3>
|
|
204
|
+
<p className="text-sm text-muted-foreground">{feature.desc}</p>
|
|
205
|
+
</div>
|
|
206
|
+
))}
|
|
207
|
+
</div>
|
|
208
|
+
</div>
|
|
209
|
+
|
|
210
|
+
{/* Footer */}
|
|
211
|
+
<footer className="border-t py-8">
|
|
212
|
+
<p className="text-center text-sm text-muted-foreground">
|
|
213
|
+
Edit <code className="font-mono bg-muted px-1.5 py-0.5 rounded">src/App.tsx</code> to get started
|
|
214
|
+
</p>
|
|
215
|
+
</footer>
|
|
216
|
+
</div>
|
|
217
|
+
)
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
export default App
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
13. **Clean up default files** (optional):
|
|
224
|
+
- Delete `src/App.css` (styles now in Tailwind)
|
|
225
|
+
- Delete `src/assets/react.svg` (not needed)
|
|
226
|
+
- Update `index.html` title to your project name
|
|
227
|
+
|
|
228
|
+
14. **Verify setup**:
|
|
229
|
+
```bash
|
|
230
|
+
npm run dev
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
You should see a modern landing page with:
|
|
234
|
+
- Gradient background
|
|
235
|
+
- "ViteJS Ready" heading
|
|
236
|
+
- Tech stack indicators
|
|
237
|
+
- Feature cards
|
|
238
|
+
- Responsive design
|
|
239
|
+
</process>
|
|
240
|
+
|
|
241
|
+
<edge_cases>
|
|
242
|
+
- **Non-React template**: Skip shadcn/ui steps (only add Tailwind). shadcn/ui requires React.
|
|
243
|
+
- **Non-empty directory**: Vite supports this natively (PR #15272, Dec 2023)
|
|
244
|
+
- **Existing package.json**: Skip Vite creation, add dependencies to existing project
|
|
245
|
+
- **Existing vite.config**: MERGE plugins and alias config, don't replace
|
|
246
|
+
- **JavaScript (not TypeScript)**: Use `jsconfig.json` instead of `tsconfig.json` for paths
|
|
247
|
+
- **PowerShell (Windows)**: Use `---` instead of `--`: `npm create vite@latest . --- --template react-ts`
|
|
248
|
+
- **shadcn init fails**: Ensure tsconfig paths and vite alias are configured BEFORE running init
|
|
249
|
+
- **Tailwind v4 + shadcn**: Fully supported as of Feb 2025. Uses OKLCH colors, @theme inline directive
|
|
250
|
+
</edge_cases>
|
|
251
|
+
|
|
252
|
+
<shadcn_notes>
|
|
253
|
+
- shadcn/ui now supports Tailwind v4 and React 19 (Feb 2025 update)
|
|
254
|
+
- Components use `data-slot` attributes for styling
|
|
255
|
+
- HSL colors converted to OKLCH
|
|
256
|
+
- `toast` deprecated, use `sonner` instead
|
|
257
|
+
- Buttons use default cursor (not pointer)
|
|
258
|
+
- All components work with modern browsers only
|
|
259
|
+
</shadcn_notes>
|
|
260
|
+
|
|
261
|
+
<success_criteria>
|
|
262
|
+
- Vite project created in current directory
|
|
263
|
+
- `tailwindcss` and `@tailwindcss/vite` in package.json
|
|
264
|
+
- `tailwindcss()` plugin in vite.config
|
|
265
|
+
- Path alias `@` configured in tsconfig and vite.config
|
|
266
|
+
- `src/index.css` has `@import "tailwindcss"`
|
|
267
|
+
- `components.json` exists (shadcn config)
|
|
268
|
+
- `src/components/ui/button.tsx` and `badge.tsx` exist
|
|
269
|
+
- `src/App.tsx` contains the "ViteJS Ready" landing page
|
|
270
|
+
- `npm run dev` runs without errors
|
|
271
|
+
- Landing page displays with gradient, heading, buttons, and feature cards
|
|
272
|
+
</success_criteria>
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Setup Prisma ORM with PostgreSQL in a Next.js project with schema, migrations, and seed data
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
<objective>
|
|
6
|
+
Setup Prisma in the current Next.js project with a production-ready database configuration.
|
|
7
|
+
|
|
8
|
+
This creates a complete database layer including schema, migrations, client helper, seed script, and API routes for verification. Designed for projects using Neon PostgreSQL.
|
|
9
|
+
</objective>
|
|
10
|
+
|
|
11
|
+
<context>
|
|
12
|
+
Project structure: !`ls -la`
|
|
13
|
+
Package manager: !`cat package.json | grep -A2 '"packageManager"'`
|
|
14
|
+
Existing prisma config: !`ls prisma/ 2>/dev/null || echo "No prisma folder yet"`
|
|
15
|
+
TypeScript config: !`cat tsconfig.json | head -30`
|
|
16
|
+
</context>
|
|
17
|
+
|
|
18
|
+
<process>
|
|
19
|
+
## Phase 1: Information Gathering
|
|
20
|
+
|
|
21
|
+
1. **Ask for table structure** - Prompt user to describe ONE simple table to verify Prisma works:
|
|
22
|
+
- Table name and purpose
|
|
23
|
+
- Fields with types (String, Int, DateTime, Boolean)
|
|
24
|
+
- Example: "Post table with id, title, content, published, createdAt"
|
|
25
|
+
|
|
26
|
+
2. **Inspect existing structure** - Before coding:
|
|
27
|
+
- Check if `src/` folder exists
|
|
28
|
+
- Read `tsconfig.json` for path aliases
|
|
29
|
+
- Identify where `lib/` folder should be created
|
|
30
|
+
|
|
31
|
+
## Phase 2: Installation
|
|
32
|
+
|
|
33
|
+
3. **Install dependencies**:
|
|
34
|
+
```bash
|
|
35
|
+
pnpm add prisma @prisma/client
|
|
36
|
+
pnpm add -D tsx
|
|
37
|
+
npx prisma init
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
4. **Configure database provider** - Update `prisma/schema.prisma`:
|
|
41
|
+
- Set provider to "postgresql"
|
|
42
|
+
- Configure generator output path based on project structure
|
|
43
|
+
|
|
44
|
+
## Phase 3: Schema & Configuration
|
|
45
|
+
|
|
46
|
+
5. **Create schema** - Add the user-defined table with:
|
|
47
|
+
- `id` as String with `@id @default(cuid())`
|
|
48
|
+
- User-specified fields
|
|
49
|
+
- `createdAt DateTime @default(now())`
|
|
50
|
+
- `updatedAt DateTime @updatedAt`
|
|
51
|
+
|
|
52
|
+
6. **Configure exclusions**:
|
|
53
|
+
- Add generated folder to `.eslintignore`
|
|
54
|
+
- Add generated folder to `tsconfig.json` exclude array
|
|
55
|
+
|
|
56
|
+
7. **Create Prisma client helper** - Create singleton pattern in `lib/prisma.ts`:
|
|
57
|
+
```typescript
|
|
58
|
+
import { PrismaClient } from "@/generated/client";
|
|
59
|
+
|
|
60
|
+
const globalForPrisma = globalThis as unknown as {
|
|
61
|
+
prisma: PrismaClient | undefined;
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
export const prisma = globalForPrisma.prisma ?? new PrismaClient();
|
|
65
|
+
|
|
66
|
+
if (process.env.NODE_ENV !== "production") globalForPrisma.prisma = prisma;
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
8. **Create prisma.config.ts** - Root configuration:
|
|
70
|
+
```typescript
|
|
71
|
+
import path from "node:path";
|
|
72
|
+
import { defineConfig } from "prisma/config";
|
|
73
|
+
|
|
74
|
+
export default defineConfig({
|
|
75
|
+
schema: path.join("prisma", "schema.prisma"),
|
|
76
|
+
migrations: {
|
|
77
|
+
seed: `tsx prisma/seed.ts`,
|
|
78
|
+
},
|
|
79
|
+
});
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
## Phase 4: Data & Verification
|
|
83
|
+
|
|
84
|
+
9. **Create seed script** - `prisma/seed.ts` with 5-10 realistic records
|
|
85
|
+
|
|
86
|
+
10. **Run migrations**:
|
|
87
|
+
```bash
|
|
88
|
+
npx prisma generate
|
|
89
|
+
npx prisma migrate dev --name init
|
|
90
|
+
npx prisma db seed
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
11. **Create example API route** - `app/api/example/route.ts`:
|
|
94
|
+
- GET endpoint fetching all records
|
|
95
|
+
- POST endpoint creating new record
|
|
96
|
+
- Proper error handling
|
|
97
|
+
|
|
98
|
+
12. **Add package.json scripts**:
|
|
99
|
+
```json
|
|
100
|
+
{
|
|
101
|
+
"db:generate": "prisma generate",
|
|
102
|
+
"db:push": "prisma db push",
|
|
103
|
+
"db:migrate": "prisma migrate dev",
|
|
104
|
+
"db:studio": "prisma studio",
|
|
105
|
+
"db:seed": "prisma db seed"
|
|
106
|
+
}
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
## Phase 5: Documentation
|
|
110
|
+
|
|
111
|
+
13. **Update CLAUDE.md** with:
|
|
112
|
+
- Database provider and connection info
|
|
113
|
+
- Schema overview
|
|
114
|
+
- Available db scripts
|
|
115
|
+
</process>
|
|
116
|
+
|
|
117
|
+
<constraints>
|
|
118
|
+
**FORBIDDEN - Do not create**:
|
|
119
|
+
- User, Account, Session, VerificationToken tables (auth tables)
|
|
120
|
+
- Any user-related fields or foreign keys
|
|
121
|
+
- More than ONE table (keep it minimal for verification)
|
|
122
|
+
|
|
123
|
+
**REQUIRED**:
|
|
124
|
+
- Adapt paths to existing project structure
|
|
125
|
+
- Use cuid() for IDs, not uuid or auto-increment
|
|
126
|
+
- Configure generator output path correctly
|
|
127
|
+
- Create seed data with realistic values
|
|
128
|
+
</constraints>
|
|
129
|
+
|
|
130
|
+
<success_criteria>
|
|
131
|
+
- `pnpm prisma generate` completes without errors
|
|
132
|
+
- `pnpm prisma migrate dev` creates migration successfully
|
|
133
|
+
- `pnpm prisma db seed` populates database
|
|
134
|
+
- API route returns data when called
|
|
135
|
+
- No TypeScript or ESLint errors in generated files
|
|
136
|
+
</success_criteria>
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Setup Better Auth with Email OTP authentication and shadcn/ui components in a Next.js project
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
<objective>
|
|
6
|
+
Setup Better Auth in the current Next.js project with Email OTP authentication flow.
|
|
7
|
+
|
|
8
|
+
This creates a production-ready authentication system with Resend email delivery, a beautiful sign-in page using shadcn/ui, and an account management page. Uses Prisma adapter for database integration.
|
|
9
|
+
</objective>
|
|
10
|
+
|
|
11
|
+
<context>
|
|
12
|
+
Project structure: !`ls -la`
|
|
13
|
+
Prisma schema: !`cat prisma/schema.prisma 2>/dev/null | head -40 || echo "No Prisma schema"`
|
|
14
|
+
Existing auth: !`ls src/lib/auth* 2>/dev/null || ls lib/auth* 2>/dev/null || echo "No auth files"`
|
|
15
|
+
Path aliases: !`cat tsconfig.json | grep -A5 '"paths"'`
|
|
16
|
+
</context>
|
|
17
|
+
|
|
18
|
+
<process>
|
|
19
|
+
## Phase 1: Prerequisites
|
|
20
|
+
|
|
21
|
+
1. **Ask for Resend API Key** - Prompt user:
|
|
22
|
+
> "I need your Resend API key to send OTP emails. Get it from https://resend.com/api-keys"
|
|
23
|
+
|
|
24
|
+
2. **Verify Prisma is configured**:
|
|
25
|
+
- Check `prisma/schema.prisma` exists
|
|
26
|
+
- Identify Prisma client import path (custom output or default)
|
|
27
|
+
- Confirm `lib/prisma.ts` singleton exists
|
|
28
|
+
|
|
29
|
+
## Phase 2: Installation
|
|
30
|
+
|
|
31
|
+
3. **Install dependencies**:
|
|
32
|
+
```bash
|
|
33
|
+
pnpm add better-auth resend
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
4. **Install shadcn/ui components**:
|
|
37
|
+
```bash
|
|
38
|
+
pnpm dlx shadcn@latest add input label card button tabs input-otp
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
5. **Get reference components** (study then delete):
|
|
42
|
+
```bash
|
|
43
|
+
pnpm dlx shadcn@latest add https://coss.com/origin/r/comp-326.json
|
|
44
|
+
pnpm dlx shadcn@latest add https://coss.com/origin/r/comp-324.json
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
## Phase 3: Configuration
|
|
48
|
+
|
|
49
|
+
6. **Configure environment variables** - Add to `.env`:
|
|
50
|
+
```
|
|
51
|
+
BETTER_AUTH_SECRET="[generate with: openssl rand -base64 32]"
|
|
52
|
+
BETTER_AUTH_URL="http://localhost:3000"
|
|
53
|
+
RESEND_API_KEY="[user-provided]"
|
|
54
|
+
RESEND_FROM_EMAIL="onboarding@resend.dev"
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
7. **Create Better Auth instance** - `src/lib/auth.ts`:
|
|
58
|
+
```typescript
|
|
59
|
+
import { betterAuth } from "better-auth";
|
|
60
|
+
import { prismaAdapter } from "better-auth/adapters/prisma";
|
|
61
|
+
import { emailOTP } from "better-auth/plugins";
|
|
62
|
+
import { prisma } from "./prisma";
|
|
63
|
+
import { Resend } from "resend";
|
|
64
|
+
|
|
65
|
+
const resend = new Resend(process.env.RESEND_API_KEY);
|
|
66
|
+
|
|
67
|
+
export const auth = betterAuth({
|
|
68
|
+
database: prismaAdapter(prisma, { provider: "postgresql" }),
|
|
69
|
+
emailAndPassword: { enabled: false },
|
|
70
|
+
plugins: [
|
|
71
|
+
emailOTP({
|
|
72
|
+
async sendVerificationOTP({ email, otp, type }) {
|
|
73
|
+
await resend.emails.send({
|
|
74
|
+
from: process.env.RESEND_FROM_EMAIL!,
|
|
75
|
+
to: email,
|
|
76
|
+
subject: type === "sign-in" ? "Sign in to your account" : "Verify your email",
|
|
77
|
+
html: `<p>Your verification code is: <strong>${otp}</strong></p><p>This code will expire in 5 minutes.</p>`,
|
|
78
|
+
});
|
|
79
|
+
},
|
|
80
|
+
otpLength: 6,
|
|
81
|
+
expiresIn: 300,
|
|
82
|
+
}),
|
|
83
|
+
],
|
|
84
|
+
secret: process.env.BETTER_AUTH_SECRET!,
|
|
85
|
+
baseURL: process.env.BETTER_AUTH_URL!,
|
|
86
|
+
});
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
8. **Generate Prisma schema** using Better Auth CLI:
|
|
90
|
+
```bash
|
|
91
|
+
npx @better-auth/cli generate --config src/lib/auth.ts
|
|
92
|
+
npx prisma migrate dev --name add_better_auth
|
|
93
|
+
npx prisma generate
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
9. **Create API route handler** - `app/api/auth/[...all]/route.ts`:
|
|
97
|
+
```typescript
|
|
98
|
+
import { auth } from "@/lib/auth";
|
|
99
|
+
import { toNextJsHandler } from "better-auth/next-js";
|
|
100
|
+
|
|
101
|
+
export const { GET, POST } = toNextJsHandler(auth.handler);
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
10. **Create auth client** - `src/lib/auth-client.ts`:
|
|
105
|
+
```typescript
|
|
106
|
+
import { createAuthClient } from "better-auth/react";
|
|
107
|
+
import { emailOTPClient } from "better-auth/client/plugins";
|
|
108
|
+
|
|
109
|
+
export const authClient = createAuthClient({
|
|
110
|
+
baseURL: process.env.NEXT_PUBLIC_BETTER_AUTH_URL || "http://localhost:3000",
|
|
111
|
+
plugins: [emailOTPClient()],
|
|
112
|
+
});
|
|
113
|
+
|
|
114
|
+
export const { signIn, signOut, useSession } = authClient;
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
## Phase 4: UI Implementation
|
|
118
|
+
|
|
119
|
+
11. **Study reference components** - Read comp-326 and comp-324 patterns:
|
|
120
|
+
- Note form layouts, validation patterns, UX flows
|
|
121
|
+
- Understand OTP input behavior
|
|
122
|
+
|
|
123
|
+
12. **Create sign-in page** - `app/sign-in/page.tsx`:
|
|
124
|
+
- Two-step flow: email input → OTP verification
|
|
125
|
+
- Use `InputOTP` component with 6 slots
|
|
126
|
+
- Auto-submit on complete with `onComplete` handler
|
|
127
|
+
- Loading states and error handling with `text-destructive`
|
|
128
|
+
- Redirect to `/account` on success
|
|
129
|
+
|
|
130
|
+
13. **Create account page** - `app/account/page.tsx`:
|
|
131
|
+
- Protected route (redirect if no session)
|
|
132
|
+
- Tabs for Profile and Security
|
|
133
|
+
- Profile form with name update
|
|
134
|
+
- Sign out button
|
|
135
|
+
- Session info display
|
|
136
|
+
|
|
137
|
+
14. **Delete reference components** - Remove comp-326 and comp-324 files
|
|
138
|
+
|
|
139
|
+
## Phase 5: Integration & Testing
|
|
140
|
+
|
|
141
|
+
15. **Update layout** - Add TanStack Query provider if needed for session management
|
|
142
|
+
|
|
143
|
+
16. **Update home page** - Add auth status display with sign-in/account links
|
|
144
|
+
|
|
145
|
+
17. **Test complete flow**:
|
|
146
|
+
- Navigate to `/sign-in`
|
|
147
|
+
- Enter email, receive OTP
|
|
148
|
+
- Verify OTP, redirect to `/account`
|
|
149
|
+
- Update name, sign out
|
|
150
|
+
</process>
|
|
151
|
+
|
|
152
|
+
<constraints>
|
|
153
|
+
**UI RULES**:
|
|
154
|
+
- ONLY use shadcn/ui components and theme colors
|
|
155
|
+
- NEVER use custom colors - only background, foreground, primary, secondary, muted, accent, destructive
|
|
156
|
+
- All styling via Tailwind with theme-aware classes
|
|
157
|
+
- NO hardcoded colors like #000, blue-500, etc.
|
|
158
|
+
|
|
159
|
+
**FLEXIBILITY**:
|
|
160
|
+
- Check Prisma client location before importing
|
|
161
|
+
- Adapt all paths to project structure
|
|
162
|
+
- Match existing path alias conventions
|
|
163
|
+
</constraints>
|
|
164
|
+
|
|
165
|
+
<success_criteria>
|
|
166
|
+
- Sign-in page renders with email input
|
|
167
|
+
- OTP email is sent via Resend
|
|
168
|
+
- OTP verification signs user in
|
|
169
|
+
- Account page shows session data
|
|
170
|
+
- Name update persists to database
|
|
171
|
+
- Sign out clears session and redirects
|
|
172
|
+
- No TypeScript or linting errors
|
|
173
|
+
</success_criteria>
|