21 consulting skills on speed dial - from a raw PM query to a stakeholder-ready deliverable in seconds
Visit Product ↗Every product manager regularly faces consulting-grade questions. Should we build this? What is the real problem behind this stakeholder complaint? Which of these three options do we commit to, and what do we sacrifice? The discipline for answering them well exists - it is exactly what strategy consultants are trained on - but for most PMs it is locked away in expensive engagements, dense books, or the head of that one principal PM everyone queues up to talk to.
I had already converted that discipline into software once: PM-Consultant-Skills, a set of 21 Claude skills that codify the consulting method, each one turning business inputs into a client-ready artifact. But skills have a distribution problem. They only work if you run Claude, install the plugin, and know the skills exist. The Product Manager's Assistant removes all three conditions: it is a single web page where any PM picks a skill, pastes their situation, and gets the structured deliverable streamed back. No account, no install, no Claude subscription.
The discovery question here was not "do PMs need structured thinking tools" - the PM-Consultant-Skills repo had already validated that the artifacts are useful. The question was sharper: why does a working set of 21 skills reach almost nobody?
Three friction points kept coming up:
The gap: the thinking system existed and worked, but there was no zero-install surface that put the full catalogue in front of a PM, organised by where they are stuck, with the conversation flattened into a single shot. That surface is the product.
The shared need: the deliverable, not the dialogue. That single insight drove the biggest design decision in the build.
1. A SKILL.md is already a system prompt. Each skill in the source repo has the same anatomy: a role with a sharp mandate, the context to gather, three steps, a four-check quality gate, and a five-part output structure. That is not documentation that needs translating into a prompt - it is the prompt. The portal's core asset, lib/skills.js, is generated from the 21 SKILL.md files with one behavioural change.
2. One instruction converts a conversation into a single shot. Skills ask follow-up questions when inputs are missing. On the web that kills the experience. The fix is a single directive appended to every system prompt: assume and proceed. State your assumptions explicitly, then deliver anyway. Missing context becomes a labelled assumption in the output instead of a blocking question.
3. Fast inference is the feature. The value proposition is "deliverable in seconds", so model latency is not an implementation detail - it is the promise. Groq serving llama-3.3-70b-versatile streams tokens fast enough that the answer visibly pours onto the page. A slower model with marginally better prose would be a worse product.
As with every project in this series, I wrote the goals and non-goals down before touching code.
| Goal | Success looks like |
|---|---|
| Full catalogue, zero install | All 21 skills usable from a URL with no account or setup |
| Discovery built into the UI | Skills grouped by the six engagement phases so "where am I stuck" maps to a tab |
| Single-shot answers | Every query returns a deliverable; no skill ever responds with only questions |
| Answer in seconds | Streaming starts fast enough to feel instant on a free-tier stack |
| Chainable output | Each deliverable is structured markdown a user can paste into the next skill |
GROQ_MODEL). Choice here is a distraction.The whole system is deliberately small: a Next.js 14 App Router app with a single API route, a skills catalogue compiled into the bundle, and Groq as the inference layer. There is no database, no auth, and no state beyond the current request.
Browser (vertical tabs, 6 phases / 21 skills)
↓ POST /api/generate { skillId, query }
Next.js Route Handler (Vercel serverless)
↓ validate request → look up skill in lib/skills.js
Groq API (llama-3.3-70b-versatile)
system prompt = the skill's adapted SKILL.md
user message = the PM's query
↓ token stream
Plain-text stream → client renders as markdown
lib/skills.js is the heart of it: an array of 21 objects, each carrying an id, phase, description, and the full system prompt generated from its SKILL.md. Embedding the prompts in the bundle instead of reading files at runtime keeps the API route dependency-free and the cold start minimal.
The six phases give the UI its information architecture, and the skill counts per phase fall out of the source repo:
| Phase | Question it answers | Skills |
|---|---|---|
| Diagnose | What is the real problem, who is involved, what does success mean? | Problem Framer, Stakeholder Mapper, Success Criteria Definer, Scope & Constraint Setter |
| Analyze | What does the evidence say and what is the problem costing us? | Evidence Collector, Hypothesis Builder, Root Cause Analyzer, Impact Quantifier |
| Synthesize | What are the real options and what does each one sacrifice? | Option Generator, Trade-Off Analyzer, Assumption Stress-Tester, Scenario Modeler |
| Decide | What do we commit to and how do we land it with leadership? | Recommendation Builder, Business Case Builder, Executive Memo Writer |
| Execute | In what order, owned by whom, watching which risks? | Initiative Sequencer, Ownership & Accountability Mapper, Risk & Dependency Mapper |
| Measure | Did the value land, and what do we learn? | KPI Architect, Value Tracking System, Engagement Review System |
Takeaway: When the intelligence lives in the prompts, the right amount of application code is almost none. Every layer I did not build (database, auth, session state) is a layer that cannot break.
The most interesting engineering in the project is not TypeScript - it is the adaptation of a conversational skill into a single-shot one. Each source skill closes with behaviours that make sense in Claude and fail on the web, so the generation step rewrites the contract:
| Skill behaviour in Claude | Adapted behaviour in the portal |
|---|---|
| Ask for the 3 context inputs if missing | Assume sensible values, label every assumption in the output |
| Offer the next skill in the chain interactively | Close the deliverable by naming the next skill and what to paste into it |
| Offer export formats (doc, deck, memo) | Always return structured markdown ready to paste anywhere |
| Quality gate enforced across turns | Quality gate folded into the single response's structure |
What survives untouched is the part that makes the outputs good: the role's sharp mandate ("your job is not to summarise options, it is to force a choice"), the fixed five-part output structure, and the quality-gate checks. Those constraints are why the answers read like a consultant's deliverable rather than generic LLM prose.
Takeaway: Prompt assets are portable across surfaces, but their interaction contract is not. Porting a skill from chat to web is 10% plumbing and 90% rewriting what the prompt is allowed to ask of the user.
| Layer | Choice | Why |
|---|---|---|
| Framework | Next.js 14 (App Router) | One repo serves the UI and the API route; static where possible, serverless where needed |
| Inference | Groq, llama-3.3-70b-versatile | Streaming speed is the product promise; generous free tier keeps the tool free to run |
| Prompt store | lib/skills.js in the bundle | No runtime file reads, no CMS, no cold-start penalty; the repo is the source of truth |
| Transport | Plain-text token stream | Simplest thing that shows progress; client renders the accumulating text as markdown |
| Secrets | GROQ_API_KEY server-side only | The key never reaches the browser; the API route is the only caller |
| Hosting | Vercel | Push-to-deploy, serverless functions included, consistent with every other project in this series |
The Groq decision deserves one more sentence, because it is a genuine trade-off. Claude produced noticeably richer prose in side-by-side tests, but at multiple seconds to first token the portal felt like submitting a form. Groq starts streaming almost immediately, and for a tool whose pitch is "structured thinking in seconds", perceived speed beats marginal eloquence. The skills' rigid output structures also do a lot of quality-levelling: with a five-part structure and a quality gate baked into the prompt, the floor on a fast open model is high enough.
Pick a skill from vertical tabs grouped Diagnose → Measure, matching where you are stuck
Drop your query - the situation, numbers, constraints, who decides. Cmd/Ctrl + Enter to run
Watch the deliverable stream in the skill's fixed structure, assumptions labelled
Chain it - paste the output into the next skill: Problem → Evidence → Options → Recommendation → Roadmap → Value
The chain in step 4 is the quiet centre of the product. A single skill output is useful; the sequence is the actual consulting method. Because every deliverable ends by naming its successor skill and what to feed it, a PM who arrives for one answer gets pulled into the full arc of a decision.
The Product Manager's Assistant is a thin product by design: one route, one model call, twenty-one prompts. All the leverage sits in assets that already existed - the consulting method in the skills, and the discipline of their fixed structures. The build was really a distribution project: taking a proven thinking system and removing every step between a stuck PM and a structured answer.
That is the general lesson of this one. When the intelligence lives in well-structured prompts, the fastest way to multiply their value is not a better model or a richer app - it is a surface with zero friction. The web page is not the product. The method, finally within reach of the people it was written for, is.