Technology 5 min read

I Built InboxDetox in Two Evenings — This Is What Disposable Software Looks Like

InboxDetox is an AI-powered email unsubscribe manager built in two evenings and deployed to Railway. It is on GitHub. Take it.

By Dr. Chukwuma Onyeije, MD, FACOG

Maternal-Fetal Medicine Specialist & Medical Director, Atlanta Perinatal Associates

Founder, Doctors Who Code · OpenMFM.org · CodeCraftMD · · 5 min read

Listen to this post

I Built InboxDetox in Two Evenings — This Is What Disposable Software Looks Like

0:00
InboxDetox dashboard showing AI-categorized email subscriptions on a dark interface displayed on a monitor

On the evening of March 24, I opened my Gmail inbox, saw 1,137 subscription emails sitting in the scan queue, and decided I was done managing them by hand.

By the end of the next evening, InboxDetox was running on Railway.

What InboxDetox Does

It is a self-hosted web app that connects to your Gmail or Outlook account, scans your inbox, and uses Claude to categorize every subscription sender it finds. From a dashboard, you decide: keep it, or unsubscribe. Bulk actions are available. Every decision is logged.

That is the whole product. There is no SaaS tier. There is no waitlist. There is no growth roadmap. You clone the repo, configure your environment variables, and run it.

What I Built It With

The stack is straightforward.

  • Framework: Next.js 16 (App Router)
  • Auth: NextAuth v5 with Google OAuth and Microsoft Entra ID
  • Database: PostgreSQL on Railway via Prisma v7
  • AI: Anthropic Claude (claude-sonnet-4-5)
  • Email APIs: Gmail API, Microsoft Graph API
  • Deployment: Railway with a Dockerfile builder

The AI categorization layer is the only part that required judgment calls. Claude receives a batch of sender names and subject line samples and returns structured labels: newsletters, promotional, SaaS trial, financial, medical, and so on. The categorization feeds the filter UI so you can bulk-decide by category rather than row by row.

The rest of the app is standard Next.js plumbing. Nothing exotic.

Two Evenings Is a Real Number

I want to be clear about what two evenings means in practice.

It means no tests. It means the UI is functional, not polished. It means I hit a prisma generate failure during the Railway deploy and fixed it with a Dockerfile change rather than investigating why the postinstall hook was not running. It means I moved on.

Two evenings is enough time to build something that solves a real problem for one user: me. It is not enough time to build something you hand to a thousand users and support indefinitely.

That is the point.

This Is Disposable Software

In a recent post, I argued that disposable software is the learning foundation for physician-developers. Builds where the goal is learning, not deployment. Projects with zero clinical stakes designed to develop the muscle memory that eventually produces tools that matter.

InboxDetox is disposable software with one working deployment.

It solves a problem I actually have. It uses a stack I wanted to practice. It gave me a Railway deployment under my belt, a Prisma v7 adapter pattern I can now reproduce, and a NextAuth v5 configuration I will reuse. Every one of those things transfers directly to the next build.

The app itself? It may run for six months and then I may delete the Railway service without ceremony. That outcome is not failure. That outcome was always the plan.

InboxDetox login screenInboxDetox dashboardInboxDetox subscriptions listInboxDetox settings

01 / Login -- connect Gmail or Outlook with OAuth

The Honest Assessment

InboxDetox will not unsubscribe from every sender. Some subscription emails do not include a proper List-Unsubscribe header, which means the unsubscribe action falls back to a best-effort redirect rather than a clean API call. That is a Gmail API constraint, not a fixable bug.

The AI categorization is also imperfect. Claude is accurate on obvious categories. It is less reliable on senders that blend promotional and transactional content. I did not build a feedback loop into the model. That would have been a third evening.

What works well: the scan itself, the dashboard, the bulk keep/unsubscribe flow, and the Railway deployment. That is enough for what this is.

It Is on GitHub

If InboxDetox solves a problem you have, you can use it.

The source code is at github.com/chukwumaonyeije/InboxDetox2026. The README covers environment variable setup, OAuth configuration for both Google and Microsoft, and Railway deployment. You will need your own Anthropic API key and your own database.

Fork it. Improve it. Add the feedback loop I skipped. Add proper unsubscribe handling for the edge cases I left as a known limitation. Make it yours.

That is the other thing disposable software is good for: it ships something someone else can pick up.

What This Actually Proves

Physician-developers often wait for the right problem before they start building. The right problem, the right scope, the right tool, the right weekend.

Two evenings with a clear constraint produces a working application faster than six months of planning for the perfect one.

The honest question is not whether InboxDetox is production-ready. It is whether building it produced something transferable. Every pattern I practiced here goes directly into the next build. So does the Railway deployment workflow. So does the NextAuth v5 configuration I now have memorized.

That is what disposable software actually delivers. Not the app. The fluency.

disposable software physician-developer Next.js AI email open source Railway DoctorsWhoCode
Share X / Twitter Bluesky LinkedIn

Newsletter

Enjoyed this post?

Get physician-developer insights delivered weekly. No hype. No filler.

Powered by beehiiv

Related Posts

Physician's home office desk at night with laptop showing a simple Python script, warm lamp light against cool screen glow
Physician Development

Your First Build Does Not Have to Save Lives

Every physician who codes started somewhere that had nothing to do with clinical AI. The first build is about identity formation, not impact. Here is why that distinction matters, and where to actually start.

· 6 min read
disposable softwarephysician-developerlearning to code
Pregnant woman sitting alone on a dark couch late at night, her face lit by the glow of her phone as she types a medical question into a chatbot
AI in Medicine Featured

Your Patients Are Already Using ChatGPT to Decide Whether to Call You

They are not asking it for fun. They are asking it because the triage line puts them on hold for 45 minutes. The threat is not the technology. The threat is the system that made the technology necessary.

· 10 min read
patient safetyclinical AIphysician-developer
Hospital IT conference room with vendor AI presentation on screen, physicians at the table, one with a code editor open
AI in Medicine

The EHR Vendor Wants You to Stay a Consultant

Physician passivity in health tech is not an accident. It is a business model. Understanding the structural incentives is the first step to building outside of them.

· 6 min read
EHRhealth techphysician-developer
Chukwuma Onyeije, MD, FACOG

Chukwuma Onyeije, MD, FACOG

Maternal-Fetal Medicine Specialist

MFM specialist at Atlanta Perinatal Associates. Founder of CodeCraftMD and OpenMFM.org. I write about building physician-owned AI tools, clinical software, and the case for doctors who code.