{"slug": "i-bootstrapped-an-api-business-on-a-single-rtx-3060-from-literally-zero-budget", "title": "I bootstrapped an API business on a single RTX 3060, from literally zero budget", "summary": "A developer bootstrapped an API business on a single RTX 3060 Ti with zero budget, hosting a 7B parameter LLM locally to power endpoints that convert plain English into regex, SQL, commit messages, and JSON schemas. The project, listed on RapidAPI, overcame challenges such as Windows process persistence, ngrok's interstitial warning page, and unreliable JSON output from LLMs, achieving a total infrastructure cost of $0.", "body_md": "Two weeks ago I had zero dollars, one gaming PC with an RTX 3060 Ti, and a stubborn idea: what if the cost of running a small, useful LLM-backed API could be close to zero, if you just... hosted the model yourself?\n\nHere's what I shipped, and the specific things that broke along the way — because the failures were more instructive than the plan.\n\nA small API that turns plain English into working code artifacts:\n\n`/v1/regex`\n\n— \"validate a Brazilian CEP\" → a working regex, an explanation, and match/no-match examples`/v1/sql`\n\n— \"list the 10 customers who bought the most last month\" → a SQL query`/v1/commit-message`\n\n— a diff description → a conventional commit message`/v1/json-schema`\n\n— \"an e-commerce product with name, price, category\" → a JSON SchemaNothing revolutionary. The point wasn't the idea — it was proving the economics work when the model is yours.\n\n`qwen2.5-coder:7b`\n\nlocally on a Windows box with an RTX 3060 Ti (8GB VRAM — plenty for a 7B coder model at Q4 quantization)`{...}`\n\nblock if `json.loads`\n\nfails on the raw text)Total infrastructure cost: **$0**. The GPU was already sitting there.\n\n**Windows process persistence is not what you think.** Anything you launch directly in an SSH session — even with `Start-Process`\n\n, even backgrounded — dies the moment the SSH session closes, because Windows ties it to a Job Object scoped to that session. The fix that actually works: wrap the command in a `.bat`\n\n, register it as a Scheduled Task (`schtasks /create ... /sc onlogon`\n\n), and trigger it once immediately with `schtasks /run`\n\n. That survives disconnects.\n\n**\"Free static domain\" isn't always what it says.** I tried ngrok's free static domain (a real, permanent feature — not a myth) to get a stable URL instead of Cloudflare's rotating one. It works great in a browser. It's useless for an API: ngrok's free tier shows a mandatory interstitial warning page to any request that doesn't send a specific `ngrok-skip-browser-warning`\n\nheader — and a marketplace proxy calling your API on a customer's behalf will never send that header. Every single API call returns an HTML warning page instead of JSON. I found this by testing the raw endpoint externally with no special headers before trusting the \"solved\" checkbox — which is the actual lesson: **test the exact path a real client will take, not the happy path you control.**\n\n**LLMs don't reliably return valid JSON, even when told to.** The fix wasn't a smarter prompt — it was a tolerant extractor: try `json.loads`\n\non the raw text, then try pulling a fenced\n\n```\n block, then fall back to a brace-matching regex. Three tries, cheap, and it turned \"the model sometimes wraps JSON in markdown\" from a 502 error into a non-issue.\n\n**A brand-new marketplace listing needs its own free tier.** I gated the public demo (`/demo/*`) with a simple in-memory per-IP daily counter (5 free tries/day) instead of requiring signup at all for the landing page. Letting people try before they subscribe converts better than a wall.\n\n## The economics, honestly\n\nRapidAPI takes 25% of marketplace revenue, plus a small payout processing fee. That's real, and it means the math on a $9.99/month plan is closer to $7 net than $10. Worth knowing before you price.\n\n## What's next\n\nThe backend is done. The actual bottleneck now is distribution — a working API with zero users doesn't pay rent. If you're building something adjacent (dev tools, LLM-backed APIs, or you're just curious about the self-hosted-model economics), I'd genuinely like to hear what you're seeing.\n\n**API listing:** [https://rapidapi.com/JoaoPauloNA/api/plain-english-to-code-api](https://rapidapi.com/JoaoPauloNA/api/plain-english-to-code-api) (free tier, no credit card to try the demo)\n\n---\n\n*Building this in public as I go — happy to answer questions about the self-hosted LLM economics, the FastAPI/Ollama integration, or the Windows automation quirks above.*\n```\n\n", "url": "https://wpnews.pro/news/i-bootstrapped-an-api-business-on-a-single-rtx-3060-from-literally-zero-budget", "canonical_source": "https://dev.to/joaopaulona/i-bootstrapped-an-api-business-on-a-single-rtx-3060-from-literally-zero-budget-5gpe", "published_at": "2026-08-09 19:47:22+00:00", "updated_at": "2026-08-09 20:17:57.740649+00:00", "lang": "en", "topics": ["artificial-intelligence", "large-language-models", "ai-products", "developer-tools"], "entities": ["RTX 3060 Ti", "qwen2.5-coder:7b", "RapidAPI", "ngrok", "Cloudflare", "FastAPI", "Ollama", "JoaoPauloNA"], "alternates": {"html": "https://wpnews.pro/news/i-bootstrapped-an-api-business-on-a-single-rtx-3060-from-literally-zero-budget", "markdown": "https://wpnews.pro/news/i-bootstrapped-an-api-business-on-a-single-rtx-3060-from-literally-zero-budget.md", "text": "https://wpnews.pro/news/i-bootstrapped-an-api-business-on-a-single-rtx-3060-from-literally-zero-budget.txt", "jsonld": "https://wpnews.pro/news/i-bootstrapped-an-api-business-on-a-single-rtx-3060-from-literally-zero-budget.jsonld"}}