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

Share this project:

Updates