REVO
A Manifest V3 Chrome extension that injects a React analysis panel directly into GitHub. One click turns an unfamiliar repository into a structured brief — and exports it as JSON an LLM can summarize.
- Status
- Shipped · Public build
- Timeline
- Sep — Oct 2025
- Role
- Solo build
- Stack
- React · Vite · Manifest V3 · GitHub REST API
Public build
github.com/yashchoudhary13
0:30
FULL REPO ANALYSISStage 01 — GitHub Page
The extension watches GitHub's client-side navigation and recognizes repository routes — including SPA transitions that never trigger a page load.
- Repo URL pattern matching across SPA navigations
- Activates only on repository pages — zero footprint elsewhere
The extension watches GitHub's client-side navigation and recognizes repository routes — including SPA transitions that never trigger a page load.
- Repo URL pattern matching across SPA navigations
- Activates only on repository pages — zero footprint elsewhere
Ten minutes per repo doesn't scale.
Evaluating an unfamiliar repository means reading file trees, commit history and docs before you learn whether it deserved the time. Automating that inside Chrome's Manifest V3 rules — on a site you don't control — is the hard part.
GitHub's REST API is rate-limited — naive fetching burns the budget on one large repo
MV3 service workers are ephemeral — no long-lived background state to lean on
GitHub's DOM isn't yours: it ships changes and navigates as an SPA without reloading
The system is shaped by its constraints — rate limits, worker lifecycles, and someone else's DOM.
Cache before fetch
Every API response lands in the cache layer first; every read checks it before touching the network. That single discipline cut API calls by 70%.
Tradeoff — A staleness window on repo metadata — harmless for evaluation, fatal to avoid for rate limits.
Embrace the MV3 lifecycle
Instead of fighting service-worker teardown, every handler is stateless and every piece of state lives in extension storage. The worker can die mid-session and nothing is lost.
Tradeoff — No in-memory shortcuts — every handler pays a storage read.
Export for machines, not just eyes
The analysis isn't a dead-end UI. Structured JSON export means an LLM — or any other tool — can pick up exactly where the panel stops.
Tradeoff — Schema discipline up front, before the first export existed.
The piece living inside GitHub's pages: route detection, panel mount, render.
Route watcher
SPA-aware repo detection
Panel mount
isolated from GitHub's styles
Analysis UI
React, rendered in-page
−70%
API calls
caching layer vs naive fetching
0s
Full analysis
down from ~10 minutes of manual reading
JSON
Structured export
LLM-ready output schema
MV3
Manifest V3
stateless service-worker architecture
{ "repo": "owner/project", "structure": { "entry_points": ["src/index.ts"], "modules": 24 }, "languages": { "typescript": 0.71 }, "activity": { "cadence": "weekly", "contributors": 6 }, "generated_in": "30s" }
- 00.00GET /repos/{owner}/{repo} — MISS · fetched
- 00.21GET /repos/{repo}/languages — MISS · fetched
- 00.40GET /repos/{repo}/commits — MISS · fetched
- 04.12GET /repos/{owner}/{repo} — HIT · storage
- 04.12GET /repos/{repo}/languages — HIT · storage
- 04.13GET /repos/{repo}/commits — HIT · storage
- 04.13network calls saved: 70%
Other people's DOM is a hostile runtime
GitHub ships UI changes without asking and navigates without reloading. Defensive selectors, SPA route observation and an isolated mount were the difference between a tool and a toy.
The fastest API call is the one you never make
The cache layer did more for REVO than any clever fetching strategy — 70% of the network simply disappeared, and the rate limit went from constraint to footnote.
Build outputs machines can eat
The JSON export turned REVO from a panel you read into a pipeline stage. Structured output is what lets a small tool compose into bigger workflows.