
I'm Rashid, a solo dev from Pakistan. I just launched SalePilot — a real-time sales tracker for Gumroad and Whop sellers.
THE PROBLEM
Every Gumroad seller knows this pain: refreshing the dashboard 50 times a day just to see if a sale came in. And when it does, you manually create a license key, email the customer, and log it somewhere. Exhausting.
I was doing this myself. So I built the tool I wished existed.
WHAT SALEPILOT DOES
• Real-time notifications on every sale (via ntfy — free, works on any phone)
• Auto-generates a unique license key for every customer
• Clean dashboard with sales, revenue, license tracking
• Date filters (Today / This Week / This Month / All Time)
• Weekly breakdown for monthly view
• CSV export for accounting
• Public license verification API
• Works with BOTH Gumroad AND Whop
HOW IT WORKS
Setup takes literally 30 seconds.
TECH STACK
• Python FastAPI
• PostgreSQL (on Railway)
• Jinja2 + Tailwind for the UI
• ntfy.sh for push notifications
• Gumroad + Whop webhooks
LESSONS THAT COST ME TIME
• passlib + bcrypt are incompatible on Python 3.13. Use bcrypt directly.
• Gumroad sends tier info as "variants[Tier]" (capital T) — not lowercase. Hours lost debugging this.
• Railway's runtime.txt is fragile — let it auto-detect Python.
• Starlette's TemplateResponse API changed — needs request as the first arg now.
• Multi-tenant SaaS needs per-user ntfy topics. Can't share one global topic.
PRICING
• Free: 1 product, 20 sales/month
• Starter ($9/mo): 5 products, 200 sales/month, license keys
• Pro ($29/mo): 25 products, 2,000 sales/month, CSV export, verify API
• Business ($79/mo): unlimited everything
Currently all features are unlocked during testing.
Try it: https://web-production-bb7644.up.railway.app/signup
Would love feedback on:
→ Pricing structure — too much, too little?
→ Anything confusing in onboarding?
→ Would you actually pay for this?
Happy to answer questions about the build, the stack, or webhook edge cases.
The automation is more interesting than the dashboard. Have any sellers actually stopped checking Gumroad/Whop manually because SalePilot handled the sales and license workflow?