AI Chatbot · Cloud-Native · Microservices

TaskFlow —
AI-Powered Cloud-Native Todo App

A todo application that evolved from a Python console script into a production-grade, event-driven microservices platform — featuring an AI chatbot with MCP integration, bilingual Urdu/English support, voice commands, and Kubernetes deployment on Oracle Cloud. Perfect hackathon score: 1,600/1,600.

Project Type Hackathon II · Panaversity
Duration 12 Weeks (Dec 2025 – Jan 2026)
Score 1,600 / 1,600
Deployment Kubernetes · Oracle Cloud
TaskFlow — AI-Powered Todo Application

Problem Statement

The Panaversity / PIAIC / GIAIC Hackathon II challenged participants to demonstrate how the role of a software engineer is shifting — from writing boilerplate code to becoming a System Architect who uses AI agents to build complex systems from structured specifications.

No Manual Coding Allowed

Every line of code had to be generated by Claude Code from a validated specification. The process, prompts, and spec iterations were all part of the evaluation.

Five Progressive Phases

The project had to evolve through five stages — from a simple console app to a full cloud-native microservices platform. Each phase built on the previous and could not be skipped.

AI Integration Required

The system had to include a functional AI chatbot with Model Context Protocol (MCP) tool integration — allowing users to manage tasks through natural language.

Cloud-Native Deployment

The final system had to run on Kubernetes with real cloud deployment on Oracle Cloud (OKE) — not just a local development environment.

Project Evolution — 5 Phases

TaskFlow was built in five strictly progressive phases over 12 weeks, each introducing a new architectural layer on top of the previous.

I

Console Application — 100/100 pts

A Python command-line tool with in-memory task management — add, list, complete, and delete. No persistence, no auth. The foundation for all data structure and validation decisions that would recur at scale.

II

Full-Stack Web Application — 150/150 pts

FastAPI backend with PostgreSQL (Neon serverless), JWT authentication, and RESTful CRUD. Next.js 16 frontend with React 19, TypeScript, and Tailwind CSS 4. User isolation — every user sees only their own tasks.

III

AI Chatbot with MCP Integration — 200/200 pts

OpenAI Agents SDK with Model Context Protocol — five tools (add, list, complete, delete, update task) exposed to the AI agent. Users can now manage tasks entirely in natural language. The agent always calls list_tasks first for fuzzy matching — "dentist" resolves to "Dentist appointment Friday."

IV

Kubernetes Deployment — 250/250 pts

Multi-stage Dockerfiles for backend and frontend. Kubernetes manifests for Deployments, Services, ConfigMaps, and Secrets. Helm charts for templated, environment-aware deployment. Local cluster on Minikube with kubectl port-forwarding.

V

Event-Driven Microservices on Oracle Cloud — 300/300 pts

Monolithic backend decomposed into three independent microservices: Chat API, Notification Service, and Recurring Task Service. Apache Kafka (via Strimzi) as the event backbone. Dapr as the infrastructure abstraction layer — services never talk to Kafka directly. Deployed on Oracle Cloud OKE (Always Free tier).

System Architecture

The final system consists of three independent microservices, a Next.js frontend, Apache Kafka managed by the Strimzi operator, Dapr as the infrastructure abstraction layer, and PostgreSQL — all orchestrated on Kubernetes.

┌─────────────────────────────────────────────────────────┐
│              FRONTEND  (Next.js 16 · port 3000)          │
│   Home · Login · Signup · Tasks · Chat · Monitoring      │
│            React 19 · TypeScript · Tailwind CSS 4        │
└────────────────────────┬────────────────────────────────┘
                         │  REST API calls (JWT Bearer)
┌────────────────────────▼────────────────────────────────┐
│           CHAT API — FastAPI  (port 8000)                │
│   Auth · Task CRUD · AI Chatbot · MCP Tools              │
│   Publishes events → Dapr Sidecar (port 3500)            │
└────────┬──────────────────────────┬─────────────────────┘
         │                          │
┌────────▼────────┐      ┌──────────▼──────────────────┐
│  PostgreSQL      │      │  Dapr Sidecar (port 3500)   │
│  Neon Serverless│      │  HTTP → Kafka abstraction    │
│  Tasks · Users  │      │  Pub/Sub · Jobs · Invoke     │
│  Conversations  │      └──────────┬──────────────────┘
└─────────────────┘                 │
                         ┌──────────▼──────────────────┐
                         │  Apache Kafka (port 9092)    │
                         │  Strimzi Operator · KRaft    │
                         │  topic: task-events          │
                         │  topic: reminders            │
                         └──────┬──────────┬────────────┘
                                │          │
               ┌────────────────▼──┐  ┌────▼──────────────────┐
               │ Notification Svc  │  │ Recurring Task Svc    │
               │ (port 8001)       │  │ (port 8002)           │
               │ Reminders · Dapr  │  │ Daily/Weekly/Monthly  │
               │ Jobs Scheduler    │  │ Auto-recreates tasks  │
               └───────────────────┘  └───────────────────────┘
ComponentPortPurpose
Frontend3000Next.js web application
Chat API8000Main backend — auth, tasks, AI chatbot
Notification Service8001Task reminders via Dapr Jobs
Recurring Task Service8002Auto-recreates daily/weekly/monthly tasks
Dapr Sidecar3500Infrastructure abstraction layer
Kafka Broker9092Event streaming backbone
PostgreSQL5432Persistent data store

Key Features Built

AI Chatbot with MCP Integration

OpenAI Agents SDK (v0.6.5) with five MCP tools for full task management via natural language. Agent behavioral rules: always call list_tasks before updates, fuzzy match task names, chain multiple tool calls, respond in the user's language, parse natural language dates ("next Monday", "this weekend").

Event-Driven Architecture (Dapr + Kafka)

Every task CRUD operation publishes a Kafka event via Dapr — services never touch Kafka directly. Changing from Kafka to RabbitMQ or Redis Streams requires only a Dapr component YAML change — zero application code changes. Strimzi manages Kafka in KRaft mode (no ZooKeeper).

Bilingual Support — English + Urdu

Full RTL rendering for Urdu messages using per-message Unicode range detection (U+0600–U+06FF). Noto Nastaliq Urdu font via Next.js next/font. A single conversation can mix English and Urdu freely — the AI agent detects language per message and responds in kind.

Voice Commands (Web Speech API)

Frontend-only voice input using the browser's SpeechRecognition API — zero backend changes required. Supports English and Urdu voice recognition. Only the transcribed text (not audio) is sent to the backend. Gracefully hidden in Firefox where the API is unsupported.

Kubernetes + Helm + Oracle Cloud

Full Helm umbrella chart with sub-charts for each service. Two namespaces: todo-app and kafka. Deployed on Oracle Cloud OKE (Always Free tier) using ARM64 nodes. Cloud-agnostic by design — deployable on AKS, GKE, or any Kubernetes cluster without code changes.

Spec-Driven Development (SDD)

No manual code written. All implementation generated by Claude Code from validated specifications using Spec-Kit Plus. Every code file contains a comment linking it to its Task ID and Spec section. The constitution enforces: Dapr-first, event-driven CRUD, test-first, cloud-agnostic design — non-negotiable throughout all phases.

  • Constitution → Specify → Plan → Tasks → Implement
  • 5 reusable Claude Code skills created as bonus deliverables
  • No Task ID = No Code rule enforced throughout

Hackathon Scoring Breakdown

The hackathon awarded points across five base phases and four bonus categories. TaskFlow achieved the maximum score in every single category.

Phase / BonusMax PointsEarned
Phase I — Console App100100
Phase II — Full-Stack Web App150150
Phase III — AI Chatbot200200
Phase IV — Kubernetes Deployment250250
Phase V — Cloud Deployment300300
Bonus — Reusable Intelligence (Claude Code Skills)+200+200
Bonus — Cloud-Native Blueprints via Agent Skills+200+200
Bonus — Multi-language Support (Urdu)+100+100
Bonus — Voice Commands+200+200
Grand Total1,6001,600

Challenges & How They Were Solved

Challenge 1: ARM64 vs AMD64 Docker Images
Development ran on AMD64 machines; Oracle Cloud Always Free uses ARM64 nodes. Multi-stage Dockerfiles with explicit --platform build flags ensured images ran correctly across both architectures without code changes.
Challenge 2: Dapr Sidecar Injection in Kubernetes
Each application pod requires a Dapr sidecar container injected at runtime. Annotations dapr.io/enabled: "true" and dapr.io/app-id had to be set on every Deployment spec. Pod startup ordering required readiness probes to ensure Dapr was ready before application containers started receiving traffic.
Challenge 3: Noto Nastaliq Urdu Font in Next.js
Loading the Urdu font via CSS @import caused build errors in Next.js 16. Fixed by using the next/font system with localFont — loading the font file directly as a static asset instead of via CSS import.
Challenge 4: MCP Port Conflict in Phase V
In Phase 4, the MCP server ran as a separate HTTP service on port 8001. In Phase 5, that port was needed for the Notification Service. The MCP tools were merged in-process with the Chat API — eliminating the internal HTTP round-trip per tool call and reducing latency while freeing the port.

Results & Impact

1,600 Perfect score — 1,600 / 1,600 points
5 Phases from console app to cloud-native
3 Independent microservices on Kubernetes
OKE Deployed on Oracle Cloud Always Free
2 Languages — English + Urdu with RTL
Voice Speech-to-task via Web Speech API

What I Learned

1
Spec-Driven Development Works at Scale

Writing specs before code is not overhead — it is the work. SDD produces systems that are auditable, reproducible, and free from scope creep by design.

2
Dapr Is a Game-Changer for Cloud-Agnostic Design

Abstracting Kafka behind Dapr means the entire event-driven system could switch to a different message broker by changing one YAML file. Architecture flexibility at near-zero cost.

3
MCP Is the Right Abstraction for AI Tool Use

Model Context Protocol gives the AI agent a clean, structured interface to application data. The agent calls tools with typed parameters and gets typed results — no prompt engineering for data extraction.

4
Progressive Architecture Reveals the Right Decisions

Building phase by phase forces early decisions to be validated before adding complexity. The monolith that runs correctly is the foundation for the microservices that scale correctly.

5
Kubernetes Namespace Isolation Matters

Separating Kafka into its own namespace allowed the Strimzi operator to be upgraded independently of the application. Operational boundaries at the namespace level prevent upgrade coupling.

6
Reusable Skills Multiply Developer Output

The five Claude Code skills created as bonus deliverables are now loadable into any new project — the OKE deployment blueprint, Helm chart pattern, and chatbot frontend/backend skills are production-ready starting points.

Want a similar AI-powered system for your business?

We build cloud-native AI applications with microservices, intelligent chatbots, and production-grade Kubernetes deployments.