ship-create 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +39 -0
- package/create.mjs +301 -0
- package/package.json +25 -0
- package/templates/.cursorrules +51 -0
- package/templates/.windsurfrules +51 -0
- package/templates/AGENTS.md +51 -0
- package/templates/CLAUDE.md +51 -0
- package/templates/docs/HUMAN_FLOW.md +205 -0
- package/templates/docs/PROJECT.md +154 -0
- package/templates/docs/PROMPTS.md +246 -0
- package/templates/docs/product-types/CRM_TEMPLATE.md +78 -0
- package/templates/docs/product-types/DASHBOARD_TEMPLATE.md +78 -0
- package/templates/docs/product-types/DIRECTORY_TEMPLATE.md +75 -0
- package/templates/docs/product-types/INTERNAL_TOOL_TEMPLATE.md +77 -0
- package/templates/docs/product-types/LEADGEN_TEMPLATE.md +78 -0
- package/templates/docs/product-types/MARKETPLACE_TEMPLATE.md +81 -0
- package/templates/docs/product-types/MEMBERSHIP_TEMPLATE.md +80 -0
- package/templates/docs/product-types/SAAS_TEMPLATE.md +79 -0
- package/templates/starter-kit/README.md +64 -0
- package/templates/starter-kit/app/backoffice/content/page.tsx +93 -0
- package/templates/starter-kit/app/backoffice/layout.tsx +105 -0
- package/templates/starter-kit/app/backoffice/page.tsx +165 -0
- package/templates/starter-kit/app/backoffice/settings/page.tsx +145 -0
- package/templates/starter-kit/app/backoffice/users/page.tsx +134 -0
- package/templates/starter-kit/app/globals.css +141 -0
- package/templates/starter-kit/app/layout.tsx +43 -0
- package/templates/starter-kit/app/member/(app)/billing/page.tsx +137 -0
- package/templates/starter-kit/app/member/(app)/content/page.tsx +111 -0
- package/templates/starter-kit/app/member/(app)/dashboard/page.tsx +129 -0
- package/templates/starter-kit/app/member/(app)/layout.tsx +130 -0
- package/templates/starter-kit/app/member/(app)/settings/page.tsx +96 -0
- package/templates/starter-kit/app/member/login/page.tsx +106 -0
- package/templates/starter-kit/app/member/signup/page.tsx +120 -0
- package/templates/starter-kit/app/page.tsx +82 -0
- package/templates/starter-kit/app/sale/_components/cta-footer.tsx +66 -0
- package/templates/starter-kit/app/sale/_components/faq.tsx +107 -0
- package/templates/starter-kit/app/sale/_components/features.tsx +95 -0
- package/templates/starter-kit/app/sale/_components/hero.tsx +106 -0
- package/templates/starter-kit/app/sale/_components/pricing.tsx +133 -0
- package/templates/starter-kit/app/sale/_components/problem.tsx +59 -0
- package/templates/starter-kit/app/sale/_components/testimonials.tsx +100 -0
- package/templates/starter-kit/app/sale/page.tsx +21 -0
- package/templates/starter-kit/components/ui/avatar.tsx +50 -0
- package/templates/starter-kit/components/ui/badge.tsx +36 -0
- package/templates/starter-kit/components/ui/button.tsx +56 -0
- package/templates/starter-kit/components/ui/card.tsx +78 -0
- package/templates/starter-kit/components/ui/input.tsx +24 -0
- package/templates/starter-kit/components/ui/table.tsx +88 -0
- package/templates/starter-kit/components/ui/tabs.tsx +55 -0
- package/templates/starter-kit/lib/mock-data.ts +118 -0
- package/templates/starter-kit/lib/utils.ts +6 -0
- package/templates/starter-kit/next.config.mjs +6 -0
- package/templates/starter-kit/package.json +36 -0
- package/templates/starter-kit/postcss.config.mjs +9 -0
- package/templates/starter-kit/tailwind.config.ts +83 -0
- package/templates/starter-kit/tsconfig.json +41 -0
package/README.md
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# SHIP CLI
|
|
2
|
+
|
|
3
|
+
A zero-dependency, zero-API-key project scaffolder for The SHIP Method OS. Built for non-developers — there's nothing to `npm install` and nothing to sign up for before your first command works.
|
|
4
|
+
|
|
5
|
+
## Run It
|
|
6
|
+
|
|
7
|
+
From the repo root:
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
node ship-cli/create.mjs
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
That's it. No `npm install` needed for the CLI itself (it only uses Node.js built-ins). You do need [Node.js](https://nodejs.org) installed (18 or newer) — if `node -v` works in your terminal, you're ready.
|
|
14
|
+
|
|
15
|
+
## What It Asks
|
|
16
|
+
|
|
17
|
+
1. **Project name** — e.g. "Acme CRM"
|
|
18
|
+
2. **What you're building** — pick from the 8 product types in [`../06-TEMPLATES/`](../06-TEMPLATES)
|
|
19
|
+
3. **Which AI tool you mainly use** — ChatGPT, Claude, Gemini, Cursor, or Windsurf
|
|
20
|
+
|
|
21
|
+
## What It Creates
|
|
22
|
+
|
|
23
|
+
A new folder at `projects/<your-project-slug>/` containing:
|
|
24
|
+
|
|
25
|
+
- The full [`starter-kit/`](../starter-kit) app shell (sale page, member area, backoffice — working Next.js code on mock data)
|
|
26
|
+
- `AGENTS.md`, `CLAUDE.md`, `.cursorrules`, `.windsurfrules` — copied in, so Cursor/Windsurf/Claude Code enforce the SHIP order automatically the moment you open the folder
|
|
27
|
+
- `docs/PROJECT.md` — pre-filled with your project name and product type
|
|
28
|
+
- `docs/<TYPE>_TEMPLATE.md` — the starter pack matching what you're building
|
|
29
|
+
- `docs/HUMAN_FLOW.md` — blank template, ready for Stage 2
|
|
30
|
+
- `docs/FIRST_PROMPT.txt` — a ready-to-paste prompt for whichever AI tool you picked, with `PROJECT.md` already loaded into it
|
|
31
|
+
- `NEXT_STEPS.md` — plain-language instructions for what to do next, tailored to your AI tool choice
|
|
32
|
+
|
|
33
|
+
## Why No API Key
|
|
34
|
+
|
|
35
|
+
If you already pay for ChatGPT Plus, Claude Pro, or Gemini Advanced, requiring a *separate* API key (different billing, different signup, different rate limits) to use this CLI would be pure friction. Instead, the CLI prepares the exact prompt you need and tells you where to paste it — into the tool you already have open in a browser tab.
|
|
36
|
+
|
|
37
|
+
## Re-running
|
|
38
|
+
|
|
39
|
+
The CLI refuses to overwrite an existing `projects/<slug>/` folder — pick a different project name, or delete the old folder first if you want to start over.
|
package/create.mjs
ADDED
|
@@ -0,0 +1,301 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* ship-create — zero-dependency project scaffolder for The SHIP Method OS.
|
|
4
|
+
*
|
|
5
|
+
* Why no npm dependencies: the audience is non-developers. Requiring
|
|
6
|
+
* extra packages before the very first command, or an API key before
|
|
7
|
+
* anything works, is exactly the kind of friction that loses beginners.
|
|
8
|
+
* This script uses only Node.js built-ins (fs, path, readline) and pastes
|
|
9
|
+
* a ready prompt for the user to run in whichever AI chat tool they
|
|
10
|
+
* already use — no API key, no extra setup.
|
|
11
|
+
*
|
|
12
|
+
* Usage:
|
|
13
|
+
* npx ship-create
|
|
14
|
+
*
|
|
15
|
+
* All templates this script needs (the starter-kit app, PROJECT.md,
|
|
16
|
+
* HUMAN_FLOW.md, PROMPTS.md, product-type templates, and the agent rule
|
|
17
|
+
* files) are bundled inside this package's own templates/ folder — nothing
|
|
18
|
+
* is read from outside this package, so it works standalone via npx,
|
|
19
|
+
* with no git clone required.
|
|
20
|
+
*/
|
|
21
|
+
|
|
22
|
+
import fs from "node:fs";
|
|
23
|
+
import path from "node:path";
|
|
24
|
+
import readline from "node:readline";
|
|
25
|
+
import { stdin as input, stdout as output } from "node:process";
|
|
26
|
+
import { fileURLToPath } from "node:url";
|
|
27
|
+
|
|
28
|
+
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
29
|
+
const TEMPLATES_DIR = path.join(__dirname, "templates");
|
|
30
|
+
|
|
31
|
+
const PRODUCT_TYPES = [
|
|
32
|
+
{ key: "SAAS", label: "SaaS product", file: "SAAS_TEMPLATE.md" },
|
|
33
|
+
{ key: "CRM", label: "CRM system", file: "CRM_TEMPLATE.md" },
|
|
34
|
+
{ key: "MEMBERSHIP", label: "Membership site", file: "MEMBERSHIP_TEMPLATE.md" },
|
|
35
|
+
{ key: "LEADGEN", label: "Lead generation website", file: "LEADGEN_TEMPLATE.md" },
|
|
36
|
+
{ key: "DIRECTORY", label: "Directory website", file: "DIRECTORY_TEMPLATE.md" },
|
|
37
|
+
{ key: "DASHBOARD", label: "Dashboard / internal analytics", file: "DASHBOARD_TEMPLATE.md" },
|
|
38
|
+
{ key: "INTERNAL_TOOL", label: "Internal tool", file: "INTERNAL_TOOL_TEMPLATE.md" },
|
|
39
|
+
{ key: "MARKETPLACE", label: "Marketplace", file: "MARKETPLACE_TEMPLATE.md" },
|
|
40
|
+
];
|
|
41
|
+
|
|
42
|
+
const AI_TOOLS = [
|
|
43
|
+
{ key: "ChatGPT", note: "Paste the prompt below into a new chat (or set up a Custom GPT for repeated use)." },
|
|
44
|
+
{ key: "Claude", note: "Paste into a new chat, or set up a Claude Project with your docs as Project knowledge." },
|
|
45
|
+
{ key: "Gemini", note: "Paste into a new chat, or set up a Gemini Gem for repeated use." },
|
|
46
|
+
{ key: "Cursor", note: "Open PROJECT.md in the editor and reference it with @PROJECT.md instead of pasting. Use Ask/Chat mode, not Agent mode, for this step." },
|
|
47
|
+
{ key: "Windsurf", note: "Same idea as Cursor — reference PROJECT.md directly via the editor's file context instead of pasting." },
|
|
48
|
+
];
|
|
49
|
+
|
|
50
|
+
function toKebabCase(str) {
|
|
51
|
+
return str
|
|
52
|
+
.trim()
|
|
53
|
+
.toLowerCase()
|
|
54
|
+
.replace(/[^a-z0-9]+/g, "-")
|
|
55
|
+
.replace(/(^-|-$)/g, "") || "my-product";
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
// Reading lines via the readline interface's async iterator (rather than
|
|
59
|
+
// the higher-level `question()` API) avoids a Node.js quirk where piped /
|
|
60
|
+
// redirected (non-TTY) stdin can stop delivering buffered lines after the
|
|
61
|
+
// first question() call resolves. The async-iterator pattern reliably
|
|
62
|
+
// delivers every line regardless of how stdin is supplied.
|
|
63
|
+
function makeLineReader(rl) {
|
|
64
|
+
const it = rl[Symbol.asyncIterator]();
|
|
65
|
+
return async function nextLine(promptText) {
|
|
66
|
+
output.write(promptText);
|
|
67
|
+
const { value, done } = await it.next();
|
|
68
|
+
if (done) throw new Error("Input ended before all questions were answered.");
|
|
69
|
+
return value.trim();
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
async function ask(nextLine, question, defaultValue) {
|
|
74
|
+
const suffix = defaultValue ? ` (${defaultValue})` : "";
|
|
75
|
+
const answer = await nextLine(`${question}${suffix}: `);
|
|
76
|
+
return answer || defaultValue || "";
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
async function pickFromList(nextLine, title, items, labelFn) {
|
|
80
|
+
console.log(`\n${title}`);
|
|
81
|
+
items.forEach((item, i) => console.log(` ${i + 1}. ${labelFn(item)}`));
|
|
82
|
+
while (true) {
|
|
83
|
+
const raw = await nextLine(`Pick a number (1-${items.length}): `);
|
|
84
|
+
const idx = parseInt(raw, 10) - 1;
|
|
85
|
+
if (idx >= 0 && idx < items.length) return items[idx];
|
|
86
|
+
console.log(" Not a valid number, try again.");
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
function copyRecursiveExcluding(src, dest, excludeNames) {
|
|
91
|
+
fs.mkdirSync(dest, { recursive: true });
|
|
92
|
+
for (const entry of fs.readdirSync(src, { withFileTypes: true })) {
|
|
93
|
+
if (excludeNames.has(entry.name)) continue;
|
|
94
|
+
const srcPath = path.join(src, entry.name);
|
|
95
|
+
const destPath = path.join(dest, entry.name);
|
|
96
|
+
if (entry.isDirectory()) {
|
|
97
|
+
copyRecursiveExcluding(srcPath, destPath, excludeNames);
|
|
98
|
+
} else {
|
|
99
|
+
fs.copyFileSync(srcPath, destPath);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
function fillProjectTemplate(rawTemplate, projectName, productTypeLabel) {
|
|
105
|
+
return rawTemplate
|
|
106
|
+
.replace(
|
|
107
|
+
"## 1. Product Vision",
|
|
108
|
+
`## 1. Product Vision\n\n> Project: **${projectName}** — a ${productTypeLabel}. Replace the rest of this section with your own one-paragraph vision.`
|
|
109
|
+
)
|
|
110
|
+
.replace(
|
|
111
|
+
"## 4. Target Audience",
|
|
112
|
+
`## 4. Target Audience\n\n> Product type: ${productTypeLabel}. See \`docs/${productTypeLabel}\`'s matching template file in this project for a starter feature checklist.`
|
|
113
|
+
);
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
async function main() {
|
|
117
|
+
const rl = readline.createInterface({ input, terminal: false });
|
|
118
|
+
const nextLine = makeLineReader(rl);
|
|
119
|
+
|
|
120
|
+
console.log("===========================================");
|
|
121
|
+
console.log(" SHIP CLI — start a new project, the SHIP way");
|
|
122
|
+
console.log("===========================================");
|
|
123
|
+
console.log(
|
|
124
|
+
"\nNo API key needed. This just sets up your files and gives you a\nready-to-paste prompt for ChatGPT, Claude, Gemini, Cursor, or Windsurf.\n"
|
|
125
|
+
);
|
|
126
|
+
|
|
127
|
+
const projectNameRaw = await ask(nextLine, "What's your project called?", "My Product");
|
|
128
|
+
const projectSlug = toKebabCase(projectNameRaw);
|
|
129
|
+
|
|
130
|
+
const productType = await pickFromList(
|
|
131
|
+
nextLine,
|
|
132
|
+
"What are you building?",
|
|
133
|
+
PRODUCT_TYPES,
|
|
134
|
+
(t) => t.label
|
|
135
|
+
);
|
|
136
|
+
|
|
137
|
+
const aiTool = await pickFromList(
|
|
138
|
+
nextLine,
|
|
139
|
+
"Which AI tool will you mainly use?",
|
|
140
|
+
AI_TOOLS,
|
|
141
|
+
(t) => t.key
|
|
142
|
+
);
|
|
143
|
+
|
|
144
|
+
// The project is created inside whatever folder you currently have open
|
|
145
|
+
// (process.cwd()) — not inside the SHIP Method OS repo itself. This way
|
|
146
|
+
// it behaves like `npx create-next-app`: open any empty folder, run the
|
|
147
|
+
// command, get your project right there.
|
|
148
|
+
const outDir = path.join(process.cwd(), projectSlug);
|
|
149
|
+
if (fs.existsSync(outDir)) {
|
|
150
|
+
console.log(`\n A folder already exists at ./${projectSlug} — pick a different name and run again.`);
|
|
151
|
+
rl.close();
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
console.log(`\nCreating ./${projectSlug} ...`);
|
|
156
|
+
|
|
157
|
+
// 1. Copy the working app shell (sale/member/backoffice UI on mock data)
|
|
158
|
+
// from this package's bundled templates — nothing is read from outside
|
|
159
|
+
// this package.
|
|
160
|
+
const starterKitSrc = path.join(TEMPLATES_DIR, "starter-kit");
|
|
161
|
+
if (!fs.existsSync(starterKitSrc) || !fs.existsSync(path.join(TEMPLATES_DIR, "docs"))) {
|
|
162
|
+
console.log(
|
|
163
|
+
"\nThis package's bundled templates are missing or incomplete.\n" +
|
|
164
|
+
"Try reinstalling: npx ship-create@latest\n"
|
|
165
|
+
);
|
|
166
|
+
rl.close();
|
|
167
|
+
process.exit(1);
|
|
168
|
+
}
|
|
169
|
+
copyRecursiveExcluding(
|
|
170
|
+
starterKitSrc,
|
|
171
|
+
outDir,
|
|
172
|
+
new Set([
|
|
173
|
+
"node_modules",
|
|
174
|
+
".next",
|
|
175
|
+
"package-lock.json",
|
|
176
|
+
"next-env.d.ts",
|
|
177
|
+
"tsconfig.tsbuildinfo",
|
|
178
|
+
])
|
|
179
|
+
);
|
|
180
|
+
|
|
181
|
+
// 2. Copy the agent rule files so any coding tool enforces the SHIP order from day one.
|
|
182
|
+
for (const ruleFile of ["AGENTS.md", "CLAUDE.md", ".cursorrules", ".windsurfrules"]) {
|
|
183
|
+
const src = path.join(TEMPLATES_DIR, ruleFile);
|
|
184
|
+
if (fs.existsSync(src)) {
|
|
185
|
+
fs.copyFileSync(src, path.join(outDir, ruleFile));
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
// 3. Create a docs/ folder with a pre-filled PROJECT.md and the matching product-type template.
|
|
190
|
+
const docsDir = path.join(outDir, "docs");
|
|
191
|
+
fs.mkdirSync(docsDir, { recursive: true });
|
|
192
|
+
|
|
193
|
+
const projectMdSrc = path.join(TEMPLATES_DIR, "docs", "PROJECT.md");
|
|
194
|
+
const rawProjectMd = fs.readFileSync(projectMdSrc, "utf8");
|
|
195
|
+
fs.writeFileSync(
|
|
196
|
+
path.join(docsDir, "PROJECT.md"),
|
|
197
|
+
fillProjectTemplate(rawProjectMd, projectNameRaw, productType.label)
|
|
198
|
+
);
|
|
199
|
+
|
|
200
|
+
const templateSrc = path.join(TEMPLATES_DIR, "docs", "product-types", productType.file);
|
|
201
|
+
if (fs.existsSync(templateSrc)) {
|
|
202
|
+
fs.copyFileSync(templateSrc, path.join(docsDir, productType.file));
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
const humanFlowSrc = path.join(TEMPLATES_DIR, "docs", "HUMAN_FLOW.md");
|
|
206
|
+
if (fs.existsSync(humanFlowSrc)) {
|
|
207
|
+
fs.copyFileSync(humanFlowSrc, path.join(docsDir, "HUMAN_FLOW.md"));
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
// Copy the full prompt chain too, so this project is self-contained.
|
|
211
|
+
const promptsSrc = path.join(TEMPLATES_DIR, "docs", "PROMPTS.md");
|
|
212
|
+
if (fs.existsSync(promptsSrc)) {
|
|
213
|
+
fs.copyFileSync(promptsSrc, path.join(docsDir, "PROMPTS.md"));
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
// 4. Build the ready-to-paste Stage 1 prompt (Idea -> Product Spec), pre-loaded with the template.
|
|
217
|
+
const prompt = `You are helping me turn a raw product idea into a structured product spec.
|
|
218
|
+
|
|
219
|
+
My raw idea: [describe your idea in 2-5 sentences — audience, problem, what you imagine building]
|
|
220
|
+
|
|
221
|
+
I'm building a ${productType.label.toLowerCase()} called "${projectNameRaw}".
|
|
222
|
+
|
|
223
|
+
I want you to fill out the following template completely. Do not skip
|
|
224
|
+
sections. If you don't have enough information for a section, ask me a
|
|
225
|
+
specific clarifying question instead of writing a generic placeholder.
|
|
226
|
+
|
|
227
|
+
Push back on weak answers — if my problem statement is vague ("things are
|
|
228
|
+
hard"), ask me to quantify it. If my target audience is "everyone," force me
|
|
229
|
+
to pick a primary segment.
|
|
230
|
+
|
|
231
|
+
Here is the template to fill:
|
|
232
|
+
|
|
233
|
+
${rawProjectMd}
|
|
234
|
+
|
|
235
|
+
Output the completed template in the same markdown format, ready to save
|
|
236
|
+
back into docs/PROJECT.md.`;
|
|
237
|
+
|
|
238
|
+
fs.writeFileSync(path.join(docsDir, "FIRST_PROMPT.txt"), prompt);
|
|
239
|
+
|
|
240
|
+
const toolNote = aiTool.note;
|
|
241
|
+
const nextSteps = `# Next Steps for ${projectNameRaw}
|
|
242
|
+
|
|
243
|
+
You're building: **${productType.label}**
|
|
244
|
+
Your AI tool: **${aiTool.key}**
|
|
245
|
+
|
|
246
|
+
## 1. Run the app shell (optional, do this anytime)
|
|
247
|
+
|
|
248
|
+
\`\`\`
|
|
249
|
+
cd ${projectSlug}
|
|
250
|
+
npm install
|
|
251
|
+
npm run dev
|
|
252
|
+
\`\`\`
|
|
253
|
+
|
|
254
|
+
Then open http://localhost:3000 — you'll see the sale page, member area, and
|
|
255
|
+
backoffice already wired up with placeholder/mock data.
|
|
256
|
+
|
|
257
|
+
## 2. Fill in your product spec (do this first, before changing code)
|
|
258
|
+
|
|
259
|
+
Open \`docs/PROJECT.md\`. It's pre-filled with your project name and product
|
|
260
|
+
type. Fill in sections 1-2 (Vision, Problem Statement) yourself, by hand —
|
|
261
|
+
this is the thinking only you can do.
|
|
262
|
+
|
|
263
|
+
## 3. Let AI fill in the rest
|
|
264
|
+
|
|
265
|
+
${toolNote}
|
|
266
|
+
|
|
267
|
+
The exact prompt to paste is saved in \`docs/FIRST_PROMPT.txt\` — open it,
|
|
268
|
+
fill in the [raw idea] bracket, and paste the whole thing into ${aiTool.key}.
|
|
269
|
+
|
|
270
|
+
## 4. Keep going
|
|
271
|
+
|
|
272
|
+
Once \`docs/PROJECT.md\` is fully filled (no more [brackets]):
|
|
273
|
+
- Move to \`docs/HUMAN_FLOW.md\` (Stage 2 in the prompt chain)
|
|
274
|
+
- Reference \`docs/${productType.file}\` for feature ideas specific to a ${productType.label.toLowerCase()}
|
|
275
|
+
- The full prompt chain (Stage 3-6: UX -> Tech -> Build Plan -> Code) is in
|
|
276
|
+
\`docs/PROMPTS.md\` — already copied into this project
|
|
277
|
+
|
|
278
|
+
## 5. Coding agents are already configured
|
|
279
|
+
|
|
280
|
+
This folder includes AGENTS.md / CLAUDE.md / .cursorrules / .windsurfrules.
|
|
281
|
+
If you open this folder in Cursor, Windsurf, or Claude Code, those tools
|
|
282
|
+
will automatically enforce filling Structure and Human Flow before
|
|
283
|
+
generating feature code — you don't need to do anything extra.
|
|
284
|
+
`;
|
|
285
|
+
|
|
286
|
+
fs.writeFileSync(path.join(outDir, "NEXT_STEPS.md"), nextSteps);
|
|
287
|
+
|
|
288
|
+
console.log("\nDone! Your project is ready at:");
|
|
289
|
+
console.log(` ./${projectSlug}/`);
|
|
290
|
+
console.log("\nOpen this file for what to do next:");
|
|
291
|
+
console.log(` ${projectSlug}/NEXT_STEPS.md`);
|
|
292
|
+
console.log("\nOr just run:");
|
|
293
|
+
console.log(` cat "${projectSlug}/NEXT_STEPS.md"`);
|
|
294
|
+
|
|
295
|
+
rl.close();
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
main().catch((err) => {
|
|
299
|
+
console.error("\nSomething went wrong:", err.message);
|
|
300
|
+
process.exit(1);
|
|
301
|
+
});
|
package/package.json
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "ship-create",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Scaffold a new project the SHIP Method way — Structure, Human Flow, Instruction, Publish. No git clone, no API key, just one command.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"bin": {
|
|
8
|
+
"ship-create": "./create.mjs"
|
|
9
|
+
},
|
|
10
|
+
"files": [
|
|
11
|
+
"create.mjs",
|
|
12
|
+
"templates/**/*"
|
|
13
|
+
],
|
|
14
|
+
"engines": {
|
|
15
|
+
"node": ">=18"
|
|
16
|
+
},
|
|
17
|
+
"keywords": [
|
|
18
|
+
"scaffold",
|
|
19
|
+
"starter-kit",
|
|
20
|
+
"next.js",
|
|
21
|
+
"ai",
|
|
22
|
+
"vibe-coding",
|
|
23
|
+
"cli"
|
|
24
|
+
]
|
|
25
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# SHIP Agent Rules
|
|
2
|
+
|
|
3
|
+
**This file is the canonical ruleset.** Copies of this exact content live at `AGENTS.md`, `CLAUDE.md`, `.cursorrules`, and `.windsurfrules` so that whichever AI coding tool opens this repository, it picks up these rules automatically — no manual prompt-pasting required. If you edit this file, copy the change into the other four so they stay identical.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## What This Repository Is
|
|
8
|
+
|
|
9
|
+
This is a project built using **The SHIP Method** — a four-phase discipline for building products with AI:
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
S — STRUCTURE → H — HUMAN FLOW → I — INSTRUCTION → P — PUBLISH
|
|
13
|
+
(what & why) (the experience) (AI-ready specs) (ship it)
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
Full reference docs live in: `01-STRUCTURE/`, `02-HUMAN-FLOW/`, `03-INSTRUCTION/`, `04-PUBLISH/`, `05-SOP/`, `06-TEMPLATES/`, `07-PROMPTS/`, `08-EXAMPLES/`, `09-CASE-STUDIES/`, `10-LAUNCH/`, `11-STANDARDS/`, `12-DESIGN-SYSTEM/`, `13-TECH-STACK/`.
|
|
17
|
+
|
|
18
|
+
## Mandatory Behavior for Any AI Agent Working in This Repo
|
|
19
|
+
|
|
20
|
+
1. **Check Structure and Human Flow before generating application code.**
|
|
21
|
+
- Look for `01-STRUCTURE/PROJECT.md` and `02-HUMAN-FLOW/HUMAN_FLOW.md`.
|
|
22
|
+
- If either is missing, or still contains unfilled `[bracket placeholders]` in its core sections (Vision, Problem Statement, MVP Scope; Happy Path, Core Screens), **do not generate product code**. Instead, help the user fill in the missing sections first, asking one question at a time.
|
|
23
|
+
- Exception: scaffolding, boilerplate, config files, and infra setup (package.json, folder structure, CI config) are fine to generate at any time — the gate is on *feature/business logic* code.
|
|
24
|
+
|
|
25
|
+
2. **Treat `03-INSTRUCTION/AI_BUILD_SPEC.md` as the source of truth** for functional requirements, data model, and API contract once it exists. If a user's code request conflicts with it, point out the conflict instead of silently overriding the spec.
|
|
26
|
+
|
|
27
|
+
3. **Use the right reference file for the job:**
|
|
28
|
+
| Need | File |
|
|
29
|
+
|---|---|
|
|
30
|
+
| Product type starter (CRM, SaaS, marketplace, etc.) | `06-TEMPLATES/*_TEMPLATE.md` |
|
|
31
|
+
| Database schema | `03-INSTRUCTION/DATABASE_SPEC.md` |
|
|
32
|
+
| Stack choice | `13-TECH-STACK/STACK_DECISION_MATRIX.md` |
|
|
33
|
+
| UI/component consistency | `12-DESIGN-SYSTEM/DESIGN_SYSTEM.md`, `UI_COMPONENT_SPEC.md` |
|
|
34
|
+
| Pre-launch checks | `04-PUBLISH/QA_CHECKLIST.md`, `LAUNCH_CHECKLIST.md` |
|
|
35
|
+
|
|
36
|
+
4. **After generating a new feature**, remind the user to add relevant test cases to `04-PUBLISH/QA_CHECKLIST.md` and update `01-STRUCTURE/FEATURE_MATRIX.md` if scope changed.
|
|
37
|
+
|
|
38
|
+
5. **If the user explicitly insists on skipping the gate** ("just build it, skip the docs"), comply — but say once, briefly, what's being skipped and why it usually causes rework later. Don't refuse repeatedly or lecture.
|
|
39
|
+
|
|
40
|
+
6. **Never invent business facts** (market size, pricing, real metrics, real user quotes) into these docs. Draft clearly-labeled placeholders or ask the user instead.
|
|
41
|
+
|
|
42
|
+
## Quick Orientation for a New Agent Session
|
|
43
|
+
|
|
44
|
+
If you (the AI agent) are opening this repo for the first time in a session:
|
|
45
|
+
1. Read `01-STRUCTURE/PROJECT.md` and `02-HUMAN-FLOW/HUMAN_FLOW.md` first to learn what's being built.
|
|
46
|
+
2. Read `03-INSTRUCTION/AI_BUILD_SPEC.md` if it exists, for the technical contract.
|
|
47
|
+
3. Then proceed with whatever the user asked, applying the rules above.
|
|
48
|
+
|
|
49
|
+
## Source
|
|
50
|
+
|
|
51
|
+
These rules are part of **The SHIP Method OS**. See `README.md` and `START-HERE.md` at the repo root for the full system this project was built from.
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# SHIP Agent Rules
|
|
2
|
+
|
|
3
|
+
**This file is the canonical ruleset.** Copies of this exact content live at `AGENTS.md`, `CLAUDE.md`, `.cursorrules`, and `.windsurfrules` so that whichever AI coding tool opens this repository, it picks up these rules automatically — no manual prompt-pasting required. If you edit this file, copy the change into the other four so they stay identical.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## What This Repository Is
|
|
8
|
+
|
|
9
|
+
This is a project built using **The SHIP Method** — a four-phase discipline for building products with AI:
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
S — STRUCTURE → H — HUMAN FLOW → I — INSTRUCTION → P — PUBLISH
|
|
13
|
+
(what & why) (the experience) (AI-ready specs) (ship it)
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
Full reference docs live in: `01-STRUCTURE/`, `02-HUMAN-FLOW/`, `03-INSTRUCTION/`, `04-PUBLISH/`, `05-SOP/`, `06-TEMPLATES/`, `07-PROMPTS/`, `08-EXAMPLES/`, `09-CASE-STUDIES/`, `10-LAUNCH/`, `11-STANDARDS/`, `12-DESIGN-SYSTEM/`, `13-TECH-STACK/`.
|
|
17
|
+
|
|
18
|
+
## Mandatory Behavior for Any AI Agent Working in This Repo
|
|
19
|
+
|
|
20
|
+
1. **Check Structure and Human Flow before generating application code.**
|
|
21
|
+
- Look for `01-STRUCTURE/PROJECT.md` and `02-HUMAN-FLOW/HUMAN_FLOW.md`.
|
|
22
|
+
- If either is missing, or still contains unfilled `[bracket placeholders]` in its core sections (Vision, Problem Statement, MVP Scope; Happy Path, Core Screens), **do not generate product code**. Instead, help the user fill in the missing sections first, asking one question at a time.
|
|
23
|
+
- Exception: scaffolding, boilerplate, config files, and infra setup (package.json, folder structure, CI config) are fine to generate at any time — the gate is on *feature/business logic* code.
|
|
24
|
+
|
|
25
|
+
2. **Treat `03-INSTRUCTION/AI_BUILD_SPEC.md` as the source of truth** for functional requirements, data model, and API contract once it exists. If a user's code request conflicts with it, point out the conflict instead of silently overriding the spec.
|
|
26
|
+
|
|
27
|
+
3. **Use the right reference file for the job:**
|
|
28
|
+
| Need | File |
|
|
29
|
+
|---|---|
|
|
30
|
+
| Product type starter (CRM, SaaS, marketplace, etc.) | `06-TEMPLATES/*_TEMPLATE.md` |
|
|
31
|
+
| Database schema | `03-INSTRUCTION/DATABASE_SPEC.md` |
|
|
32
|
+
| Stack choice | `13-TECH-STACK/STACK_DECISION_MATRIX.md` |
|
|
33
|
+
| UI/component consistency | `12-DESIGN-SYSTEM/DESIGN_SYSTEM.md`, `UI_COMPONENT_SPEC.md` |
|
|
34
|
+
| Pre-launch checks | `04-PUBLISH/QA_CHECKLIST.md`, `LAUNCH_CHECKLIST.md` |
|
|
35
|
+
|
|
36
|
+
4. **After generating a new feature**, remind the user to add relevant test cases to `04-PUBLISH/QA_CHECKLIST.md` and update `01-STRUCTURE/FEATURE_MATRIX.md` if scope changed.
|
|
37
|
+
|
|
38
|
+
5. **If the user explicitly insists on skipping the gate** ("just build it, skip the docs"), comply — but say once, briefly, what's being skipped and why it usually causes rework later. Don't refuse repeatedly or lecture.
|
|
39
|
+
|
|
40
|
+
6. **Never invent business facts** (market size, pricing, real metrics, real user quotes) into these docs. Draft clearly-labeled placeholders or ask the user instead.
|
|
41
|
+
|
|
42
|
+
## Quick Orientation for a New Agent Session
|
|
43
|
+
|
|
44
|
+
If you (the AI agent) are opening this repo for the first time in a session:
|
|
45
|
+
1. Read `01-STRUCTURE/PROJECT.md` and `02-HUMAN-FLOW/HUMAN_FLOW.md` first to learn what's being built.
|
|
46
|
+
2. Read `03-INSTRUCTION/AI_BUILD_SPEC.md` if it exists, for the technical contract.
|
|
47
|
+
3. Then proceed with whatever the user asked, applying the rules above.
|
|
48
|
+
|
|
49
|
+
## Source
|
|
50
|
+
|
|
51
|
+
These rules are part of **The SHIP Method OS**. See `README.md` and `START-HERE.md` at the repo root for the full system this project was built from.
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# SHIP Agent Rules
|
|
2
|
+
|
|
3
|
+
**This file is the canonical ruleset.** Copies of this exact content live at `AGENTS.md`, `CLAUDE.md`, `.cursorrules`, and `.windsurfrules` so that whichever AI coding tool opens this repository, it picks up these rules automatically — no manual prompt-pasting required. If you edit this file, copy the change into the other four so they stay identical.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## What This Repository Is
|
|
8
|
+
|
|
9
|
+
This is a project built using **The SHIP Method** — a four-phase discipline for building products with AI:
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
S — STRUCTURE → H — HUMAN FLOW → I — INSTRUCTION → P — PUBLISH
|
|
13
|
+
(what & why) (the experience) (AI-ready specs) (ship it)
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
Full reference docs live in: `01-STRUCTURE/`, `02-HUMAN-FLOW/`, `03-INSTRUCTION/`, `04-PUBLISH/`, `05-SOP/`, `06-TEMPLATES/`, `07-PROMPTS/`, `08-EXAMPLES/`, `09-CASE-STUDIES/`, `10-LAUNCH/`, `11-STANDARDS/`, `12-DESIGN-SYSTEM/`, `13-TECH-STACK/`.
|
|
17
|
+
|
|
18
|
+
## Mandatory Behavior for Any AI Agent Working in This Repo
|
|
19
|
+
|
|
20
|
+
1. **Check Structure and Human Flow before generating application code.**
|
|
21
|
+
- Look for `01-STRUCTURE/PROJECT.md` and `02-HUMAN-FLOW/HUMAN_FLOW.md`.
|
|
22
|
+
- If either is missing, or still contains unfilled `[bracket placeholders]` in its core sections (Vision, Problem Statement, MVP Scope; Happy Path, Core Screens), **do not generate product code**. Instead, help the user fill in the missing sections first, asking one question at a time.
|
|
23
|
+
- Exception: scaffolding, boilerplate, config files, and infra setup (package.json, folder structure, CI config) are fine to generate at any time — the gate is on *feature/business logic* code.
|
|
24
|
+
|
|
25
|
+
2. **Treat `03-INSTRUCTION/AI_BUILD_SPEC.md` as the source of truth** for functional requirements, data model, and API contract once it exists. If a user's code request conflicts with it, point out the conflict instead of silently overriding the spec.
|
|
26
|
+
|
|
27
|
+
3. **Use the right reference file for the job:**
|
|
28
|
+
| Need | File |
|
|
29
|
+
|---|---|
|
|
30
|
+
| Product type starter (CRM, SaaS, marketplace, etc.) | `06-TEMPLATES/*_TEMPLATE.md` |
|
|
31
|
+
| Database schema | `03-INSTRUCTION/DATABASE_SPEC.md` |
|
|
32
|
+
| Stack choice | `13-TECH-STACK/STACK_DECISION_MATRIX.md` |
|
|
33
|
+
| UI/component consistency | `12-DESIGN-SYSTEM/DESIGN_SYSTEM.md`, `UI_COMPONENT_SPEC.md` |
|
|
34
|
+
| Pre-launch checks | `04-PUBLISH/QA_CHECKLIST.md`, `LAUNCH_CHECKLIST.md` |
|
|
35
|
+
|
|
36
|
+
4. **After generating a new feature**, remind the user to add relevant test cases to `04-PUBLISH/QA_CHECKLIST.md` and update `01-STRUCTURE/FEATURE_MATRIX.md` if scope changed.
|
|
37
|
+
|
|
38
|
+
5. **If the user explicitly insists on skipping the gate** ("just build it, skip the docs"), comply — but say once, briefly, what's being skipped and why it usually causes rework later. Don't refuse repeatedly or lecture.
|
|
39
|
+
|
|
40
|
+
6. **Never invent business facts** (market size, pricing, real metrics, real user quotes) into these docs. Draft clearly-labeled placeholders or ask the user instead.
|
|
41
|
+
|
|
42
|
+
## Quick Orientation for a New Agent Session
|
|
43
|
+
|
|
44
|
+
If you (the AI agent) are opening this repo for the first time in a session:
|
|
45
|
+
1. Read `01-STRUCTURE/PROJECT.md` and `02-HUMAN-FLOW/HUMAN_FLOW.md` first to learn what's being built.
|
|
46
|
+
2. Read `03-INSTRUCTION/AI_BUILD_SPEC.md` if it exists, for the technical contract.
|
|
47
|
+
3. Then proceed with whatever the user asked, applying the rules above.
|
|
48
|
+
|
|
49
|
+
## Source
|
|
50
|
+
|
|
51
|
+
These rules are part of **The SHIP Method OS**. See `README.md` and `START-HERE.md` at the repo root for the full system this project was built from.
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# SHIP Agent Rules
|
|
2
|
+
|
|
3
|
+
**This file is the canonical ruleset.** Copies of this exact content live at `AGENTS.md`, `CLAUDE.md`, `.cursorrules`, and `.windsurfrules` so that whichever AI coding tool opens this repository, it picks up these rules automatically — no manual prompt-pasting required. If you edit this file, copy the change into the other four so they stay identical.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## What This Repository Is
|
|
8
|
+
|
|
9
|
+
This is a project built using **The SHIP Method** — a four-phase discipline for building products with AI:
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
S — STRUCTURE → H — HUMAN FLOW → I — INSTRUCTION → P — PUBLISH
|
|
13
|
+
(what & why) (the experience) (AI-ready specs) (ship it)
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
Full reference docs live in: `01-STRUCTURE/`, `02-HUMAN-FLOW/`, `03-INSTRUCTION/`, `04-PUBLISH/`, `05-SOP/`, `06-TEMPLATES/`, `07-PROMPTS/`, `08-EXAMPLES/`, `09-CASE-STUDIES/`, `10-LAUNCH/`, `11-STANDARDS/`, `12-DESIGN-SYSTEM/`, `13-TECH-STACK/`.
|
|
17
|
+
|
|
18
|
+
## Mandatory Behavior for Any AI Agent Working in This Repo
|
|
19
|
+
|
|
20
|
+
1. **Check Structure and Human Flow before generating application code.**
|
|
21
|
+
- Look for `01-STRUCTURE/PROJECT.md` and `02-HUMAN-FLOW/HUMAN_FLOW.md`.
|
|
22
|
+
- If either is missing, or still contains unfilled `[bracket placeholders]` in its core sections (Vision, Problem Statement, MVP Scope; Happy Path, Core Screens), **do not generate product code**. Instead, help the user fill in the missing sections first, asking one question at a time.
|
|
23
|
+
- Exception: scaffolding, boilerplate, config files, and infra setup (package.json, folder structure, CI config) are fine to generate at any time — the gate is on *feature/business logic* code.
|
|
24
|
+
|
|
25
|
+
2. **Treat `03-INSTRUCTION/AI_BUILD_SPEC.md` as the source of truth** for functional requirements, data model, and API contract once it exists. If a user's code request conflicts with it, point out the conflict instead of silently overriding the spec.
|
|
26
|
+
|
|
27
|
+
3. **Use the right reference file for the job:**
|
|
28
|
+
| Need | File |
|
|
29
|
+
|---|---|
|
|
30
|
+
| Product type starter (CRM, SaaS, marketplace, etc.) | `06-TEMPLATES/*_TEMPLATE.md` |
|
|
31
|
+
| Database schema | `03-INSTRUCTION/DATABASE_SPEC.md` |
|
|
32
|
+
| Stack choice | `13-TECH-STACK/STACK_DECISION_MATRIX.md` |
|
|
33
|
+
| UI/component consistency | `12-DESIGN-SYSTEM/DESIGN_SYSTEM.md`, `UI_COMPONENT_SPEC.md` |
|
|
34
|
+
| Pre-launch checks | `04-PUBLISH/QA_CHECKLIST.md`, `LAUNCH_CHECKLIST.md` |
|
|
35
|
+
|
|
36
|
+
4. **After generating a new feature**, remind the user to add relevant test cases to `04-PUBLISH/QA_CHECKLIST.md` and update `01-STRUCTURE/FEATURE_MATRIX.md` if scope changed.
|
|
37
|
+
|
|
38
|
+
5. **If the user explicitly insists on skipping the gate** ("just build it, skip the docs"), comply — but say once, briefly, what's being skipped and why it usually causes rework later. Don't refuse repeatedly or lecture.
|
|
39
|
+
|
|
40
|
+
6. **Never invent business facts** (market size, pricing, real metrics, real user quotes) into these docs. Draft clearly-labeled placeholders or ask the user instead.
|
|
41
|
+
|
|
42
|
+
## Quick Orientation for a New Agent Session
|
|
43
|
+
|
|
44
|
+
If you (the AI agent) are opening this repo for the first time in a session:
|
|
45
|
+
1. Read `01-STRUCTURE/PROJECT.md` and `02-HUMAN-FLOW/HUMAN_FLOW.md` first to learn what's being built.
|
|
46
|
+
2. Read `03-INSTRUCTION/AI_BUILD_SPEC.md` if it exists, for the technical contract.
|
|
47
|
+
3. Then proceed with whatever the user asked, applying the rules above.
|
|
48
|
+
|
|
49
|
+
## Source
|
|
50
|
+
|
|
51
|
+
These rules are part of **The SHIP Method OS**. See `README.md` and `START-HERE.md` at the repo root for the full system this project was built from.
|