repo-pulse

RepoPulse — Product Definition

Repo: arun-gupta/repo-pulse
Description: OSS Health Score — measures the health of open source projects with percentile-based scoring calibrated against 1600+ GitHub repositories. Produces a composite health score from Activity, Responsiveness, and Sustainability dimensions with actionable recommendations.
Phase 1 Platform: Next.js deployed on Vercel
Phase 1 Data Layer: Next.js API Routes
Development Methodology: SpecKit / Specification-Driven Development (SDD)

This document is the canonical product definition for RepoPulse. It is the source of truth for all features across all phases. .specify/memory/constitution.md references this document. SpecKit specs are traceable to feature IDs defined here.


Roadmap

Phase 1 — Web app + core scoring ✅

Interactive Next.js dashboard on Vercel with OSS Health Score from three scoring buckets (Activity, Responsiveness, Sustainability), percentile-based scoring calibrated against 1600+ repos, and actionable recommendations.

Phase 2 — Expand scoring dimensions

Add new scoring buckets (Documentation, Security, Community, Release Health, Development Cadence, Project Maturity) to the health score. Requirements specs live in linked GitHub issues.

Phase 3 — Integrations

Deliver the OSS Health Score through additional channels (GitHub Action, MCP Server, CLI, badge, PR bot, VS Code extension, webhooks), wrapping the shared analyzer module.

Phase 4 — Git provider support

Provider abstraction layer for GitLab, Bitbucket, and Gitea support alongside GitHub.


Data Source

GitHub GraphQL API (https://api.github.com/graphql) is the primary data source.


OSS Health Score

RepoPulse computes a composite OSS Health Score from weighted scoring buckets. Each bucket produces a percentile score (0–99) relative to repos in the same star bracket, calibrated against 1600+ real GitHub repositories.

Implemented buckets

Bucket Weight What it measures Derived from
Activity 36% PR flow, issue flow, commit cadence, completion speed, release frequency Weighted composite of 5 sub-scores
Responsiveness 36% Response times, resolution speed, maintainer signals, backlog health, engagement quality Weighted composite of 5 sub-scores
Sustainability 28% Contributor concentration (top 20% commit share) Inverted percentile of concentration ratio

Planned buckets (Phase 2)

See Phase 2 roadmap for the full list. Weights are rebalanced as new buckets are added.

Ecosystem profile

Three additional percentile dimensions are shown on the scorecard but not included in the health score composite:

Dimension Metric Purpose
Reach Star count percentile Project visibility and adoption
Attention Watcher-to-star ratio percentile Active follower interest
Engagement Fork-to-star ratio percentile Builder participation

Scoring methodology

All scores are percentile-based, not categorical. The scoring methodology, calibration data, and statistical approach are documented in docs/scoring-and-calibration.md.

Scores are assigned only when sufficient verified data exists. Otherwise: "Insufficient verified public data".


Accuracy Policy


Phase 1 — Web App (Next.js / Vercel)

Stack

API Contract

POST /api/analyze
Body:     { "repos": ["owner/repo", ...], "token"?: "ghp_..." }
Response: { "results": AnalysisResult[] }

POST /api/analyze-org
Body:     { "org": "github-org", "token"?: "ghp_..." }
Response: { "org": "github-org", "results": OrgRepoSummary[] }

Server-side token (GITHUB_TOKEN env var) takes precedence. If absent, token is supplied client-side from localStorage. Token is never included in URLs or exposed to the client bundle.

Pages


Planned Features

Each feature is the unit of a SpecKit spec — one feature maps to one spec file. Acceptance criteria define the testable surface. Features are behavioral contracts, not implementation tasks.


Phase 1 — Web App


[P1-F01] Repo Input

User can provide one or more GitHub repositories for analysis.

Acceptance criteria

Out of scope


[P1-F16] Org-Level Repo Inventory

User can provide a GitHub organization and get a high-level inventory of its public repositories.

Acceptance criteria

Design constraints

Out of scope


[P1-F02] Authentication

User can authenticate with GitHub to enable data fetching.

Acceptance criteria

Out of scope


[P1-F03] Deployment

RepoPulse deploys to Vercel with minimal configuration.

Acceptance criteria

Out of scope


[P1-F04] Data Fetching

The analyzer fetches exact, verified metric data from GitHub for each repo.

Acceptance criteria

Out of scope


[P1-F05] Ecosystem Map

Repos are summarized in an interactive ecosystem view with a spectrum-based ecosystem profile.

Acceptance criteria

Out of scope


[P1-F15] Results Shell

RepoPulse presents analysis in a stable app shell so users can submit repos once and switch between result views cleanly.

Acceptance criteria

Out of scope


[P1-F06] Repo Comparison

Users can compare two or more repos side by side across all health metrics.

Acceptance criteria

Design constraints (inform all upstream features)

Out of scope


[P1-F07] Metric Cards

Each repo is summarized in a scannable card showing key health signals.

Acceptance criteria

Out of scope


[P1-F08] Activity (CHAOSS-aligned: activity flow)

The analyzer measures how a repo’s recent activity and delivery flow change across configurable recent windows.

Acceptance criteria

Out of scope


[P1-F09] Contributors

The Contributors workspace measures the depth and distribution of contributor activity, with a dedicated Sustainability pane for broader resilience and organizational-risk signals.

Acceptance criteria

Out of scope


[P1-F10] Responsiveness (CHAOSS: Responsiveness)

The analyzer measures how quickly maintainers engage with community activity.

Acceptance criteria

Out of scope


[P1-F11] Health Ratios (deprecated — tab removed)

The dedicated Health Ratios tab has been removed. Its ratios are fully covered by domain-specific tabs (Overview, Contributors, Activity) and the Comparison view. The underlying ratio computation logic in lib/health-ratios/ is retained for use by exports, contributors, and comparison features.

Out of scope


[P1-F12] Missing Data & Accuracy

The UI makes data gaps explicit and never hides them.

Acceptance criteria

Out of scope


[P1-F14] GitHub OAuth Authentication

User authenticates with GitHub via OAuth. OAuth replaces the PAT input and the server-side GITHUB_TOKEN — each user’s own OAuth token is used for all API calls, distributing rate limit consumption across users rather than sharing a single server quota.

Acceptance criteria

Out of scope


[P1-F13] Export

Users can take analysis results out of the UI in standard formats.

Acceptance criteria

Out of scope


Phase 2 — Expand scoring dimensions

Phase 2 adds new scoring buckets to the OSS Health Score. Each bucket produces a percentile score and is weighted into the composite health score. Requirements specs live in the linked GitHub issues — see Spec ownership below.

Feature ID Feature Issues
P2-F01a Documentation scoring (basic) #66
P2-F02 Licensing & Compliance #115
P2-F03 Inclusive naming #107
P2-F01b Documentation scoring (advanced) #110, #67
P2-F04 Governance & Transparency #116
P2-F05 Community scoring #70
P2-F06 Foundation-aware recommendations #119
P2-F07 Security scoring #68, #71
P2-F08 Accessibility & Onboarding #117
P2-F09 Release health scoring #69
P2-F10 Development cadence #73
P2-F11 Project maturity #74
P2-F12 Ecosystem Reach #118

Phase 3 — Integrations

These features deliver the OSS Health Score through additional channels, wrapping the shared analyzer module without duplicating logic.

Feature ID Feature Issues
P3-F01 Public REST API #120
P3-F02 GitHub Action
P3-F03 MCP Server
P3-F04 Embeddable badge #72
P3-F05 CLI tool #82
P3-F06 PR comment bot #83
P3-F07 VS Code extension #84
P3-F08 Webhook receiver #85

Phase 4 — Git provider support

A provider abstraction layer allows the analyzer to work with multiple Git hosting platforms.

Provider Status
GitHub Supported
GitLab Planned
Bitbucket Future
Gitea Future

Future / Backlog


Spec Ownership

Phase 1 features are shipped. Their requirements specs are frozen in this document (the [P1-F__] sections above). For Phase 2 and beyond, requirements specs live in GitHub issues — not in this document. This avoids duplication and keeps active specs where discussion happens.

Document responsibilities

Document Owns Contains
PRODUCT.md (this file) Product vision, architecture, API contract, accuracy policy Phase 1 specs (shipped, frozen). Phase 2+ summary tables with issue links
GitHub Issues Phase 2+ requirements specs Acceptance criteria, signals, scoring approach, open questions
DEVELOPMENT.md Implementation sequencing, workflow, DoD Feature order tables for each phase, SpecKit loop instructions
SpecKit specs (specs/NNN-*/) Technical contracts TypeScript interfaces, view props, data flow — generated during implementation

Feature development flow

GitHub Issue (requirements spec)
  │  "What to build, why, acceptance criteria"
  │
  ▼
/speckit.specify (reads issue as input)
  │  Generates specs/NNN-feature-name/ with technical contracts
  │
  ▼
/speckit.plan → /speckit.tasks → /speckit.implement
  │  Plan, break down, build
  │
  ▼
PR with test plan → merge

The GitHub issue is the input to /speckit.specify, not a duplicate of its output. The issue defines what and why; SpecKit generates how (TypeScript interfaces, view props, data flow contracts).

Development Workflow

See docs/DEVELOPMENT.md for the full SpecKit feature loop, Definition of Done, and phase-by-phase feature order.