I hate writing PR descriptions.
Not because I'm lazy — I know what I changed. Articulating it clearly, in a format that helps reviewers, takes 10 extra minutes of context switching. Every. Single. Time.
So I built PRDraft — a GitHub App that reads your diff when you open a PR and posts a structured description automatically. 2-click install, zero config, no CLI.
Here's what 8 days of building looks like from scratch, solo, from Kerala, India.
Day 1–2: Does anyone actually care?
Before writing a single line of code I posted in GitHub Discussions and dropped a question on Dev.to:
"Who actually writes good PR descriptions consistently?"
Got real responses. Two that stuck:
- "Yes, real pain point especially on fast-moving teams"
- "I'd trust it if it accurately reflects the diff and I can edit before submitting"
That was enough. Building justified.
Day 3–5: Building the thing
Tech stack I landed on:
- Next.js (App Router) + Tailwind
- Supabase (PostgreSQL) for installs and PR event tracking
- Groq API (llama-3.3-70b-versatile) for AI generation — genuinely free, 14,400 requests/day, works in India
- Octokit for GitHub App integration
- Vercel for hosting
Why Groq instead of Claude or Gemini:
- Anthropic API costs money, no free tier
- Google Gemini free tier has limit:0 quota for India region — confirmed bug
- Groq is genuinely free and fast
Total infra cost: $0/month
The core flow:
User opens PR → GitHub sends webhook → verify signature →
fetch diff → send to Groq → post structured description back to PR
The generated description looks like this:
## What changed
- Added webhook signature verification using Octokit
- Introduced free tier cap logic (5 PRs/month) checked before incrementing
## Why
Prevents unauthorized webhook calls and limits free usage before billing is set up.
## How to test
- Open a PR on a repo where PRDraft is installed
- Check that the description is auto-populated within seconds
## Notes
Free tier cap is checked BEFORE incrementing pr_count to avoid off-by-one errors
Day 5: First external user
roshhellwett installed it, opened a PR, got a description within seconds.
Their feedback: "Works as expected — the structure is solid and actually saves time. Groq is noticeably fast. For complex PRs with scattered changes it can feel a bit generic — but as a starting point to edit from? Definitely useful."
That was the moment this stopped being a side project and started being a product.
Day 6–7: Bug fixes and distribution
Bugs I fixed:
- Free tier cap was incrementing BEFORE the check — off-by-one error meant users got 6 PRs, not 5
-
account_loginwas being overwritten as 'unknown' on every PR event — upsert was hitting the wrong fields - GitHub retries webhooks every 15s on timeout — PR #15 fired 38 times. Fixed with a unique constraint on
(installation_id, pr_number)
Distribution channels I tried:
- Dev.to — fully open, post live ✅
- Indie Hackers — post live, daily updates ✅
- GitHub Marketplace — submitted for review ✅
- Reddit — karma 3, blocked until Day 9
- Hacker News — karma -8, commenting daily to recover
Painful lesson: Every platform blocks new accounts. Don't assume channels are open.
Day 7: Dashboard
Built a full dashboard at /dashboard:
- Plan badge (Free / Pro)
- PRs used vs cap with a colour-coded progress bar
- Recent PR activity — repo, PR number, timestamp
- Upgrade CTA
- Installation info
GitHub automatically redirects users to the dashboard after install via the Setup URL — no OAuth needed.
Day 8: More dashboard improvements
Shipped today:
- Recent activity now shows PR titles alongside repo and PR number
- Every generated PR description now has a dashboard link in the footer — so anyone on the team can check usage without hunting for the URL
- Free tier cap now posts a comment directly on the PR when the limit is hit, instead of silently doing nothing
The payment provider saga
This is the part nobody talks about.
Building the product took days. Setting up payments is taking longer.
- Stripe — invite-only in India since 2024
- Lemon Squeezy — international payments blocked for individuals in India
- Gumroad — payout setup issues for Indian bank accounts
- Paddle — working on it
The product is ready to charge. The money pipe is the blocker.
Current numbers (Day 8)
| Metric | Value |
|---|---|
| Installs | 2 |
| Paid users | 0 |
| MRR | $0 |
| PRs described | 13 |
| Infra cost | $0/month |
What's next
- Get payment provider working (Paddle)
- Invite more beta users
- Reddit posts unlock ~Day 9
- HN karma grind back to positive
- Month 2: first paid conversion push
Try it
2-click install, no config, free for 5 PRs/month:
Landing page: prdraft.carrd.co
Building in public from Kerala, India. Following along on Indie Hackers → search PRDraft.
Top comments (0)