projecta-rrr 1.5.28 → 1.6.1
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 +114 -0
- package/bin/install.js +20 -1
- package/commands/rrr/bootstrap-nextjs.md +439 -0
- package/commands/rrr/help.md +63 -3
- package/commands/rrr/new-project.md +470 -20
- package/mcp.registry.json +128 -0
- package/package.json +9 -2
- package/projecta.defaults.json +32 -0
- package/rrr/presets/api-admin.yml +73 -0
- package/rrr/presets/landing-waitlist.yml +55 -0
- package/rrr/presets/saas-dashboard.yml +85 -0
- package/rrr/presets/voice-agent.yml +77 -0
- package/scripts/mcp-setup.sh +224 -0
- package/scripts/pushpa-mode.sh +639 -0
package/README.md
CHANGED
|
@@ -164,6 +164,120 @@ If you prefer not to use that flag, add this to your project's `.claude/settings
|
|
|
164
164
|
|
|
165
165
|
---
|
|
166
166
|
|
|
167
|
+
## Projecta Preferred Pack
|
|
168
|
+
|
|
169
|
+
RRR includes a default stack optimized for rapid MVP development. Defaults are recommended but overrideable.
|
|
170
|
+
|
|
171
|
+
### Where Defaults Live
|
|
172
|
+
|
|
173
|
+
| File | Purpose |
|
|
174
|
+
|------|---------|
|
|
175
|
+
| `projecta.defaults.json` | Global defaults (core stack, preferred providers, discouraged list) |
|
|
176
|
+
| `.planning/MVP_FEATURES.yml` | Per-project capability selections |
|
|
177
|
+
| `.planning/PROJECT.md` | Deviation Notes (any overrides from defaults) |
|
|
178
|
+
|
|
179
|
+
### Core Stack (always assumed)
|
|
180
|
+
|
|
181
|
+
- **Framework:** Next.js (App Router) + TypeScript
|
|
182
|
+
- **Package Manager:** npm
|
|
183
|
+
- **UI:** Tailwind CSS + shadcn/ui
|
|
184
|
+
- **Testing:** Vitest (unit) + Playwright (e2e)
|
|
185
|
+
|
|
186
|
+
### Preferred Providers
|
|
187
|
+
|
|
188
|
+
| Capability | Default | Alternative |
|
|
189
|
+
|------------|---------|-------------|
|
|
190
|
+
| Database | Neon | — |
|
|
191
|
+
| Auth | Clerk | Neon Auth |
|
|
192
|
+
| Payments | Stripe | — |
|
|
193
|
+
| Object Storage | Cloudflare R2 | — |
|
|
194
|
+
| Analytics | PostHog | — |
|
|
195
|
+
| Voice | Deepgram | — |
|
|
196
|
+
| Deploy | Render | — |
|
|
197
|
+
|
|
198
|
+
### Agent Stack (when agents needed)
|
|
199
|
+
|
|
200
|
+
- **Orchestration:** Mastra
|
|
201
|
+
- **Agent Auth:** Auth.dev
|
|
202
|
+
- **Agent Mail:** Agentmail
|
|
203
|
+
- **Sandbox:** E2B
|
|
204
|
+
- **Browser Automation:** Browserbase
|
|
205
|
+
|
|
206
|
+
### Overrides
|
|
207
|
+
|
|
208
|
+
If you choose a non-default provider, RRR asks for a reason and records it in Deviation Notes:
|
|
209
|
+
|
|
210
|
+
```markdown
|
|
211
|
+
## Deviation Notes
|
|
212
|
+
|
|
213
|
+
| Capability | Default | Chosen | Reason |
|
|
214
|
+
|------------|---------|--------|--------|
|
|
215
|
+
| auth | clerk | auth0 | Client requires Auth0 for SSO compliance |
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
### Discouraged Providers
|
|
219
|
+
|
|
220
|
+
These are allowed but require explicit justification: Firebase, Supabase, Auth0, Vercel, PlanetScale.
|
|
221
|
+
|
|
222
|
+
### MCP Auto-Setup
|
|
223
|
+
|
|
224
|
+
RRR includes an MCP registry that maps your selected providers to their MCP servers. After `/rrr:new-project` generates your `MVP_FEATURES.yml`:
|
|
225
|
+
|
|
226
|
+
```bash
|
|
227
|
+
npm run mcp:setup
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
This reads your feature selections and outputs the MCP configuration for Claude Code. Only MCPs you actually need get installed.
|
|
231
|
+
|
|
232
|
+
| Feature | MCP Server |
|
|
233
|
+
|---------|------------|
|
|
234
|
+
| Database (Neon) | `@neondatabase/mcp-server-neon` |
|
|
235
|
+
| Payments (Stripe) | `@stripe/mcp` |
|
|
236
|
+
| Analytics (PostHog) | `@anthropic/mcp-posthog` |
|
|
237
|
+
| Voice (Deepgram) | `@deepgram/mcp-server` |
|
|
238
|
+
| Browser (Browserbase) | `@anthropic/mcp-browserbase` |
|
|
239
|
+
| Sandbox (E2B) | `@e2b/mcp-server` |
|
|
240
|
+
| Storage (R2) | `@cloudflare/mcp-server-r2` |
|
|
241
|
+
|
|
242
|
+
**Always included:** Context7 (docs), GitHub, Filesystem, Sequential Thinking.
|
|
243
|
+
|
|
244
|
+
### Pushpa Mode (Autopilot)
|
|
245
|
+
|
|
246
|
+
Run phases overnight while you sleep. Pushpa Mode is an unattended runner that plans and executes phases sequentially, skipping any that require human verification.
|
|
247
|
+
|
|
248
|
+
```bash
|
|
249
|
+
bash scripts/pushpa-mode.sh
|
|
250
|
+
# or
|
|
251
|
+
npm run pushpa
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
**What it does:**
|
|
255
|
+
1. Preflights required API keys based on your `MVP_FEATURES.yml`
|
|
256
|
+
2. Iterates through phases in order
|
|
257
|
+
3. Plans any phase that doesn't have a plan yet
|
|
258
|
+
4. Executes phases automatically
|
|
259
|
+
5. **Skips** phases marked with `HITL_REQUIRED: true` (human verification needed)
|
|
260
|
+
6. Generates a morning report at `.planning/PUSHPA_REPORT.md`
|
|
261
|
+
|
|
262
|
+
**Prerequisites:**
|
|
263
|
+
- Run `/rrr:new-project` first (project must be initialized)
|
|
264
|
+
- Set all required API keys (script will check and warn)
|
|
265
|
+
- Recommend enabling YOLO mode in `.planning/config.json`
|
|
266
|
+
|
|
267
|
+
**Where outputs live:**
|
|
268
|
+
- Report: `.planning/PUSHPA_REPORT.md`
|
|
269
|
+
- Logs: `.planning/logs/pushpa_*.log`
|
|
270
|
+
|
|
271
|
+
**HITL Convention:**
|
|
272
|
+
Plans that require human verification should include one of these markers:
|
|
273
|
+
- `HITL_REQUIRED: true` (canonical)
|
|
274
|
+
- `HUMAN_VERIFICATION_REQUIRED`
|
|
275
|
+
- `MANUAL_VERIFICATION`
|
|
276
|
+
|
|
277
|
+
Pushpa Mode will skip these phases and record them in the report for manual follow-up.
|
|
278
|
+
|
|
279
|
+
---
|
|
280
|
+
|
|
167
281
|
## How It Works
|
|
168
282
|
|
|
169
283
|
### 1. Initialize Project (~10 minutes)
|
package/bin/install.js
CHANGED
|
@@ -301,7 +301,26 @@ function finishInstall(settingsPath, settings, statuslineCommand, notifyCommand,
|
|
|
301
301
|
writeSettings(settingsPath, settings);
|
|
302
302
|
|
|
303
303
|
console.log(`
|
|
304
|
-
${green}Done!${reset}
|
|
304
|
+
${green}Done!${reset}
|
|
305
|
+
|
|
306
|
+
${yellow}If you installed from inside Claude Code:${reset}
|
|
307
|
+
Type ${cyan}exit${reset} and restart ${cyan}claude${reset} so it reloads commands.
|
|
308
|
+
|
|
309
|
+
${yellow}Pick your start command:${reset}
|
|
310
|
+
|
|
311
|
+
${cyan}New/empty folder (greenfield)${reset}
|
|
312
|
+
/rrr:new-project
|
|
313
|
+
(bootstraps Next.js/TS baseline if folder is empty)
|
|
314
|
+
|
|
315
|
+
${cyan}Existing repo (brownfield)${reset}
|
|
316
|
+
/rrr:new-project
|
|
317
|
+
(brownfield-safe; won't overwrite or restructure your repo)
|
|
318
|
+
|
|
319
|
+
${cyan}RRR already initialized${reset}
|
|
320
|
+
/rrr:progress
|
|
321
|
+
(if .planning/STATE.md exists)
|
|
322
|
+
|
|
323
|
+
Run ${cyan}/rrr:help${reset} anytime to see all commands.
|
|
305
324
|
`);
|
|
306
325
|
}
|
|
307
326
|
|
|
@@ -0,0 +1,439 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: rrr:bootstrap-nextjs
|
|
3
|
+
description: Scaffold a Next.js App Router MVP with TypeScript, Tailwind, shadcn/ui, Vitest, and Playwright
|
|
4
|
+
allowed-tools:
|
|
5
|
+
- Read
|
|
6
|
+
- Write
|
|
7
|
+
- Edit
|
|
8
|
+
- Bash
|
|
9
|
+
- Glob
|
|
10
|
+
- Grep
|
|
11
|
+
- TodoWrite
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
<objective>
|
|
15
|
+
|
|
16
|
+
Bootstrap a complete Next.js App Router project with Projecta's default MVP stack:
|
|
17
|
+
|
|
18
|
+
- **Framework:** Next.js (App Router) + TypeScript
|
|
19
|
+
- **Package Manager:** npm only
|
|
20
|
+
- **UI:** Tailwind CSS + shadcn/ui
|
|
21
|
+
- **Unit Tests:** Vitest + Testing Library
|
|
22
|
+
- **E2E Tests:** Playwright
|
|
23
|
+
- **Environment:** .env.example with common MVP placeholders
|
|
24
|
+
|
|
25
|
+
This command creates a production-ready foundation in ~5 minutes. Run once per project.
|
|
26
|
+
|
|
27
|
+
**After this command:** Run `/rrr:new-project` to define requirements and roadmap.
|
|
28
|
+
|
|
29
|
+
</objective>
|
|
30
|
+
|
|
31
|
+
<process>
|
|
32
|
+
|
|
33
|
+
## Phase 1: Pre-flight Checks
|
|
34
|
+
|
|
35
|
+
**MANDATORY FIRST STEP — Execute these checks before ANY scaffolding:**
|
|
36
|
+
|
|
37
|
+
1. **Check for existing project:**
|
|
38
|
+
```bash
|
|
39
|
+
if [ -f package.json ]; then
|
|
40
|
+
echo "ERROR: package.json already exists. This command is for new projects only."
|
|
41
|
+
exit 1
|
|
42
|
+
fi
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
2. **Check npm is available:**
|
|
46
|
+
```bash
|
|
47
|
+
npm --version || { echo "ERROR: npm not found"; exit 1; }
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
3. **Initialize git repo if needed:**
|
|
51
|
+
```bash
|
|
52
|
+
if [ -d .git ] || [ -f .git ]; then
|
|
53
|
+
echo "Git repo exists"
|
|
54
|
+
else
|
|
55
|
+
git init
|
|
56
|
+
echo "Initialized new git repo"
|
|
57
|
+
fi
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
## Phase 2: Create Next.js Project
|
|
61
|
+
|
|
62
|
+
Display stage banner:
|
|
63
|
+
```
|
|
64
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
65
|
+
RRR ► BOOTSTRAPPING NEXT.JS MVP
|
|
66
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
1. **Create Next.js app with App Router:**
|
|
70
|
+
```bash
|
|
71
|
+
npx create-next-app@latest . --typescript --tailwind --eslint --app --src-dir --import-alias "@/*" --use-npm --no-turbopack
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
This creates:
|
|
75
|
+
- TypeScript configuration
|
|
76
|
+
- Tailwind CSS setup
|
|
77
|
+
- ESLint configuration
|
|
78
|
+
- App Router (src/app/)
|
|
79
|
+
- Path alias @/*
|
|
80
|
+
|
|
81
|
+
2. **Verify creation:**
|
|
82
|
+
```bash
|
|
83
|
+
[ -f package.json ] && [ -d src/app ] && echo "Next.js created successfully"
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
## Phase 3: Install shadcn/ui
|
|
87
|
+
|
|
88
|
+
1. **Initialize shadcn/ui:**
|
|
89
|
+
```bash
|
|
90
|
+
npx shadcn@latest init -d
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
This uses defaults:
|
|
94
|
+
- Style: New York
|
|
95
|
+
- Base color: Neutral
|
|
96
|
+
- CSS variables: Yes
|
|
97
|
+
|
|
98
|
+
2. **Add Button component:**
|
|
99
|
+
```bash
|
|
100
|
+
npx shadcn@latest add button -y
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
3. **Update homepage to show Button:**
|
|
104
|
+
|
|
105
|
+
Edit `src/app/page.tsx` to include a simple demo:
|
|
106
|
+
|
|
107
|
+
```tsx
|
|
108
|
+
import { Button } from "@/components/ui/button";
|
|
109
|
+
|
|
110
|
+
export default function Home() {
|
|
111
|
+
return (
|
|
112
|
+
<main className="flex min-h-screen flex-col items-center justify-center p-24">
|
|
113
|
+
<div className="text-center space-y-6">
|
|
114
|
+
<h1 className="text-4xl font-bold">Welcome to Your MVP</h1>
|
|
115
|
+
<p className="text-muted-foreground">
|
|
116
|
+
Built with Next.js, TypeScript, Tailwind, and shadcn/ui
|
|
117
|
+
</p>
|
|
118
|
+
<Button size="lg">Get Started</Button>
|
|
119
|
+
</div>
|
|
120
|
+
</main>
|
|
121
|
+
);
|
|
122
|
+
}
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
## Phase 4: Setup Vitest + Testing Library
|
|
126
|
+
|
|
127
|
+
1. **Install Vitest and Testing Library:**
|
|
128
|
+
```bash
|
|
129
|
+
npm install -D vitest @vitejs/plugin-react jsdom @testing-library/react @testing-library/jest-dom @testing-library/user-event
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
2. **Create vitest.config.ts:**
|
|
133
|
+
|
|
134
|
+
Write to `vitest.config.ts`:
|
|
135
|
+
```typescript
|
|
136
|
+
import { defineConfig } from 'vitest/config'
|
|
137
|
+
import react from '@vitejs/plugin-react'
|
|
138
|
+
import path from 'path'
|
|
139
|
+
|
|
140
|
+
export default defineConfig({
|
|
141
|
+
plugins: [react()],
|
|
142
|
+
test: {
|
|
143
|
+
environment: 'jsdom',
|
|
144
|
+
setupFiles: ['./src/test/setup.ts'],
|
|
145
|
+
include: ['src/**/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx}'],
|
|
146
|
+
},
|
|
147
|
+
resolve: {
|
|
148
|
+
alias: {
|
|
149
|
+
'@': path.resolve(__dirname, './src'),
|
|
150
|
+
},
|
|
151
|
+
},
|
|
152
|
+
})
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
3. **Create test setup file:**
|
|
156
|
+
|
|
157
|
+
Create `src/test/setup.ts`:
|
|
158
|
+
```typescript
|
|
159
|
+
import '@testing-library/jest-dom'
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
4. **Create smoke unit test:**
|
|
163
|
+
|
|
164
|
+
Create `src/app/page.test.tsx`:
|
|
165
|
+
```tsx
|
|
166
|
+
import { render, screen } from '@testing-library/react'
|
|
167
|
+
import { describe, it, expect } from 'vitest'
|
|
168
|
+
import Home from './page'
|
|
169
|
+
|
|
170
|
+
describe('Home', () => {
|
|
171
|
+
it('renders the welcome heading', () => {
|
|
172
|
+
render(<Home />)
|
|
173
|
+
expect(screen.getByRole('heading', { level: 1 })).toHaveTextContent('Welcome to Your MVP')
|
|
174
|
+
})
|
|
175
|
+
|
|
176
|
+
it('renders the get started button', () => {
|
|
177
|
+
render(<Home />)
|
|
178
|
+
expect(screen.getByRole('button', { name: /get started/i })).toBeInTheDocument()
|
|
179
|
+
})
|
|
180
|
+
})
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
5. **Add test script to package.json:**
|
|
184
|
+
|
|
185
|
+
Edit `package.json` to add:
|
|
186
|
+
```json
|
|
187
|
+
"scripts": {
|
|
188
|
+
"test": "vitest run",
|
|
189
|
+
"test:watch": "vitest"
|
|
190
|
+
}
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
## Phase 5: Setup Playwright
|
|
194
|
+
|
|
195
|
+
1. **Install Playwright:**
|
|
196
|
+
```bash
|
|
197
|
+
npm install -D @playwright/test
|
|
198
|
+
npx playwright install chromium
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
2. **Create playwright.config.ts:**
|
|
202
|
+
|
|
203
|
+
Write to `playwright.config.ts`:
|
|
204
|
+
```typescript
|
|
205
|
+
import { defineConfig, devices } from '@playwright/test'
|
|
206
|
+
|
|
207
|
+
export default defineConfig({
|
|
208
|
+
testDir: './e2e',
|
|
209
|
+
fullyParallel: true,
|
|
210
|
+
forbidOnly: !!process.env.CI,
|
|
211
|
+
retries: process.env.CI ? 2 : 0,
|
|
212
|
+
workers: process.env.CI ? 1 : undefined,
|
|
213
|
+
reporter: 'html',
|
|
214
|
+
use: {
|
|
215
|
+
baseURL: 'http://localhost:3000',
|
|
216
|
+
trace: 'on-first-retry',
|
|
217
|
+
},
|
|
218
|
+
projects: [
|
|
219
|
+
{
|
|
220
|
+
name: 'chromium',
|
|
221
|
+
use: { ...devices['Desktop Chrome'] },
|
|
222
|
+
},
|
|
223
|
+
],
|
|
224
|
+
webServer: {
|
|
225
|
+
command: 'npm run dev',
|
|
226
|
+
url: 'http://localhost:3000',
|
|
227
|
+
reuseExistingServer: !process.env.CI,
|
|
228
|
+
},
|
|
229
|
+
})
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
3. **Create smoke e2e test:**
|
|
233
|
+
|
|
234
|
+
Create `e2e/home.spec.ts`:
|
|
235
|
+
```typescript
|
|
236
|
+
import { test, expect } from '@playwright/test'
|
|
237
|
+
|
|
238
|
+
test.describe('Homepage', () => {
|
|
239
|
+
test('should display welcome message and button', async ({ page }) => {
|
|
240
|
+
await page.goto('/')
|
|
241
|
+
|
|
242
|
+
// Check heading
|
|
243
|
+
await expect(page.getByRole('heading', { level: 1 })).toContainText('Welcome to Your MVP')
|
|
244
|
+
|
|
245
|
+
// Check button exists and is clickable
|
|
246
|
+
const button = page.getByRole('button', { name: /get started/i })
|
|
247
|
+
await expect(button).toBeVisible()
|
|
248
|
+
})
|
|
249
|
+
})
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
4. **Add e2e script to package.json:**
|
|
253
|
+
|
|
254
|
+
Edit `package.json` to add:
|
|
255
|
+
```json
|
|
256
|
+
"scripts": {
|
|
257
|
+
"e2e": "playwright test",
|
|
258
|
+
"e2e:ui": "playwright test --ui"
|
|
259
|
+
}
|
|
260
|
+
```
|
|
261
|
+
|
|
262
|
+
## Phase 6: Create Environment Template
|
|
263
|
+
|
|
264
|
+
Create `.env.example` with common MVP placeholders:
|
|
265
|
+
|
|
266
|
+
```bash
|
|
267
|
+
# Database (Neon)
|
|
268
|
+
DATABASE_URL=
|
|
269
|
+
|
|
270
|
+
# Authentication (Clerk)
|
|
271
|
+
NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY=
|
|
272
|
+
CLERK_SECRET_KEY=
|
|
273
|
+
|
|
274
|
+
# Payments (Stripe)
|
|
275
|
+
STRIPE_SECRET_KEY=
|
|
276
|
+
NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY=
|
|
277
|
+
STRIPE_WEBHOOK_SECRET=
|
|
278
|
+
|
|
279
|
+
# Browser Automation (Browserbase)
|
|
280
|
+
BROWSERBASE_API_KEY=
|
|
281
|
+
BROWSERBASE_PROJECT_ID=
|
|
282
|
+
|
|
283
|
+
# Voice/Speech (Deepgram)
|
|
284
|
+
DEEPGRAM_API_KEY=
|
|
285
|
+
|
|
286
|
+
# App Config
|
|
287
|
+
NEXT_PUBLIC_APP_URL=http://localhost:3000
|
|
288
|
+
```
|
|
289
|
+
|
|
290
|
+
Update `.gitignore` to ensure `.env` is ignored (should already be from create-next-app, but verify):
|
|
291
|
+
```bash
|
|
292
|
+
grep -q "^\.env" .gitignore || echo ".env*.local" >> .gitignore
|
|
293
|
+
```
|
|
294
|
+
|
|
295
|
+
## Phase 7: Verification
|
|
296
|
+
|
|
297
|
+
Display verification banner:
|
|
298
|
+
```
|
|
299
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
300
|
+
RRR ► VERIFYING SETUP
|
|
301
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
302
|
+
```
|
|
303
|
+
|
|
304
|
+
1. **Run unit tests:**
|
|
305
|
+
```bash
|
|
306
|
+
npm test
|
|
307
|
+
```
|
|
308
|
+
|
|
309
|
+
Expected: All tests pass (2 tests)
|
|
310
|
+
|
|
311
|
+
2. **Run e2e tests:**
|
|
312
|
+
```bash
|
|
313
|
+
npm run e2e
|
|
314
|
+
```
|
|
315
|
+
|
|
316
|
+
Expected: All tests pass (1 test)
|
|
317
|
+
|
|
318
|
+
3. **Verify dev server starts:**
|
|
319
|
+
```bash
|
|
320
|
+
# Start dev server in background
|
|
321
|
+
npm run dev &
|
|
322
|
+
DEV_PID=$!
|
|
323
|
+
|
|
324
|
+
# Wait for server to be ready
|
|
325
|
+
sleep 5
|
|
326
|
+
|
|
327
|
+
# Check if server responds
|
|
328
|
+
curl -s http://localhost:3000 > /dev/null && echo "Dev server started successfully"
|
|
329
|
+
|
|
330
|
+
# Kill dev server
|
|
331
|
+
kill $DEV_PID 2>/dev/null
|
|
332
|
+
```
|
|
333
|
+
|
|
334
|
+
**If any verification fails:** Stop and fix the issue before proceeding.
|
|
335
|
+
|
|
336
|
+
## Phase 8: Commit Bootstrap
|
|
337
|
+
|
|
338
|
+
```bash
|
|
339
|
+
git add -A
|
|
340
|
+
git commit -m "$(cat <<'EOF'
|
|
341
|
+
chore: bootstrap nextjs mvp
|
|
342
|
+
|
|
343
|
+
Stack:
|
|
344
|
+
- Next.js 15 (App Router) + TypeScript
|
|
345
|
+
- Tailwind CSS + shadcn/ui
|
|
346
|
+
- Vitest + Testing Library (unit)
|
|
347
|
+
- Playwright (e2e)
|
|
348
|
+
|
|
349
|
+
Includes:
|
|
350
|
+
- Button component on homepage
|
|
351
|
+
- Smoke unit test (2 assertions)
|
|
352
|
+
- Smoke e2e test (1 spec)
|
|
353
|
+
- .env.example with MVP placeholders
|
|
354
|
+
EOF
|
|
355
|
+
)"
|
|
356
|
+
```
|
|
357
|
+
|
|
358
|
+
## Phase 9: Done
|
|
359
|
+
|
|
360
|
+
Present completion:
|
|
361
|
+
|
|
362
|
+
```
|
|
363
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
364
|
+
RRR ► BOOTSTRAP COMPLETE ✓
|
|
365
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
366
|
+
|
|
367
|
+
**Next.js MVP scaffolded successfully**
|
|
368
|
+
|
|
369
|
+
| Component | Status |
|
|
370
|
+
|-----------|--------|
|
|
371
|
+
| Next.js App Router | ✓ |
|
|
372
|
+
| TypeScript | ✓ |
|
|
373
|
+
| Tailwind CSS | ✓ |
|
|
374
|
+
| shadcn/ui | ✓ |
|
|
375
|
+
| Vitest + Testing Library | ✓ |
|
|
376
|
+
| Playwright | ✓ |
|
|
377
|
+
| .env.example | ✓ |
|
|
378
|
+
|
|
379
|
+
**Commands:**
|
|
380
|
+
npm run dev Start dev server
|
|
381
|
+
npm test Run unit tests
|
|
382
|
+
npm run e2e Run e2e tests
|
|
383
|
+
|
|
384
|
+
───────────────────────────────────────────────────────────────
|
|
385
|
+
|
|
386
|
+
## ▶ Next Up
|
|
387
|
+
|
|
388
|
+
Define your project requirements and create a roadmap:
|
|
389
|
+
|
|
390
|
+
`/rrr:new-project`
|
|
391
|
+
|
|
392
|
+
───────────────────────────────────────────────────────────────
|
|
393
|
+
```
|
|
394
|
+
|
|
395
|
+
</process>
|
|
396
|
+
|
|
397
|
+
<output>
|
|
398
|
+
|
|
399
|
+
Files created:
|
|
400
|
+
- `package.json` (with all dependencies)
|
|
401
|
+
- `src/app/page.tsx` (homepage with Button)
|
|
402
|
+
- `src/components/ui/button.tsx` (shadcn/ui Button)
|
|
403
|
+
- `vitest.config.ts`
|
|
404
|
+
- `src/test/setup.ts`
|
|
405
|
+
- `src/app/page.test.tsx` (smoke unit test)
|
|
406
|
+
- `playwright.config.ts`
|
|
407
|
+
- `e2e/home.spec.ts` (smoke e2e test)
|
|
408
|
+
- `.env.example`
|
|
409
|
+
|
|
410
|
+
</output>
|
|
411
|
+
|
|
412
|
+
<success_criteria>
|
|
413
|
+
|
|
414
|
+
- [ ] package.json exists with correct dependencies
|
|
415
|
+
- [ ] Next.js App Router structure created (src/app/)
|
|
416
|
+
- [ ] TypeScript configured (tsconfig.json)
|
|
417
|
+
- [ ] Tailwind CSS configured (tailwind.config.ts)
|
|
418
|
+
- [ ] shadcn/ui initialized with Button component
|
|
419
|
+
- [ ] Homepage shows Button component
|
|
420
|
+
- [ ] Vitest configured with Testing Library
|
|
421
|
+
- [ ] Smoke unit test passes (npm test)
|
|
422
|
+
- [ ] Playwright configured
|
|
423
|
+
- [ ] Smoke e2e test passes (npm run e2e)
|
|
424
|
+
- [ ] .env.example created with MVP placeholders
|
|
425
|
+
- [ ] Dev server starts successfully
|
|
426
|
+
- [ ] All files committed with message "chore: bootstrap nextjs mvp"
|
|
427
|
+
|
|
428
|
+
</success_criteria>
|
|
429
|
+
|
|
430
|
+
<anti_patterns>
|
|
431
|
+
|
|
432
|
+
- Do NOT use yarn or pnpm — npm only
|
|
433
|
+
- Do NOT use Pages Router — App Router only
|
|
434
|
+
- Do NOT add unnecessary dependencies
|
|
435
|
+
- Do NOT skip verification steps
|
|
436
|
+
- Do NOT commit if tests fail
|
|
437
|
+
- Do NOT create .env with real credentials
|
|
438
|
+
|
|
439
|
+
</anti_patterns>
|
package/commands/rrr/help.md
CHANGED
|
@@ -19,6 +19,20 @@ Output ONLY the reference content below. Do NOT add:
|
|
|
19
19
|
|
|
20
20
|
**RRR** creates hierarchical project plans optimized for solo agentic development with Claude Code. Built by [Projecta.ai](https://projecta.ai).
|
|
21
21
|
|
|
22
|
+
## Getting Started
|
|
23
|
+
|
|
24
|
+
**After install/update:** If you installed from inside Claude Code, type `exit` and restart `claude` so it reloads commands.
|
|
25
|
+
|
|
26
|
+
**Pick your start command:**
|
|
27
|
+
|
|
28
|
+
| Scenario | Command |
|
|
29
|
+
|----------|---------|
|
|
30
|
+
| New/empty folder (greenfield) | `/rrr:new-project` — bootstraps Next.js/TS baseline if folder is empty |
|
|
31
|
+
| Existing repo (brownfield) | `/rrr:new-project` — brownfield-safe; won't overwrite your repo |
|
|
32
|
+
| RRR already initialized | `/rrr:progress` — if `.planning/STATE.md` exists |
|
|
33
|
+
|
|
34
|
+
**MVP Definition of Done at Projecta:** local demo runs + tests pass.
|
|
35
|
+
|
|
22
36
|
## Quick Start
|
|
23
37
|
|
|
24
38
|
1. `/rrr:new-project` - Initialize project (includes research, requirements, roadmap)
|
|
@@ -50,7 +64,10 @@ npx projecta-rrr@latest
|
|
|
50
64
|
**`/rrr:new-project`**
|
|
51
65
|
Initialize new project through unified flow.
|
|
52
66
|
|
|
53
|
-
|
|
67
|
+
**Automatically bootstraps if needed** — detects if repo is a Next.js project. If not, runs the bootstrap sequence (Next.js + TypeScript + Tailwind + shadcn/ui + Vitest + Playwright) before proceeding.
|
|
68
|
+
|
|
69
|
+
One command takes you from empty folder to ready-for-planning:
|
|
70
|
+
- Bootstrap detection and execution (if needed)
|
|
54
71
|
- Deep questioning to understand what you're building
|
|
55
72
|
- Optional domain research (spawns 4 parallel researcher agents)
|
|
56
73
|
- Requirements definition with v1/v2/out-of-scope scoping
|
|
@@ -66,6 +83,20 @@ Creates all `.planning/` artifacts:
|
|
|
66
83
|
|
|
67
84
|
Usage: `/rrr:new-project`
|
|
68
85
|
|
|
86
|
+
**`/rrr:bootstrap-nextjs`**
|
|
87
|
+
Scaffold Next.js App Router project with Projecta defaults (standalone).
|
|
88
|
+
|
|
89
|
+
- Next.js (App Router) + TypeScript
|
|
90
|
+
- Tailwind CSS + shadcn/ui (with Button component)
|
|
91
|
+
- Vitest + Testing Library (smoke unit test)
|
|
92
|
+
- Playwright (smoke e2e test)
|
|
93
|
+
- `.env.example` with common MVP placeholders
|
|
94
|
+
|
|
95
|
+
Use this standalone when you only want the bootstrap without RRR planning.
|
|
96
|
+
Note: `/rrr:new-project` includes bootstrap automatically.
|
|
97
|
+
|
|
98
|
+
Usage: `/rrr:bootstrap-nextjs`
|
|
99
|
+
|
|
69
100
|
**`/rrr:map-codebase`**
|
|
70
101
|
Map an existing codebase for brownfield projects.
|
|
71
102
|
|
|
@@ -352,16 +383,45 @@ Change anytime by editing `.planning/config.json`
|
|
|
352
383
|
|
|
353
384
|
## Common Workflows
|
|
354
385
|
|
|
355
|
-
**Starting a new project:**
|
|
386
|
+
**Starting a new project (from empty folder):**
|
|
356
387
|
|
|
357
388
|
```
|
|
358
|
-
/rrr:new-project #
|
|
389
|
+
/rrr:new-project # Bootstraps repo (if needed) → questionnaire → requirements → roadmap
|
|
359
390
|
/clear
|
|
360
391
|
/rrr:plan-phase 1 # Create plans for first phase
|
|
361
392
|
/clear
|
|
362
393
|
/rrr:execute-phase 1 # Execute all plans in phase
|
|
363
394
|
```
|
|
364
395
|
|
|
396
|
+
That's it! `/rrr:new-project` handles everything from bootstrap to roadmap.
|
|
397
|
+
|
|
398
|
+
**Overnight mode: Pushpa Mode**
|
|
399
|
+
|
|
400
|
+
Run phases unattended while you sleep:
|
|
401
|
+
|
|
402
|
+
```
|
|
403
|
+
bash scripts/pushpa-mode.sh
|
|
404
|
+
# or
|
|
405
|
+
npm run pushpa
|
|
406
|
+
```
|
|
407
|
+
|
|
408
|
+
Prerequisites:
|
|
409
|
+
1. Run `/rrr:new-project` first
|
|
410
|
+
2. Set all required API keys (based on your MVP_FEATURES.yml)
|
|
411
|
+
3. Recommend enabling YOLO mode in config.json
|
|
412
|
+
|
|
413
|
+
Pushpa Mode will:
|
|
414
|
+
- Plan and execute phases sequentially
|
|
415
|
+
- Skip phases marked with `HITL_REQUIRED: true`
|
|
416
|
+
- Generate report at `.planning/PUSHPA_REPORT.md`
|
|
417
|
+
- Log everything to `.planning/logs/`
|
|
418
|
+
|
|
419
|
+
**Bootstrap only (no planning):**
|
|
420
|
+
|
|
421
|
+
```
|
|
422
|
+
/rrr:bootstrap-nextjs # Just scaffold Next.js + testing + shadcn
|
|
423
|
+
```
|
|
424
|
+
|
|
365
425
|
**Resuming work after a break:**
|
|
366
426
|
|
|
367
427
|
```
|