AI-powered project management for engineering teams.
SPManager automates the hardest parts of project delivery — requirement analysis, task assignment, and progress tracking — so teams can focus on building instead of managing.
The Story
The Problem
Engineering teams spend 20–30% of their time on project management overhead — writing tasks, assigning work, chasing status updates. Most PM tools make this worse, not better.
Why It Matters
Every hour a senior engineer spends in status meetings or updating Jira tickets is an hour not spent building. AI-driven project management is the only way to scale delivery without scaling headcount.
The Solution
SPManager uses RAG to analyse requirements and auto-generate structured tasks, a skill-graph to assign work to the right engineer, and real-time Socket.io sync so everyone sees the same board state.
Product Features
Paste a requirements document — SPManager extracts tasks, acceptance criteria, dependencies, and effort estimates using a RAG pipeline over your project context.
A graph of team skills and current workload surfaces the optimal assignee for every task. No more 'who should do this?' in Slack.
Socket.io ensures all board changes propagate to every team member within 50ms — no page refresh, no stale state.
Automatic sprint velocity tracking and burndown chart generation — no manual data entry required.
Link PRs and commits to tasks automatically. Task status updates when a linked PR is merged.
System Architecture
Requirements → AI extraction → task graph → skill match → assigned task → real-time board update
Technical Deep Dive
When a user pastes requirements, the system chunks the text, embeds each chunk using text-embedding-004, and retrieves the most relevant prior tasks and project context from the vector store. This context is injected into the Gemini prompt alongside the new requirements. The output is a structured JSON of tasks with title, description, acceptance criteria, estimated effort (S/M/L/XL), and dependency edges.
Each team member has a weighted skill vector built from their commit history, past task labels, and self-declared expertise. When a new task is created, its required skills are extracted from the task description. A cosine similarity match between the task skill vector and each team member's profile returns a ranked list of candidates, adjusted for current workload.
The Socket.io server runs on Railway with a sticky session load balancer. All board mutations go through a command queue — each command is applied optimistically on the client and confirmed or rolled back by the server within one round-trip. Conflict resolution uses vector clocks per task.
// Server: apply command and broadcast
socket.on('task:move', async (cmd) => {
const result = await applyCommand(cmd);
if (result.ok) {
io.to(cmd.projectId).emit('task:moved', result.task);
} else {
socket.emit('task:rollback', { id: cmd.taskId, state: result.current });
}
});Engineering Decisions
Performance & Scale
Deployment & Infrastructure
Deployment
Next.js frontend on Vercel Edge CDN. Socket.io server on Railway with sticky sessions. MongoDB Atlas M10 cluster in us-east-1. Cloudflare R2 for file storage.
CI/CD
GitHub Actions — type-check + lint on PR, E2E Playwright tests on merge to main, auto-deploy on green CI.
Monitoring
Vercel Analytics + Web Vitals. Railway metrics for Socket server CPU/memory. MongoDB Atlas Performance Advisor for slow queries.
Challenges & Failures
What I Learned
RAG quality depends more on chunking strategy than model choice — invest in the chunker first.
Skill-based assignment only works if skill data is maintained — build the data collection UX before the algorithm.
Sticky sessions on Railway are not sticky after a dyno restart — need Redis session store for true persistence.
Real-time features should be designed for eventual consistency from day one.
Future Roadmap
v2.0 — Q4 2026
v3.0 — 2027
Screenshots
Real-time Kanban board with AI-generated tasks
AI requirement → task extraction
Technology Stack
Frontend
Real-Time
AI/ML
Database
Storage
Integration
Deployment
Ready to dive in?