Continuum: Eliminating Context Switching for Developers
Inspiration
As a developer, I found myself constantly switching between Jira, GitHub, GitLab, and Confluence throughout the day. Each context switch cost me precious focus time - studies show it takes an average of 23 minutes to regain deep focus after an interruption. I'd check Jira for my tasks, jump to GitHub for PRs, then GitLab for merge requests, then back to Jira to update status. This fragmented workflow was killing my productivity.
I realized: What if everything lived in one intelligent dashboard? What if AI could tell me exactly what to focus on without me having to manually prioritize across platforms? That's how Continuum was born.
What it does
Continuum is an AI-powered developer productivity platform that aggregates work from Jira, GitHub, GitLab, Bitbucket, and Confluence into a single unified dashboard with intelligent prioritization. Instead of context switching between platforms, developers get:
- Priority Queue - All work items ranked by an intelligent scoring algorithm that considers deadlines, blockers, impact, and age
- AI-Powered Insights - Ask Claude "What should I focus on today?" and get specific recommendations with priority scores and due dates
- Cross-Platform PR Dashboard - All pull requests from GitHub, GitLab, and Bitbucket in one view with smart filtering
- Unified Activity Feed - Everything happening across all platforms in one timeline - comments, status changes, PR reviews
- Focus Mode - Batch notifications during deep work hours to maintain flow state
How I built it
Continuum is built 100% on Atlassian Forge, ensuring zero data egress and full compliance with "Runs on Atlassian" requirements.
Architecture
Backend (Node.js 20.x)
- 14 Forge resolvers handling all API operations
- Integration services for Jira, GitHub, GitLab, Bitbucket, Confluence
- Priority scoring algorithm with weighted factors
- Smart caching with 5-minute TTL for performance
- Claude Sonnet 4.5 integration for workload analysis
Frontend (React + TypeScript)
- 5 main views: Priority Queue, My Work, PR Dashboard, Activity Feed, Settings
- AI Chat component with natural language interface
- Real-time data fetching with Forge Bridge
- Responsive design following Atlassian Design System principles
Priority Scoring Algorithm
The heart of Continuum is its priority scoring algorithm. Each work item receives a score based on multiple factors:
$$ \text{Priority Score} = w_1 \cdot \text{Age Score} + w_2 \cdot \text{Blocker Score} + w_3 \cdot \text{Due Date Score} + w_4 \cdot \text{Impact Score} $$
Where:
- Age Score: Older items get higher priority (prevents stale work)
- Blocker Score: Items marked as blockers get maximum priority
- Due Date Score: Items due sooner get higher priority
- Impact Score: Based on number of people affected
Technology Stack
- Runtime: Forge Functions (Node.js 20.x)
- Frontend: React 18, TypeScript, Forge UI Kit
- Storage: Forge Storage API
- Authentication: Forge External Auth (OAuth 2.0)
- AI: Claude API (Anthropic)
- Caching: In-memory with TTL-based invalidation
Challenges I ran into
1. Jira API Deprecation (410 Errors)
Midway through development, Jira's /rest/api/3/search endpoint started returning 410 (Gone) errors. I tried switching API versions, changing HTTP methods, and different authentication approaches - nothing worked. The solution was implementing a comprehensive mock data system that actually made demos more consistent and reliable.
2. AI Prompt Engineering
As much as I wanted to use Rovo Agents, I did not have access to them so I opted for Claude. It initially gave generic responses like "I don't have access to Jira" instead of analyzing the provided data. I learned that AI models need explicit instructions about their context.
3. TypeScript Type Safety Across Platforms
Each platform (Jira, GitHub, GitLab) returns different data structures. Maintaining type safety while normalizing data required creating a comprehensive WorkItem interface and platform-specific normalizers. This upfront investment in types caught countless bugs at compile time.
4. Caching Strategy
Fetching from 5 platforms on every request was slow (2-3 seconds), but aggressive caching meant stale data. The solution was tiered caching: 5-minute TTL for priority items and PRs, 1-minute TTL for activities, with manual refresh for users who want latest data.
5. Frontend State Management
Managing state across 5 tabs with different data sources was complex. I kept state as local as possible - each tab fetches its own data and handles its own loading/error states. Global state only contains truly global data (settings, integrations).
Accomplishments that I'm proud of
- 100% Forge-based - Zero data egress, full "Runs on Atlassian" compliance
- AI-powered prioritization - Claude analyzes workload and provides specific, actionable recommendations
- Cross-platform aggregation - Successfully integrated 5 different platforms with different APIs
- Intelligent priority scoring - Algorithm that balances age, blockers, due dates, and impact
- Clean architecture - 14 well-structured resolvers, comprehensive error handling, smart caching
- Type safety - Full TypeScript coverage with proper interfaces for all data structures
- User experience - Clean, intuitive UI that eliminates context switching
- Performance - Smart caching reduces load times from 2-3 seconds to milliseconds
What I learned
Forge Platform Mastery
This was my first major Forge app. I learned Forge Storage patterns, External Authentication for OAuth flows, Forge Bridge for frontend-backend communication, and deployment strategies for development vs production.
AI Integration Best Practices
Prompt engineering is critical - small changes in system prompts dramatically affect output. I learned to provide the right amount of context without overwhelming the model, implement graceful degradation when AI services are unavailable, and cache AI responses to minimize costs.
Cross-Platform Integration Patterns
Building integrations for 5 platforms taught me about API inconsistencies, rate limiting strategies, data normalization patterns, and graceful degradation when platforms are unavailable.
Priority Algorithm Design
Developing the priority scoring algorithm required balancing multiple factors, tuning weights through iteration, handling edge cases, and optimizing performance for hundreds of items.
The Power of Mock Data
What started as a workaround for API issues became a feature. Mock data makes demos consistent, reliable, and showcases all features without external dependencies.
What's next for Continuum
Rovo Agent Integration
Natural language queries across all work - "Show me all PRs that need my review" or "What's blocking the payment feature?"
Team Analytics Dashboard
- Bottleneck detection across the team
- Velocity tracking and sprint insights
- Workload distribution visualization
- Predictive analytics for deadline risks
Smart Notifications
ML-based notification filtering that learns what's important to you and batches the rest
Automatic Time Tracking
Track time spent on tasks automatically based on activity patterns and context switches
Custom Workflows
User-defined automation rules - "When a PR is approved, move the Jira ticket to In Review"
Mobile Apps
Native iOS and Android apps for on-the-go access to priorities and quick updates
Slack/Teams Integration
Receive Continuum notifications and interact with the AI directly in your chat platform
Advanced Priority Tuning
Let users customize priority weights based on their workflow preferences
Built with: Atlassian Forge, React, TypeScript, Claude AI
For: Codegeist 2025
Category: Best Runs on Atlassian Apps
Built with: Atlassian Forge, React, TypeScript
For: Codegeist 2025
By: Joyce Wambui
Category: Best Runs on Atlassian Apps
Built With
- atlassian-forge
- react
- typescript
Log in or sign up for Devpost to join the conversation.