Which parts of a foreign web stack break first in mainland China — measured, not guessed.
An open lab with tiny, single-dependency demo pages and reproducible network + browser checks from
real mainland China infrastructure (Alibaba Cloud behind launchready.cn). Each run produces a
machine-readable verdict — Blocked, Degraded, or Reachable — plus screenshots.
Maintained by Chinaready; evidence runs on launchready.cn mainland infrastructure.
- Live site: https://stackbreak.launchready.cn
- Latest results: https://stackbreak.launchready.cn/results/
- Beijing view: https://stackbreak.launchready.cn/demos/beijing-view.html
- Companion article: https://chinaready.co/insights/which-parts-of-your-stack-break-first/
Most teams treat "China access" as one big switch. It is not. A site that loads from London can fail in a dozen small, independent ways from Shanghai: a blank login button, a hero with no typeface, a checkout that silently stalls.
This lab isolates each failure. Every page under demos/ loads exactly one third-party
integration the way a normal product would, then reports whether that dependency actually arrived.
| Category | Demos | Services |
|---|---|---|
| Fonts and icons | 3 | Google Fonts, Material Symbols, Adobe Fonts (Typekit) |
| Auth and identity | 3 | Google reCAPTCHA, Auth0, Google Sign-In |
| Analytics and tags | 2 | Google Tag Manager, Google Analytics 4 |
| Maps, media, embeds | 3 | YouTube, Google Maps, Vimeo |
The Beijing view replays the latest mainland snapshot — same evidence for every visitor, regardless of location or VPN.
GitHub (this repo) --push--> self-hosted runner on launchready.cn (mainland China)
|
+-- probe/china-dependency-probe.sh (curl + dig)
+-- Playwright (Chromium, network capture + screenshots)
|
+-- writes results/<date>/ and results/latest.json
+-- serves demos + /results/ via Docker (nginx)
- Network probe (
curl+dig) — domain reachability and latency. - Browser checks (Playwright) — what a real user sees: failed requests, blank players, spinners that never resolve — with screenshots.
Every verdict is stamped with test date, cloud region, and host. Results change with carrier, region, and time; treat each run as a single-node snapshot, not a legal or compliance conclusion.
The evidence workflow runs weekly (Mondays 06:00 Asia/Shanghai)
on a mainland self-hosted runner and refreshes:
results/latest.json— 11 single-dependency probes + Playwright screenshotsresults/netlify-latest.json— when Netlify site variables are configuredresults/vercel-latest.json— when Vercel site variables are configuredresults/firebase-latest.json— when Firebase is configured on the host (seedeploy/env.example)
You can also trigger a run manually from GitHub Actions → evidence → Run workflow.
Outside China most demos succeed — that is the point of comparison with the mainland runs.
git clone https://github.com/chinaready/launchready-stackbreak-lab.git
cd launchready-stackbreak-lab
docker compose up --build
# http://localhost:8080/demos/ and http://localhost:8080/results/
npm install
npx playwright install --with-deps chromium
npm test
./probe/china-dependency-probe.sh # verdicts only meaningful from ChinaCopy .env.example to .env for optional vendor test keys. Every value is optional
for a local build.
demos/ one HTML page per dependency + hub + Beijing view
probe/ targets.json + china-dependency-probe.sh
firebase-demo/ Firebase stack probe kit
netlify-demo/ Netlify stack probe kit
vercel-demo/ Vercel stack probe kit
tests/ Playwright specs
results/ published evidence (latest.json + dated snapshots)
public/ /results/ viewer + shared assets
deploy/ host bootstrap + runner setup (maintainers)
Two kits deploy and probe an entire managed backend from the same mainland node:
firebase-demo/— Auth, Firestore, Storage, Functions, FCM, Remote Config. Results:/results/firebase.html.netlify-demo/— Hosting/CDN, Image CDN, Functions, Edge Functions, Forms, Identity, Blobs. Results:/results/netlify.html.vercel-demo/— Hosting/CDN, Functions, Edge Middleware, Cron, Blob, KV. Results:/results/vercel.html.
Open an issue first to propose a dependency; maintainers confirm scope before you open a PR.
See CONTRIBUTING.md.
- Code of Conduct
- Security policy — report vulnerabilities privately
Copyright 2026 Chinaready. Licensed under the Apache License, Version 2.0. See NOTICE for attribution. Demos load third-party services for diagnostic purposes only; all trademarks belong to their respective owners.