This is a submission for the GitHub Finish-Up-A-Thon Challenge
What I Built
MetricMint is an MRR dashboard for indie hackers who want to track their revenue without signing up for another SaaS tool.
The idea had been sitting in a notes file for months. I build and sell web app boilerplates on Gumroad — things like subscription trackers and freelance project managers. And I kept hitting the same wall: I had no clean way to track my own monthly recurring revenue. Every MRR tool I found was either way too big for what I needed, expensive, or required connecting a payment processor before you could see anything useful.
So I wanted something simple. Paste your numbers in. See your trends. That's it.
Live demo: https://metricmint-app-production.up.railway.app
GitHub: https://github.com/ibrh96-prog/metricmint
Features: MRR dashboard with month-over-month growth, manual revenue entry (no bank sync, no Stripe connect), 12-month area chart, churn tracking, dark/light mode, PostgreSQL + Drizzle ORM on the backend, mobile responsive.
Stack: React 19 + Vite, Tailwind CSS v4, shadcn/ui, Express 5 + TypeScript, Drizzle ORM, Recharts, deployed on Railway with Supabase.
Demo
Live: https://metricmint-app-production.up.railway.app
Seeded with realistic data so you can explore everything right away.
The Comeback Story
Where it started
I started MetricMint on a weekend when I got annoyed enough to actually do something about not tracking my revenue. I scaffolded a React frontend, wrote a couple of API routes, and then... stopped. Something came up. The folder sat on my desktop for weeks.
When the Finish-Up-A-Thon came along I figured this was the one to revive.
Before:
- Two broken React components, no routing
- No database schema at all
- One API route — a health check
- No dark mode
- No way to deploy it
- No seed data, so the demo looked completely empty
- No README
What changed
I committed to finishing it properly. Not just getting it to run, but shipping it to a standard where I could actually sell it.
After:
- Full MRR dashboard with 5 metrics
- PostgreSQL with Drizzle ORM, pushed to Supabase
- 8 REST endpoints, OpenAPI documented
- 12-month area chart
- Dark / light mode
- Mobile responsive
- Railway deployment (API and frontend as separate services)
- Seed data SQL so the demo looks like a real product in use
- Full README with setup instructions and schema docs
My Experience with GitHub Copilot
I should be upfront about one thing: I'm not a software developer. No CS background, no formal training. I build web apps with AI assistance and sell the results as boilerplates on Gumroad. So I wasn't using Copilot to speed up code I already understood. I was using it to build things I genuinely couldn't have built alone.
The database layer was the clearest example. I described the schema in plain English and Copilot generated the Drizzle ORM schema, migration logic, and Zod validation schemas. I didn't write any of that by hand.
The API routes went the same way. I described what each endpoint should do and Copilot wrote the Express handlers, validation, and error handling. It also caught a bug I'd never have noticed on my own: the monthly trend aggregation was grouping entries incorrectly for records near midnight UTC.
The monorepo wiring was the hardest part. MetricMint uses pnpm workspaces with shared packages across the DB client, API spec, and generated React Query hooks. Getting those cross-package TypeScript imports to resolve in a Railway production build is genuinely tricky. Copilot figured out the problem (tsc not resolving workspace paths at build time) and suggested switching to esbuild with explicit bundle flags. Three minutes. I think that would have taken me a full day otherwise, if I figured it out at all.
What I had to manage myself:
Scope. Copilot kept suggesting things I didn't ask for — authentication, Stripe integration, CSV export. I had to be explicit every time: no auth, no payments, keep it simple.
Stack consistency. When I wasn't precise upfront, Copilot would sometimes drift toward Prisma instead of Drizzle, or axios instead of React Query. I learned to front-load the full stack spec at the start of every prompt.
The seed data also needed a second pass. The first version had round numbers and perfectly linear growth — it looked fake. I asked Copilot to add realistic variance: a couple of dips, one rough month, uneven growth. The demo is a lot more believable now.
Bottom line:
MetricMint went from a dead folder on my desktop to a live, deployed product in one session. That's what actually happened. I don't have a better way to describe it than that.




Top comments (0)