BLA
BLA (Blind LLM Agents) is the open-source Blue Defense MCP and CLI built to protect software artifacts against automated AI reverse-engineering workflows.
翻译准备中
Landing for Doppler VPN
翻译准备中
取自仓库 README
正在加载完整 README。 以下为已保存的摘录。
The public site at dopplervpn.org: marketing pages, the blog,
app downloads, web checkout, account tools and the support form. Served in 44 languages.
Next.js 15 (App Router) on Vercel.
Node 20 or newer.
The app will not boot without the Supabase values. Everything else degrades gracefully:
payments, email and analytics simply no-op when their keys are absen查看完整 README ↗The public site at dopplervpn.org: marketing pages, the blog, app downloads, web checkout, account tools and the support form. Served in 44 languages.
Next.js 15 (App Router) on Vercel.
| Framework | Next.js 15, App Router, React Server Components |
| Language | TypeScript |
| Styling | Tailwind CSS v4 (@tailwindcss/postcss) |
| i18n | next-intl v3 — 44 locales, routed as /[locale]/… |
| Data | Supabase (REST + RPC) |
| Payments | Revolut and OxaPay, via /api/checkout/init |
| Hosting | Vercel |
src/
middleware.ts www redirect, locale routing, click-id cookie, blog 410s
app/
[locale]/ 44 locale routes — landing, blog, downloads, support,
account, checkout, tools, legal pages, ~20 SEO pages
agents/ Human-readable agent surface (not localized)
checkout/ Non-localized checkout entry
cn-check/ China reachability probe
q/[slug]/ QR short links
api/
vpn/ Native-client routes (the only ones with real auth)
checkout/ revolut/ oxapay/ promo/ payments
account/ subscribe/ support/ doppler/ accounts + support
agents/ MCP server + agent manifest surface
android/ windows/ release metadata and download proxying
robots.ts sitemap.ts sitemap-index/ globals.css
components/ Shared UI — see components/landing for the page shells
config/platforms/ Per-platform config for the four platform landings
i18n/ next-intl config, routing, blog-locale list
lib/ Supabase clients, payment/email services, helpers
hooks/
messages/ 44 locale JSON files
supabase/migrations/ Database migrations for the whole product
scripts/ Build-time gates and utilities
Node 20 or newer.
npm install
cp .env.local.example .env.local # then fill it in — see Environment below
npm run dev # http://localhost:3000
The app will not boot without the Supabase values. Everything else degrades gracefully: payments, email and analytics simply no-op when their keys are absent.
| Command | What it does |
|---|---|
npm run dev | Dev server |
npm run build | Production build — runs prebuild first |
npm run start | Serve the production build |
npm run typecheck | TypeScript, no emit |
npm run lint | ESLint |
npm run check:facts | Verifies the agent-facing fact surface is consistent |
npm run check:i18n | Verifies client components only use namespaces they declare |
npm run indexnow | Submits changed URLs to IndexNow |
check:facts and check:i18n run automatically as prebuild. A build cannot succeed while
either fails — that is deliberate, and scripts/ is load-bearing.
.env.local.example documents every variable the code reads, grouped by subsystem and
annotated with what breaks when it is missing. Copy it and fill it from the password manager or
the Vercel project; values are never committed.
The required set is Supabase (NEXT_PUBLIC_SUPABASE_URL, NEXT_PUBLIC_SUPABASE_ANON_KEY,
SUPABASE_SERVICE_ROLE_KEY) plus NEXT_PUBLIC_SITE_URL in production. If you add a
process.env.X, add X to .env.local.example in the same commit.
doppler-infra repo. A Supabase service_role key once reached this history inside a stray
scratch file — .gitignore is deliberately broad, and it is not a substitute for looking.www.dopplervpn.org. The apex domain redirects, and the redirect strips
auth headers — API calls to the apex will fail in ways that look like auth bugs.src/i18n/blog-locales.ts). Non-blog locales 308-redirect /{locale}/blog/* to
/en/blog/*. These three numbers are different and have been confused before.doppler-admin in April 2026. This
repo renders the blog and owns the migrations; doppler-admin writes it.supabase/migrations/. Do not start a second
migrations directory in another repo.supabase/demo-data.sql — it opens with DELETE FROM on every blog table.next.config.ts. Adding a source means editing it.doppler-admin (admin + blog writes) · doppler-infra (private — node config, n8n, ops) ·
doppler-support-bot (calls /api/checkout/init) ·
../SUBSCRIPTION-AND-ANTIFRAUD.md · DESIGN.md