Prd from idea
Turn a raw product idea (a paragraph, a Notion dump, a half-formed thought) into a structured PROJECT.md (high-level brief) and PRD.md (product requirements document) inside a project's `.workflow/` folder, following the dev-flow contract. Use when the user pastes a product idea and says "let's plan this", "draft a PRD", "what would this look like as a project", or starts a new project from scratch. Also use when a `.workflow/` exists at phase `empty` or `idea_captured` and the orchestrator routes here. Not for: writing code, designing UI, or producing task lists (those are downstream skills).From its SKILL.md
npx -y skills add lukedj78/dev-flow --skill prd-from-ideaAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 4 stars4 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
12.5 KB, ~3.3k tokens by cl100k_base, as published. Nobody here has run it
prd-from-idea — idea → PROJECT.md + PRD.md
This skill turns an unstructured product idea into two artifacts that downstream skills depend on:
PROJECT.md— the strategic brief. One page. Audience, problem, value proposition, success criteria. The piece other humans read.PRD.md— the product requirements doc. Several pages. User stories, acceptance criteria, non-goals, open questions. The piece engineers and downstream skills consume.
The skill is interactive — it asks the user a small number of high-leverage questions and turns the answers into the docs. It does not invent PRD content from nothing.
When this skill applies
- A user pastes a product idea ("I want to build a dashboard for X") and asks to start.
- Orchestrator (
dev-flow) routes here whenphaseisemptyoridea_captured. - A
PROJECT.mdexists butPRD.mddoesn't — the skill expands the brief into requirements.
If a PRD.md already exists, the skill enters revise mode: it reads the current PRD, asks what's wrong, and edits in place. It does not silently overwrite.
Contract
This skill follows the dev-flow contract — see references/contracts.md (vendored copy) for the canonical schema. Key facts:
- Output goes into
<project-root>/.workflow/. - Set
phase = "idea_captured"after writingPROJECT.md; setphase = "prd_drafted"after writingPRD.md. - Append a
historyentry tometa.jsonfor every run.
Workflow
Step 1 — Locate the project root + read state
If invoked by the orchestrator, the project root is given. Otherwise ask the user.
Read .workflow/meta.json. If absent, ask the user whether to initialize the project here (run dev-flow's init_workflow.py). Don't guess.
Step 2 — Determine which artifact to produce
| State | Action |
|---|---|
PROJECT.md missing | Produce PROJECT.md first, then ask if user wants to continue to PRD |
PROJECT.md exists, PRD.md missing | Read PROJECT.md, produce PRD.md building on it |
| Both exist | Ask user which to revise (don't overwrite blindly) |
Step 3 — Interview the user (the high-leverage questions)
For PROJECT.md, ask at most 7 questions, in this order. Skip any the user already answered in their initial paste.
-
Who is this for? (target audience — be specific: not "B2B" but "Series A SaaS founders running 10–30 person teams")
-
What's the problem they have right now? (in their own words, not yours)
-
How do they solve it today? (status quo / competitors)
-
What's the wedge? (the one thing this product does better than the status quo — be ruthless, one sentence)
-
What does success look like in 6 months? (one or two measurable signals — MAU, revenue, retention, qualitative quotes)
-
What's the primary target — web, mobile (iOS+Android), both (monorepo), or desktop? (forces a stack decision early). Map the answer →
meta.json#stack.framework:- "web" / "web app" / no answer →
stack.framework: "next"(current default for web) - "mobile" / "iOS" / "Android" / "mobile app" / "native app" →
stack.framework: "expo-rn" - "both" / "monorepo" / "web + mobile" / "stesso prodotto su entrambi" →
stack.framework: "monorepo" - "desktop" → out of scope for this skill set — refuse politely and refer the user to Tauri/Electron docs.
- "web" / "web app" / no answer →
-
(Web only OR monorepo: ask for the web side) Which UI library — shadcn/ui, Base UI, MUI, or Coss/UI? Map the answer →
meta.json#stack.ui(forframework="next") ormeta.json#stack.monorepo.web.ui(forframework="monorepo"):- "shadcn" / "shadcn/ui" / "i want to own the source" →
"shadcn" - "base ui" / "base-ui" / "headless library no CLI" →
"base-ui" - "mui" / "material ui" / "material design" / "internal tool with lots of tables" →
"mui" - "coss" / "coss/ui" / "cal.com design system" / "cal.com style" →
"coss"(Coss/UI, the Cal.com design system built on Base UI — requires Tailwind v4) - No clear answer → default to
"shadcn"(most flexible / well-trodden path), explain briefly, let the user override.
For mobile-only (
framework="expo-rn") and the mobile side of monorepo, UI is fixed at"nativewind"— no question asked. - "shadcn" / "shadcn/ui" / "i want to own the source" →
-
(Web only OR monorepo: ask for the web side) Which form library — TanStack Form (default, recommended) or react-hook-form? Map to
meta.json#stack.forms(web stack) ormeta.json#stack.monorepo.web.forms(monorepo):- "tanstack" / "tanstack-form" / no answer / "default" →
"tanstack-form"(recommended — theformsskill scaffoldslib/forms/on top of@tanstack/react-formwith dirty tracking + baseline reset built-in + Zod-native validators). - "rhf" / "react-hook-form" / "I know rhf better" →
"react-hook-form"(theformsskill scaffolds the samelib/forms/surface —useEditForm/useCreateForm/FormProvider/FormField/FormActions/mapFormError— but built onreact-hook-form+@hookform/resolvers/zodunderneath). Consumer code is identical.
Skip Q8 for mobile-only projects — RN forms use a different ecosystem (controlled state via React Hook Form-native or vanilla, no consensus toolkit yet).
For Next.js projects (web only or web side of monorepo), also write
stack.nextjs_version = "16"(App Router canonical). The dev-flow web skills target Next.js 16 + App Router exclusively — they refuse to apply to Pages Router or Next.js 15. - "tanstack" / "tanstack-form" / no answer / "default" →
-
Does the product need an agent engine (eve)? (does an AI agent need to take actions, orchestrate tools, run autonomously, or converse with users beyond a plain LLM call?) Map the answer →
meta.json#stack.agent:- "yes" / "it needs an AI agent" / "autonomous actions" / "tool-calling agent" →
"eve"(theeve-agentskill scaffolds the agent engine;dev-flowroutes to it alongside the frontend skills). - "no" / "just a chatbot wrapper" / no clear need →
null.
Applies regardless of framework —
eveis a server-side engine that can sit behind web, mobile, or monorepo frontends. - "yes" / "it needs an AI agent" / "autonomous actions" / "tool-calling agent" →
Route groups deduction (web + monorepo)
For framework ∈ {next, monorepo}, deduce which Next.js route groups to scaffold from Q1-Q5 answers. Write the array in meta.json#stack.route_groups:
| PRD indicators | route_groups value |
|---|---|
| SaaS with public landing + login + dashboard (B2B/B2C) | ["(marketing)", "(auth)", "(app)"] |
| Internal tool / back-office (only authenticated users) | ["(auth)", "(app)"] |
| Marketing site / blog only (no app) | ["(marketing)"] |
| Documentation site (flat, no groups) | [] |
For mobile (framework="expo-rn"), the equivalent deduction also writes route_groups:
| PRD indicators | route_groups value |
|---|---|
| Consumer app (with login + tabs nav) | ["(auth)", "(app)", "(tabs)"] |
| App with login but no tabs (single screen flow) | ["(auth)", "(app)"] |
The user can override at any time by saying "add (marketing) group" etc. — the scaffold skill will create the group.
Writing the stack into meta.json
Depending on Q6, write to meta.json immediately:
// framework="next" (web only)
"stack": { "framework": "next", "ui": "<shadcn|base-ui|mui|coss>", "route_groups": ["(marketing)", "(auth)", "(app)"], "auth": null, "db": null, "agent": null, ... }
// framework="expo-rn" (mobile only)
"stack": { "framework": "expo-rn", "ui": "nativewind", "route_groups": ["(auth)", "(app)", "(tabs)"], "auth": null, "db": null, "agent": null, ... }
// framework="monorepo"
"stack": {
"framework": "monorepo",
"monorepo": {
"web": { "framework": "next", "ui": "<shadcn|base-ui|mui|coss>" },
"mobile": { "framework": "expo-rn", "ui": "nativewind" }
},
"auth": null, "db": null, "storage": null, "payments": null, "deploy": null, "agent": null
}
stack.agent is null by default, or "eve" when Q9 is answered yes (see Q9 above).
Downstream skills (prd-to-tasks, dev-flow routing, design-md-to-app, rn-bootstrap, monorepo-bootstrap, eve-agent) all read stack.framework and branch accordingly. eve-agent additionally reads stack.agent. Other stack.* keys (auth, db, payments, deploy) remain null at this stage.
For PRD.md, after PROJECT.md is in place, ask:
- What are the 3–5 user stories that define an MVP? (in
As a … I want … so that …form; if user gives more, ask which 3–5 are non-negotiable) - What is explicitly out of scope? (forces clarity)
- What technical constraints exist? (must use Postgres, must be GDPR-compliant, must integrate with X, etc. —
nullis a fine answer)
If the user pastes a long brief, parse it and ask only the unanswered questions. Don't make them re-state things they already wrote.
Step 4 — Draft the documents
PROJECT.md template
# <Project Name>
## Overview
<2–4 sentences capturing what this is, in plain English. Pretend the reader is a smart non-technical
stakeholder seeing the project for the first time.>
## Audience
<Who is this for? Be specific. If there are multiple personas, list each as a sub-bullet with their
role, context, and what they're trying to do.>
## Problem & current alternatives
<The pain point. What do they do today? What hurts about that?>
## Value proposition
<The wedge — the one thing this product does that nothing else does, or does better. One sentence,
then optionally a paragraph elaborating.>
## Success criteria (6 months)
- <Measurable signal #1>
- <Measurable signal #2>
- <Optional: leading indicators>
## Out of scope
<Optional — things the project deliberately won't do, to set expectations.>
PRD.md template
# <Project Name> — PRD
## Problem
<Restated from PROJECT.md but with more detail. What specifically goes wrong for the user
without this product? Use a concrete scenario.>
## Solution overview
<How the product solves it. 2–4 paragraphs. Mention key flows but not implementation details.>
## User stories (MVP)
- **US-1.** As a <persona>, I want to <action>, so that <outcome>.
- Acceptance: <bullet list — what must be true for this story to be done?>
- **US-2.** …
- **US-3.** …
(3–5 stories. If the user listed more, mark the rest as "Post-MVP" in a separate section.)
## Non-goals
<What the MVP explicitly does not include. Be opinionated.>
## Technical constraints
<Anything that constrains the engineering choices: required tech, compliance, integration deadlines.
If none, say so.>
## Open questions
<Things the user couldn't answer or that need stakeholder input. Ask the user to flag these to whoever
needs to decide.>
Step 5 — Write files and update state
Write PROJECT.md and/or PRD.md into <root>/.workflow/.
Update meta.json:
- bump
phasetoidea_captured(afterPROJECT.md) orprd_drafted(afterPRD.md) — see the contract for monotonicity rules - update
updated_atto ISO-8601 UTC now - append to
history:{ "skill": "prd-from-idea", "ran_at": "<now>", "outputs": ["PROJECT.md", "PRD.md"], "phase_before": "<old>", "phase_after": "<new>" }
Step 6 — Hand off
Tell the user:
- which files were written (relative paths)
- what the new phase is
- what the orchestrator would propose next: usually
figma-to-design-mdif they have a Figma, ordesign-md-to-appif they're going to write the DESIGN.md by hand or already have one
Do not silently invoke the next skill. The user (or the orchestrator) decides.
Important constraints
- Don't invent. If the user can't answer "who is this for", you ask again or write
<TBD — needs user input>rather than imagine an audience. - Don't pad. The PRD's value is being decision-forcing, not exhaustive. A 2-page PRD that names the wedge clearly is better than a 10-page PRD full of platitudes.
- One h1 only. The h1 is the project name. Sub-sections are h2.
- Don't number user stories with backend IDs (no
JIRA-123-style). UseUS-1, US-2, ...so they survive renaming.
What ships with it: 1 file
28.9 KB alongside SKILL.md
references/
- contracts.md28.9 KB