TL;DR: I was the bottleneck on every pull request. Reviews waited days for me. So I built a PR inbox for my phone. AI summarizes each diff. I swipe right to approve. Built with Expo and Supabase. Costs $0. This is post one of the build-in-public series. I am the problem. Let me say that first. Every PR on my projects waited for me. Contributors opened good work. Then silence. For days. Not because the code was bad. Because reviewing code on a laptop feels like homework. And I kept not doing my homework. The pattern was embarrassing. Someone opens a PR on Monday. I tell myself I will review it after dinner. Dinner becomes a show. The show becomes sleep. Tuesday looks exactly like Monday. By Friday the contributor has moved on with their life. The PR has merge conflicts. Everyone loses. I tried to fix this with discipline. That lasted four days. Discipline is a terrible dependency. It has no SLA. It goes down on weekends. So I fixed it with software instead. I built a PR inbox for my phone. The idea is stupidly simple. Your email has an inbox. Your texts have an inbox. Your code reviews deserve one too. Open the app. See every PR waiting on you. Swipe right to approve. Swipe left to request changes. Done from the couch. The trick is the summary. Nobody wants to read a raw diff on a phone. Raw diffs on a five-inch screen are a punishment. So each PR gets a plain-language summary. What changed. Why it changed. What could break. You read three sentences instead of three hundred lines. Then you decide. AI writes the summary. You make the call. That division of labor matters to me. The model explains. The human decides. I never wanted auto-merge. Auto-merge is how you deploy a disaster at 2am. I wanted faster understanding, not zero judgment. Here is how a review goes now. Phone buzzes. New PR from a contributor. I open it while waiting for coffee. The summary says it refactors the auth callback and touches two files. Risk looks low. I glance at the actual diff for the risky hunk. Looks fine. Swipe right. Merged before my coffee is ready. Total time: ninety seconds. Old way: three days of guilt plus twenty minutes of context-switching. This is not a small improvement. This is a different life. Let me talk about the stack. Because the stack is the other point of this post. The whole thing costs zero dollars. Expo for the app. Supabase for auth and database. GitHub webhooks for PR events. Vercel for the landing page. Every tier is free. My monthly infrastructure bill is the price of nothing. Expo gets mocked a lot. I used to mock it. Then I shipped with it. Over-the-air updates alone are worth it. I push a fix and users get it without an app store review. When your QA team is you, that speed is everything. Supabase handles the boring parts. Auth. Postgres. Row-level security. I did not want to run a server. I have run servers before. They page you at night. Supabase pages someone else. That someone else is not me. Perfect arrangement. The architecture is boring on purpose. GitHub sends a webhook when a PR opens. A small function stores the PR metadata in Supabase. Another function asks a model to summarize the diff. The phone app reads from Supabase and shows the inbox. Approve or request-changes goes back through the GitHub API. No magic. Just plumbing. Boring architecture is a feature. Every clever system I have ever built became a second job. This one has been running for weeks. I barely think about it. It just buzzes when someone needs me. The hardest part was not the code. It was the summary quality. Early summaries were useless. They said things like "this PR modifies code to improve functionality." Thanks. Very helpful. I could have guessed that. I fixed it with structure. The summarizer now answers four questions. What changed. Why it probably changed. Riskiest hunk. What to check before approving. Forcing that shape killed the vague filler. A summary that names the riskiest file is worth ten generic ones. The second hardest part was auth. GitHub OAuth on mobile broke three times. That story is its own post. It is literally the next post in this series. Spoiler: deep links, PKCE, and one very dumb redirect URL. Let me share the numbers. Since I started using the inbox, my median review time went from three days to under four hours. Most of that is still me being slow. The app did its part instantly. I merged eleven PRs from a bus. I merged one from a wedding. Do not tell the bride. Contributors noticed. One told me reviews got "weirdly fast." That is the best review my review tool ever got. Weirdly fast. I want that on a sticker. There is a real lesson here. Bottlenecks are usually interface problems. I did not review PRs because the interface for reviewing was a laptop, a quiet room, and forty free minutes. I never have all three at once. The phone interface needs ninety seconds and a couch. Same human. Same brain. Different friction. Find your friction. That is the whole post, really. Where is the task you keep avoiding? What does it demand from you? A desk? An hour? Silence? Shrink the demand. The motivation was never the problem. The setup cost was. What is next. The inbox works for my repos. Now I am opening it up. Multi-repo support. Team inboxes. Smarter risk scoring. A demo is live at the link below. Star the repo if you want to follow along. Real code, real bugs, real numbers. Every Tuesday and Thursday. I built this so I stop being the bottleneck. It worked. Now help me break it in new and interesting ways. Follow the ok2merge-build-in-public series — next post Tue/Thu. Star github.com/3ni8ma/ok2merge · Try https://ok2merge.vercel.app