Case Study
Growth Strategy Agent
An AI agent that generates detailed, company-specific growth strategies: retention loops, acquisition mechanics, monetization design, and a 6-week execution plan. Not templates. Not generic advice.
Why it exists
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.
System Architecture
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.
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.
Design Decisions
The choices that make the output non-generic
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.
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.
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.
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.
Operational Thinking
The numbers and the reasoning
AI System Thinking
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.