Case study — 02

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

REVOOct 2025
github.com/yashchoudhary13/REVO
src/
manifest.json
vite.config.ts
content-script.tsx
background.ts
package.json
REVODONE
API calls−70%
Cache hits94%
ExportJSON
10:00

0:30

FULL REPO ANALYSIS
Developer Tools / Browser ExtensionSep — Oct 2025
01 — The systemSelect a stage to inspect

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
02 — ChallengeWhat stood in the way

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.

01

GitHub's REST API is rate-limited — naive fetching burns the budget on one large repo

02

MV3 service workers are ephemeral — no long-lived background state to lean on

03

GitHub's DOM isn't yours: it ships changes and navigates as an SPA without reloading

03 — SolutionDecisions and tradeoffs

The system is shaped by its constraints — rate limits, worker lifecycles, and someone else's DOM.

01

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.

02

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.

03

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.

04 — ArchitectureExpand the layers

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

05 — OutcomesMeasured, not promised
01

−70%

API calls

caching layer vs naive fetching

02

0s

Full analysis

down from ~10 minutes of manual reading

03

JSON

Structured export

LLM-ready output schema

04

MV3

Manifest V3

stateless service-worker architecture

06 — InterfaceProduct views
Repo signalsVIEW 01
TYPESCRIPT71%
JAVASCRIPT18%
CSS8%
OTHER3%
ANALYSISCOMPLETE — 0:3010:00 MANUAL
01The evaluation skim, quantified — structure, language, activity.
Structured exportVIEW 03
{
  "repo": "owner/project",
  "structure": {
    "entry_points": ["src/index.ts"],
    "modules": 24
  },
  "languages": { "typescript": 0.71 },
  "activity": {
    "cadence": "weekly",
    "contributors": 6
  },
  "generated_in": "30s"
}
03Built to be eaten by an LLM — the analysis composes onward.
Cache layerVIEW 02
  • 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%
02Second visit, near-zero network — the rate limit never notices.
07 — LearningsWhat the build taught
01

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.

02

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.

03

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.

Next case studyCommerce Platform / Client Work
03The MEXA restaurant's order pipeline rebuilt end to end — live in Ireland, confirmations land faster over WebSockets.
© 2026 Yash ChoudharyJaipur, IN--:--:-- IST