DEV Community

Twisted-Code'r
Twisted-Code'r

Posted on

I got tired of PRs that just said "fix" — so I built a GitHub App that writes the description for you

We've all seen it.

You open a pull request from a teammate — or your past self — and the description says:

"fix bug"

That's it. No context. No what changed. No why. You're now a code archaeologist trying to reverse-engineer intent from a diff.

I've been that person. I've also been on the reviewing end, nudging people repeatedly for context that should've been in the description from the start. It's death by a thousand tiny frustrations.


The real problem isn't laziness

Developers don't skip PR descriptions because they don't care. They skip them because by the time the code is done, switching context to write documentation feels like starting a second job. You've been deep in the problem for hours. Writing "what changed and why" in plain English requires a different gear entirely.

So most people don't. Or they write something just good enough to pass review, which ends up useless to anyone reading it six months later.


What I built

I'm a solo developer in Kerala, India, building PRDraft — a GitHub App that reads your PR diff and auto-writes a structured description. Two-click install, zero config.

When you open a PR, it:

  1. Fetches the diff
  2. Sends it to an LLM (Groq / llama-3.3-70b)
  3. Posts a structured description directly to your PR body

The output looks like this:

## What changed
Refactored the auth middleware to use JWT validation instead of session cookies.
Removed the legacy session store dependency.

## Why
Session-based auth was causing intermittent failures in the load-balanced setup.
JWT tokens eliminate the shared state problem entirely.

## How to test
- Log in with an existing account — confirm token is returned in response header
- Test expired token path — confirm 401 is returned correctly
Enter fullscreen mode Exit fullscreen mode

Not perfect every time. But dramatically better than "fix auth" — and it takes zero effort from the developer.


Stack (all free)

  • Next.js on Vercel
  • Supabase (PostgreSQL)
  • Groq API (free tier — 14,400 req/day)
  • Paddle for payments
  • GitHub App webhooks via Octokit

Total infra cost: $0/month. Built this in evenings over 4 weeks while learning most of it as I went.


The thing nobody tells you about building GitHub Apps

The hardest part wasn't the AI integration. It was webhook deduplication.

GitHub retries webhooks aggressively if your endpoint doesn't respond in time. I once had a single PR trigger 38 webhook calls. My PR count was wildly inflated, users were hitting the free tier cap immediately, and I had no idea why.

Fix: unique constraint on (installation_id, pr_number) in Supabase, plus a dedup guard before processing. The webhook still fires 38 times — but only the first one does anything.

If you're building on GitHub webhooks, add this early. Don't find out the hard way like I did.


Where it is now

  • Live at github.com/apps/prdraft
  • Free for first 5 PRs, then $9/month
  • 2 installs so far (one of which is me)
  • GitHub Marketplace listing submitted, waiting on review

No paid users yet. That's the next problem to solve.


Try it

If you're tired of writing PR descriptions — or tired of reviewing PRs with no context — install it and let me know what the output looks like on your actual diffs.

Feedback at this stage means everything. I read every reply.

Install PRDraft — free for 5 PRs

Review


Building in public. Day 10 of however long this takes.

Top comments (0)