projecta-rrr 1.5.28 → 1.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +57 -0
- package/commands/rrr/bootstrap-nextjs.md +439 -0
- package/commands/rrr/help.md +28 -3
- package/commands/rrr/new-project.md +454 -20
- package/package.json +1 -1
- package/rrr/presets/api-admin.yml +73 -0
- package/rrr/presets/landing-waitlist.yml +55 -0
- package/rrr/presets/saas-dashboard.yml +79 -0
- package/rrr/presets/voice-agent.yml +77 -0
|
@@ -15,8 +15,49 @@ Initialize a new project through unified flow: questioning → research (optiona
|
|
|
15
15
|
|
|
16
16
|
This is the most leveraged moment in any project. Deep questioning here means better plans, better execution, better outcomes. One command takes you from idea to ready-for-planning.
|
|
17
17
|
|
|
18
|
+
## Projecta Preferred Pack
|
|
19
|
+
|
|
20
|
+
**Source of Truth:** `projecta.defaults.json` at repo root.
|
|
21
|
+
|
|
22
|
+
**Core Stack (always assumed):**
|
|
23
|
+
- Framework: Next.js (App Router)
|
|
24
|
+
- Language: TypeScript
|
|
25
|
+
- Package Manager: npm only
|
|
26
|
+
- UI: Tailwind CSS + shadcn/ui
|
|
27
|
+
- Unit Tests: Vitest + Testing Library
|
|
28
|
+
- E2E Tests: Playwright
|
|
29
|
+
|
|
30
|
+
**Preferred Providers (defaults, overrideable with reason):**
|
|
31
|
+
- Database: Neon
|
|
32
|
+
- Auth: Clerk (default), Neon Auth (alternative)
|
|
33
|
+
- Payments: Stripe
|
|
34
|
+
- Object Storage: Cloudflare R2
|
|
35
|
+
- Analytics: PostHog
|
|
36
|
+
- Voice: Deepgram
|
|
37
|
+
- Deploy: Render
|
|
38
|
+
|
|
39
|
+
**Agent Stack (when agents needed):**
|
|
40
|
+
- Orchestration: Mastra
|
|
41
|
+
- Agent Auth: Auth.dev
|
|
42
|
+
- Agent Mail: Agentmail
|
|
43
|
+
- Sandbox: E2B
|
|
44
|
+
- Browser Automation: Browserbase
|
|
45
|
+
|
|
46
|
+
**Discouraged (allowed with explicit reason):**
|
|
47
|
+
- Firebase, Supabase, Auth0, Vercel, PlanetScale
|
|
48
|
+
|
|
49
|
+
**Override Rules:**
|
|
50
|
+
- Defaults are recommended, NOT mandatory.
|
|
51
|
+
- If user wants to override any default, they must explicitly say so and provide a reason.
|
|
52
|
+
- All overrides are recorded in "Deviation Notes" section of PROJECT.md.
|
|
53
|
+
|
|
54
|
+
**Greenfield vs Brownfield:**
|
|
55
|
+
- GREENFIELD (empty folder): Runs `/rrr:bootstrap-nextjs` logic first, then questionnaire.
|
|
56
|
+
- BROWNFIELD (existing code): Skips bootstrap entirely, only creates `.planning/` artifacts. Does NOT run create-next-app, does NOT overwrite files.
|
|
57
|
+
|
|
18
58
|
**Creates:**
|
|
19
|
-
- `.planning/PROJECT.md` — project context
|
|
59
|
+
- `.planning/PROJECT.md` — project context (includes Deviation Notes)
|
|
60
|
+
- `.planning/MVP_FEATURES.yml` — capability selections per project
|
|
20
61
|
- `.planning/config.json` — workflow preferences
|
|
21
62
|
- `.planning/research/` — domain research (optional)
|
|
22
63
|
- `.planning/REQUIREMENTS.md` — scoped requirements
|
|
@@ -30,25 +71,222 @@ This is the most leveraged moment in any project. Deep questioning here means be
|
|
|
30
71
|
|
|
31
72
|
<execution_context>
|
|
32
73
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
74
|
+
@./.claude/rrr/references/questioning.md
|
|
75
|
+
@./.claude/rrr/references/ui-brand.md
|
|
76
|
+
@./.claude/rrr/templates/project.md
|
|
77
|
+
@./.claude/rrr/templates/requirements.md
|
|
37
78
|
|
|
38
79
|
</execution_context>
|
|
39
80
|
|
|
40
81
|
<process>
|
|
41
82
|
|
|
42
|
-
##
|
|
83
|
+
## Preflight: Greenfield vs Brownfield Safety
|
|
84
|
+
|
|
85
|
+
**MANDATORY FIRST STEP — Run these checks before ANY user interaction or modification:**
|
|
86
|
+
|
|
87
|
+
Display initial banner:
|
|
88
|
+
```
|
|
89
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
90
|
+
RRR ► NEW PROJECT
|
|
91
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
### Step 1: Preflight Shell Checks
|
|
95
|
+
|
|
96
|
+
Run these commands to detect repo state (use Bash tool):
|
|
97
|
+
|
|
98
|
+
```bash
|
|
99
|
+
# Preflight detection
|
|
100
|
+
echo "=== PREFLIGHT CHECK ==="
|
|
101
|
+
|
|
102
|
+
# Check for existing files/dirs
|
|
103
|
+
ls -la 2>/dev/null | head -20
|
|
104
|
+
|
|
105
|
+
# Check package.json
|
|
106
|
+
test -f package.json && echo "HAS_PACKAGE_JSON=yes" && cat package.json | head -10 || echo "HAS_PACKAGE_JSON=no"
|
|
107
|
+
|
|
108
|
+
# Check app directories
|
|
109
|
+
test -d app && echo "HAS_APP_DIR=yes" && ls app | head -5 || echo "HAS_APP_DIR=no"
|
|
110
|
+
test -d src && echo "HAS_SRC_DIR=yes" && ls src | head -5 || echo "HAS_SRC_DIR=no"
|
|
111
|
+
|
|
112
|
+
# Check next.config
|
|
113
|
+
ls next.config.* 2>/dev/null && echo "HAS_NEXT_CONFIG=yes" || echo "HAS_NEXT_CONFIG=no"
|
|
114
|
+
|
|
115
|
+
# Check git state
|
|
116
|
+
git rev-parse --is-inside-work-tree 2>/dev/null && git log -1 --oneline 2>/dev/null && echo "HAS_GIT_COMMITS=yes" || echo "HAS_GIT_COMMITS=no"
|
|
117
|
+
|
|
118
|
+
# Check RRR state
|
|
119
|
+
test -f .planning/STATE.md && echo "HAS_RRR_STATE=yes" || echo "HAS_RRR_STATE=no"
|
|
120
|
+
test -f .planning/PROJECT.md && echo "HAS_RRR_PROJECT=yes" || echo "HAS_RRR_PROJECT=no"
|
|
121
|
+
|
|
122
|
+
echo "=== END PREFLIGHT ==="
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
### Step 2: Classify Repo Mode
|
|
126
|
+
|
|
127
|
+
Based on preflight results, classify as:
|
|
128
|
+
|
|
129
|
+
**BROWNFIELD** if ANY of these are true:
|
|
130
|
+
- `HAS_PACKAGE_JSON=yes`
|
|
131
|
+
- `HAS_APP_DIR=yes`
|
|
132
|
+
- `HAS_SRC_DIR=yes`
|
|
133
|
+
- `HAS_NEXT_CONFIG=yes`
|
|
134
|
+
- `HAS_GIT_COMMITS=yes`
|
|
135
|
+
- `HAS_RRR_STATE=yes`
|
|
136
|
+
|
|
137
|
+
**GREENFIELD** if ALL are false (empty directory).
|
|
138
|
+
|
|
139
|
+
### Step 3: Handle Based on Mode
|
|
140
|
+
|
|
141
|
+
**If `HAS_RRR_STATE=yes` (RRR already initialized):**
|
|
142
|
+
|
|
143
|
+
Display and EXIT:
|
|
144
|
+
```
|
|
145
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
146
|
+
RRR project already initialized
|
|
147
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
148
|
+
|
|
149
|
+
This repo has .planning/STATE.md — RRR is already set up.
|
|
150
|
+
|
|
151
|
+
To resume work: /rrr:progress
|
|
152
|
+
To check status: /rrr:resume-work
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
Stop here. Do NOT proceed.
|
|
156
|
+
|
|
157
|
+
---
|
|
158
|
+
|
|
159
|
+
**If `HAS_RRR_PROJECT=yes` but `HAS_RRR_STATE=no`:**
|
|
160
|
+
|
|
161
|
+
Project was partially initialized. Continue to Phase 1 to complete setup.
|
|
162
|
+
|
|
163
|
+
---
|
|
164
|
+
|
|
165
|
+
**If BROWNFIELD (existing code, no RRR):**
|
|
166
|
+
|
|
167
|
+
Display:
|
|
168
|
+
```
|
|
169
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
170
|
+
BROWNFIELD MODE — Existing repo detected
|
|
171
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
172
|
+
|
|
173
|
+
Detected existing code. RRR will:
|
|
174
|
+
✓ Add .planning/ directory for project management
|
|
175
|
+
✓ Keep all existing files untouched
|
|
176
|
+
✗ Skip bootstrap (no create-next-app, no restructuring)
|
|
177
|
+
|
|
178
|
+
Starting RRR questionnaire...
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
**BROWNFIELD RULES:**
|
|
182
|
+
- Do NOT run `create-next-app`
|
|
183
|
+
- Do NOT overwrite or restructure existing files
|
|
184
|
+
- Do NOT reinstall Tailwind/shadcn/Vitest/Playwright
|
|
185
|
+
- ONLY create `.planning/` artifacts
|
|
186
|
+
- Proceed directly to Phase 1 (Setup)
|
|
187
|
+
|
|
188
|
+
Continue to Phase 1.
|
|
189
|
+
|
|
190
|
+
---
|
|
191
|
+
|
|
192
|
+
**If GREENFIELD (empty directory):**
|
|
193
|
+
|
|
194
|
+
Display:
|
|
195
|
+
```
|
|
196
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
197
|
+
GREENFIELD MODE — Empty directory
|
|
198
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
199
|
+
|
|
200
|
+
Bootstrapping with Projecta defaults...
|
|
201
|
+
(Next.js + TypeScript + Tailwind + shadcn/ui + Vitest + Playwright)
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
Run `/rrr:bootstrap-nextjs` logic:
|
|
205
|
+
|
|
206
|
+
a. **Initialize git:**
|
|
207
|
+
```bash
|
|
208
|
+
git init
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
b. **Create Next.js app:**
|
|
212
|
+
```bash
|
|
213
|
+
npx create-next-app@latest . --typescript --tailwind --eslint --app --src-dir --import-alias "@/*" --use-npm --no-turbopack
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
c. **Initialize shadcn/ui and add Button:**
|
|
217
|
+
```bash
|
|
218
|
+
npx shadcn@latest init -d
|
|
219
|
+
npx shadcn@latest add button -y
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
d. **Update homepage** — Edit `src/app/page.tsx`:
|
|
223
|
+
```tsx
|
|
224
|
+
import { Button } from "@/components/ui/button";
|
|
225
|
+
|
|
226
|
+
export default function Home() {
|
|
227
|
+
return (
|
|
228
|
+
<main className="flex min-h-screen flex-col items-center justify-center p-24">
|
|
229
|
+
<div className="text-center space-y-6">
|
|
230
|
+
<h1 className="text-4xl font-bold">Welcome to Your MVP</h1>
|
|
231
|
+
<p className="text-muted-foreground">
|
|
232
|
+
Built with Next.js, TypeScript, Tailwind, and shadcn/ui
|
|
233
|
+
</p>
|
|
234
|
+
<Button size="lg">Get Started</Button>
|
|
235
|
+
</div>
|
|
236
|
+
</main>
|
|
237
|
+
);
|
|
238
|
+
}
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
e. **Install Vitest + Testing Library:**
|
|
242
|
+
```bash
|
|
243
|
+
npm install -D vitest @vitejs/plugin-react jsdom @testing-library/react @testing-library/jest-dom @testing-library/user-event
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
f. **Create vitest.config.ts** and **src/test/setup.ts** and **src/app/page.test.tsx** (see `/rrr:bootstrap-nextjs` for full content)
|
|
247
|
+
|
|
248
|
+
g. **Add test scripts to package.json:** `"test": "vitest run"`, `"test:watch": "vitest"`
|
|
249
|
+
|
|
250
|
+
h. **Install Playwright:**
|
|
251
|
+
```bash
|
|
252
|
+
npm install -D @playwright/test
|
|
253
|
+
npx playwright install chromium
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
i. **Create playwright.config.ts** and **e2e/home.spec.ts** (see `/rrr:bootstrap-nextjs` for full content)
|
|
257
|
+
|
|
258
|
+
j. **Add e2e scripts to package.json:** `"e2e": "playwright test"`, `"e2e:ui": "playwright test --ui"`
|
|
43
259
|
|
|
44
|
-
**
|
|
260
|
+
k. **Create .env.example** with MVP placeholders
|
|
45
261
|
|
|
46
|
-
|
|
262
|
+
l. **Run tests:**
|
|
47
263
|
```bash
|
|
48
|
-
|
|
264
|
+
npm test
|
|
265
|
+
npm run e2e
|
|
49
266
|
```
|
|
50
267
|
|
|
51
|
-
|
|
268
|
+
m. **Commit bootstrap:**
|
|
269
|
+
```bash
|
|
270
|
+
git add -A
|
|
271
|
+
git commit -m "chore: bootstrap nextjs mvp"
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
Display:
|
|
275
|
+
```
|
|
276
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
277
|
+
BOOTSTRAP COMPLETE ✓
|
|
278
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
279
|
+
|
|
280
|
+
Starting RRR questionnaire...
|
|
281
|
+
```
|
|
282
|
+
|
|
283
|
+
Continue to Phase 1.
|
|
284
|
+
|
|
285
|
+
## Phase 1: Setup
|
|
286
|
+
|
|
287
|
+
**Execute these checks:**
|
|
288
|
+
|
|
289
|
+
1. **Initialize git repo in THIS directory** (required even if inside a parent repo):
|
|
52
290
|
```bash
|
|
53
291
|
if [ -d .git ] || [ -f .git ]; then
|
|
54
292
|
echo "Git repo exists in current directory"
|
|
@@ -58,7 +296,7 @@ This is the most leveraged moment in any project. Deep questioning here means be
|
|
|
58
296
|
fi
|
|
59
297
|
```
|
|
60
298
|
|
|
61
|
-
|
|
299
|
+
2. **Detect existing code (brownfield detection):**
|
|
62
300
|
```bash
|
|
63
301
|
CODE_FILES=$(find . -name "*.ts" -o -name "*.js" -o -name "*.py" -o -name "*.go" -o -name "*.rs" -o -name "*.swift" -o -name "*.java" 2>/dev/null | grep -v node_modules | grep -v .git | head -20)
|
|
64
302
|
HAS_PACKAGE=$([ -f package.json ] || [ -f requirements.txt ] || [ -f Cargo.toml ] || [ -f go.mod ] || [ -f Package.swift ] && echo "yes")
|
|
@@ -90,7 +328,177 @@ Exit command.
|
|
|
90
328
|
|
|
91
329
|
**If "Skip mapping":** Continue to Phase 3.
|
|
92
330
|
|
|
93
|
-
**If no existing code detected OR codebase already mapped:** Continue to Phase
|
|
331
|
+
**If no existing code detected OR codebase already mapped:** Continue to Phase 2.5.
|
|
332
|
+
|
|
333
|
+
## Phase 2.5: Capability Selection (MVP_FEATURES.yml)
|
|
334
|
+
|
|
335
|
+
**This phase generates `.planning/MVP_FEATURES.yml` based on capability needs.**
|
|
336
|
+
|
|
337
|
+
Display:
|
|
338
|
+
```
|
|
339
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
340
|
+
RRR ► CAPABILITY SELECTION
|
|
341
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
342
|
+
|
|
343
|
+
Using Projecta Preferred Pack defaults.
|
|
344
|
+
Overrides allowed with explicit reason.
|
|
345
|
+
```
|
|
346
|
+
|
|
347
|
+
### Step 1: Preset Quick-Start (Optional)
|
|
348
|
+
|
|
349
|
+
Use AskUserQuestion:
|
|
350
|
+
- header: "Preset"
|
|
351
|
+
- question: "Start with a use-case preset? This pre-configures capabilities."
|
|
352
|
+
- options:
|
|
353
|
+
- "landing-waitlist" — Landing page + email capture (no auth, no db)
|
|
354
|
+
- "saas-dashboard" — SaaS with Clerk + Neon + optional Stripe
|
|
355
|
+
- "api-admin" — API backend + admin panel (Neon, optional auth)
|
|
356
|
+
- "voice-agent" — Voice AI agent (Deepgram + full agent stack)
|
|
357
|
+
- "None" — Configure capabilities manually (Recommended for custom)
|
|
358
|
+
|
|
359
|
+
**If preset selected:** Load preset defaults, skip to Step 3 (confirm/override).
|
|
360
|
+
|
|
361
|
+
**If "None":** Continue to Step 2.
|
|
362
|
+
|
|
363
|
+
### Step 2: Capability Questionnaire
|
|
364
|
+
|
|
365
|
+
Ask these questions using AskUserQuestion (can batch into 2-3 calls):
|
|
366
|
+
|
|
367
|
+
**Authentication:**
|
|
368
|
+
- header: "Auth"
|
|
369
|
+
- question: "Is user login needed?"
|
|
370
|
+
- options:
|
|
371
|
+
- "Yes, use Clerk (Recommended)" — Clerk for auth
|
|
372
|
+
- "Yes, use Neon Auth" — Neon's built-in auth
|
|
373
|
+
- "Yes, other" — Specify provider (requires reason)
|
|
374
|
+
- "No auth needed" — Skip authentication
|
|
375
|
+
|
|
376
|
+
**Database:**
|
|
377
|
+
- header: "Database"
|
|
378
|
+
- question: "Is a database needed?"
|
|
379
|
+
- options:
|
|
380
|
+
- "Yes, use Neon (Recommended)" — Neon PostgreSQL
|
|
381
|
+
- "Yes, other" — Specify provider (requires reason)
|
|
382
|
+
- "No database needed" — Skip database
|
|
383
|
+
|
|
384
|
+
**Payments:**
|
|
385
|
+
- header: "Payments"
|
|
386
|
+
- question: "Are payments needed?"
|
|
387
|
+
- options:
|
|
388
|
+
- "Yes, use Stripe (Recommended)" — Stripe for payments
|
|
389
|
+
- "Yes, other" — Specify provider (requires reason)
|
|
390
|
+
- "No payments needed" — Skip payments
|
|
391
|
+
|
|
392
|
+
**Storage & Analytics:**
|
|
393
|
+
- header: "Storage"
|
|
394
|
+
- question: "Are file uploads/media needed?"
|
|
395
|
+
- options:
|
|
396
|
+
- "Yes, use R2 (Recommended)" — Cloudflare R2
|
|
397
|
+
- "Yes, other" — Specify provider (requires reason)
|
|
398
|
+
- "No storage needed" — Skip object storage
|
|
399
|
+
|
|
400
|
+
- header: "Analytics"
|
|
401
|
+
- question: "Is analytics needed?"
|
|
402
|
+
- options:
|
|
403
|
+
- "Yes, use PostHog (Recommended)" — PostHog analytics
|
|
404
|
+
- "Yes, other" — Specify provider (requires reason)
|
|
405
|
+
- "No analytics needed" — Skip analytics
|
|
406
|
+
|
|
407
|
+
**Voice:**
|
|
408
|
+
- header: "Voice"
|
|
409
|
+
- question: "Is voice/speech needed?"
|
|
410
|
+
- options:
|
|
411
|
+
- "Yes, use Deepgram (Recommended)" — Deepgram STT/TTS
|
|
412
|
+
- "Yes, other" — Specify provider (requires reason)
|
|
413
|
+
- "No voice needed" — Skip voice
|
|
414
|
+
|
|
415
|
+
**Agents:**
|
|
416
|
+
- header: "Agents"
|
|
417
|
+
- question: "Are AI agents needed?"
|
|
418
|
+
- options:
|
|
419
|
+
- "Yes, full agent stack (Recommended)" — Mastra + Auth.dev + Agentmail + E2B + Browserbase
|
|
420
|
+
- "Yes, minimal" — Just Mastra orchestration
|
|
421
|
+
- "Yes, custom" — Specify stack (requires reason)
|
|
422
|
+
- "No agents needed" — Skip agent stack
|
|
423
|
+
|
|
424
|
+
**Deployment:**
|
|
425
|
+
- header: "Deploy"
|
|
426
|
+
- question: "Deploy target?"
|
|
427
|
+
- options:
|
|
428
|
+
- "Render (Recommended)" — Deploy to Render
|
|
429
|
+
- "Other" — Specify platform (requires reason)
|
|
430
|
+
- "Not yet" — Skip deployment setup
|
|
431
|
+
|
|
432
|
+
### Step 3: Collect Override Reasons
|
|
433
|
+
|
|
434
|
+
**If user selected "other" for any capability OR selected a discouraged provider:**
|
|
435
|
+
|
|
436
|
+
Ask inline: "You chose [provider] instead of the default [default]. What's the reason for this choice?"
|
|
437
|
+
|
|
438
|
+
Record each override with:
|
|
439
|
+
- capability: what changed
|
|
440
|
+
- default: Preferred Pack value
|
|
441
|
+
- chosen: user's choice
|
|
442
|
+
- reason: user's explanation
|
|
443
|
+
|
|
444
|
+
### Step 4: Generate MVP_FEATURES.yml
|
|
445
|
+
|
|
446
|
+
Write `.planning/MVP_FEATURES.yml`:
|
|
447
|
+
|
|
448
|
+
```yaml
|
|
449
|
+
# Generated by /rrr:new-project
|
|
450
|
+
# Source: Projecta Preferred Pack with user selections
|
|
451
|
+
|
|
452
|
+
features:
|
|
453
|
+
auth: [clerk | neon-auth | none | other]
|
|
454
|
+
db: [neon | none | other]
|
|
455
|
+
deploy: [render | none | other]
|
|
456
|
+
payments: [stripe | none | other]
|
|
457
|
+
object_storage: [r2 | none | other]
|
|
458
|
+
analytics: [posthog | none | other]
|
|
459
|
+
voice: [deepgram | none | other]
|
|
460
|
+
|
|
461
|
+
agent_stack:
|
|
462
|
+
enabled: [true | false]
|
|
463
|
+
orchestration: [mastra | none | other]
|
|
464
|
+
agent_auth: [authdev | none | other]
|
|
465
|
+
agent_mail: [agentmail | none | other]
|
|
466
|
+
sandbox: [e2b | none | other]
|
|
467
|
+
browser_automation: [browserbase | none | other]
|
|
468
|
+
|
|
469
|
+
# Deviation Notes (if any overrides from Preferred Pack)
|
|
470
|
+
deviations:
|
|
471
|
+
# - capability: auth
|
|
472
|
+
# default: clerk
|
|
473
|
+
# chosen: auth0
|
|
474
|
+
# reason: "Client requires Auth0 for SSO compliance"
|
|
475
|
+
```
|
|
476
|
+
|
|
477
|
+
### Step 5: Display Summary
|
|
478
|
+
|
|
479
|
+
```
|
|
480
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
481
|
+
MVP FEATURES CONFIGURED ✓
|
|
482
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
483
|
+
|
|
484
|
+
Features:
|
|
485
|
+
Auth: [value]
|
|
486
|
+
Database: [value]
|
|
487
|
+
Payments: [value]
|
|
488
|
+
Storage: [value]
|
|
489
|
+
Analytics: [value]
|
|
490
|
+
Voice: [value]
|
|
491
|
+
|
|
492
|
+
Agent Stack: [enabled/disabled]
|
|
493
|
+
[if enabled, list components]
|
|
494
|
+
|
|
495
|
+
Deviations: [count or "None"]
|
|
496
|
+
|
|
497
|
+
File: .planning/MVP_FEATURES.yml
|
|
498
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
499
|
+
```
|
|
500
|
+
|
|
501
|
+
Continue to Phase 3.
|
|
94
502
|
|
|
95
503
|
## Phase 3: Deep Questioning
|
|
96
504
|
|
|
@@ -214,6 +622,24 @@ Initialize with any decisions made during questioning:
|
|
|
214
622
|
| [Choice from questioning] | [Why] | — Pending |
|
|
215
623
|
```
|
|
216
624
|
|
|
625
|
+
**Deviation Notes (from Preferred Pack):**
|
|
626
|
+
|
|
627
|
+
Include any overrides from the capability selection phase:
|
|
628
|
+
|
|
629
|
+
```markdown
|
|
630
|
+
## Deviation Notes
|
|
631
|
+
|
|
632
|
+
Overrides from Projecta Preferred Pack (`projecta.defaults.json`):
|
|
633
|
+
|
|
634
|
+
| Capability | Default | Chosen | Reason |
|
|
635
|
+
|------------|---------|--------|--------|
|
|
636
|
+
| [capability] | [preferred pack default] | [user's choice] | [user's reason] |
|
|
637
|
+
|
|
638
|
+
_If no deviations: "None — using all Preferred Pack defaults."_
|
|
639
|
+
```
|
|
640
|
+
|
|
641
|
+
Read deviations from `.planning/MVP_FEATURES.yml` deviations section and format as table.
|
|
642
|
+
|
|
217
643
|
**Last updated footer:**
|
|
218
644
|
|
|
219
645
|
```markdown
|
|
@@ -367,7 +793,7 @@ Your STACK.md feeds into roadmap creation. Be prescriptive:
|
|
|
367
793
|
|
|
368
794
|
<output>
|
|
369
795
|
Write to: .planning/research/STACK.md
|
|
370
|
-
Use template:
|
|
796
|
+
Use template: ./.claude/rrr/templates/research-project/STACK.md
|
|
371
797
|
</output>
|
|
372
798
|
", subagent_type="rrr-project-researcher", description="Stack research")
|
|
373
799
|
|
|
@@ -406,7 +832,7 @@ Your FEATURES.md feeds into requirements definition. Categorize clearly:
|
|
|
406
832
|
|
|
407
833
|
<output>
|
|
408
834
|
Write to: .planning/research/FEATURES.md
|
|
409
|
-
Use template:
|
|
835
|
+
Use template: ./.claude/rrr/templates/research-project/FEATURES.md
|
|
410
836
|
</output>
|
|
411
837
|
", subagent_type="rrr-project-researcher", description="Features research")
|
|
412
838
|
|
|
@@ -445,7 +871,7 @@ Your ARCHITECTURE.md informs phase structure in roadmap. Include:
|
|
|
445
871
|
|
|
446
872
|
<output>
|
|
447
873
|
Write to: .planning/research/ARCHITECTURE.md
|
|
448
|
-
Use template:
|
|
874
|
+
Use template: ./.claude/rrr/templates/research-project/ARCHITECTURE.md
|
|
449
875
|
</output>
|
|
450
876
|
", subagent_type="rrr-project-researcher", description="Architecture research")
|
|
451
877
|
|
|
@@ -484,7 +910,7 @@ Your PITFALLS.md prevents mistakes in roadmap/planning. For each pitfall:
|
|
|
484
910
|
|
|
485
911
|
<output>
|
|
486
912
|
Write to: .planning/research/PITFALLS.md
|
|
487
|
-
Use template:
|
|
913
|
+
Use template: ./.claude/rrr/templates/research-project/PITFALLS.md
|
|
488
914
|
</output>
|
|
489
915
|
", subagent_type="rrr-project-researcher", description="Pitfalls research")
|
|
490
916
|
```
|
|
@@ -507,7 +933,7 @@ Read these files:
|
|
|
507
933
|
|
|
508
934
|
<output>
|
|
509
935
|
Write to: .planning/research/SUMMARY.md
|
|
510
|
-
Use template:
|
|
936
|
+
Use template: ./.claude/rrr/templates/research-project/SUMMARY.md
|
|
511
937
|
Commit after writing.
|
|
512
938
|
</output>
|
|
513
939
|
", subagent_type="rrr-research-synthesizer", description="Synthesize research")
|
|
@@ -853,7 +1279,8 @@ Present completion with next steps:
|
|
|
853
1279
|
|
|
854
1280
|
<output>
|
|
855
1281
|
|
|
856
|
-
- `.planning/PROJECT.md`
|
|
1282
|
+
- `.planning/PROJECT.md` (includes Deviation Notes)
|
|
1283
|
+
- `.planning/MVP_FEATURES.yml` (capability selections)
|
|
857
1284
|
- `.planning/config.json`
|
|
858
1285
|
- `.planning/research/` (if research selected)
|
|
859
1286
|
- `STACK.md`
|
|
@@ -870,11 +1297,18 @@ Present completion with next steps:
|
|
|
870
1297
|
|
|
871
1298
|
<success_criteria>
|
|
872
1299
|
|
|
1300
|
+
- [ ] Preflight checks completed (greenfield vs brownfield detection)
|
|
1301
|
+
- [ ] If RRR already initialized (.planning/STATE.md): User directed to /rrr:progress and command exits
|
|
1302
|
+
- [ ] If GREENFIELD: Bootstrap completed (Next.js + Tailwind + shadcn/ui + Vitest + Playwright), tests pass, committed
|
|
1303
|
+
- [ ] If BROWNFIELD: Existing files untouched, only .planning/ artifacts created
|
|
873
1304
|
- [ ] .planning/ directory created
|
|
874
1305
|
- [ ] Git repo initialized
|
|
875
|
-
- [ ] Brownfield
|
|
1306
|
+
- [ ] Brownfield codebase mapping offered (if existing code detected)
|
|
1307
|
+
- [ ] Capability questionnaire completed (auth, db, payments, storage, analytics, voice, agents, deploy)
|
|
1308
|
+
- [ ] MVP_FEATURES.yml created with capability selections
|
|
1309
|
+
- [ ] Deviation Notes collected for any overrides from Preferred Pack
|
|
876
1310
|
- [ ] Deep questioning completed (threads followed, not rushed)
|
|
877
|
-
- [ ] PROJECT.md captures full context → **committed**
|
|
1311
|
+
- [ ] PROJECT.md captures full context + Deviation Notes → **committed**
|
|
878
1312
|
- [ ] config.json has workflow mode, depth, parallelization → **committed**
|
|
879
1313
|
- [ ] Research completed (if selected) — 4 parallel agents spawned → **committed**
|
|
880
1314
|
- [ ] Requirements gathered (from research or conversation)
|
package/package.json
CHANGED
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
# API + Admin Preset
|
|
2
|
+
# Database required, auth optional for admin access
|
|
3
|
+
|
|
4
|
+
name: api-admin
|
|
5
|
+
description: API backend with admin dashboard for data management
|
|
6
|
+
|
|
7
|
+
stack:
|
|
8
|
+
framework: nextjs-app-router
|
|
9
|
+
language: typescript
|
|
10
|
+
package_manager: npm
|
|
11
|
+
ui: tailwind-shadcn
|
|
12
|
+
testing:
|
|
13
|
+
unit: vitest
|
|
14
|
+
e2e: playwright
|
|
15
|
+
|
|
16
|
+
features:
|
|
17
|
+
core:
|
|
18
|
+
- RESTful API routes (/api/*)
|
|
19
|
+
- Admin dashboard for CRUD operations
|
|
20
|
+
- Database schema with migrations
|
|
21
|
+
- Data validation (Zod)
|
|
22
|
+
|
|
23
|
+
optional:
|
|
24
|
+
- Admin authentication
|
|
25
|
+
- API key authentication for external access
|
|
26
|
+
- Rate limiting
|
|
27
|
+
- Audit logging
|
|
28
|
+
- Data export (CSV, JSON)
|
|
29
|
+
- Bulk operations
|
|
30
|
+
|
|
31
|
+
integrations:
|
|
32
|
+
required:
|
|
33
|
+
- neon # PostgreSQL database
|
|
34
|
+
optional:
|
|
35
|
+
- clerk # Admin authentication
|
|
36
|
+
|
|
37
|
+
env_vars:
|
|
38
|
+
required:
|
|
39
|
+
- DATABASE_URL
|
|
40
|
+
optional:
|
|
41
|
+
- NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY
|
|
42
|
+
- CLERK_SECRET_KEY
|
|
43
|
+
- API_SECRET_KEY
|
|
44
|
+
|
|
45
|
+
pages:
|
|
46
|
+
- path: /admin
|
|
47
|
+
name: Admin Dashboard
|
|
48
|
+
auth: optional
|
|
49
|
+
- path: /admin/[resource]
|
|
50
|
+
name: Resource List
|
|
51
|
+
auth: optional
|
|
52
|
+
- path: /admin/[resource]/[id]
|
|
53
|
+
name: Resource Detail
|
|
54
|
+
auth: optional
|
|
55
|
+
|
|
56
|
+
api_routes:
|
|
57
|
+
- path: /api/[resource]
|
|
58
|
+
methods: [GET, POST]
|
|
59
|
+
- path: /api/[resource]/[id]
|
|
60
|
+
methods: [GET, PUT, DELETE]
|
|
61
|
+
|
|
62
|
+
database:
|
|
63
|
+
orm: drizzle
|
|
64
|
+
tables:
|
|
65
|
+
- Define based on requirements
|
|
66
|
+
|
|
67
|
+
done_criteria:
|
|
68
|
+
- API endpoints return correct responses
|
|
69
|
+
- Admin can list, create, update, delete records
|
|
70
|
+
- Data validates correctly (rejects invalid input)
|
|
71
|
+
- Database migrations run successfully
|
|
72
|
+
- Unit tests pass
|
|
73
|
+
- E2E test confirms CRUD operations
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# Landing + Waitlist Preset
|
|
2
|
+
# No auth, no database, no payments - just a landing page with email capture
|
|
3
|
+
|
|
4
|
+
name: landing-waitlist
|
|
5
|
+
description: Landing page with email waitlist capture
|
|
6
|
+
|
|
7
|
+
stack:
|
|
8
|
+
framework: nextjs-app-router
|
|
9
|
+
language: typescript
|
|
10
|
+
package_manager: npm
|
|
11
|
+
ui: tailwind-shadcn
|
|
12
|
+
testing:
|
|
13
|
+
unit: vitest
|
|
14
|
+
e2e: playwright
|
|
15
|
+
|
|
16
|
+
features:
|
|
17
|
+
core:
|
|
18
|
+
- Hero section with value proposition
|
|
19
|
+
- Email capture form
|
|
20
|
+
- Thank you / confirmation state
|
|
21
|
+
- Mobile-responsive layout
|
|
22
|
+
|
|
23
|
+
optional:
|
|
24
|
+
- Social proof section (testimonials, logos)
|
|
25
|
+
- Feature highlights section
|
|
26
|
+
- FAQ accordion
|
|
27
|
+
- Footer with links
|
|
28
|
+
|
|
29
|
+
integrations:
|
|
30
|
+
required: []
|
|
31
|
+
optional:
|
|
32
|
+
- resend # For sending confirmation emails
|
|
33
|
+
- google-analytics # For tracking
|
|
34
|
+
|
|
35
|
+
env_vars:
|
|
36
|
+
required: []
|
|
37
|
+
optional:
|
|
38
|
+
- RESEND_API_KEY
|
|
39
|
+
- NEXT_PUBLIC_GA_ID
|
|
40
|
+
|
|
41
|
+
pages:
|
|
42
|
+
- path: /
|
|
43
|
+
name: Landing Page
|
|
44
|
+
components:
|
|
45
|
+
- Hero
|
|
46
|
+
- EmailCapture
|
|
47
|
+
- Features (optional)
|
|
48
|
+
- Footer
|
|
49
|
+
|
|
50
|
+
done_criteria:
|
|
51
|
+
- Landing page renders with hero and email form
|
|
52
|
+
- Email form submits and shows confirmation
|
|
53
|
+
- Page is mobile-responsive
|
|
54
|
+
- Unit tests pass
|
|
55
|
+
- E2E test confirms form submission flow
|