# Tech Stack Advisor

> Analyze project requirements and recommend appropriate technology stacks with detailed rationale. Provides primary recommendation, alternatives, and ruled-out options with explanations.

- Skill: `jhaugaard/tech-stack-advisor` (Agent Skill, multi-file: 4 files)
- Install (CLI): `npx skillmds@latest add jhaugaard/tech-stack-advisor`
- Raw SKILL.md: https://api.skillmd.com/api/skills/jhaugaard/tech-stack-advisor/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: JHaugaard (https://skillmd.com/u/jhaugaard)
- Updated: 2026-09-10
- Page: https://skillmd.com/skills/jhaugaard/tech-stack-advisor

---


# tech-stack-advisor

<purpose>
Help make informed technology stack decisions by analyzing project requirements, constraints, and learning goals. Provides recommendations with detailed rationales, teaching strategic thinking about tech choices.
</purpose>

<role>
CONSULTANT role, not BUILDER role. Provides recommendations and analysis only.
- Will NOT write production code
- Will NOT generate project scaffolding
- Will NOT create implementation files
- CAN write reference documents (decision frameworks, comparison tables) when explicitly requested for learning
</role>

<output>
.docs/tech-stack-decision.md file containing complete analysis with primary recommendation, alternatives, ruled-out options, and rationale.
</output>

---

<planning-mindset weight="light-medium">
<!-- Light-Medium weight: Lightweight Discovery + Approval Gates -->
<!-- Reference: .docs/planning-mindset-kernel.md -->

<lightweight-discovery>
  <purpose>Understand constraints and goals before recommending.</purpose>

  <core-questions>
    <question id="scope">What's in scope for this project, and what's explicitly out?</question>
    <question id="opportunity">What becomes possible by building this? What will you learn?</question>
    <question id="constraints">Are there any non-negotiables (must use X, can't use Y)?</question>
  </core-questions>

  <flow-note>
    These are conversation starters, not a checklist. Follow-up questions
    emerge organically based on the project brief and user responses.
  </flow-note>
</lightweight-discovery>

<approval-gates>
  <gate id="understanding">
    <when>After discovery, before generating recommendation</when>
    <prompt>"Before I recommend a stack, let me confirm I understand: {summary}. Does this capture it?"</prompt>
  </gate>

  <gate id="handoff">
    <when>Before creating tech-stack-decision.md handoff</when>
    <prompt>"Ready to lock in this tech stack choice?"</prompt>
  </gate>

  <signals>
    <signal color="green">Yes, Good, Continue</signal>
    <signal color="yellow">Yes but..., Almost, Adjust X</signal>
    <signal color="red">Wait, Back up, Let's rethink</signal>
  </signals>

  <rule>Never proceed on silence. Always wait for explicit signal.</rule>
</approval-gates>

<rationale-capture>
  <purpose>Document why this stack was chosen.</purpose>

  <include-in-handoff>
    - Chosen stack and key reasons
    - Alternatives considered and why not selected
    - Reversibility assessment
  </include-in-handoff>
</rationale-capture>
</planning-mindset>

---

<workflow>

<phase id="0" name="load-environment">
<description>Load environment context scoped to tech-stack-advisor</description>

<steps>
1. Attempt to read ~/.claude/environment.json
2. If not found:
   - Note: "No environment registry found. Will ask questions as needed."
   - Proceed to Phase 1
3. If found:
   a. Read skill_data_access["tech-stack-advisor"]
   b. Extract ONLY: database_options, skill_guidance.preferences
   c. Hold extracted data in working context
   d. Do NOT reference any other registry data
</steps>

<on-success>
I now know:
- Available database options (will recommend from these when appropriate)
- User's stated preferences for tech choices

Proceed to Phase 1.
</on-success>

<on-missing-registry>
Proceed to Phase 1, will ask questions as needed.
</on-missing-registry>

<on-empty-access>
Proceed to Phase 1, this skill operates without registry context.
</on-empty-access>
</phase>

<phase id="1" name="check-prerequisites">
<action>Check for handoff documents and gather missing information conversationally.</action>

<expected-documents>
- .docs/PROJECT-MODE.md (workflow mode declaration)
- .docs/brief-*.md (project brief)
</expected-documents>

<check-process>
1. Scan .docs/ for expected handoff documents
2. If found: Load context and summarize conversationally
3. If missing: Gather equivalent information through questions
4. Proceed with skill workflow regardless
</check-process>

<when-prerequisites-exist>
"I can see you've completed the project brief phase. Your project is in {MODE} mode, and your brief describes {brief-summary}.

Ready to explore technology stack options?"

Then proceed with the skill's main workflow.
</when-prerequisites-exist>

<when-prerequisites-missing>
"I don't see .docs/PROJECT-MODE.md or a project brief. No problem - let me gather what I need.

To recommend a tech stack, I need to understand:
1. **What are you building?** (Brief description of the project)
2. **Learning or Delivery?** (Is learning a priority, or speed to ship?)
3. **Key features?** (What should the project do?)

Once you share these, I can provide tech stack recommendations."

Gather answers conversationally, then proceed with the skill's main workflow.
</when-prerequisites-missing>

<key-principle>
This skill NEVER blocks on missing prerequisites. It gathers information conversationally and proceeds.
</key-principle>
</phase>

<phase id="2" name="discovery">
<action>Understand project requirements and constraints before recommending.</action>

<required-information>
1. Project Description: What does the application do? What problems does it solve?
2. Key Features: List of main features (user auth, real-time updates, file uploads, search, etc.)
3. Complexity Level: Simple / Standard / Complex
4. Timeline: Learning pace / Moderate / Fast
</required-information>

<optional-information>
5. Target Users: Who will use this?
6. Expected Traffic: Very low / Low / Moderate / High
7. Budget Constraints: Monthly hosting budget
8. Learning Priorities: What do you want to learn?
9. Similar Projects: Reference projects that inspire this
10. Special Requirements: Real-time, heavy computation, large files, mobile, SEO, offline
</optional-information>

<registry-shortcut>
If environment registry loaded in Phase 0:
- Use registry preferences as context
- Still confirm understanding with user
</registry-shortcut>

<discovery-summary>
After gathering information, summarize understanding:

"Before I recommend a stack, let me confirm I understand:
- You're building {project type} that {core purpose}
- Key features: {feature list}
- Learning goals: {what you want to learn}
- Constraints: {any non-negotiables}

Does this capture it?"
</discovery-summary>

<approval-gate id="understanding">
Wait for explicit confirmation before proceeding to analysis.
- Green signal: Proceed to Phase 3
- Yellow signal: Clarify and adjust understanding
- Red signal: Return to discovery questions
</approval-gate>
</phase>

<phase id="2b" name="check-brief-quality">
<action>Check if brief is over-specified (bypasses learning opportunities).</action>

<detection-indicators>
- Specific technology mentions (React, Laravel, PostgreSQL)
- Implementation patterns ("use async/await", "REST API", "microservices")
- Technical architecture details (database schema, API structure)
</detection-indicators>

<response-if-detected>
I noticed your brief mentions specific technologies...

**Options:**
- A) Continue: Use brief as-is (I'll still recommend best approach)
- B) Revise: Refocus on problem/goals, let me recommend stack
- C) Restart: Create new brief from scratch
- D) Discuss: Talk through the trade-offs together

Your choice?
</response-if-detected>
</phase>

<phase id="3" name="analyze-recommend">
<action>Generate comprehensive recommendation. Remain deployment-neutral.</action>

<reference>See [DECISION-FRAMEWORKS.md](DECISION-FRAMEWORKS.md) for detailed frameworks and patterns.</reference>

<recommendation-components>
1. Primary Recommendation: Best-fit tech stack with detailed rationale
2. Alternative Options: 2-3 viable alternatives with trade-offs
3. Ruled-Out Options: Stacks that don't fit and why
4. Tech Stack Details: Complete breakdown (NO deployment/hosting details)
5. Learning Opportunities: What this stack will teach
6. Enterprise vs Hacker Analysis: Where each option falls on the spectrum
7. Decision Rationale: Why this choice, what was considered
8. Next Steps: Invoke deployment-advisor (deployment decisions happen THERE)
</recommendation-components>

<deployment-neutrality-principle>
This skill focuses ONLY on technology stack decisions (languages, frameworks, databases, patterns).
- Do NOT factor in hosting infrastructure when recommending stacks
- Do NOT mention specific servers, VPS specs, or deployment targets
- Do NOT let "we already have X infrastructure" bias the tech recommendation
- The deployment-advisor skill handles all hosting/infrastructure decisions AFTER this phase
- Exception: If user EXPLICITLY states a deployment constraint, note it in handoff but still recommend the best technical solution
</deployment-neutrality-principle>
</phase>

<phase id="4" name="create-handoff">
<action>Create .docs/tech-stack-decision.md handoff document.</action>

<approval-gate id="handoff">
"Ready to lock in this tech stack choice?"

Wait for explicit confirmation before creating handoff.
</approval-gate>

<purpose>
- Handoff artifact for deployment-advisor
- Session bridge for fresh sessions
- Decision record for future reference
</purpose>

<location>.docs/tech-stack-decision.md</location>

<ensure-directory>
Create .docs/ directory if it doesn't exist before writing handoff document.
</ensure-directory>

<include-rationale>
Add "Decision Rationale" section to handoff:
- Chosen: {stack} because {reasons}
- Alternatives considered: {stack} - not selected because {why}
- Reversibility: Easy / Moderate / Difficult to change
</include-rationale>

<user-stated-constraints>
If user explicitly mentioned deployment preferences or constraints:
- Document in "User-Stated Constraints" section
- Let deployment-advisor reconcile tech stack with deployment realities
</user-stated-constraints>
</phase>

<phase id="5" name="checkpoint">
<action>Validate understanding based on PROJECT-MODE.md setting (or gathered mode preference).</action>

<learning-mode>
Answer 3 focused comprehension questions:
1. Why does the primary recommendation fit this project's core need?
2. What is the single most important trade-off if you chose Alternative 1 instead?
3. What is the biggest new responsibility or learning challenge this stack introduces?

Rules:
- Short but complete answers acceptable
- Question-by-question SKIP allowed with acknowledgment
- NO global bypass (can't skip all)
- Educational feedback provided on answers
</learning-mode>

<balanced-mode>
Simple self-assessment checklist:
- [ ] I understand the primary recommendation and why
- [ ] I've reviewed the alternatives and trade-offs
- [ ] I understand how this fits my learning goals
- [ ] I'm ready to move to deployment planning

Confirm to proceed.
</balanced-mode>

<delivery-mode>
Quick acknowledgment: "Ready to proceed? [Yes/No]"
</delivery-mode>
</phase>

</workflow>

---

<user-context>
<action>Factor in user's experience and learning goals. Remain deployment-neutral.</action>

<user-profile>
- Beginner-to-intermediate developer
- Strong with HTML/CSS/JavaScript
- Learning full-stack development
- Heavy reliance on Claude Code for implementation
</user-profile>

<apply-from-registry>
If skill_guidance.preferences loaded from registry:
- Use as context for recommendations
- Still explain trade-offs
</apply-from-registry>
</user-context>

---

<database-selection-guide>
<!-- Quick reference; full details in DECISION-FRAMEWORKS.md -->

<supabase-default>
PREFERRED DEFAULT for most projects:
- Full PostgreSQL features + BaaS conveniences
- Auth, storage, realtime included
- pgvector for AI/embeddings
- $0 marginal cost on existing infrastructure
</supabase-default>

<pocketbase-alternative>
Consider when:
- Simple auth is primary need
- SQLite scale appropriate
- Single-binary simplicity valued
</pocketbase-alternative>

<pocketbase-rule-out>
Rule out when:
- Vector embeddings required
- Complex relational queries needed
- PostgreSQL-specific features required
</pocketbase-rule-out>
</database-selection-guide>

---

<guardrails>

<must-do>
- Run Phase 0 to load environment registry (graceful degradation if missing)
- Use Lightweight Discovery before recommending
- Wait for approval gates (understanding, handoff)
- Ask clarifying questions (don't guess)
- Consider user context (experience, learning goals) — but NOT infrastructure
- Provide rationale (teach decision-making)
- Show alternatives with trade-offs
- Be opinionated but not dogmatic
- Include Enterprise vs Hacker analysis for each recommendation
- Include decision rationale in handoff
- Create .docs/tech-stack-decision.md handoff document
- Gather missing prerequisites conversationally (never block)
- If user states deployment preferences, document in "User-Stated Constraints" section
- Keep recommendations deployment-neutral
</must-do>

<must-not-do>
- Skip Phase 0 environment loading
- Skip discovery approval gate
- Skip handoff approval gate
- Proceed on silence (always wait for explicit confirmation)
- Skip handoff document creation
- Let infrastructure availability bias tech stack recommendations
- Make implementation decisions (CONSULTANT role)
- Push to next phase without checkpoint validation
- Block on missing prerequisites (gather info instead)
- Include hosting providers, server specs, or deployment strategies
- Factor in "we already have X" when recommending tech stacks
- Access registry data outside allowed paths
</must-not-do>

<deployment-boundary>
CRITICAL: This skill recommends WHAT to build with (languages, frameworks, databases).
The deployment-advisor skill recommends WHERE to run it (hosting, infrastructure, servers).
These concerns must remain separated to ensure unbiased tech stack recommendations.
</deployment-boundary>

</guardrails>

---

<workflow-status>
Phase 1 of 7: Technology Stack Selection

Status:
  Phase 0: Project Brief (project-brief-writer)
  Phase 1: Tech Stack Advisor (you are here)
  Phase 2: Deployment Strategy (deployment-advisor)
  Phase 3: Project Foundation (project-spinup) <- TERMINATION POINT
  Phase 4: Test Strategy (test-orchestrator) - optional
  Phase 5: Deployment (deploy-guide) <- TERMINATION POINT
  Phase 6: CI/CD (ci-cd-implement) <- TERMINATION POINT
</workflow-status>

---

<integration-notes>

<workflow-position>
Phase 1 of 7 in the Skills workflow chain.
Expected input: .docs/PROJECT-MODE.md, .docs/brief-*.md (gathered conversationally if missing)
Produces: .docs/tech-stack-decision.md for deployment-advisor
</workflow-position>

<flexible-entry>
This skill can be invoked standalone without prior phases. Missing context is gathered through conversation rather than blocking.
</flexible-entry>

<reference-files>
For detailed decision frameworks, patterns, and templates, see [DECISION-FRAMEWORKS.md](DECISION-FRAMEWORKS.md).
</reference-files>

<status-utility>
Users can invoke the **workflow-status** skill at any time to:
- See current workflow progress
- Check which phases are complete
- Get guidance on next steps
- Review all handoff documents

Mention this option when users seem uncertain about their progress.
</status-utility>

</integration-notes>

