I spent the last few weeks building a suite of developer APIs under one roof: grabshot.dev. Here's what I built, why, and the lessons that might save you time.
The Products
Each one solves a specific developer pain point:
- GrabShot - Website screenshots with AI cleanup (removes cookie banners, popups) and device frames (iPhone, MacBook)
- PDFMagic - HTML to pixel-perfect PDF conversion. Headers, footers, margins, page breaks
- MetaPeek - Extract Open Graph, Twitter Cards, and meta tags from any URL
- ColorPeek - Pull dominant colors and full palettes from any website
- CronPing - Dead man's switch for cron jobs. Know when your scheduled tasks stop running
- MailForge - Test HTML emails before sending. CSS inlining, rendering validation
- FontSpy - Detect every font on any webpage. Families, weights, how they load
- LinkCheck - Find broken links across entire sites with recursive crawling
- DiffShot - Visual regression testing. Compare screenshots, get pixel-level diffs
- PageAudit - SEO and performance audits. Meta tags, headings, Core Web Vitals signals
Every API has a free tier (25-50 requests/month), docs, and a live playground.
The Stack
Nothing fancy. That's kind of the point.
- Runtime: Node.js + Express
- Browser automation: Puppeteer (headless Chrome for screenshots, font detection, color extraction)
- Image processing: Sharp
- Database: SQLite (one per app, no external DB needed)
- Process manager: PM2
- Reverse proxy: Caddy (auto SSL, wildcard subdomain routing)
- Billing: Stripe Checkout
Total infrastructure cost: one VPS. That's it. No Kubernetes, no microservices mesh, no managed databases. SQLite handles the traffic fine at this scale, and if it ever doesn't, that's a good problem to have.
Architecture Decisions Worth Sharing
Wildcard DNS + Caddy = instant subdomains
I set up *.grabshot.dev in Cloudflare pointing to one IP. Caddy handles TLS certificates automatically for each subdomain. Adding a new product is:
- Write the app
- Add a Caddy block (5 lines)
pm2 start app.js --name myapp- Done. SSL works instantly.
This made the "build 10 things" approach viable. Zero friction per new product.
Each app is self-contained
Every app has its own:
- Express server on its own port
- SQLite database
- Auth system (API keys)
- Stripe billing integration
- Landing page with docs
No shared services except Caddy in front. If one crashes, the others don't care. PM2 auto-restarts anything that dies.
Puppeteer is the Swiss Army knife
GrabShot, ColorPeek, FontSpy, DiffShot, and PageAudit all use Puppeteer under the hood. Screenshots, DOM inspection, computed styles, network monitoring. One tool, five products.
The key insight: Puppeteer is expensive to run (headless Chrome eats RAM), so memory limits per process are essential. I cap each app at 150MB and let PM2 restart if they spike.
AI cleanup actually works
GrabShot's killer feature: it uses Gemini 2.0 Flash to identify and remove cookie banners, newsletter popups, and chat widgets from screenshots. The before/after difference is dramatic. This is the one feature that consistently gets "oh, that's cool" reactions.
What I'd Do Differently
Start with one product, not ten. I built the suite because I could, but focus matters more than breadth at zero users. If I were starting over, I'd ship GrabShot alone and spend the remaining time on distribution.
SEO from day one. I wrote 13 blog posts targeting developer keywords, but Google Search Console setup got delayed. All that content sat unindexed. Don't make this mistake. Set up GSC before you write your first post.
Test the full payment flow early. I found that 6 of my 10 apps had broken Stripe integration the night before launch. Checkout sessions that fail silently are revenue killers.
Numbers (Honest)
- MRR: $0 (just launched)
- Users: ~25 (mostly from testing)
- Blog posts: 13
- Monthly hosting cost: ~$15
I'm not going to pretend this is a success story yet. It's a launch story. The products work, the infrastructure is solid, and now comes the hard part: finding people who need these tools and convincing them to pay.
Try It
Every API has a free tier. No credit card required.
- Suite overview: suite.grabshot.dev
- Screenshots: grabshot.dev
- All products: Links on the suite page
If you build developer tools or have thoughts on the approach, I'd genuinely love to hear them. What would you use? What's missing?
Top comments (0)