AI-powered developer productivity platform that eliminates context switching
Continuum is a serverless Atlassian Forge application that aggregates developer work across Jira, Confluence, Bitbucket, GitHub, and GitLab into a unified, AI-powered dashboard. Built for the Codegeist 2025 competition, Continuum runs entirely on Atlassian infrastructure with zero data egress, qualifying for "Runs on Atlassian" compliance.
- π― Priority Queue: Intelligent priority scoring (0-100+) across all platforms based on age, impact, deadlines, and blocker status
- π PR Dashboard: Unified view of pull requests from GitHub, GitLab, and Bitbucket with cross-platform filtering and sorting
- π§ Context Restoration: AI-powered context recovery with last actions, changes detection, and suggested next steps
- π§ Focus Mode: Time-based notification batching with priority thresholds to maintain deep work sessions
- π€ Rovo AI Agent: 5 custom AI actions for intelligent productivity assistance
- π§ Bottleneck Detection: Proactive identification of stale PRs, stuck tickets, and blocker pile-ups with team health scoring
- π Activity Feed: Real-time aggregated activity stream across all platforms
- π₯ My Work: Customizable grouping by status, project, or priority
- Serverless Architecture: 100% Forge-based with no external servers
- Parallel Data Fetching: Simultaneous platform queries with graceful degradation
- Smart Caching: Multi-layer caching with configurable TTLs (70%+ hit rate)
- OAuth Security: Secure token management via Forge External Authentication
- Property-Based Testing: Comprehensive correctness validation with 100+ iterations per property
- Quick Start
- Prerequisites
- Installation
- OAuth Configuration
- Development
- Architecture
- Testing
- Deployment
- Documentation
- License
# 1. Clone and install dependencies
git clone <repository-url>
cd continuum-platform
npm install
cd src/frontend && npm install && cd ../..
# 2. Configure OAuth apps (see OAuth Configuration section)
# 3. Set environment variables
cp .env.example .env
# Edit .env with your OAuth credentials
# 4. Build and deploy
npm run build
forge login
forge deploy -e development
forge install --product jira
# 5. Access Continuum in Jira β Apps β Continuum- Node.js: >= 18.0.0 (LTS recommended)
- npm: >= 9.0.0 or yarn: >= 1.22.0
- Forge CLI: Install globally with
npm install -g @forge/cli - Atlassian Account: With Forge developer access
- GitHub Account: For GitHub OAuth integration
- GitLab Account: For GitLab OAuth integration
- Jira Cloud Site: For testing and deployment
- Confluence Cloud: For document integration
- VS Code: With TypeScript and ESLint extensions
- Git: For version control
- Postman/Insomnia: For API testing
git clone <repository-url>
cd continuum-platform# Install root dependencies
npm install
# Install frontend dependencies
cd src/frontend
npm install
cd ../..# Check Node version
node --version # Should be >= 18.0.0
# Check Forge CLI
forge --version
# Run type checking
npm run type-check
# Run linting
npm run lintContinuum requires OAuth apps for GitHub and GitLab integration. Follow these detailed steps:
-
Navigate to GitHub Settings
- Go to https://github.com/settings/developers
- Click "OAuth Apps" in the left sidebar
- Click "New OAuth App"
-
Configure Application
- Application name:
Continuum Development(or your preferred name) - Homepage URL:
https://developer.atlassian.com - Application description:
AI-powered developer productivity platform - Authorization callback URL:
Note: Replace
https://developer.atlassian.com/console/install/[your-app-id][your-app-id]with your actual Forge app ID (found after first deployment)
- Application name:
-
Generate Client Secret
- After creating the app, click "Generate a new client secret"
- Important: Copy the secret immediately (it won't be shown again)
-
Copy Credentials
- Copy the Client ID
- Copy the Client Secret (from step 3)
-
Required Scopes
repo: Full control of private repositoriesuser: Read user profile datauser:email: Access user email addresses
-
Navigate to GitLab Applications
- Go to https://gitlab.com/-/profile/applications
- Or: GitLab β Preferences β Applications
-
Create New Application
- Name:
Continuum Development - Redirect URI:
https://developer.atlassian.com/console/install/[your-app-id] - Confidential: β Checked
- Scopes: Select the following:
- β
api: Access the authenticated user's API - β
read_user: Read the authenticated user's personal information
- β
- Name:
-
Save Application
- Click "Save application"
- Copy the Application ID
- Copy the Secret
-
Create Environment File
cp .env.example .env
-
Edit .env File
# GitHub OAuth Configuration GITHUB_CLIENT_ID=your_github_client_id_here GITHUB_CLIENT_SECRET=your_github_client_secret_here # GitLab OAuth Configuration GITLAB_CLIENT_ID=your_gitlab_application_id_here GITLAB_CLIENT_SECRET=your_gitlab_secret_here
-
Verify Configuration
# Ensure .env is in .gitignore grep ".env" .gitignore # Check environment variables are loaded cat .env
For production deployment, create separate OAuth apps:
-
GitHub Production App
- Use production callback URL
- Use descriptive name:
Continuum Production - Store credentials securely
-
GitLab Production App
- Use production callback URL
- Use descriptive name:
Continuum Production - Store credentials securely
-
Update Forge Environment Variables
forge variables set GITHUB_CLIENT_ID <prod-id> -e production forge variables set GITHUB_CLIENT_SECRET <prod-secret> -e production forge variables set GITLAB_CLIENT_ID <prod-id> -e production forge variables set GITLAB_CLIENT_SECRET <prod-secret> -e production
continuum-platform/
βββ .kiro/
β βββ specs/
β βββ continuum-platform/ # Specification documents
β βββ requirements.md # EARS-compliant requirements
β βββ design.md # Comprehensive design document
β βββ tasks.md # Implementation task list
βββ src/
β βββ index.ts # Main resolver entry point
β βββ types/
β β βββ index.ts # TypeScript type definitions
β βββ services/ # Business logic layer
β β βββ priorityScoring.ts # Priority calculation algorithm
β β βββ jiraIntegration.ts # Jira API integration
β β βββ githubIntegration.ts # GitHub API integration
β β βββ gitlabIntegration.ts # GitLab API integration
β β βββ bitbucketIntegration.ts # Bitbucket API integration
β β βββ confluenceIntegration.ts # Confluence API integration
β β βββ dataAggregation.ts # Multi-platform aggregation
β β βββ contextRestoration.ts # Context recovery logic
β β βββ notificationBatching.ts # Focus mode & batching
β β βββ bottleneckDetection.ts # Bottleneck analysis
β βββ rovo/
β β βββ actions.ts # Rovo AI agent actions
β βββ utils/ # Shared utilities
β β βββ storage.ts # Forge storage wrapper
β β βββ cache.ts # Caching with TTL
β β βββ auth.ts # OAuth helpers
β β βββ errors.ts # Error handling
β β βββ formatting.ts # Data formatting
β β βββ logger.ts # Logging utility
β β βββ constants.ts # App constants
β βββ __tests__/ # Backend tests
β β βββ *.test.ts # Unit tests
β β βββ *.integration.test.ts # Integration tests
β βββ frontend/ # React frontend
β βββ public/
β β βββ index.html
β βββ src/
β β βββ components/ # React components
β β βββ hooks/ # Custom React hooks
β β βββ context/ # Global state
β β βββ styles/ # CSS files
β β βββ App.tsx # Root component
β β βββ index.tsx # Entry point
β βββ package.json
β βββ tsconfig.json
βββ docs/ # Documentation
β βββ ARCHITECTURE.md # Architecture details
β βββ API.md # API documentation
β βββ USER_GUIDE.md # User guide
β βββ PRIORITY_ALGORITHM.md # Priority scoring details
βββ manifest.yml # Forge app manifest
βββ package.json # Root dependencies
βββ tsconfig.json # TypeScript config
βββ jest.config.js # Jest configuration
βββ .eslintrc.json # ESLint rules
βββ .env.example # Environment template
βββ README.md # This file
# Build
npm run build # Build frontend
npm run build:frontend # Build frontend only
# Testing
npm test # Run all tests
npm run test:watch # Run tests in watch mode
npm run test:coverage # Generate coverage report
# Code Quality
npm run lint # Check for linting errors
npm run lint:fix # Fix linting errors automatically
npm run type-check # Run TypeScript type checking
# Forge Commands
forge deploy # Deploy to default environment
forge deploy -e development # Deploy to development
forge deploy -e production # Deploy to production
forge install # Install app to site
forge logs # View logs
forge logs --follow # Stream logs in real-time
forge tunnel # Start development tunnel
forge eligibility # Check "Runs on Atlassian" compliance-
Start Development Tunnel (Optional)
forge tunnel
This allows you to test changes without deploying.
-
Make Code Changes
- Edit backend code in
src/ - Edit frontend code in
src/frontend/src/
- Edit backend code in
-
Run Tests
npm test -
Build Frontend
npm run build
-
Deploy Changes
forge deploy -e development
-
View Logs
forge logs --follow
- Check Logs: Use
forge logs --followto see real-time logs - Console Logging: Add
console.log()statements (visible in forge logs) - Type Errors: Run
npm run type-checkto catch TypeScript issues - Lint Errors: Run
npm run lintbefore committing - Test Failures: Run
npm testto identify broken functionality - OAuth Issues: Verify callback URLs match exactly
- Cache Issues: Clear cache by incrementing version in manifest.yml
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β React Frontend (UI) β
β ββββββββββββ¬βββββββββββ¬βββββββββββ¬βββββββββββ¬βββββββββββ β
β βPriority β PR β My Work β Activity β Settings β β
β β Queue βDashboard β β Feed β β β
β ββββββββββββ΄βββββββββββ΄βββββββββββ΄βββββββββββ΄βββββββββββ β
ββββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββ
β Forge Bridge (invoke)
ββββββββββββββββββββββββββ΄βββββββββββββββββββββββββββββββββββββ
β Forge Resolver Layer β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β 14 Resolvers (getPriorityItems, restoreContext...) β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
ββββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββ
β
ββββββββββββββββββββββββββ΄βββββββββββββββββββββββββββββββββββββ
β Service Layer β
β ββββββββββββ¬βββββββββββ¬βββββββββββ¬βββββββββββ¬βββββββββββ β
β βPriority β Jira β GitHub β GitLab βBitbucket β β
β β Scoring βIntegrationβIntegrationβIntegrationβIntegrationβ β
β ββββββββββββ΄βββββββββββ΄βββββββββββ΄βββββββββββ΄βββββββββββ β
β ββββββββββββ¬βββββββββββ¬βββββββββββ¬βββββββββββ¬βββββββββββ β
β βConfluenceβ Data β Context βNotificationβBottleneckβ β
β βIntegrationβAggregationβRestorationβ Batching βDetection β β
β ββββββββββββ΄βββββββββββ΄βββββββββββ΄βββββββββββ΄βββββββββββ β
ββββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββ
β
ββββββββββββββββββββββββββ΄βββββββββββββββββββββββββββββββββββββ
β External APIs & Storage β
β ββββββββββββ¬βββββββββββ¬βββββββββββ¬βββββββββββ¬βββββββββββ β
β β Jira βConfluenceβ GitHub β GitLab βBitbucket β β
β β API β API β API β API β API β β
β ββββββββββββ΄βββββββββββ΄βββββββββββ΄βββββββββββ΄βββββββββββ β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β Forge Storage (Encrypted) β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
- Serverless-First: All code runs on Forge infrastructure
- Parallel Processing: Fetch from all platforms simultaneously
- Graceful Degradation: Continue working if one platform fails
- Smart Caching: Multi-layer caching with TTL validation
- Security by Design: OAuth tokens never leave Forge
- Type Safety: Full TypeScript coverage
- Testability: Property-based and unit testing
- User interacts with React UI
- Component invokes backend resolver via Forge Bridge
- Resolver checks cache (if applicable)
- Service layer fetches from external APIs in parallel
- Data normalized to common schema
- Priority scores calculated
- Results cached with TTL
- Response returned to frontend
- UI updates with new data
For detailed architecture documentation, see docs/ARCHITECTURE.md.
Continuum employs a comprehensive testing strategy with multiple layers:
Test individual functions and components in isolation.
# Run all unit tests
npm test
# Run specific test file
npm test -- priorityScoring.test.ts
# Run tests in watch mode
npm run test:watch
# Generate coverage report
npm run test:coverageCoverage Areas:
- Priority scoring algorithm
- Data normalization functions
- Filter and sort logic
- Cache TTL validation
- Settings merge logic
- Date/time calculations
Test universal properties across 100+ random inputs.
# Property tests are included in npm test
npm testCoverage Areas:
- Priority scoring with random work items
- Data aggregation with random platform combinations
- Filter operations with random data sets
- Cache behavior with random timestamps
- Settings validation with random configurations
Example Property:
// Property 2: Priority score validity
// For any work item, the calculated priority score should be non-negative
it('should always return non-negative priority scores', () => {
fc.assert(
fc.property(workItemArbitrary, (item) => {
const score = calculatePriorityScore(item);
return score >= 0;
}),
{ numRuns: 100 }
);
});Test resolver β service β API flows with mocked external APIs.
# Run integration tests
npm test -- integration.test.tsCoverage Areas:
- Complete priority queue load
- Context restoration with related artifacts
- Focus mode filtering scenarios
- Multi-platform data aggregation
Test complete user workflows (manual testing recommended).
Test Scenarios:
- New user completes setup wizard
- User connects GitHub and sees PRs
- User enables focus mode
- User applies filters and sees correct results
- User restores context for a task
- Unit Test Coverage: > 80%
- Property Test Coverage: All correctness properties from design doc
- Integration Test Coverage: All critical user flows
- E2E Test Coverage: All major features
# Login to Forge
forge login
# Deploy to development environment
forge deploy -e development
# Install to Jira site
forge install --product jira
# View logs
forge logs --follow# Set production environment variables
forge variables set GITHUB_CLIENT_ID <prod-id> -e production
forge variables set GITHUB_CLIENT_SECRET <prod-secret> -e production
forge variables set GITLAB_CLIENT_ID <prod-id> -e production
forge variables set GITLAB_CLIENT_SECRET <prod-secret> -e production
# Deploy to production
forge deploy -e production
# Install to production site
forge install --product jira -e production- All tests passing (
npm test) - No linting errors (
npm run lint) - No type errors (
npm run type-check) - Frontend built (
npm run build) - Environment variables configured
- OAuth apps created for target environment
- Forge eligibility check passed (
forge eligibility) - Deployment successful (
forge deploy) - App installed to site (
forge install) - Manual smoke testing completed
# View real-time logs
forge logs --follow
# View logs for specific function
forge logs --function get-priority-items
# View logs with filter
forge logs --filter "ERROR"- ARCHITECTURE.md: Detailed architecture and design decisions
- API.md: Complete API documentation for all resolvers and services
- USER_GUIDE.md: End-user guide for all features
- PRIORITY_ALGORITHM.md: Detailed explanation of priority scoring algorithm
- requirements.md: EARS-compliant requirements
- design.md: Comprehensive design document with correctness properties
- tasks.md: Implementation task list
This app is designed to be "Runs on Atlassian" compliant:
- β No remote servers: All code runs on Forge
- β All data processing in Forge functions: No external data processing
- β OAuth via Forge External Authentication: Secure token management
- β Encrypted storage via Forge Storage API: All data encrypted at rest
Verify compliance:
forge eligibilityExpected output:
Runs on Atlassian: ELIGIBLE
MIT License - see LICENSE file for details
Contributions are welcome! Please read the contributing guidelines before submitting pull requests.
For issues and questions:
- Open an issue in the repository
- Check the User Guide
- Review the API Documentation
- Contact the development team
This project was built for the Codegeist 2025 competition, competing in:
- Main Category: Best Overall App
- Bonus Prize: Best Rovo Apps
- Bonus Prize: Best Runs on Atlassian Apps
Built with β€οΈ using Atlassian Forge and Rovo AI