Back to Projects








Full-Stack + AI
Todo App → Cloud-Native AI Agent (Spec-Driven Evolution)
5-phase spec-driven evolution from a Python CLI to a full cloud-native AI agent on Kubernetes. Phase 3: OpenAI Agents SDK on Groq with 6 FastMCP tools via MCPServerStdio. Phase 5: Kubernetes on Minikube with Dapr Jobs for natural language reminders and Kafka event streaming.

// Problem
Demonstrate a complete, documented software evolution — from a console CLI to a production cloud-native AI agent — using Spec-Driven Development as the only discipline at every phase.
// Solution
5 progressive phases: CLI → Full-Stack Web App → AI Chatbot (Groq + MCP) → Local Kubernetes + Dapr Jobs + Kafka. Every phase has its own spec, plan, tasks, and PHR history.
// Screenshots

Live dashboard — 7 tasks with priorities, tags, and due dates. Real data from Murad's account.

Natural language task creation — 'Add a high priority task: finish the project report by Friday' — done instantly

Search and filter — 'per' query surfaces Pay electricity bill and Call dentist with priority badges

Roman Urdu support — 'Electric bill wali task ko complete mark kar do' — AI responds in Roman Urdu

Real-time browser notification — OS-level push when a reminder task is due

Backend API v3.2.0 — tasks, chat, notifications, Dapr Jobs schedule, and full schema definitions

Kubernetes pods running on Minikube: app, Dapr, Kafka, PostgreSQL all healthy

Helm chart deployed — todoai revision 9, STATUS: deployed on default namespace
// Tech Stack
[Python 3.12][Next.js 15][FastAPI][SQLModel][Neon PostgreSQL][OpenAI Agents SDK][FastMCP (MCPServerStdio)][Groq LLaMA 3.3 70B][Alembic][Docker][Minikube][Kubernetes][Kafka][Dapr Jobs API][slowapi]
// Metrics
- ✓5 complete evolution phases with individual spec, plan, tasks, and PHR records
- ✓6 FastMCP tools: add_task, list_tasks, complete_task, delete_task, update_task, schedule_reminder
- ✓Singleton MCPServerStdio pattern — avoids 20-second subprocess startup per chat request
- ✓Dapr Jobs API + dateparser: 'Remind me tomorrow at 9am' → Dapr one-shot job → browser notification
// Highlights
- →6 FastMCP tools via MCPServerStdio singleton — agent calls CRUD tools through a persistent subprocess, not per-request spawning
- →Dapr Jobs API for reminder scheduling: dateparser converts natural language times to UTC → Dapr fires callback → DB polling delivers browser notification
- →Roman Urdu support — agent detects Roman Urdu input and responds in-kind (e.g. 'Electric bill wali task complete kar do')
- →parallel_tool_calls=False required for Groq llama-3.3-70b tool call stability, max_turns=5 per chat cycle
- →Kafka event streaming via publish_task_event() on every CRUD operation — decouples notification service
- →Alembic migrations for production schema evolution; slowapi rate limiting (chat: 10/min, tasks: 30/min)