The independent guide to running AI locally.
Detect your GPU in the browser → see which open-weights models actually fit your VRAM → calculate what self-hosting saves versus commercial APIs. Built as a content-first directory site, not just a benchmark table.
Status: early prototype. Benchmark scores are a snapshot from local.ai (Exo Labs, 2026-08). Quant sizes and savings are estimates. Pricing values are placeholders until a live pricing pipeline is added.
- Browser GPU detection — WebGPU
GPUAdapterInfo+ WebGLWEBGL_debug_renderer_info, with manual hardware selection as a fallback for Safari / old cards / remote desktops. - VRAM-aware recommendations — maps your chip to a hardware database and recommends the best quantization that fits your memory budget.
- Self-hosting savings calculator — uses an open model's own API price when it exists, otherwise its closest commercial equivalent; compares API spend against electricity + hardware amortization.
- Model directory + detail pages — 44 seeded models, statically generated with JSON-LD, sitemap, internal links and per-page VRAM/quant/cost tools.
- Zero tracking, zero accounts — detection happens entirely in the visitor's browser.
npm install
npm run dev # http://localhost:3000
npm run build # static export to out/ (Cloudflare Pages ready)Option A — Git integration (recommended): in the Cloudflare dashboard, create a Pages project connected to this repo with:
- Build command:
npm run build - Output directory:
out - Environment variable:
NEXT_PUBLIC_SITE_URL= your production URL
Option B — Wrangler CLI:
npx wrangler login
npx wrangler pages deploy out --project-name runlocalOption C — GitHub Actions: the included workflow
(.github/workflows/deploy.yml) rebuilds and deploys on every push to main
and daily at 04:23 UTC. Add these secrets/vars to the repo settings:
CLOUDFLARE_API_TOKEN(Pages edit permission)CLOUDFLARE_ACCOUNT_ID- Repository variable
NEXT_PUBLIC_SITE_URL
The directory seed lives in lib/data.ts; live data lives in data/generated/.
npm run ingest # HuggingFace metadata + OpenRouter pricing snapshots
npm run ingest:models # models only (license, downloads, GGUF file sizes)
npm run ingest:pricing # pricing onlyThe scripts are polite to rate limits (retry with backoff, keep previous data
on partial failure) and use HTTPS_PROXY automatically when it is set. Commit
data/generated/ so a fresh clone builds without network access.
app/ Next.js App Router (home, /models, /models/[slug])
components/ GPU detect, recommendations, savings calculator, quant pills
lib/ data seed, detection, ROI math, pricing, quants, SEO helpers
prototype/ original single-file vanilla-JS prototype
content/SEO_CONTENT_PLAN.md 50-page content roadmap with keyword matrix
docs/PLAN.md product & monetization strategy
docs/RESEARCH-local-ai.md notes from reverse-engineering local.ai
docs/PLAN.zh-CN.md 中文版产品方案
docs/PLAN.md has the full version:
- The detection tool is the hook (shareable, retentive), not the traffic engine.
- Model pages, VRAM guides, comparisons and news are the SEO engine.
- Every piece of content ends at a decision page (what to run / what to buy).
- Monetization order: hardware affiliate → cloud-GPU affiliate → sponsored newsletter → ads at scale → data/API licensing later.
- Pricing pipeline: daily snapshots from provider pages / OpenRouter
- Model metadata pipeline: HuggingFace API + Ollama library (license, context, files, sizes)
- First 20 model detail pages rewritten with real metadata
- 10 guides + 10 comparisons (see content plan)
- Search/filter on the directory
- Hardware detail pages and comparison pages (affiliate-ready)
- Community benchmark submissions
MIT