@cofoundr/init 1.5.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 +140 -0
- package/bin/cofoundr.mjs +10 -0
- package/content/.claude-plugin/plugin.json +18 -0
- package/content/README.md +227 -0
- package/content/agents/brand-intake.md +129 -0
- package/content/agents/consolidate.md +154 -0
- package/content/agents/launch-kit-detect.md +109 -0
- package/content/agents/spec-phase.md +131 -0
- package/content/commands/audit.md +137 -0
- package/content/commands/constitution.md +107 -0
- package/content/commands/document.md +155 -0
- package/content/commands/implement.md +108 -0
- package/content/commands/new-feature.md +188 -0
- package/content/commands/new-project.md +243 -0
- package/content/commands/next.md +129 -0
- package/content/commands/onboard.md +176 -0
- package/content/commands/plan.md +138 -0
- package/content/commands/quick-brief.md +95 -0
- package/content/commands/resume.md +99 -0
- package/content/commands/review.md +76 -0
- package/content/commands/rules-check.md +54 -0
- package/content/commands/scope-guard.md +33 -0
- package/content/commands/setup-skills.md +109 -0
- package/content/commands/specify.md +53 -0
- package/content/commands/tasks.md +91 -0
- package/content/commands/translate.md +197 -0
- package/content/manifest.json +59 -0
- package/content/scaffold/.cofoundr/README.md +67 -0
- package/content/scaffold/.cofoundr/constitution.md.tmpl +54 -0
- package/content/scaffold/.cofoundr/manifest.json.tmpl +15 -0
- package/content/scaffold/.cofoundr/memory/decisions.md.tmpl +19 -0
- package/content/scaffold/.cofoundr/memory/knowledge.md.tmpl +23 -0
- package/content/scaffold/.cofoundr/memory/project.md.tmpl +27 -0
- package/content/scaffold/.cofoundr/specs/README.md +38 -0
- package/content/scaffold/AGENTS.md.tmpl +74 -0
- package/content/templates/agents.md +144 -0
- package/content/templates/brand.md +180 -0
- package/content/templates/feature.md +70 -0
- package/content/templates/phases/phase-template/README.md +65 -0
- package/content/templates/phases/phase-template/decisions.md +52 -0
- package/content/templates/phases/phase-template/research.md +59 -0
- package/content/templates/phases/phase-template/spec.md +90 -0
- package/content/templates/phases/phase-template/tests.md +65 -0
- package/content/templates/phases/phase-template/ui-spec.md +75 -0
- package/content/templates/phases.md +234 -0
- package/content/templates/prd.md +89 -0
- package/content/templates/product.md +73 -0
- package/content/templates/rules.md +99 -0
- package/content/templates/tech.md +129 -0
- package/package.json +39 -0
- package/src/adapters/aider.mjs +35 -0
- package/src/adapters/claude-code.mjs +114 -0
- package/src/adapters/cline.mjs +46 -0
- package/src/adapters/codex.mjs +29 -0
- package/src/adapters/copilot.mjs +54 -0
- package/src/adapters/cursor.mjs +69 -0
- package/src/adapters/gemini.mjs +41 -0
- package/src/adapters/index.mjs +14 -0
- package/src/adapters/windsurf.mjs +69 -0
- package/src/cli.mjs +124 -0
- package/src/commands/doctor.mjs +90 -0
- package/src/commands/init.mjs +190 -0
- package/src/commands/list.mjs +28 -0
- package/src/commands/onboard.mjs +130 -0
- package/src/commands/remove.mjs +89 -0
- package/src/commands/sync.mjs +81 -0
- package/src/core/detect.mjs +121 -0
- package/src/core/fs.mjs +42 -0
- package/src/core/license.mjs +170 -0
- package/src/core/log.mjs +32 -0
- package/src/core/prompts.mjs +62 -0
- package/src/core/scaffold.mjs +179 -0
- package/src/core/source.mjs +54 -0
- package/src/core/version.mjs +10 -0
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
# {{PROJECT_NAME}}
|
|
2
|
+
|
|
3
|
+
> This is the project's universal AI-agent context file. Every modern coding agent — Claude Code, Cursor, Windsurf, Cline, Codex, Aider, GitHub Copilot, Gemini, Goose, Junie, Kilo, Roo, Zed — reads `AGENTS.md` at the repository root before working on this project.
|
|
4
|
+
>
|
|
5
|
+
> Keep this file short. Detail belongs in the documents it links to.
|
|
6
|
+
|
|
7
|
+
## Project
|
|
8
|
+
|
|
9
|
+
{{PROJECT_DESCRIPTION}}
|
|
10
|
+
|
|
11
|
+
## How to work in this repo
|
|
12
|
+
|
|
13
|
+
1. **Read the constitution before changing anything.**
|
|
14
|
+
The project's non-negotiable rules live in `.cofoundr/constitution.md`. The `Never` section is binding. If a user instruction conflicts with a Never rule, follow the rule and explain why.
|
|
15
|
+
|
|
16
|
+
2. **Use the spec as source of truth.**
|
|
17
|
+
The active specification lives in:
|
|
18
|
+
- `docs/product.md` — what the product is and who it's for
|
|
19
|
+
- `docs/prd.md` — features with acceptance criteria
|
|
20
|
+
- `docs/tech.md` — stack, data model, integrations
|
|
21
|
+
- `docs/phases.md` — milestones, phases, HALT conditions
|
|
22
|
+
- `.cofoundr/specs/` — feature- and phase-level specs
|
|
23
|
+
- `.cofoundr/memory/codebase.md` — architecture map (refresh with `/cofoundr:onboard`)
|
|
24
|
+
- `.cofoundr/memory/decisions.md` — append-only decisions log
|
|
25
|
+
|
|
26
|
+
3. **Use the workflow commands.**
|
|
27
|
+
The project ships a tool-agnostic command set under `.cofoundr/commands/`. To invoke one, the user will say `/cofoundr:<command>` or `cofoundr <command>` — read the matching `.cofoundr/commands/<name>.md` and follow its instructions exactly. Do not paraphrase. Do not skip steps.
|
|
28
|
+
|
|
29
|
+
Available commands:
|
|
30
|
+
|
|
31
|
+
- **Planning:** `quick-brief`, `new-project`, `plan`, `next`, `new-feature`
|
|
32
|
+
- **Spec-driven (SDD):** `constitution`, `specify`, `tasks`, `implement`
|
|
33
|
+
- **Brownfield:** `onboard`, `document`, `audit`
|
|
34
|
+
- **Guardrails:** `scope-guard`, `rules-check`, `review`
|
|
35
|
+
- **Comms / setup:** `translate`, `setup-skills`, `resume`
|
|
36
|
+
|
|
37
|
+
4. **Pick up where the last session left off.**
|
|
38
|
+
Always run `/cofoundr:resume` first. It surfaces active feature docs and the next unchecked task and waits for confirmation before any code is written.
|
|
39
|
+
|
|
40
|
+
## Build, test, run
|
|
41
|
+
|
|
42
|
+
{{BUILD_INSTRUCTIONS}}
|
|
43
|
+
|
|
44
|
+
## Code conventions
|
|
45
|
+
|
|
46
|
+
{{CODE_CONVENTIONS}}
|
|
47
|
+
|
|
48
|
+
## Commit conventions
|
|
49
|
+
|
|
50
|
+
- One commit per task. Format: `<phase or feature>: T<N> <imperative summary>`.
|
|
51
|
+
- Never commit `.env`, key files, or secrets.
|
|
52
|
+
- Never use `--no-verify` or skip pre-commit hooks unless the user explicitly authorized it.
|
|
53
|
+
|
|
54
|
+
## Things to never do
|
|
55
|
+
|
|
56
|
+
The full Never list lives in `.cofoundr/constitution.md`. Read it. The most-violated rules:
|
|
57
|
+
|
|
58
|
+
- Never put secrets in client bundles.
|
|
59
|
+
- Never deploy tables without row-level security.
|
|
60
|
+
- Never enforce auth only client-side.
|
|
61
|
+
- Never use `DROP`, `TRUNCATE`, `rm -rf`, or `--force` without explicit user confirmation.
|
|
62
|
+
- Never pass user input to `exec`, `eval`, or raw SQL.
|
|
63
|
+
- Never use `any` in TypeScript.
|
|
64
|
+
|
|
65
|
+
## Tool-specific notes
|
|
66
|
+
|
|
67
|
+
This project is configured for the following AI tools. Tool-specific shims live next to this file:
|
|
68
|
+
|
|
69
|
+
{{TOOL_SHIMS}}
|
|
70
|
+
|
|
71
|
+
If your tool isn't listed, this file (`AGENTS.md`) is enough — it is the open standard read by every modern coding agent.
|
|
72
|
+
|
|
73
|
+
---
|
|
74
|
+
<sub>Managed by **CoFoundr**. Run `npx @cofoundr/init sync` to refresh the per-tool shims after a CoFoundr upgrade.</sub>
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: "Pointer file — read this first, then follow the read order below"
|
|
3
|
+
tags: [steering, spec, boundaries]
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# AI Assistant Configuration
|
|
7
|
+
|
|
8
|
+
<!-- HOW-TO: This is the first file your AI assistant reads. It tells the AI where to find everything else, what conventions to follow, and what boundaries to respect. Think of it as the AI's onboarding document. -->
|
|
9
|
+
|
|
10
|
+
## TL;DR
|
|
11
|
+
|
|
12
|
+
<!-- HOW-TO: ≤60 words. State the assistant's role, its read order, and its single most important constraint. -->
|
|
13
|
+
|
|
14
|
+
*You are a coding assistant for TaskPilot, a daily planner for solo founders. Read the files below in order before writing any code. Your most important constraint: never use secret keys in client-side code. When in doubt, check rules.md before proceeding.*
|
|
15
|
+
|
|
16
|
+
## Read Order
|
|
17
|
+
|
|
18
|
+
<!-- HOW-TO: The AI reads these files in this order at the start of every session. Each file has a single purpose — don't merge them. -->
|
|
19
|
+
|
|
20
|
+
1. **product.md** — What we're building and why (problem, user, solution, non-goals)
|
|
21
|
+
2. **prd.md** — What ships in v1 with acceptance criteria for every feature
|
|
22
|
+
3. **tech.md** — Stack decisions, database schema, API endpoints, integrations
|
|
23
|
+
4. **rules.md** — Non-negotiable rules, ask-first items, and hard stops
|
|
24
|
+
5. **phases.md** — Build roadmap with milestones, phases, tasks, and verify checkpoints
|
|
25
|
+
6. **docs/ACTIVE.md** — Active feature docs (if any) — loaded automatically, contains current in-progress feature state
|
|
26
|
+
|
|
27
|
+
## Commands
|
|
28
|
+
|
|
29
|
+
<!-- HOW-TO: Define what the AI should do when given common instructions. Be explicit — AI assistants follow patterns better than open-ended instructions. -->
|
|
30
|
+
|
|
31
|
+
**"Start building"** or **"Begin Phase X":**
|
|
32
|
+
1. CLAUDE.md auto-loads the spec files — confirm you can see product.md, prd.md, tech.md, rules.md, phases.md, agents.md in context
|
|
33
|
+
2. Check `phases.md` for the current milestone, current phase, and next incomplete task
|
|
34
|
+
3. If working on a feature, confirm the feature doc in `docs/features/` is loaded via ACTIVE.md
|
|
35
|
+
4. Read the task's file paths and acceptance criteria
|
|
36
|
+
5. Implement the task
|
|
37
|
+
6. Run the verify check and confirm it passes
|
|
38
|
+
7. Check off the completed task in the feature doc and update Session Notes
|
|
39
|
+
8. Commit with a descriptive message referencing the task number
|
|
40
|
+
|
|
41
|
+
**"Add a feature":**
|
|
42
|
+
1. Check if the feature exists in `prd.md` — if not, ask before proceeding
|
|
43
|
+
2. Check `tech.md` for relevant stack and schema information
|
|
44
|
+
3. Check `rules.md` for any applicable constraints
|
|
45
|
+
4. Implement and verify against acceptance criteria
|
|
46
|
+
5. Commit
|
|
47
|
+
|
|
48
|
+
**"Fix a bug":**
|
|
49
|
+
1. Reproduce the bug first — don't fix what you can't see
|
|
50
|
+
2. Check `rules.md` before making any changes
|
|
51
|
+
3. Fix with the smallest possible change
|
|
52
|
+
4. Verify the fix doesn't break existing functionality
|
|
53
|
+
5. Commit with a message describing the bug and the fix
|
|
54
|
+
|
|
55
|
+
## Testing
|
|
56
|
+
|
|
57
|
+
<!-- HOW-TO: Define your testing expectations. Be specific about what "tested" means for this project. -->
|
|
58
|
+
|
|
59
|
+
- Run `npx next build` before every commit — if it doesn't build, it doesn't ship
|
|
60
|
+
- Test the happy path manually after every task (use the verify block in `phases.md`)
|
|
61
|
+
- Write unit tests for utility functions in `src/lib/`
|
|
62
|
+
- Write integration tests for API routes in `src/app/api/`
|
|
63
|
+
- Test the happy path first, then edge cases
|
|
64
|
+
- Never commit code that produces TypeScript errors or console warnings
|
|
65
|
+
|
|
66
|
+
## Structure
|
|
67
|
+
|
|
68
|
+
<!-- HOW-TO: Define your project's file organization so the AI doesn't invent its own. -->
|
|
69
|
+
|
|
70
|
+
```
|
|
71
|
+
src/
|
|
72
|
+
app/ # Next.js App Router pages and API routes
|
|
73
|
+
api/ # Server-side API routes (secrets live here)
|
|
74
|
+
integrations/ # OAuth connect/callback routes per provider
|
|
75
|
+
pull/ # Morning pull trigger
|
|
76
|
+
tasks/ # Task CRUD operations
|
|
77
|
+
webhooks/ # Inngest, Stripe webhook receivers
|
|
78
|
+
login/ # Auth pages
|
|
79
|
+
settings/ # User settings (integrations, pull time)
|
|
80
|
+
page.tsx # Main daily focus view
|
|
81
|
+
components/ # React components (no server-side logic)
|
|
82
|
+
lib/ # Shared utilities, clients, types
|
|
83
|
+
integrations/ # Provider-specific fetchers (Slack, Trello, Linear)
|
|
84
|
+
inngest/ # Background job definitions
|
|
85
|
+
supabase.ts # Supabase client (browser + server)
|
|
86
|
+
types/ # TypeScript type definitions
|
|
87
|
+
supabase/
|
|
88
|
+
migrations/ # SQL migration files (numbered)
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
## Style
|
|
92
|
+
|
|
93
|
+
<!-- HOW-TO: Code style rules the AI must follow. Be opinionated — vague style guides produce inconsistent code. -->
|
|
94
|
+
|
|
95
|
+
- TypeScript strict mode — no `any`, no `@ts-ignore`, no type assertions unless truly necessary
|
|
96
|
+
- Use `async/await` over `.then()` chains
|
|
97
|
+
- Use named exports, not default exports (except for Next.js pages)
|
|
98
|
+
- Component files: PascalCase (`TaskList.tsx`)
|
|
99
|
+
- Utility files: camelCase (`formatDate.ts`)
|
|
100
|
+
- API routes: kebab-case directories (`/api/integrations/slack/connect/`)
|
|
101
|
+
- Use early returns to reduce nesting
|
|
102
|
+
- Maximum function length: 40 lines — extract helpers if longer
|
|
103
|
+
- All user-facing strings in component files, not buried in utility functions
|
|
104
|
+
|
|
105
|
+
## Git
|
|
106
|
+
|
|
107
|
+
<!-- HOW-TO: Git conventions for consistent history. The AI should follow these for every commit. -->
|
|
108
|
+
|
|
109
|
+
- **Commit message format:** `type(scope): description` (e.g., `feat(auth): add Supabase login flow`)
|
|
110
|
+
- **Types:** `feat`, `fix`, `refactor`, `chore`, `docs`, `test`
|
|
111
|
+
- **Branch naming:** `phase-X/task-description` (e.g., `phase-1/slack-oauth`)
|
|
112
|
+
- Commit after every completed task, not at the end of a session
|
|
113
|
+
- Never commit with failing TypeScript checks
|
|
114
|
+
- Never commit `.env` files or secrets
|
|
115
|
+
|
|
116
|
+
## Boundaries
|
|
117
|
+
|
|
118
|
+
<!-- HOW-TO: This section exists to prevent the AI from reinventing rules that already live in rules.md. Point there, don't duplicate. Duplication leads to contradictions when one copy gets updated and the other doesn't. -->
|
|
119
|
+
|
|
120
|
+
See `rules.md` for the full **Always / Ask First / Never** rule set. Do not duplicate rules here — `rules.md` is the single source of truth for behavioral constraints.
|
|
121
|
+
|
|
122
|
+
When uncertain about whether an action is allowed, check `rules.md` before proceeding. If the action isn't covered by any rule, ask the user.
|
|
123
|
+
|
|
124
|
+
## Session Management
|
|
125
|
+
|
|
126
|
+
<!-- HOW-TO: AI coding tools degrade over long conversations — they start hallucinating, forgetting context, and making mistakes. Starting a fresh chat for each phase prevents this. The CLAUDE.md file in the project root auto-loads all spec files and runs the Session Start Protocol automatically. -->
|
|
127
|
+
|
|
128
|
+
- **Run `/cofoundr:resume` at the start of every session.** This is the first command you type, before anything else. It reads the active feature docs (or phases.md if no active feature), presents a recap of where things stand, and waits for your confirmation before any code is written. Do not skip it — without it the AI starts with stale assumptions.
|
|
129
|
+
- **CLAUDE.md handles spec context automatically.** All six spec files and active feature docs load the moment you open a session in the project folder. No manual pasting.
|
|
130
|
+
- **Start a fresh chat for each phase.** Long sessions degrade model quality — close and reopen when you move to the next phase.
|
|
131
|
+
- **Update the feature doc before ending a session.** Add a Session Notes entry: what was done, what's next, decisions made, risks. This is what the next session's recap will read.
|
|
132
|
+
- **If the AI gets confused, start over.** Close the chat and open a new one. A fresh context is faster than correcting a confused model.
|
|
133
|
+
|
|
134
|
+
## Session Start Protocol
|
|
135
|
+
|
|
136
|
+
<!-- HOW-TO: This section is also encoded in CLAUDE.md, so it runs automatically. It is repeated here so the AI has the rationale, not just the rule. -->
|
|
137
|
+
|
|
138
|
+
At the start of every session, before any code, edits, or commands:
|
|
139
|
+
|
|
140
|
+
1. Check `docs/ACTIVE.md` for active feature imports.
|
|
141
|
+
2. **Active features present:** Read the most recent Session Notes entry from each feature doc. Present a recap (what was done, what is next, any blockers). Ask: "Does this still reflect where things stand?" Wait for confirmation or corrections.
|
|
142
|
+
3. **No active features:** Read `docs/phases.md`. Find the last checked task and first unchecked task. Present: "You are on [Milestone / Phase]. Next task: [name and file]. Ready to continue?" Wait for confirmation.
|
|
143
|
+
|
|
144
|
+
The purpose of this gate: the session notes were written by the last session's AI, which had context this session does not have. The recap surfaces that context explicitly and gives the human a chance to correct anything that has changed — a decision made offline, a blocker resolved, a direction change. Skipping this step means the AI starts with stale assumptions.
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: >
|
|
3
|
+
Brand spec for the product. Generated by the brand-intake subagent during
|
|
4
|
+
planning. Every ui-spec.md across phases references this file for color,
|
|
5
|
+
type, voice, and kit integration tokens. Keep this file authoritative —
|
|
6
|
+
if a component contradicts brand.md, the component is wrong.
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Brand — [Product Name]
|
|
10
|
+
|
|
11
|
+
## TL;DR
|
|
12
|
+
|
|
13
|
+
<!-- ≤60 words: the voice in one phrase, the accent color by name, the type system by name, and the three reference products. Example: "Confident and plain-spoken. Deep green accent ('#0C8A4E', 'forest'). Inter for UI, Source Serif for marketing long-form. Sits between Linear's precision and Basecamp's warmth, next to Stripe." -->
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## Voice
|
|
18
|
+
|
|
19
|
+
<!-- One paragraph describing how the product sounds. Pull from product.md's TL;DR and target-user paragraphs. Then 3 do/don't examples specific to this product's domain. -->
|
|
20
|
+
|
|
21
|
+
**Tone:** [one-line descriptor]
|
|
22
|
+
|
|
23
|
+
**Do:**
|
|
24
|
+
|
|
25
|
+
- [Example of on-brand copy: "Your Meta ads, on autopilot."]
|
|
26
|
+
- [Example of on-brand copy: "Dana runs her ads in 2 minutes a day."]
|
|
27
|
+
- [Example of on-brand copy: "We spotted a fatigued ad. Here's what to do about it."]
|
|
28
|
+
|
|
29
|
+
**Don't:**
|
|
30
|
+
|
|
31
|
+
- [Off-brand: "Revolutionize your ads with AI-powered analytics!"]
|
|
32
|
+
- [Off-brand: "Leverage cutting-edge machine learning…"]
|
|
33
|
+
- [Off-brand: "Unlock the full potential of your marketing funnel."]
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
## Palette
|
|
38
|
+
|
|
39
|
+
<!-- Every color is a hex value. If Launch Kit, these feed the Kit integration block below. -->
|
|
40
|
+
|
|
41
|
+
- **Accent primary:** `#______` (name: _________)
|
|
42
|
+
- **Accent secondary / hover:** `#______`
|
|
43
|
+
- **Neutral 50 (background):** `#______`
|
|
44
|
+
- **Neutral 500 (body text):** `#______`
|
|
45
|
+
- **Neutral 900 (headings):** `#______`
|
|
46
|
+
- **Success:** `#______`
|
|
47
|
+
- **Warning:** `#______`
|
|
48
|
+
- **Error:** `#______`
|
|
49
|
+
|
|
50
|
+
<!-- HOW-TO: the accent is used sparingly (primary CTAs, active tab indicators, key metric callouts). Overusing it kills the signal. Neutrals do 80% of the visual work. -->
|
|
51
|
+
|
|
52
|
+
---
|
|
53
|
+
|
|
54
|
+
## Type
|
|
55
|
+
|
|
56
|
+
- **Heading family:** [font name + weight, e.g. `Inter 600`]
|
|
57
|
+
- **Body family:** [font name + weight, e.g. `Inter 400`]
|
|
58
|
+
- **Mono family (if dev-facing):** [font name, e.g. `JetBrains Mono`]
|
|
59
|
+
- **Scale:**
|
|
60
|
+
- `display` — [size/line-height, e.g. 48/56]
|
|
61
|
+
- `h1` — [e.g. 32/40]
|
|
62
|
+
- `h2` — [e.g. 24/32]
|
|
63
|
+
- `h3` — [e.g. 20/28]
|
|
64
|
+
- `body` — [e.g. 16/24 default]
|
|
65
|
+
- `small` — [e.g. 14/20]
|
|
66
|
+
|
|
67
|
+
<!-- HOW-TO: name real fonts, not generic categories. If a custom font was named, verify it is available on a free source (Google Fonts, Fontshare) and cite the source URL. -->
|
|
68
|
+
|
|
69
|
+
---
|
|
70
|
+
|
|
71
|
+
## Spacing
|
|
72
|
+
|
|
73
|
+
<!-- Grid the kit already uses. Default: 4px base, Tailwind-compatible steps 1-24 (0.25rem to 6rem). Only change if the reference products signal tighter or looser density. -->
|
|
74
|
+
|
|
75
|
+
- **Base unit:** 4px
|
|
76
|
+
- **Default step:** 16px (4)
|
|
77
|
+
- **Section padding:** 48px (12) mobile, 96px (24) desktop
|
|
78
|
+
- **Card padding:** 24px (6)
|
|
79
|
+
- **Form gap:** 16px (4) between fields, 24px between groups
|
|
80
|
+
|
|
81
|
+
---
|
|
82
|
+
|
|
83
|
+
## Imagery
|
|
84
|
+
|
|
85
|
+
<!-- One paragraph. Photography, illustration, or both? Style descriptors. If the product needs AI-generated creative (AdPilot-style), note the prompt anchors. -->
|
|
86
|
+
|
|
87
|
+
**Primary medium:** [photography | illustration | both]
|
|
88
|
+
|
|
89
|
+
**Style descriptors:** [e.g. "clean product shots on neutral backgrounds, soft natural light, no flat-lay, no stock-photo staging"]
|
|
90
|
+
|
|
91
|
+
**AI-generation prompt anchors (if applicable):** [e.g. "minimal, DTC-indie, warm tones, brand-consistent with the three reference products named above"]
|
|
92
|
+
|
|
93
|
+
---
|
|
94
|
+
|
|
95
|
+
## Reference material
|
|
96
|
+
|
|
97
|
+
<!-- The three products named during intake. One line each describing what they contribute to the feel. -->
|
|
98
|
+
|
|
99
|
+
1. **[Product 1]** — [what it contributes, e.g. "precision typography and zero visual noise"]
|
|
100
|
+
2. **[Product 2]** — [what it contributes]
|
|
101
|
+
3. **[Product 3]** — [what it contributes]
|
|
102
|
+
|
|
103
|
+
---
|
|
104
|
+
|
|
105
|
+
## Copy rules
|
|
106
|
+
|
|
107
|
+
**Use:**
|
|
108
|
+
|
|
109
|
+
- [Pattern, e.g. "State the numbers. 'CTR dropped 28%' beats 'performance declined'."]
|
|
110
|
+
- [Pattern, e.g. "Write for Dana specifically, not 'marketers' as a category."]
|
|
111
|
+
- [Pattern, e.g. "One idea per sentence. Two at most."]
|
|
112
|
+
|
|
113
|
+
**Avoid:**
|
|
114
|
+
|
|
115
|
+
- [Anti-pattern, e.g. "Jargon: 'leverage,' 'synergy,' 'unlock'"]
|
|
116
|
+
- [Anti-pattern, e.g. "Superlatives: 'best-in-class,' 'revolutionary,' 'industry-leading'"]
|
|
117
|
+
- [Anti-pattern, e.g. "Promise language without evidence: 'AdPilot will grow your revenue'"]
|
|
118
|
+
|
|
119
|
+
---
|
|
120
|
+
|
|
121
|
+
## Kit integration
|
|
122
|
+
|
|
123
|
+
<!-- Only populated when launch-kit-detect returns `launch-kit`. The blocks below paste into apps/web/styles/globals.css and apps/web/tailwind.config.ts. -->
|
|
124
|
+
|
|
125
|
+
### globals.css — CSS custom properties
|
|
126
|
+
|
|
127
|
+
```css
|
|
128
|
+
:root {
|
|
129
|
+
--brand-accent: #______;
|
|
130
|
+
--brand-accent-hover: #______;
|
|
131
|
+
--brand-neutral-50: #______;
|
|
132
|
+
--brand-neutral-500: #______;
|
|
133
|
+
--brand-neutral-900: #______;
|
|
134
|
+
--brand-success: #______;
|
|
135
|
+
--brand-warning: #______;
|
|
136
|
+
--brand-error: #______;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
:root.dark {
|
|
140
|
+
/* Dark-mode overrides. Only override what changes. */
|
|
141
|
+
--brand-neutral-50: #______;
|
|
142
|
+
--brand-neutral-500: #______;
|
|
143
|
+
--brand-neutral-900: #______;
|
|
144
|
+
}
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
### tailwind.config.ts — theme extension
|
|
148
|
+
|
|
149
|
+
```ts
|
|
150
|
+
// apps/web/tailwind.config.ts
|
|
151
|
+
export default {
|
|
152
|
+
theme: {
|
|
153
|
+
extend: {
|
|
154
|
+
colors: {
|
|
155
|
+
brand: {
|
|
156
|
+
DEFAULT: 'var(--brand-accent)',
|
|
157
|
+
hover: 'var(--brand-accent-hover)',
|
|
158
|
+
success: 'var(--brand-success)',
|
|
159
|
+
warning: 'var(--brand-warning)',
|
|
160
|
+
error: 'var(--brand-error)',
|
|
161
|
+
},
|
|
162
|
+
},
|
|
163
|
+
fontFamily: {
|
|
164
|
+
sans: ['[heading family]', 'ui-sans-serif', 'system-ui'],
|
|
165
|
+
serif: ['[body family]', 'ui-serif'],
|
|
166
|
+
mono: ['[mono family]', 'ui-monospace'],
|
|
167
|
+
},
|
|
168
|
+
},
|
|
169
|
+
},
|
|
170
|
+
};
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
<!-- When ui-spec.md files reference `brand.accent` or `brand.type.heading`, they map to these tokens. -->
|
|
174
|
+
|
|
175
|
+
---
|
|
176
|
+
|
|
177
|
+
## Maintenance
|
|
178
|
+
|
|
179
|
+
- This file is append-only for copy rules and reference material. Colors and type can be revised but log the change inline (`<!-- revised YYYY-MM-DD: accent shifted from #X to #Y because … -->`).
|
|
180
|
+
- Any ui-spec.md that hardcodes a color or font name instead of referencing a brand token is a violation. `/cofoundr:review` should flag these.
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: >
|
|
3
|
+
Living document for [Feature Name]. Created by /cofoundr:new-feature.
|
|
4
|
+
Update this file as work progresses — at the end of every session, before
|
|
5
|
+
every commit, and whenever a blocker is hit or resolved.
|
|
6
|
+
Loaded automatically in every Claude session via ACTIVE.md.
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Feature: [Feature Name]
|
|
10
|
+
|
|
11
|
+
## TL;DR
|
|
12
|
+
<!-- ≤30 words: what this feature does, who it's for, and which milestone it belongs to -->
|
|
13
|
+
|
|
14
|
+
**Status:** `In Progress`
|
|
15
|
+
**Milestone:** Milestone [N] — [Milestone Name]
|
|
16
|
+
**Phase:** Phase [N.N] — [Phase Name]
|
|
17
|
+
**Added:** [date]
|
|
18
|
+
**Last updated:** [date]
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## Acceptance Criteria
|
|
23
|
+
<!-- Observable behaviors a non-technical founder can verify by looking at the screen.
|
|
24
|
+
Good: "User sees a confirmation message within 5 seconds of submitting."
|
|
25
|
+
Bad: "POST /api/feature returns 200." -->
|
|
26
|
+
|
|
27
|
+
- [ ] ...
|
|
28
|
+
- [ ] ...
|
|
29
|
+
- [ ] ...
|
|
30
|
+
|
|
31
|
+
## Dependencies
|
|
32
|
+
<!-- What must already exist before this feature can be built. Reference the phase that provides each dependency. -->
|
|
33
|
+
|
|
34
|
+
- [Phase N] provides: ...
|
|
35
|
+
- External: ...
|
|
36
|
+
|
|
37
|
+
## Scope Boundaries
|
|
38
|
+
<!-- What this feature explicitly does NOT do. Every boundary here prevents a future scope-creep argument. -->
|
|
39
|
+
|
|
40
|
+
- Not ...
|
|
41
|
+
- Not ...
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
## Build Progress
|
|
46
|
+
|
|
47
|
+
### Tasks
|
|
48
|
+
<!-- Check off as work is completed. Add the date completed in brackets. Add [BLOCKED: reason] inline for blockers. -->
|
|
49
|
+
|
|
50
|
+
- [ ] Task 1 — `[file/path]`
|
|
51
|
+
- [ ] Task 2 — `[file/path]`
|
|
52
|
+
- [ ] Task 3 — `[file/path]`
|
|
53
|
+
|
|
54
|
+
### Blockers
|
|
55
|
+
<!-- Active blockers only. Remove the line when resolved. -->
|
|
56
|
+
|
|
57
|
+
*None*
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
61
|
+
## Session Notes
|
|
62
|
+
<!-- One entry per session. Newest at top. This is the handover mechanism — the next session
|
|
63
|
+
reads this section first to know exactly where things stand. Be specific: what was done,
|
|
64
|
+
what decision was made and why, what is next, what is risky. -->
|
|
65
|
+
|
|
66
|
+
**[date] — [Status: started / continued / completed / blocked]**
|
|
67
|
+
Done: ...
|
|
68
|
+
Next: ...
|
|
69
|
+
Decisions: ...
|
|
70
|
+
Risks: ...
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: >
|
|
3
|
+
Plain-English spec for Phase [N]. Written before any code. The AI reads
|
|
4
|
+
spec.md to build; humans read this to gut-check we're building the right
|
|
5
|
+
thing. Generated by /cofoundr:next during planning.
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Phase [N] — [Phase Name]
|
|
9
|
+
|
|
10
|
+
## TL;DR
|
|
11
|
+
<!-- ≤60 words in plain English. What ships at the end of this phase, who it's for, and why it matters. No acronyms, no jargon. -->
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## What ships
|
|
16
|
+
|
|
17
|
+
<!-- One paragraph. The observable outcome when this phase completes. A non-technical founder should read this and be able to describe the phase's output to an investor without opening any other file. -->
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## Who this is for
|
|
22
|
+
|
|
23
|
+
<!-- Which user persona does this phase move forward? Reference the user from product.md by name and situation. If this phase only benefits a subset of users, say which. -->
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
## What's in scope
|
|
28
|
+
|
|
29
|
+
<!-- 3-6 bullets. Concrete capabilities that exist when this phase is done. Each line should be something a human can click or see. -->
|
|
30
|
+
|
|
31
|
+
- ...
|
|
32
|
+
- ...
|
|
33
|
+
- ...
|
|
34
|
+
|
|
35
|
+
## What's explicitly out of scope
|
|
36
|
+
|
|
37
|
+
<!-- 2-4 bullets. Things a founder might expect from this phase that are deferred. Name the phase or milestone where each deferred item is handled. -->
|
|
38
|
+
|
|
39
|
+
- Not ... (deferred to Phase [N])
|
|
40
|
+
- Not ... (deferred to Phase [N])
|
|
41
|
+
|
|
42
|
+
## Dependencies
|
|
43
|
+
|
|
44
|
+
<!-- What earlier phases must be complete for this one to start. Name the phase and the specific artifact it provides. -->
|
|
45
|
+
|
|
46
|
+
- Phase [N] provides: [artifact]
|
|
47
|
+
- External: [e.g. Meta App registered in developer.facebook.com]
|
|
48
|
+
|
|
49
|
+
## Success looks like
|
|
50
|
+
|
|
51
|
+
<!-- 3-5 observable success criteria. A founder running through the app should be able to tick each one. Copy these into tests.md as the happy-path checklist. -->
|
|
52
|
+
|
|
53
|
+
- [ ] ...
|
|
54
|
+
- [ ] ...
|
|
55
|
+
- [ ] ...
|
|
56
|
+
|
|
57
|
+
## Effort estimate
|
|
58
|
+
|
|
59
|
+
<!-- Rough calendar estimate for a solo founder with AI tooling. Cite the complexity calibration from tech.md (simple / standard / complex). If Launch Kit, estimate assumes kit subagents and helpers are available. -->
|
|
60
|
+
|
|
61
|
+
*Estimate: [N] days. Calibration: [simple | standard | complex].*
|
|
62
|
+
|
|
63
|
+
---
|
|
64
|
+
|
|
65
|
+
<!-- When this file is complete, spec.md starts. README.md is the pre-build gut-check; spec.md is the AI's build manual. -->
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: >
|
|
3
|
+
Decision log for Phase [N]. Every non-trivial choice that shaped the spec,
|
|
4
|
+
with its rationale and the alternatives considered. Append-only during
|
|
5
|
+
planning; append-only during build. Generated by /cofoundr:next during planning.
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Phase [N] — Decisions Log
|
|
9
|
+
|
|
10
|
+
## TL;DR
|
|
11
|
+
<!-- ≤60 words. The 2-3 most load-bearing decisions for this phase. These are the ones future-you will thank present-you for writing down. -->
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## Decisions
|
|
16
|
+
|
|
17
|
+
<!-- One block per decision. Append, do not edit. If a decision is later reversed, add a new "Reversed" block rather than deleting. -->
|
|
18
|
+
|
|
19
|
+
### [YYYY-MM-DD] — [Decision name]
|
|
20
|
+
|
|
21
|
+
- **Decision:** ...
|
|
22
|
+
- **Rationale:** ...
|
|
23
|
+
- **Alternatives considered:**
|
|
24
|
+
- ... (rejected because ...)
|
|
25
|
+
- ... (rejected because ...)
|
|
26
|
+
- **Decided by:** [founder | AI-with-founder-confirmation]
|
|
27
|
+
- **Reversible?** [yes | no | costly]
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## Open decisions
|
|
32
|
+
|
|
33
|
+
<!-- Decisions still unresolved. Each has a target resolution date and the blocker. Move to the main list above once resolved. -->
|
|
34
|
+
|
|
35
|
+
- **[Open decision name]**
|
|
36
|
+
- Target: [YYYY-MM-DD]
|
|
37
|
+
- Blocker: ...
|
|
38
|
+
- Options under consideration: ...
|
|
39
|
+
|
|
40
|
+
## Reversed
|
|
41
|
+
|
|
42
|
+
<!-- Decisions that were made and later changed. Each names the original decision, what was wrong about it, and what replaced it. These are the most valuable history entries — they prevent repeating a mistake. -->
|
|
43
|
+
|
|
44
|
+
### [YYYY-MM-DD] — [Decision name] — Reversed
|
|
45
|
+
|
|
46
|
+
- **Original:** ...
|
|
47
|
+
- **Why reversed:** ...
|
|
48
|
+
- **Replaced by:** ...
|
|
49
|
+
|
|
50
|
+
---
|
|
51
|
+
|
|
52
|
+
<!-- decisions.md is the memory of this phase's judgement calls. Treat it as append-only. A thin decisions.md is fine; a missing one is not. -->
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: >
|
|
3
|
+
Research notes for Phase [N]. Competitor findings, prior art, API quirks,
|
|
4
|
+
and gotchas. Written before the spec so the spec can benefit. Generated by
|
|
5
|
+
/cofoundr:next during planning.
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Phase [N] — Research
|
|
9
|
+
|
|
10
|
+
## TL;DR
|
|
11
|
+
<!-- ≤60 words. The 2-3 most important findings from research that shaped the spec. If there were no surprises, say so and cite what was confirmed. -->
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## Competitor findings
|
|
16
|
+
|
|
17
|
+
<!-- How do other products solve the same problem this phase addresses? Name them. What works well, what is clunky, what we'll copy, what we'll deliberately avoid. At least 2 competitors, each with specifics — no hand-waving. -->
|
|
18
|
+
|
|
19
|
+
### [Competitor 1]
|
|
20
|
+
|
|
21
|
+
- **Approach:** ...
|
|
22
|
+
- **Works well:** ...
|
|
23
|
+
- **Clunky:** ...
|
|
24
|
+
- **Our response:** ...
|
|
25
|
+
|
|
26
|
+
### [Competitor 2]
|
|
27
|
+
|
|
28
|
+
- ...
|
|
29
|
+
|
|
30
|
+
## Prior art
|
|
31
|
+
|
|
32
|
+
<!-- GitHub projects, blog posts, documentation pages, existing kit patterns that inform this phase. Link each. If a pattern from the Launch Kit's subagents (kit-db-expert, kit-guardrails, etc.) applies, name it and what it gives us. -->
|
|
33
|
+
|
|
34
|
+
- [Link / ref] — [what it gives us]
|
|
35
|
+
- ...
|
|
36
|
+
|
|
37
|
+
## API specifics
|
|
38
|
+
|
|
39
|
+
<!-- Quirks and gotchas of any external API this phase talks to. Rate limits, auth flows, sandbox-vs-production differences, deprecation timelines. Cite the source (docs URL + date read). -->
|
|
40
|
+
|
|
41
|
+
- **[API name]**
|
|
42
|
+
- Quirk: ...
|
|
43
|
+
- Source: [URL], read [date]
|
|
44
|
+
|
|
45
|
+
## Gotchas
|
|
46
|
+
|
|
47
|
+
<!-- Things we'd have hit mid-build if we hadn't done this research. One bullet per gotcha, with the evidence and the mitigation we're adopting. -->
|
|
48
|
+
|
|
49
|
+
- ...
|
|
50
|
+
|
|
51
|
+
## Open questions
|
|
52
|
+
|
|
53
|
+
<!-- Items that research couldn't resolve and need a decision before or during the spec. Move each to decisions.md once resolved. -->
|
|
54
|
+
|
|
55
|
+
- ...
|
|
56
|
+
|
|
57
|
+
---
|
|
58
|
+
|
|
59
|
+
<!-- When research.md is complete, the spec and UI spec can use it as a grounding reference. If new questions arise during spec.md authoring, add them here and either resolve or log in decisions.md. -->
|