Skip to main content
The Dashboard API provides access to user-centric views of PRs, issues, repositories, and contribution statistics.

Overview

The Dashboard API aggregates data across repositories to provide a unified view of a user’s work and activity.

Endpoints

All dashboard endpoints are available via tRPC at api.dashboard.*

Get Full Dashboard Data

api.dashboard.getData(options?: {
  includeCalendar?: boolean;
  repoLimit?: number;
  activityLimit?: number;
}): Promise<DashboardData>
Example:
const dashboard = await api.dashboard.getData({
  includeCalendar: true,
  repoLimit: 5,
  activityLimit: 10
});

Get Summary

api.dashboard.getSummary(): Promise<DashboardSummary>
Returns counts and trends without detailed lists. Example:
const summary = await api.dashboard.getSummary();
// {
//   inbox: {
//     prsAwaitingReview: 3,
//     myOpenPrs: 2,
//     prsParticipated: 5,
//     issuesAssigned: 4,
//     issuesCreated: 1,
//     issuesParticipated: 3
//   },
//   recentActivity: 12,
//   activeRepos: 3,
//   thisWeekContributions: 24,
//   lastWeekContributions: 18,
//   contributionTrend: 'up'
// }

Get PRs Awaiting Review

api.dashboard.getPrsAwaitingReview(options?: {
  limit?: number;
}): Promise<InboxPullRequest[]>
Returns PRs where the current user is requested as a reviewer.

Get My Open PRs

api.dashboard.getMyOpenPrs(options?: {
  limit?: number;
}): Promise<InboxPullRequest[]>
Returns PRs authored by the current user.

Get Assigned Issues

api.dashboard.getAssignedIssues(options?: {
  limit?: number;
}): Promise<DashboardIssue[]>

Get Repositories

api.dashboard.getRepositories(
  limit?: number
): Promise<DashboardRepo[]>
Returns repositories owned by or collaborated on by the user.

Get Activity Feed

api.dashboard.getActivityFeed(
  limit?: number
): Promise<ActivityFeedItem[]>
Returns recent activity across all repositories.

Get Contribution Stats

api.dashboard.getContributionStats(): Promise<ContributionStats>
Example:
const stats = await api.dashboard.getContributionStats();
// {
//   totalCommits: 142,
//   totalPullRequests: 28,
//   totalPullRequestsMerged: 24,
//   totalIssues: 15,
//   totalIssuesClosed: 12,
//   totalReviews: 45,
//   totalComments: 89,
//   streak: {
//     current: 5,
//     longest: 12,
//     lastContributionDate: '2024-01-15'
//   },
//   contributionsByDayOfWeek: [12, 28, 32, 25, 30, 10, 5],
//   contributionCalendar: [...]
// }

Types

DashboardData

interface DashboardData {
  summary: DashboardSummary;
  repos: DashboardRepo[];
  activity: ActivityFeedItem[];
  contributionStats?: ContributionStats;
}

DashboardSummary

interface DashboardSummary {
  inbox: {
    prsAwaitingReview: number;
    myOpenPrs: number;
    prsParticipated: number;
    issuesAssigned: number;
    issuesCreated: number;
    issuesParticipated: number;
  };
  recentActivity: number;
  activeRepos: number;
  thisWeekContributions: number;
  lastWeekContributions: number;
  contributionTrend: 'up' | 'down' | 'stable';
}

InboxPullRequest

interface InboxPullRequest {
  id: string;
  number: number;
  title: string;
  state: 'open' | 'closed' | 'merged';
  isDraft: boolean;
  author?: {
    username?: string;
    name?: string;
  };
  repo: {
    name: string;
    owner: string;
  };
  labels?: Array<{ name: string; color: string }>;
  ciStatus?: 'success' | 'failure' | 'pending' | null;
  reviewState?: 'approved' | 'changes_requested' | 'commented' | 'pending' | null;
  updatedAt: string;
}

DashboardRepo

interface DashboardRepo {
  id: string;
  name: string;
  description?: string;
  isPrivate: boolean;
  starsCount: number;
  openPrs: number;
  openIssues: number;
  pushedAt?: string;
  updatedAt: string;
}

ActivityFeedItem

interface ActivityFeedItem {
  id: string;
  type: ActivityType;
  repoName?: string;
  payload: Record<string, unknown>;
  createdAt: string;
}

type ActivityType = 
  | 'push'
  | 'pr_opened'
  | 'pr_merged'
  | 'pr_closed'
  | 'pr_review'
  | 'pr_comment'
  | 'issue_opened'
  | 'issue_closed'
  | 'issue_comment'
  | 'repo_created'
  | 'repo_forked'
  | 'repo_starred';

ContributionStats

interface ContributionStats {
  totalCommits: number;
  totalPullRequests: number;
  totalPullRequestsMerged: number;
  totalIssues: number;
  totalIssuesClosed: number;
  totalReviews: number;
  totalComments: number;
  streak: {
    current: number;
    longest: number;
    lastContributionDate?: string;
  };
  contributionsByDayOfWeek: number[];  // [Sun, Mon, ..., Sat]
  contributionCalendar: Array<{
    date: string;
    count: number;
    level: 0 | 1 | 2 | 3 | 4;  // Intensity level
  }>;
}

CLI Usage

# Full dashboard
wit dashboard

# PRs section
wit dashboard prs

# Issues section
wit dashboard issues

# Repositories
wit dashboard repos

# Activity feed
wit dashboard activity

# Contribution stats
wit dashboard stats

# Quick summary
wit dashboard summary

# JSON output
wit dashboard --json

See Also