Project Story: Agile Planning Tool

The Inspiration

The Problem We Saw

As developers working in distributed teams, we've all been there: the dreaded async planning poker session. Someone drops a Slack message with a story, people trickle in their estimates over hours (or days), and by the time everyone votes, half the team has forgotten the context. Product Owners struggle to get everyone aligned, Operations teams feel left out of the planning process, and the whole experience feels disconnected from where the actual work lives—GitHub.

We needed something better. Not just another estimation tool, but a comprehensive planning platform that brings everyone together in real-time, integrates seamlessly with GitHub, and makes sprint planning feel collaborative rather than chaotic.

Why This Project?

This project was born from three key insights:

  1. Planning is a team sport: Product Owners, developers, operations, and even marketing need to be in the same room (virtual or otherwise) to make good decisions
  2. Context matters: Stories live in GitHub—why should planning happen somewhere else?
  3. Real-time changes everything: When everyone sees votes reveal simultaneously, discussions happen naturally and decisions get made faster

We wanted to prove that with the right tools (Kiro) and the right approach (spec-driven development), we could build a production-ready, feature-rich application that solves real problems for real teams.


What We Learned

Spec-Driven Development is a Game-Changer

Before this project, I approached complex features with vibe coding—describing what I wanted and iterating until it worked. It was flexible but chaotic.

The revelation: Spec-driven development with Kiro transformed how I think about building software. By investing time upfront to:

  • Define clear requirements with acceptance criteria using EARS patterns
  • Design comprehensive solutions with correctness properties
  • Break down implementation into discrete, testable tasks

I discovered that Kiro could implement entire features autonomously while I focused on the next design challenge. The spec became a contract between my vision and Kiro's execution.

Key Learning: The 20% time spent on spec design saved 80% time in implementation and debugging. Features like external tool embedding, collaborative whiteboard, and E2E testing worked correctly the first time because the requirements were crystal clear.

E2E Testing Demonstrates Business Value

The challenge: How do you prove to stakeholders that complex features work end-to-end?

The solution: Comprehensive E2E tests with Playwright that:

  • Test complete user workflows (project creation → estimation → finalization)
  • Verify real-time collaboration with multiple users
  • Validate GitHub integration end-to-end
  • Test responsive design across devices
  • Provide visual demos for stakeholders

Key Learning: E2E tests aren't just for QA—they're powerful tools for demonstrating business value to product owners.

External Tool Integration Amplifies Collaboration

The insight: Teams already use tools like Miro, Figma, and Google Docs. Why force them to switch contexts?

The implementation: Built a flexible embedding system that:

  • Parses URLs from multiple platforms (Miro, Figma, Google Docs/Sheets)
  • Validates and generates proper embed URLs
  • Creates resizable, draggable panels
  • Persists panel state per session
  • Syncs across all participants in real-time

Key Learning: Integration beats replacement. Let teams use their favorite tools within your platform.


How We Built It

Spec Creation

The turning point: After building the foundation with Vibe coding commands for project setup, we realized the remaining features were too complex for ad-hoc vibe coding.

What we created:

  • Comprehensive requirements document with 26 major requirements
  • Detailed design document with architecture, data models, and correctness properties
  • Task breakdown with 45 discrete implementation tasks across 2 phases

The process with Kiro:

  1. Started with rough ideas: "I want real-time voting, GitHub integration, session history, team management..."
  2. Kiro helped formalize these into EARS-compliant requirements
  3. Iteratively refined the design document, adding correctness properties
  4. Broke down the design into implementable tasks

Key insight: Kiro's spec workflow guided us through requirements → design → tasks systematically. Each phase had clear approval gates.

Core Features Implementation (Tasks 6-27)

The workflow:

For each task:
1. Open tasks.md in Kiro
2. Click "Start task" next to the task
3. Kiro reads requirements, design, and task details
4. Kiro implements the feature completely
5. Review, test, approve
6. Move to next task

What made this work:

  • Context preservation: Kiro always had access to requirements and design docs
  • Clear acceptance criteria: Each task had specific requirements to validate against
  • Incremental progress: Each task built on previous tasks
  • Documentation: Kiro generated implementation docs for each major task

Standout implementations:

Task 11: GitHub Integration (Most Complex)

  • Kiro implemented OAuth flow, token encryption, and GitHub API service
  • Generated type-safe wrappers for GitHub API calls
  • Handled rate limiting and error cases
  • Created UI components for repository/project/issue selection
  • All from the spec, first try

Task 14: Real-Time Voting (Most Impressive)

  • WebSocket connection management with auto-reconnect
  • Optimistic UI updates
  • Vote synchronization across clients
  • Presence detection
  • All working together seamlessly

Task 20: Animations (Most Delightful)

  • Comprehensive animation system with Framer Motion
  • Consistent timing and easing across the app
  • Micro-interactions for every user action
  • Created a reusable animation library

Task 21: Session History (Most Data-Intensive)

  • Complete history and analytics system
  • Export to JSON/CSV
  • Filtering, sorting, pagination
  • Detailed statistics and trends

Advanced Collaboration Features (Tasks 28-42)

Project & Team Management (Tasks 28-30):

  • Multi-project organization
  • Role-based access control (Owner, Admin, Member)
  • Team invitation system
  • Project settings and defaults

In-Session Communication (Tasks 32-34):

  • Real-time chat with typing indicators
  • Story comments synced to GitHub
  • Vote rationale and explanations

Enhanced Voting UX (Tasks 35-37):

  • Voting status indicators with progress tracking
  • Anonymous vs. open voting modes
  • Re-voting functionality with history
  • Automated reminders for non-voters

Backlog Management (Tasks 38-39):

  • Drag-and-drop story reordering
  • Story status management
  • Bulk operations (mark estimated, export, delete)
  • Advanced filtering and search

Notifications (Tasks 40-41):

  • Email notifications (session invites, reminders, summaries)
  • In-app notifications with real-time updates
  • Customizable notification preferences
  • Calendar invite generation

Visual Collaboration (Task 42):

  • Collaborative whiteboard with real-time sync
  • Drawing tools (pen, shapes, text, eraser)
  • Whiteboard snapshots
  • Snapshot gallery and story attachment

External Tool Embedding (Task 43):

  • URL parsing for Miro, Figma, Google Docs/Sheets
  • Resizable, draggable embed panels
  • Panel state persistence
  • Real-time synchronization across users

Quality Assurance & Testing

The challenge: How do you ensure a complex real-time application works correctly?

The solution: Comprehensive E2E testing with Playwright

What we built:

  • Smoke Tests (4 tests): Basic application health checks
  • Complete Estimation Flow (2 tests): Full workflow from creation to finalization
  • GitHub Integration (3 tests): Import and sync workflows
  • Real-Time Collaboration (3 tests): Multi-user simultaneous interactions
  • Project Management (4 tests): Team and permission workflows
  • Session History & Export (4 tests): Reporting and analytics

Test Coverage:

  • ✅ 20+ E2E test scenarios
  • ✅ 100% passing smoke tests in Chrome
  • ✅ Multi-browser support (Chrome, Firefox, Safari, Mobile)
  • ✅ Visual regression capabilities
  • ✅ Demo-ready for stakeholders

Key Features:

  • Tests written in TypeScript with Playwright
  • Configurable for CI/CD integration
  • HTML reports with screenshots and videos
  • Interactive UI mode for debugging
  • Slow-motion mode for demos

Technical Architecture

Stack Choices

Frontend:

  • Next.js 14+ (App Router) - Server components + client components
  • React 18 - UI library
  • TypeScript - Type safety
  • Tailwind CSS - Styling
  • Shadcn UI - Component library
  • Framer Motion - Animations

Backend:

  • Next.js API Routes - RESTful API
  • Socket.IO - Real-time WebSocket communication
  • MongoDB Atlas - Database
  • Mongoose - ODM

Authentication:

  • Auth.js v5 (NextAuth.js) - OAuth flow
  • GitHub OAuth - Identity provider

External APIs:

  • GitHub REST API - Repository/issue data
  • GitHub GraphQL API - Projects V2 data

Testing:

  • Playwright - E2E testing framework
  • Property-based testing - Correctness validation

Email:

  • SendGrid/AWS SES/Resend - Email delivery
  • ICS generation - Calendar invites

Key Technical Decisions

1. Why Next.js App Router?

  • Server components for better performance
  • Built-in API routes
  • File-based routing
  • Excellent TypeScript support

2. Why Socket.IO over native WebSockets?

  • Automatic reconnection
  • Room-based broadcasting
  • Fallback to polling
  • Better error handling

3. Why MongoDB over PostgreSQL?

  • Flexible schema for evolving requirements
  • Easy to model nested data (participants, votes, embeds)
  • Excellent with Next.js
  • MongoDB Atlas for managed hosting

4. Why Playwright over Cypress?

  • Multi-browser support out of the box
  • Better TypeScript integration
  • Faster execution
  • Built-in test generator

Challenges We Faced

Challenge: Real-Time State Synchronization

The Problem: When multiple users vote simultaneously, how do you keep everyone's UI in sync without race conditions?

The Solution:

  • Implemented optimistic updates (show your vote immediately)
  • Server is source of truth (broadcast actual state)
  • Reconciliation logic (merge server state with local state)
  • Used Socket.IO rooms for efficient broadcasting

What Kiro Did: Generated the entire WebSocket event handling system, including edge cases like:

  • User disconnects mid-vote
  • User rejoins after voting
  • Multiple votes from same user (take latest)
  • Whiteboard concurrent editing

Learning: Breaking the problem into clear requirements in the spec allowed Kiro to handle the complexity.

Challenge: E2E Test Authentication

The Problem: E2E tests need to authenticate, but GitHub OAuth requires real credentials.

The Solution:

  • Created authentication helper utilities
  • Documented multiple auth strategies (mock, real OAuth, storage state, API-based)
  • Implemented smoke tests that work without auth
  • Provided clear setup guide for full test suite

What Kiro Did: Generated comprehensive test infrastructure including:

  • Test helpers for auth and data generation
  • Smoke tests for immediate value
  • Full test scenarios ready to enable
  • Documentation for auth setup

Learning: Start with tests that provide immediate value, then expand with proper auth setup.

Challenge: Drag-and-Drop with Real-Time Sync

The Problem: When multiple users reorder stories simultaneously, conflicts arise.

The Solution:

  • Optimistic updates for immediate feedback
  • Server-side conflict resolution
  • Last-write-wins strategy with timestamps
  • Real-time broadcast of final order

What Kiro Did: Implemented complete drag-and-drop system with:

  • dnd-kit integration
  • Database persistence
  • Socket.IO synchronization
  • Conflict resolution logic

Learning: Spec-driven development handles complex state management elegantly.

Challenge: Notification System Complexity

The Problem: Multiple notification types (email, in-app), multiple triggers, user preferences, and delivery reliability.

The Solution:

  • Unified notification service
  • Template-based email generation
  • Queue system for reliability
  • User preference management
  • Calendar invite generation

What Kiro Did: Generated complete notification system including:

  • Email service with multiple provider support
  • In-app notification API and UI
  • Preference management
  • Notification scheduler
  • ICS file generation

Learning: Complex systems become manageable when broken into clear components in the design phase.

The Kiro Advantage

What Made This Project Successful

1. Spec-Driven Development

  • Clear requirements prevented scope creep
  • Design document served as single source of truth
  • Task breakdown enabled parallel thinking (design next feature while Kiro implements current)
  • Correctness properties led to property-based tests

2. Vibe Coding for Exploration

  • Used for foundation and experimentation
  • Perfect for "figure it out as we go" scenarios
  • Great for quick iterations and refinements

4. Hybrid Approach

  • Vibe coding for foundation (Tasks 1-5)
  • Spec-driven for complex features (Tasks 6-43)
  • Vibe coding for refinements (bug fixes, tweaks)

Productivity Metrics

Without Kiro (estimated):

  • Foundation: 1 week
  • Phase 1 features (21 tasks): 6-8 weeks
  • Phase 2 features (15 tasks): 4-6 weeks
  • E2E testing: 2 weeks
  • Refinement: 1 week
  • Total: 14-18 weeks

With Kiro (actual):

  • Foundation: 2 days (with vibe coding)
  • Spec creation: 1 day
  • Phase 1 features: 5 days (spec-driven)
  • Phase 2 features: 3 days (spec-driven)
  • E2E testing: 1 day (spec-driven)
  • Refinement: 2 hours (vibe coding)
  • Total: ~11 days

Productivity multiplier: ~12x

Quality Metrics

  • Type safety: 100% TypeScript, zero any types
  • Error handling: Comprehensive error handling on all 40+ API routes
  • Testing: E2E tests covering all major workflows
  • Documentation: Auto-generated docs for each major feature
  • Consistency: Uniform patterns across entire codebase
  • Security: Proprietary license, input validation, secure embeds

Key Takeaways

For Developers

  1. Invest in specs for complex features: The upfront time pays off exponentially
  2. Use vibe coding for exploration: Perfect for figuring things out
  3. Use spec-driven for implementation: Perfect for executing clear plans
  4. Trust Kiro with complexity: Well-specified complex features work first try
  5. E2E tests demonstrate value: Not just for QA, but for stakeholder demos

For Teams

  1. Specs enable collaboration: Clear requirements mean anyone can implement
  2. Steering docs maintain quality: Consistency without constant code review
  3. Documentation is automatic: Implementation docs generated with each feature
  4. Velocity is sustainable: Quality doesn't degrade as you move faster
  5. Testing builds confidence: Comprehensive E2E tests prove features work

For the Future

This project proved that AI-assisted development isn't about replacing developers—it's about amplifying our ability to build complex, high-quality software. With Kiro:

  • We think at a higher level (requirements, design, architecture)
  • We move faster (12x productivity)
  • We maintain quality (consistent patterns, comprehensive error handling)
  • We enjoy the process (focus on creative problem-solving, not boilerplate)

What's Next

Planned Features

  1. Advanced Analytics: Velocity tracking, estimation accuracy, team insights
  2. More Integrations: Jira, Linear, Azure DevOps
  3. AI Estimation: ML-based estimation suggestions
  4. Video/Audio: Built-in communication for remote teams
  5. Templates: Pre-built estimation templates for common scenarios

Technical Improvements

  1. Performance: Implement Redis caching for GitHub API
  2. Testing: Expand property-based test coverage
  3. Monitoring: Add observability with OpenTelemetry
  4. Deployment: Set up CI/CD pipeline with E2E tests
  5. Documentation: Create user guides and API documentation

Final Statistics

Features Delivered

Phase 1 (Core):

  • ✅ GitHub OAuth Authentication
  • ✅ Session Management
  • ✅ Real-Time Voting
  • ✅ GitHub Integration
  • ✅ Planning Poker Cards
  • ✅ Estimate Reveal & Finalization
  • ✅ Session History
  • ✅ Responsive Design
  • ✅ Animations

Phase 2 (Advanced):

  • ✅ Project & Team Management
  • ✅ Role-Based Access Control
  • ✅ Session Chat
  • ✅ Story Comments
  • ✅ Vote Rationale
  • ✅ Voting Modes (Anonymous/Open)
  • ✅ Re-voting with History
  • ✅ Drag-and-Drop Backlog
  • ✅ Bulk Operations
  • ✅ Email Notifications
  • ✅ In-App Notifications
  • ✅ Collaborative Whiteboard
  • ✅ External Tool Embedding

Quality Assurance:

  • ✅ 20+ E2E Test Scenarios
  • ✅ Property-Based Testing
  • ✅ Multi-Browser Support
  • ✅ Comprehensive Documentation

Code Statistics

  • Files: 100+ TypeScript/React files
  • Components: 50+ React components
  • API Routes: 40+ REST endpoints
  • Socket Events: 20+ real-time events
  • Tests: 20+ E2E test scenarios
  • Lines of Code: ~15,000 (excluding tests and docs)

Documentation

  • Spec Documents: 3 (requirements, design, tasks)
  • Implementation Docs: 20+ task implementation summaries
  • Guides: 10+ setup and usage guides
  • Test Documentation: 5 comprehensive test guides
  • License & Legal: 5 copyright and licensing documents

Conclusion

Building the Agile Planning Tool with Kiro was a transformative experience. It demonstrated that with the right approach—combining spec-driven development for complex features, steering documents for consistency, and vibe coding for exploration—we can build production-ready applications at unprecedented speed without sacrificing quality.

The key insight: Kiro isn't just a coding assistant; it's a development methodology multiplier. It makes spec-driven development practical, steering documents powerful, and vibe coding productive.

This project went from concept to production-ready in 11 days with:

  • ✅ 40+ features across 2 phases
  • ✅ Comprehensive E2E testing
  • ✅ Enterprise-grade security
  • ✅ Real-time collaboration
  • ✅ External tool integration
  • ✅ Complete documentation

That's not just fast—it's a fundamental shift in how we can build software.


Acknowledgments

Built with:

  • Kiro AI - Development partner
  • Next.js - Application framework
  • MongoDB - Database
  • Socket.IO - Real-time communication
  • Playwright - E2E testing
  • GitHub - Version control and API integration

Inspired by:

  • Real teams struggling with async planning
  • The need for better collaboration tools
  • The potential of AI-assisted development

Special thanks to:

  • The Kiro team for building an incredible development tool
  • The open-source community for the amazing libraries we built upon
  • Every developer who's ever struggled with sprint planning—this one's for you

Built in 11 days with Kiro. Designed for teams who want to plan better, together.

Built With

Share this project:

Updates