<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Bennett Schwartz</title>
    <description>The latest articles on Forem by Bennett Schwartz (@gustycube).</description>
    <link>https://forem.com/gustycube</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2835205%2Ff83057e6-141d-4a16-baca-2e8c7bde2269.png</url>
      <title>Forem: Bennett Schwartz</title>
      <link>https://forem.com/gustycube</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/gustycube"/>
    <language>en</language>
    <item>
      <title>I built an agent learning system that performs way better than RAG</title>
      <dc:creator>Bennett Schwartz</dc:creator>
      <pubDate>Tue, 17 Mar 2026 05:03:43 +0000</pubDate>
      <link>https://forem.com/gustycube/i-built-an-agent-learning-system-that-performs-way-better-than-rag-3nho</link>
      <guid>https://forem.com/gustycube/i-built-an-agent-learning-system-that-performs-way-better-than-rag-3nho</guid>
      <description>&lt;p&gt;Most AI agents are amnesiac. Every new conversation, every new task, they start from zero. You feed them context through a RAG pipeline, stuff their window with documents, and hope retrieval does the heavy lifting. It works, kind of. Until the agent forgets what it learned two sessions ago, or confidently repeats a mistake it already made last week, or cannot distinguish between a fact that was true once and a fact that is still true now.&lt;/p&gt;

&lt;p&gt;I kept running into this wall. And eventually I stopped patching around it and started thinking about the actual problem.&lt;/p&gt;

&lt;p&gt;The result is &lt;a href="https://github.com/GustyCube/membrane" rel="noopener noreferrer"&gt;Membrane&lt;/a&gt;: an open-source, typed, revisable memory substrate for long-lived LLM agents.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Problem with "Memory" in Agentic Systems Today
&lt;/h2&gt;

&lt;p&gt;There are basically two paradigms for agent memory right now:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. The context window.&lt;/strong&gt; Your agent gets a fresh window every turn. Everything it "knows" has to be in those tokens. It is fast, it is simple, and it completely resets when the conversation ends. There is no continuity. There is no learning.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Append-only RAG.&lt;/strong&gt; You dump everything into a vector store and retrieve it later. This is better. You get retrieval across sessions. But here is the problem: facts go stale, procedures drift, and you have no mechanism to &lt;em&gt;revise&lt;/em&gt; what is in there safely. You can add more, but you cannot cleanly say "that old thing is wrong, use this instead." The old thing just sits there, waiting to be retrieved.&lt;/p&gt;

&lt;p&gt;Neither of these is memory in any meaningful sense. They are storage. Real memory is selective. Real memory is revisable. Real memory decays when it stops being useful and gets reinforced when it keeps working.&lt;/p&gt;

&lt;p&gt;That is what I wanted to build.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Membrane Actually Does
&lt;/h2&gt;

&lt;p&gt;Membrane is a long-lived daemon (or embeddable Go library) that sits between your orchestration layer and your model calls. It gives your agents five distinct memory types, each with its own schema and lifecycle:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Episodic&lt;/strong&gt; records capture raw experience: tool calls, observations, errors. They are immutable once ingested. Ground truth.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Working&lt;/strong&gt; memory tracks in-flight task state across a session.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Semantic&lt;/strong&gt; records are stable facts and preferences, the things the agent "knows" about the world or the user.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Competence&lt;/strong&gt; records are learned procedures with tracked success rates. Not just what happened, but &lt;em&gt;how&lt;/em&gt; to solve a class of problem.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Plan graphs&lt;/strong&gt; are reusable solution structures with dependencies and checkpoints, like a solved map for recurring multi-step tasks.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The flow looks like this: you ingest events and observations during execution, background consolidation promotes episodic traces into semantic facts and competence records, and retrieval pulls relevant memory back out filtered by trust level and salience rank.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Part That Makes It Different: Revision
&lt;/h2&gt;

&lt;p&gt;This is the thing I am most proud of.&lt;/p&gt;

&lt;p&gt;Every other memory system I looked at treated its store as append-only. Membrane does not. It has five explicit revision operations:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Supersede&lt;/strong&gt; replaces a record with a newer, corrected version.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fork&lt;/strong&gt; creates a conditional variant of a record for a different context.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Retract&lt;/strong&gt; marks a record as no longer valid.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Merge&lt;/strong&gt; consolidates multiple records into one.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Contest&lt;/strong&gt; flags a record as disputed when conflicting evidence appears.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Every one of these operations produces a full audit trail. You always know what changed, when, and why. The revision chain is part of the record's identity.&lt;/p&gt;

&lt;p&gt;This means an agent can actually learn and correct itself over time, without the old bad information silently contaminating future retrievals.&lt;/p&gt;




&lt;h2&gt;
  
  
  Trust-Aware Retrieval
&lt;/h2&gt;

&lt;p&gt;One thing I did not expect to care this much about when I started was access control. But when you have agents operating in real environments with real sensitive data, you need it.&lt;/p&gt;

&lt;p&gt;Membrane has five sensitivity levels for records: public, low, medium, high, and hyper. Retrieval is trust-gated: when you request memory, you pass a trust context that specifies the maximum sensitivity level you are authorized for. Records above your threshold come back redacted, metadata only, no payload.&lt;/p&gt;

&lt;p&gt;This makes it possible to run the same agent across different security contexts without a separate memory store for each one.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Numbers
&lt;/h2&gt;

&lt;p&gt;The eval suite is thorough. The current results on a vector-aware end-to-end run:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Recall@k&lt;/strong&gt;: 1.000&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Precision@k&lt;/strong&gt;: 0.267&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MRR@k&lt;/strong&gt;: 0.956&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;NDCG@k&lt;/strong&gt;: 0.955&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These are not hand-tuned benchmarks. They are regression guards. The suite covers memory type handling, revision semantics, decay curves, trust-gated retrieval, competence learning, plan graph operations, episodic consolidation, observability metrics, system invariants, and gRPC endpoint coverage. If something breaks, these catch it.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Observability You Actually Want
&lt;/h2&gt;

&lt;p&gt;Membrane exposes a &lt;code&gt;GetMetrics&lt;/code&gt; endpoint that gives you a point-in-time snapshot of things like retrieval usefulness (how often retrieved records actually get reinforced), competence success rate, plan reuse frequency, and revision rate. You can actually watch your agent get better over time, rather than guessing.&lt;/p&gt;




&lt;h2&gt;
  
  
  Who It Is For
&lt;/h2&gt;

&lt;p&gt;If you are building:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Long-lived agents that need continuity across sessions&lt;/li&gt;
&lt;li&gt;Systems where incorrect facts need to be corrected, not just buried&lt;/li&gt;
&lt;li&gt;Multi-agent setups where trust and access control matter&lt;/li&gt;
&lt;li&gt;Anything where you want the agent to genuinely improve its &lt;em&gt;procedures&lt;/em&gt;, not just retrieve more text&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;...then Membrane is worth a look.&lt;/p&gt;

&lt;p&gt;It ships with a gRPC API, a TypeScript client SDK (&lt;code&gt;@gustycube/membrane&lt;/code&gt;), a Python client, and can run either as a standalone daemon or embedded as a Go library. The encryption at rest (SQLCipher), optional TLS, bearer token auth, and rate limiting are all there out of the box. This is not a toy.&lt;/p&gt;




&lt;h2&gt;
  
  
  Try It
&lt;/h2&gt;

&lt;p&gt;The repo is at &lt;a href="https://github.com/GustyCube/membrane" rel="noopener noreferrer"&gt;github.com/GustyCube/membrane&lt;/a&gt;. The README covers the full API, architecture, configuration, and eval setup. There is also full documentation available via VitePress in the &lt;code&gt;docs/&lt;/code&gt; directory.&lt;/p&gt;

&lt;p&gt;If you are building anything in the agent memory space, I would genuinely love to hear how you think about these problems. Open an issue, open a PR, or just star the repo if you want to follow along.&lt;/p&gt;

&lt;p&gt;This is still early. The paradigm is still being figured out across the whole field. But I think selective, revisable, typed memory is the right direction, and Membrane is my bet on that.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;&lt;a href="https://gustycube.com" rel="noopener noreferrer"&gt;Bennett Schwartz&lt;/a&gt; | &lt;a href="https://github.com/GustyCube/membrane" rel="noopener noreferrer"&gt;github.com/GustyCube/membrane&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>openclaw</category>
      <category>agents</category>
      <category>rag</category>
    </item>
    <item>
      <title>I built a global leaderboard that ranks developers by their all-time GitHub commits</title>
      <dc:creator>Bennett Schwartz</dc:creator>
      <pubDate>Fri, 13 Mar 2026 23:45:38 +0000</pubDate>
      <link>https://forem.com/gustycube/i-built-a-global-leaderboard-that-ranks-developers-by-their-all-time-github-commits-e8c</link>
      <guid>https://forem.com/gustycube/i-built-a-global-leaderboard-that-ranks-developers-by-their-all-time-github-commits-e8c</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjx964wc1p6c0jg381if8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjx964wc1p6c0jg381if8.png" alt=" " width="800" height="598"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ever wondered how your commit count stacks up against other developers? I built &lt;a href="https://ghcommits.com" rel="noopener noreferrer"&gt;ghcommits.com&lt;/a&gt; — a public leaderboard that ranks&lt;br&gt;
  developers by their all-time GitHub commits.&lt;/p&gt;
&lt;h2&gt;
  
  
  What it does
&lt;/h2&gt;

&lt;p&gt;Connect your GitHub account, and the app counts every commit you've ever made (public + private repos, including org contributions) using GitHub's GraphQL&lt;br&gt;
  API. You get:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;A global ranking&lt;/strong&gt; with your percentile (e.g. "Rank #42 · Top 3%")&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A profile page&lt;/strong&gt; at &lt;code&gt;ghcommits.com/u/your-username&lt;/code&gt; with your stats&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;An embeddable badge&lt;/strong&gt; for your README showing your rank&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A compare tool&lt;/strong&gt; to go head-to-head with other developers&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Commit growth tracking&lt;/strong&gt; over time with a visual chart&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  The badge
&lt;/h2&gt;

&lt;p&gt;Once you sign up, you get an SVG badge you can drop in any README:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5ya2u7pi5tlcwx4tffle.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5ya2u7pi5tlcwx4tffle.png" alt=" " width="800" height="71"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="p"&gt;![&lt;/span&gt;&lt;span class="nv"&gt;GitHub Commits Badge&lt;/span&gt;&lt;span class="p"&gt;](&lt;/span&gt;&lt;span class="sx"&gt;https://ghcommits.com/api/badge/YOUR_USERNAME.svg&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;](https://ghcommits.com/u/YOUR_USERNAME)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It updates automatically — no CI pipeline needed. The badge links to your profile page where visitors can see your full stats and sign up themselves.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How it works under the hood&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Next.js 16 on Cloudflare Workers for edge-rendered pages&lt;/li&gt;
&lt;li&gt;PostgreSQL (Neon) with Hyperdrive connection pooling&lt;/li&gt;
&lt;li&gt;GitHub OAuth — tokens are AES-encrypted at rest&lt;/li&gt;
&lt;li&gt;GitHub's GraphQL API — queries contribution data in yearly windows from account creation to present, then does incremental delta updates every 3 days&lt;/li&gt;
&lt;li&gt;GitHub Primer design system for the UI (the same components GitHub uses)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Commit counting happens in two phases:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;First connection: walks yearly windows from your GitHub account creation date to now, summing totalCommitContributions + restrictedContributionsCount&lt;/li&gt;
&lt;li&gt;Every 3 days: only queries the delta since last check&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The leaderboard also has a public REST API with cursor-based pagination, rate limiting, and edge caching — so you can build on top of it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Features I'm most proud of&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Compare tool — Visit /compare/user1/user2 to see a head-to-head breakdown with a bar chart, commit difference callout, and shareable URL with Open Graph&lt;br&gt;
metadata.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Streaming onboarding — When you first connect, the app streams your commit counting progress in real-time using Server-Sent Events. You see a progress bar&lt;br&gt;
ticking through each year of your GitHub history.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Time-based leaderboards — Besides the all-time ranking, there's a "Recent Activity" tab that ranks developers by commits gained in the last 90 days, 6&lt;br&gt;
months, or year.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;It's open source&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The whole thing is MIT licensed: &lt;a href="https://github.com/GustyCube/GithubCommitsLeaderboard" rel="noopener noreferrer"&gt;https://github.com/GustyCube/GithubCommitsLeaderboard&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can self-host it for your team or org if you want a private leaderboard. The README has full setup instructions for local dev and Cloudflare Workers&lt;br&gt;
  deployment.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Try it out&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Head to &lt;a href="https://ghcommits.com" rel="noopener noreferrer"&gt;https://ghcommits.com&lt;/a&gt;, connect your GitHub, and see where you rank. Takes about 30 seconds.&lt;/p&gt;

&lt;p&gt;If you find it interesting, drop a badge in your README — it's a fun conversation starter on your profile.&lt;/p&gt;

</description>
      <category>github</category>
      <category>opensource</category>
      <category>webdev</category>
      <category>website</category>
    </item>
    <item>
      <title>I built a global leaderboard that ranks developers by their all-time GitHub commits</title>
      <dc:creator>Bennett Schwartz</dc:creator>
      <pubDate>Fri, 13 Mar 2026 23:45:38 +0000</pubDate>
      <link>https://forem.com/gustycube/i-built-a-global-leaderboard-that-ranks-developers-by-their-all-time-github-commits-1cn6</link>
      <guid>https://forem.com/gustycube/i-built-a-global-leaderboard-that-ranks-developers-by-their-all-time-github-commits-1cn6</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjx964wc1p6c0jg381if8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjx964wc1p6c0jg381if8.png" alt=" " width="800" height="598"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ever wondered how your commit count stacks up against other developers? I built &lt;a href="https://ghcommits.com" rel="noopener noreferrer"&gt;ghcommits.com&lt;/a&gt; — a public leaderboard that ranks&lt;br&gt;
  developers by their all-time GitHub commits.&lt;/p&gt;
&lt;h2&gt;
  
  
  What it does
&lt;/h2&gt;

&lt;p&gt;Connect your GitHub account, and the app counts every commit you've ever made (public + private repos, including org contributions) using GitHub's GraphQL&lt;br&gt;
  API. You get:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;A global ranking&lt;/strong&gt; with your percentile (e.g. "Rank #42 · Top 3%")&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A profile page&lt;/strong&gt; at &lt;code&gt;ghcommits.com/u/your-username&lt;/code&gt; with your stats&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;An embeddable badge&lt;/strong&gt; for your README showing your rank&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A compare tool&lt;/strong&gt; to go head-to-head with other developers&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Commit growth tracking&lt;/strong&gt; over time with a visual chart&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  The badge
&lt;/h2&gt;

&lt;p&gt;Once you sign up, you get an SVG badge you can drop in any README:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5ya2u7pi5tlcwx4tffle.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5ya2u7pi5tlcwx4tffle.png" alt=" " width="800" height="71"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="p"&gt;![&lt;/span&gt;&lt;span class="nv"&gt;GitHub Commits Badge&lt;/span&gt;&lt;span class="p"&gt;](&lt;/span&gt;&lt;span class="sx"&gt;https://ghcommits.com/api/badge/YOUR_USERNAME.svg&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;](https://ghcommits.com/u/YOUR_USERNAME)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It updates automatically — no CI pipeline needed. The badge links to your profile page where visitors can see your full stats and sign up themselves.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How it works under the hood&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Next.js 16 on Cloudflare Workers for edge-rendered pages&lt;/li&gt;
&lt;li&gt;PostgreSQL (Neon) with Hyperdrive connection pooling&lt;/li&gt;
&lt;li&gt;GitHub OAuth — tokens are AES-encrypted at rest&lt;/li&gt;
&lt;li&gt;GitHub's GraphQL API — queries contribution data in yearly windows from account creation to present, then does incremental delta updates every 3 days&lt;/li&gt;
&lt;li&gt;GitHub Primer design system for the UI (the same components GitHub uses)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Commit counting happens in two phases:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;First connection: walks yearly windows from your GitHub account creation date to now, summing totalCommitContributions + restrictedContributionsCount&lt;/li&gt;
&lt;li&gt;Every 3 days: only queries the delta since last check&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The leaderboard also has a public REST API with cursor-based pagination, rate limiting, and edge caching — so you can build on top of it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Features I'm most proud of&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Compare tool — Visit /compare/user1/user2 to see a head-to-head breakdown with a bar chart, commit difference callout, and shareable URL with Open Graph&lt;br&gt;
metadata.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Streaming onboarding — When you first connect, the app streams your commit counting progress in real-time using Server-Sent Events. You see a progress bar&lt;br&gt;
ticking through each year of your GitHub history.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Time-based leaderboards — Besides the all-time ranking, there's a "Recent Activity" tab that ranks developers by commits gained in the last 90 days, 6&lt;br&gt;
months, or year.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;It's open source&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The whole thing is MIT licensed: &lt;a href="https://github.com/GustyCube/GithubCommitsLeaderboard" rel="noopener noreferrer"&gt;https://github.com/GustyCube/GithubCommitsLeaderboard&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can self-host it for your team or org if you want a private leaderboard. The README has full setup instructions for local dev and Cloudflare Workers&lt;br&gt;
  deployment.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Try it out&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Head to &lt;a href="https://ghcommits.com" rel="noopener noreferrer"&gt;https://ghcommits.com&lt;/a&gt;, connect your GitHub, and see where you rank. Takes about 30 seconds.&lt;/p&gt;

&lt;p&gt;If you find it interesting, drop a badge in your README — it's a fun conversation starter on your profile.&lt;/p&gt;

</description>
      <category>github</category>
      <category>opensource</category>
      <category>webdev</category>
      <category>website</category>
    </item>
  </channel>
</rss>
