# Reckoning – GitHub Feedback Companion

> Source: <https://github.com/SuperThinking/reckoning>
> Published: 2026-05-27 07:29:46+00:00

A client-side companion that turns your GitHub activity into a feedback-cycle self-review.

Pull every PR you authored, reviewed, or commented on, and every issue you opened or
participated in within a date range. Then, optionally, point an AI provider at the data to
generate a structured self-review with themes, headline accomplishments, and STAR stories — or
ask freeform questions like *"What auth work did I do?"* or *"Which PRs took longest to merge?"*

**Everything runs in your browser.** No backend, no telemetry, no servers I control.
Your GitHub PAT and AI key are sent directly from your browser to the respective APIs and
nowhere else.

```
npm install
npm run dev
```

Open the URL Vite prints (usually `http://localhost:5173`

).

```
npm run build
```

The build emits a static site to `./dist`

. Drop that folder onto any static host.

A ready-to-use Actions workflow lives at `.github/workflows/deploy.yml`

. To turn it on:

- Push this repo to GitHub.
- On GitHub:
**Settings → Pages → Build and deployment → Source: GitHub Actions**. - Push to
`main`

(or trigger the workflow manually). The action builds and publishes to Pages. - The site appears at
`https://<your-username>.github.io/<repo-name>/`

.

The Vite config uses `base: './'`

so the build works from any subpath without configuration.
A `.nojekyll`

is included so Pages doesn't strip files starting with `_`

.

**Netlify / Vercel / Cloudflare Pages**— point them at the repo, build command`npm run build`

, publish directory`dist`

**Self-hosted**—`npx serve dist`

or any nginx/Caddy static config

**Contributed**— PRs you authored (`is:pr author:USER`

)**Reviewed**— PRs you formally reviewed or left comments on (`reviewed-by:USER`

∪`commenter:USER`

)**Issues**— Issues you opened or participated in (`is:issue involves:USER`

)

Each view shows a stat count, expandable cards, and direct links to GitHub.

When an AI key is present, each view gets a "Generate" button that produces:

- Headline accomplishments with PR/issue links
- 2–4 themes grouping related work
- "By the numbers" paragraph
- One STAR-format story for a standout item

Plus a global Q&A bar that answers freeform questions against all your cached contributions.

**Anthropic**(Claude Sonnet 4.5)** OpenAI**(GPT-4o)** Google**(Gemini 2.5 Pro)

Bring your own key for any of them.

Create a [Personal Access Token](https://github.com/settings/tokens/new?scopes=repo,read:org,read:user&description=Reckoning%20Feedback%20Companion)
with these scopes:

`repo`

— read your private repos and orgs (use`public_repo`

if you only need public access)`read:org`

— see contributions in org repos`read:user`

— read your own profile for the username fallback

A **fine-grained PAT** scoped to read-only on the orgs/repos you care about is the most
secure option.

SSO orgs:If any of your orgs use SAML/SSO, go back to the[tokens page]after creating the token, clickConfigure SSOnext to it, and authorize each org. Without this, contributions in those orgs are silently missing from results.

**No server.** Everything is a static SPA. Your tokens go from your browser straight to`api.github.com`

and your AI provider's API.**Storage.** Keys live in`sessionStorage`

by default (cleared when the tab closes). The "Remember on this device" checkbox switches to`localStorage`

. The "Clear data" button on the setup screen wipes both.**No analytics, no telemetry, no third-party JS** beyond Google Fonts (loaded once at startup).

- GitHub's search API caps results at
**1,000 per query**. For very long windows on a very active user, narrow the date range or filter by repo. - GraphQL is used wherever cheaper than REST, but a power-user query against many repos can still consume a few hundred rate-limit points. The progress screen shows your remaining quota.
- AI calls truncate item descriptions to keep prompts compact. For very long PRs, follow the links in the AI's output for full context.

```
src/
  App.jsx                  ← Top-level orchestration of the four screens
  main.jsx                 ← Vite entry
  index.css                ← Tailwind + custom typography
  components/
    ui.jsx                 ← Shared primitives (Button, Input, Logo, Section)
    SetupScreen.jsx        ← Token entry + AI provider selection
    FilterScreen.jsx       ← Date range + repo type-ahead
    FetchProgress.jsx      ← Animated fetch progress
    ResultsScreen.jsx      ← Three-tab results + AI summaries + Q&A
  lib/
    storage.js             ← localStorage/sessionStorage wrapper
    github.js              ← GraphQL queries + pagination
    ai.js                  ← Provider-agnostic AI calls
```

MIT — do whatever you want with it.
