A Step-by-Step Plan for PMs to Master Tech Stack by Building an AI Assistant
PMs without a technical foundation risk losing credibility with developers. Build a real SaaS project—an AI assistant based on a task tracker. It answers queries like "How's the team doing?" or "What's the developer's workload?" An alternative for beginners: an Open Source GitHub analyst that handles questions like "Critical bugs in React?"
The project covers client-server architecture, REST, unit tests, containerization, and logging. It requires live data and scaling to two frontend clients.
Tech Stack:
- Backend: Python, FastAPI, PostgreSQL, uv
- Frontend: React, TypeScript, Vite, Shadcn, Tailwind
Setting Up the Environment and Tools
Install Python, npm, pip (replace with uv), Git. Add an IDE (Antigravity), Docker Desktop, DBeaver. For AI coding, use Google AI Pro: frontier models (Gemini-3.1-pro high), IDE Antigravity, CLI Gemini.
MCP (Model Context Protocol) — Basic Set:
- serena
- sequential-thinking
- context7
- filesystem
MCP Config (mcp_config.json):
{
"mcpServers": {
"filesystem": {
"$typeName": "exa.cascade_plugins_pb.CascadePluginCommandTemplate",
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/server-filesystem",
"C:\\Users\\User\\a_projects",
"C:\\Users\\User\\.ssh"
],
"env": {}
},
"sequential-thinking": {
"$typeName": "exa.cascade_plugins_pb.CascadePluginCommandTemplate",
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/server-sequential-thinking"
],
"env": {}
},
"context7": {
"$typeName": "exa.cascade_plugins_pb.CascadePluginCommandTemplate",
"command": "npx",
"args": [
"-y",
"@upstash/context7-mcp"
],
"env": {}
},
"serena": {
"$typeName": "exa.cascade_plugins_pb.CascadePluginCommandTemplate",
"command": "uvx",
"args": [
"--from",
"git+https://github.com/oraios/serena",
"serena",
"start-mcp-server"
],
"env": {}
}
}
}
Install the skills.sh registry: npm install -g @skills/cli. Add skills as you progress through the stages.
Rules for Working with AI in Coding
Break down tasks: one chat per task. If it's not resolved, start a new chat with clarification. Write in English without roles or goals. For difficulties, apply the "duck" method:
- Discuss in chat, create context.md.
- In a new chat—vision.md for architecture.
- tasks.md with tasks.
- Execute tasks.
Stage 1: Telegram Bot with Jira via MCP
Create a bot on FastAPI: access Jira MCP, respond in Telegram. Tokens in .env. AI handles Atlassian MCP calls.
- Result: Local bot, basic chat.
- Stack: Python, FastAPI, Gemini API, Atlassian MCP.
Server: @aashari/mcp-server-atlassian-jira.
Stage 2: Direct REST Requests to Jira API
Abandon MCP. Git init, main branch. Scripts: users, statuses, project tasks (30 days).
Skill: fastapi-expert.
- Result: Control via HTTP, .venv, .gitignore, .env.example.
- Stack: Jira REST API, requests, Git.
- Practices: VCS, Tool Calling, API.
Stage 3: PostgreSQL with FTS
Schema: tasks, changelog. Sync button (overwrites old data). AI uses top-5 via FTS (tsvector/tsquery, BM25).
- Result: Local storage, fast search.
- Stack: PostgreSQL FTS, raw SQL.
- Practices: DB Design, SQL Migrations, IR.
Install tsvector, DBeaver.
Stage 4: Hybrid RAG with Vectors
Tables: assignee, status, type (int ID). Manual migrations. Vectorize tasks in Qdrant (HNSW). Search: top-5 tasks → JOIN changelog by task_id.
Indexes: assignee_id, status_id, type_id, HNSW, task_id. EXPLAIN ANALYZE for optimization.
Skill: postgresql-optimization.
- Result: Semantic search with history, performance on thousands of records.
- Stack: Qdrant, PostgreSQL (HNSW, tsvector).
- Practices: RAG, Hybrid Search, Vector DB, Query Opt.
Key Takeaways
- The project is built step-by-step: from MCP to direct APIs, SQL, RAG.
- Focus on practices: VCS, indexing, JOIN, query optimization.
- AI accelerates, but the PM controls architecture and stack.
- Extensions: two frontends, server deployment, AI integration.
— Editorial Team
No comments yet.