Every existing tool gives the same advice to every company.

I was writing growth frameworks manually for different contexts, each one taking hours to research, structure, and calibrate to the specific business. Outsourcing it to ChatGPT gave me "consider focusing on retention" for every company. No specifics. No mechanism. No tradeoffs named.

The problem is that generic growth advice isn't wrong; it's useless. "Improve retention" is true for every business. "Add a daily habit loop by surfacing the user's most-used feature 3 days after signup, timed to when they last logged in" is only true for one. The gap between those two statements is the entire value of a growth strategist.

The insight that shaped this build: growth strategy is structured thinking, not creative writing. It follows a logic: retention is the power plant, acquisition is wasted without it, monetization is mis-designed if it doesn't match the channel. That logic can be encoded in a prompt. The hard part isn't the writing. It's enforcing specificity at the prompt level so the model can't retreat to generality.

This was my first serious AI agent build. It shows: there are unnecessary files, some redundant code, and a level of prompt verbosity I'd trim today. I've left it largely as-built because the roughness is part of the learning artifact.

Four interfaces, one framework

The same core framework (framework.js) powers four different interfaces: CLI, web UI, JSON-file input, and a Cursor skill. The LLM call is abstracted: it routes to OpenAI or Anthropic depending on which API key is present.

Input interfaces (any of these)
CLI (free text)
node generate.js "description"
CLI (JSON input)
--input company.json
Web UI
Express · localhost:3000
Cursor Skill
In-chat generation
framework.js
buildPrompt() + getSystemPrompt()
LLM Router
OpenAI GPT-4o → Anthropic Claude → Fallback (prompt file)
Output formats
Markdown .md
Default · 13 sections
DOCX .docx
Word-compatible · editable
Prompt file
No API key fallback

JSON input schema (recommended): Company name, product description, features with differentiators, target market, competitors, current metrics (users / retention / revenue), monetization model, stage (early / growth / scale), current acquisition channels, and constraints. The more structured the input, the more specific the output; free-text input produces usable but less targeted strategies.

No-API-key fallback: If neither OPENAI_API_KEY nor ANTHROPIC_API_KEY is set, the tool writes the complete prompt to a Markdown file. The user can paste it into any LLM manually. This was a deliberate accessibility decision: the framework shouldn't require a paid API account to be useful.

The choices that make the output non-generic

01

Anti-generic rules in the system prompt

The system prompt explicitly prohibits certain patterns. "Consider focusing on retention" is forbidden unless followed by the specific mechanism for this product. Every section must name the company, product, or feature , not "the platform," not "users," not "the product." This constraint is baked into the prompt as a hard rule, not a suggestion.

Tradeoff: The system prompt is verbose (~800 tokens) as a result. This increases per-call cost slightly. The output quality improvement is worth it: the difference between a specific and a generic growth strategy is the entire value proposition.

02

16,000 max tokens: full strategy, not summary

A growth strategy that's actually actionable is long. Thirteen sections, each with specific mechanisms, experiment designs, ICE scores, and an execution timeline takes space. Capping at 4,096 tokens (the common default) produces outlines. 16,000 tokens produces documents. The output is meant to be shared, presented, and acted on; it needs to be comprehensive enough for that.

Tradeoff: 60–90 second generation time in CLI mode (no streaming). For a document that replaces hours of manual work, that wait is acceptable. The web UI buffers the response and displays it on completion.

03

DOCX export as a first-class output

Growth strategies get shared. They get opened in stakeholder meetings. They get edited by teams. A Markdown file that requires a rendering step before it's shareable adds friction at exactly the wrong moment. DOCX is the universal format for "I need to send this to someone who doesn't use the same tools as me."

Tradeoff: The @mohtasham/md-to-docx library occasionally produces empty table cells in DOCX output. A post-processing step (fix-docx-tables.js) fills them. An imperfect fix for an imperfect library, but it handles 95% of cases correctly.

04

Temperature 0.7: calibrated, not defaulted

Growth strategy requires creative connections: finding the non-obvious acquisition channel, the counter-intuitive retention mechanism, the monetization model that fits the channel. Pure determinism (temperature 0) would produce formulaic output. High temperature (0.9+) would produce inconsistent section ordering and made-up metrics. 0.7 sits at the point where the model finds unexpected insights without losing structural coherence.

Tradeoff: The same input occasionally produces different section emphases on repeat runs. For a brainstorming tool, that variability is a feature. For someone wanting reproducible output, it's a frustration.

The numbers and the reasoning

Strategies generated
15+
Across my own projects and companies I've analysed for research. Each took 60–90 seconds to generate vs. 4–6 hours manually. The time savings compound quickly for anyone doing this regularly.
Generation time
60–90 seconds
16,000 token output at Claude Sonnet 4.6 speeds. No streaming in CLI. Web UI shows the complete document after generation completes. Acceptable for a document that replaces hours of work.
Cost per strategy
~$0.05–0.15
Estimated at Claude Sonnet 4.6 pricing for 16K output tokens + ~1K input tokens. GPT-4o is comparable. At this cost, running 10 variants of a strategy for the same company costs under $1.50.
Output length
3,000–6,000 words
13 sections covering retention, engagement loops, acquisition, monetization, growth model, user psychology (ELMR), 3+ experiments with ICE scores, defensibility analysis, key metrics, and a 6-week execution plan.
Cursor skill
In-editor generation
The Cursor skill integration means strategy generation happens inside the coding environment, without switching context to a terminal or browser. Useful when building a product and wanting to generate a strategy for it simultaneously.
Model support
Claude + GPT-4o
Switchable via environment variable. Claude Sonnet 4.6 is the default (better for long-form structured output). GPT-4o is available as an alternative. The routing logic checks for OpenAI key first, then Anthropic.

Prompt engineering as product design

The system prompt is the product. The underlying LLM (Claude or GPT-4o) already knows what growth strategy is. The system prompt's job is not to teach the model growth: it's to enforce the discipline the model would otherwise skip. The discipline is: name the company in every recommendation, name the mechanism not just the outcome, tie every experiment to a specific metric, score every experiment with ICE (Impact 1–5, Confidence 1–5, Ease 1–5).

8-phase framework structure: The output follows a fixed sequence: retention first (the power plant), then engagement loops, then acquisition (wasted without retention), then monetization (mis-designed if it doesn't fit the channel), then growth model, then user psychology (ELMR: Emotion, Logic, Motivation, Reward), then experiments, then defensibility. This ordering is load-bearing: starting with acquisition before retention is a common strategic error, and the prompt enforces the correct sequence.

ELMR framework in user psychology: Every product recommendation runs through four lenses: what emotion does this create, what logical justification does it give the user, what motivation does it activate, what reward does it provide. This forces the model to think about the user's inner experience of a feature, not just its functional spec.

ICE scoring for experiments: Each proposed experiment includes a hypothesis, an MVT (minimum viable test) design, and ICE scores. The model generates these from the company context: a high-traffic, low-conversion product gets different ICE weightings than a low-traffic, high-engagement one. The scores are illustrative, not statistically derived, but they force prioritisation logic.

What I'd do differently: add a structured validation step before generation, a prompt that identifies gaps in the input (missing retention metrics, undefined target persona, unclear monetization model) and surfaces them to the user before generating the strategy. A strategy built on incomplete inputs is specific about the wrong things. The framework is strong; the input validation is weak.

Let's talk.

Open to full-time roles and consulting engagements.
Based in India · Open to relocate globally.