{"id":51524781,"url":"https://github.com/superthinking/reckoning","last_synced_at":"2026-07-08T20:01:09.710Z","repository":{"id":362337645,"uuid":"1250140383","full_name":"SuperThinking/reckoning","owner":"SuperThinking","description":"GitHub Feedback Companion","archived":false,"fork":false,"pushed_at":"2026-06-03T18:16:29.000Z","size":87,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-03T20:10:47.082Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://superthinking.github.io/reckoning/","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/SuperThinking.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-26T10:45:30.000Z","updated_at":"2026-06-03T18:17:39.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/SuperThinking/reckoning","commit_stats":null,"previous_names":["superthinking/reckoning"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/SuperThinking/reckoning","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SuperThinking%2Freckoning","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SuperThinking%2Freckoning/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SuperThinking%2Freckoning/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SuperThinking%2Freckoning/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/SuperThinking","download_url":"https://codeload.github.com/SuperThinking/reckoning/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SuperThinking%2Freckoning/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35276781,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-08T02:00:06.796Z","response_time":61,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-07-08T20:01:08.634Z","updated_at":"2026-07-08T20:01:09.700Z","avatar_url":"https://github.com/SuperThinking.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Reckoning — GitHub Feedback Companion\n\n\n\u003cimg width=\"1449\" height=\"1249\" alt=\"image\" src=\"https://github.com/user-attachments/assets/0e5d9178-6cc2-46d5-baf1-c5139dd525a9\" /\u003e\n\n\n\nA client-side companion that turns your GitHub activity into a feedback-cycle self-review.\n\nPull every PR you authored, reviewed, or commented on, and every issue you opened or\nparticipated in within a date range. Then, optionally, point an AI provider at the data to\ngenerate a structured self-review with themes, headline accomplishments, and STAR stories — or\nask freeform questions like _\"What auth work did I do?\"_ or _\"Which PRs took longest to merge?\"_\n\n**Everything runs in your browser.** No backend, no telemetry, no servers I control.\nYour GitHub PAT and AI key are sent directly from your browser to the respective APIs and\nnowhere else.\n\n---\n\n## Quick start\n\n```bash\nnpm install\nnpm run dev\n```\n\nOpen the URL Vite prints (usually `http://localhost:5173`).\n\n## Build \u0026 deploy\n\n```bash\nnpm run build\n```\n\nThe build emits a static site to `./dist`. Drop that folder onto any static host.\n\n### Deploy to GitHub Pages (one-time setup)\n\nA ready-to-use Actions workflow lives at `.github/workflows/deploy.yml`. To turn it on:\n\n1. Push this repo to GitHub.\n2. On GitHub: **Settings → Pages → Build and deployment → Source: GitHub Actions**.\n3. Push to `main` (or trigger the workflow manually). The action builds and publishes to Pages.\n4. The site appears at `https://\u003cyour-username\u003e.github.io/\u003crepo-name\u003e/`.\n\nThe Vite config uses `base: './'` so the build works from any subpath without configuration.\nA `.nojekyll` is included so Pages doesn't strip files starting with `_`.\n\n### Other hosts\n\n- **Netlify / Vercel / Cloudflare Pages** — point them at the repo, build command `npm run build`,\n  publish directory `dist`\n- **Self-hosted** — `npx serve dist` or any nginx/Caddy static config\n\n## How it works\n\n### Three views\n\n1. **Contributed** — PRs you authored (`is:pr author:USER`)\n2. **Reviewed** — PRs you formally reviewed or left comments on (`reviewed-by:USER` ∪ `commenter:USER`)\n3. **Issues** — Issues you opened or participated in (`is:issue involves:USER`)\n\nEach view shows a stat count, expandable cards, and direct links to GitHub.\n\n### AI summarization\n\nWhen an AI key is present, each view gets a \"Generate\" button that produces:\n\n- Headline accomplishments with PR/issue links\n- 2–4 themes grouping related work\n- \"By the numbers\" paragraph\n- One STAR-format story for a standout item\n\nPlus a global Q\u0026A bar that answers freeform questions against all your cached contributions.\n\n### Impact notes\n\nEvery PR/issue card has an **Add impact note** button. Jot down the *why this mattered* line\nin your own words (\"cut p99 latency by 40%\", \"unblocked the iOS team for two sprints\") and\nthe AI weights those notes heavily when summarizing — they become the source of truth for\nsignificance instead of the AI guessing from titles. Notes persist across sessions per the\n\"Remember on this device\" setting.\n\n### Export for external AI tools\n\nNo AI key? The \"Take it elsewhere\" links next to each view's item count let you:\n\n- **Copy as markdown** — a structured, ready-to-paste prompt for ChatGPT / Claude.ai /\n  Gemini, with impact notes inlined as blockquotes.\n- **Download JSON** — the raw structured data for scripting or other tooling.\n\nExports respect the current filters, so you can scope the data before sharing.\n\n### Supported AI providers\n\n- **Anthropic** (Claude Sonnet 4.5)\n- **OpenAI** (GPT-4o)\n- **Google** (Gemini 2.5 Pro)\n\nBring your own key for any of them.\n\n## Required GitHub token scopes\n\nCreate a [Personal Access Token](https://github.com/settings/tokens/new?scopes=repo,read:org,read:user\u0026description=Reckoning%20Feedback%20Companion)\nwith these scopes:\n\n- `repo` — read your private repos and orgs (use `public_repo` if you only need public access)\n- `read:org` — see contributions in org repos\n- `read:user` — read your own profile for the username fallback\n\nA **fine-grained PAT** scoped to read-only on the orgs/repos you care about is the most\nsecure option.\n\n\u003e **SSO orgs:** If any of your orgs use SAML/SSO, go back to the\n\u003e [tokens page](https://github.com/settings/tokens) after creating the token, click\n\u003e **Configure SSO** next to it, and authorize each org. Without this, contributions in those\n\u003e orgs are silently missing from results.\n\n## Privacy \u0026 data handling\n\n- **No server.** Everything is a static SPA. Your tokens go from your browser straight to\n  `api.github.com` and your AI provider's API.\n- **Storage.** Keys live in `sessionStorage` by default (cleared when the tab closes). The\n  \"Remember on this device\" checkbox switches to `localStorage`. The \"Clear data\" button on the\n  setup screen wipes both.\n- **Analytics.** The hosted deployment includes [Cloudflare Web Analytics](https://www.cloudflare.com/web-analytics/),\n  a cookieless privacy-friendly beacon that records aggregate page views and hostname only —\n  no user identifiers, no behavior tracking, no cross-site cookies. It's loaded from\n  `static.cloudflareinsights.com`. If you self-host, remove the `\u003cscript\u003e` tag at the bottom\n  of `index.html` to drop it entirely.\n- **No other third-party JS** beyond Google Fonts (loaded once at startup).\n\n## Limits to know about\n\n- GitHub's search API caps results at **1,000 per query**. For very long windows on a very\n  active user, narrow the date range or filter by repo.\n- GraphQL is used wherever cheaper than REST, but a power-user query against many repos can\n  still consume a few hundred rate-limit points. The progress screen shows your remaining quota.\n- AI calls truncate item descriptions to keep prompts compact. For very long PRs, follow the\n  links in the AI's output for full context.\n\n## Project structure\n\n```\nsrc/\n  App.jsx                  ← Top-level orchestration of the four screens\n  main.jsx                 ← Vite entry\n  index.css                ← Tailwind + custom typography\n  components/\n    ui.jsx                 ← Shared primitives (Button, Input, Logo, Modal, Markdown)\n    SetupScreen.jsx        ← Token entry + AI provider selection\n    FilterScreen.jsx       ← Date range + repo type-ahead\n    FetchProgress.jsx      ← Animated fetch progress\n    ResultsScreen.jsx      ← Composes the results view (tabs, header, layout)\n    results/\n      ContributionCard.jsx ← Single PR/issue card + impact-note UI\n      FilterBar.jsx        ← Status/repo/query/sort filter + applyFilters\n      SummaryPanel.jsx     ← AI summary generation + display\n      QAPanel.jsx          ← Cross-tab freeform Q\u0026A\n      ExportBar.jsx        ← Copy-as-markdown / Download-JSON\n      AiSettingsModal.jsx  ← Provider + key settings\n      feedbackData.js      ← Pure helpers: prompt builders, export formatters\n  lib/\n    storage.js             ← localStorage/sessionStorage wrapper + JSON helpers\n    github.js              ← GraphQL queries + pagination\n    ai.js                  ← Provider-agnostic AI calls (with markdown-fence unwrapping)\n```\n\n## License\n\nMIT — do whatever you want with it.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsuperthinking%2Freckoning","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsuperthinking%2Freckoning","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsuperthinking%2Freckoning/lists"}