Three tiers, never mixed. The customer-facing front-end is static and free. One shared control plane is the brain. The worker boxes are pure back-end muscle that scale with customers. Built to run as cheap as physically possible: about a dollar a month in fixed cost.
The front-end is not on a scanner box at all. Both the marketing site and the customer dashboard are static on Cloudflare Pages, free, on a global CDN. The boxes never serve a line of HTML.
The marketing site (getatlas.com) and the dashboard app (app.getatlas.com) are both static front-ends on Cloudflare Pages. Global CDN, free, fast, nothing sensitive. The dashboard is a single-page app that talks to the control-plane API over HTTPS. Reuses your existing ~/projects/atlas-site.
One shared API + database + provisioner for all customers. Stores customer config, watchlists, recent finds, and auth. Provisions worker boxes through the Hetzner, Oxylabs, and Cloudflare DNS APIs. Serverless, so it costs nothing at our scale and there is no box to babysit. (Simpler-to-debug alternative: the same logic as a plain Node app on one ~$5/mo VPS.)
Pure back-end, exactly as you wanted: just a script. No UI, no marketing, no login. Headless scanners for the customers packed on the box, hitting marketplaces through their proxies, pulling config from and pushing finds to the control plane. The only tier that grows with customer count.
This is your whole bill. Everything on the control side is on Cloudflare's free tier (you already use Cloudflare), so the only money that moves is per-customer, and the price covers it. Fixed overhead is about a dollar a month.
| What it does | Cheapest service | Cost | Scales with |
|---|---|---|---|
| Marketing site + dashboard (front-end) | Cloudflare Pages | $0 | nothing |
| API (auth, watchlist, finds) | Cloudflare Workers | $0 | 100k req/day free, we are far under |
| Database (customers, searches, finds) | Cloudflare D1 | $0 | 5 GB free |
| Provisioner (purchase to live box) | Cloudflare Worker + Cron | $0 | nothing |
| Credential email | Resend free tier | $0 | 3k emails/mo free |
| Notifications | Telegram Bot API | $0 | free forever |
| AI deal scoring (optional) | Customer's own Gemini key (Google free tier) | $0 | customer brings it |
| Image storage | none (we link the marketplace image URL) | $0 | not stored |
| Domain | Cloudflare Registrar | ~$1/mo | nothing |
| Billing | Whop | 4% of revenue | revenue |
| Scanning compute | Hetzner CX21 (2 to 4 customers/box) | ~$5/mo per box | customers |
| Proxies | Oxylabs Dedicated ISP AS7922 | ~$16 per customer | customers |
There is no limit on how many searches you keep. What sets your speed is how many run live at once. Each live search is re-checked on a cycle, and the only reason more-live means slower is the per-proxy pacing that keeps every IP unbanned. Run fewer live and they refresh faster. Add proxies to run more live at full speed. Park the rest in your Archive, which is unlimited. The live count and its refresh time show in the dashboard, so the upgrade sells itself.
| Live searches | Full refresh | Per IP |
|---|---|---|
| 5 | 45 sec | 80/hr |
| 15 | 2.25 min | 80/hr |
| 30 | 4.5 min | 80/hr |
| 50 | 7.5 min | 80/hr |
| 100 | 15 min | 80/hr |
| Proxies | Full refresh | Price |
|---|---|---|
| 5 (Standard) | ~4.5 min | included |
| 10 (+ Turbo) | ~2.25 min | +$20/mo |
| 15 (+ Max) | ~1.5 min | +$35/mo |
Each billing cycle does double duty: it confirms the customer paid, and it rotates their proxies so accounts stay ahead of detection.