Skip to content

Issue Hub

One-Liner

The Issue Hub is a unified management interface for issues, execution queues, and discovery sessions with tabbed navigation and shared actions.


Pain Points Solved

Pain PointCurrent StateIssue Hub Solution
Scattered viewsSeparate pages for issues/queue/discoverySingle unified page with tab navigation
Context switchingHard to move between related featuresTab-based navigation persists in URL
Duplicate actionsDifferent actions per viewContext-aware action buttons per tab
No issue creationCan't create new issues from UINew issue dialog with attachments
Missing syncNo GitHub integrationGitHub sync button on Issues tab

Page Overview

Location: ccw/frontend/src/pages/IssueHubPage.tsx

Purpose: Unified page for managing issues, queue, and discovery with tab navigation and context-aware actions.

Access: Navigation → Issues OR direct routes /issues?tab=issues|queue|discovery

Layout

+--------------------------------------------------------------------------+
|  Issue Hub Header (dynamic based on active tab)                             |
|  [Refresh] [GitHub Sync] [Create Issue] [Fullscreen]                       |
+--------------------------------------------------------------------------+
|  [Issues] [Queue] [Discovery]                                              |
+--------------------------------------------------------------------------+
|  Tab Content (switches based on active tab)                                |
|  +--------------------------------------------------------------------+    |
|  |                                                                    |    |
|  |  Issues Panel OR Queue Panel OR Discovery Panel                    |    |
|  |                                                                    |    |
|  |  Each panel has its own layout and controls                        |    |
|  |                                                                    |    |
|  +--------------------------------------------------------------------+    |
+--------------------------------------------------------------------------+

Core Features

FeatureDescription
Tab NavigationThree tabs: Issues, Queue, Discovery. Tab state persists in URL (?tab=issues)
Dynamic HeaderHeader title changes based on active tab
Context-Aware ActionsAction buttons change based on current tab
GitHub SyncPull issues from GitHub (Issues tab only)
Create IssueModal dialog for creating new issues with attachments
Immersive ModeFullscreen toggle to hide app chrome
Auto-RefreshPer-tab refresh buttons with loading states

Tab-Specific Features

TabFeatures
IssuesRefresh, GitHub Sync, Create Issue buttons
QueueRefresh button only
DiscoveryInternal controls (no header actions)

Usage Guide

Basic Workflow

  1. Navigate to Issue Hub: Click "Issues" in the navigation
  2. Switch Tabs: Click tab buttons or modify URL (?tab=queue)
  3. Issues Tab: View issues, sync from GitHub, create new issues
  4. Queue Tab: View and manage execution queue
  5. Discovery Tab: Track discovery sessions

Key Interactions

InteractionHow to Use
Switch tabsClick tab buttons OR use URL parameter `?tab=issues
Refresh current tabClick the refresh button (actions update per tab)
Sync from GitHubClick the GitHub sync button on Issues tab
Create new issueClick "Create Issue" button, fill in the form
Toggle fullscreenClick the fullscreen button to enter/exit immersive mode

New Issue Dialog

FieldDescriptionRequired
TitleIssue title (max 200 chars)Yes
DescriptionDetailed context (max 10000 chars)No
TypeBug, Feature, Improvement, OtherNo (default: Other)
PriorityLow, Medium, High, CriticalNo (default: Medium)
AttachmentsImages, Markdown, text, PDF filesNo

Attachment Support:

  • Drag and drop files onto the upload area
  • Click to open file picker
  • Supported types: Images, Markdown (.md), text (.txt), JSON (.json), PDF (.pdf)
  • Remove attachments before creating issue

Components Reference

Main Components

ComponentLocationPurpose
IssueHubPage@/pages/IssueHubPage.tsxMain issue hub with tabs
IssueHubHeader@/components/issue/hub/IssueHubHeader.tsxDynamic header based on tab
IssueHubTabs@/components/issue/hub/IssueHubTabs.tsxTab switcher
IssuesPanel@/components/issue/hub/IssuesPanel.tsxIssues list and management
QueuePanel@/components/issue/hub/QueuePanel.tsxQueue management
DiscoveryPanel@/components/issue/hub/DiscoveryPanel.tsxDiscovery tracking
NewIssueDialog(internal to IssueHubPage)Create issue modal

State Management

  • Local state:

    • currentTab: IssueTab ('issues' | 'queue' | 'discovery')
    • isNewIssueOpen: boolean
    • isGithubSyncing: boolean
  • URL state:

    • Tab persists in URL search param: ?tab=issues
  • Custom hooks:

    • useIssues - Issues data and refresh
    • useIssueQueue - Queue data and refresh
    • useIssueMutations - Create issue mutation
    • pullIssuesFromGitHub - GitHub sync API call
    • uploadAttachments - Attachment upload for new issues

Configuration

Tab Navigation

Tabs are validated against allowed values:

typescript
const VALID_TABS: IssueTab[] = ['issues', 'queue', 'discovery'];

Invalid tab values automatically redirect to 'issues'.

Issue Types

TypeColorDescription
BugRedFunctional errors or problems
FeatureGreenNew feature requests
ImprovementBlueEnhancements to existing features
OtherGrayOther types

Released under the MIT License.