Correct the SyncKit storage cost basis and blob region
The billing docs claimed SyncKit blobs sit on Cloudflare R2 at $0.015/GB and
derived a ~2x margin from it. They have never been on R2: prod points
SYNCKIT_S3_ENDPOINT at hel1.your-objectstorage.com, bucket "synckit". Real
cost is Hetzner Object Storage at roughly $0.0065/GB, so the shipped $0.03/GB
rate runs ~4.6x cost, not ~2x. The rate itself is unchanged.
scaling.md also had both buckets in fsn1. Content is fsn1, SyncKit is hel1,
and the app is US-West, so SyncKit blob traffic is transatlantic with no CDN
in front of it.
Co-Authored-By
Claude Opus 5 (1M context) <noreply@anthropic.com>
Author: Max Johnson <me@maxj.phd> · 2026-07-28 01:53 UTC
**Custom domains**: creator domains bypass Cloudflare and point at the origin directly, where Caddy issues on-demand TLS (LE HTTP-01, gated by `/api/domains/caddy-ask`). Stable routing target: `connect.makenot.work` (A → origin IP, **proxy OFF**), customers CNAME to it (apex via flattening) so the origin IP can change in one place. **The apex `maxj.phd` dogfoods this exact path**: it is a verified custom domain, DNS-only (CNAME-flattened → `connect.makenot.work`), served by the on-demand-LE catch-all, *not* a CF-proxied zone.
14
14
15
-
**Object storage**: Hetzner S3 (`fsn1` Frankfurt), presigned PUT/GET. Separate buckets for content and SyncKit blobs.
15
+
**Object storage**: Hetzner S3, presigned PUT/GET. Separate buckets in separate regions: creator content in `fsn1` (Frankfurt), SyncKit blobs in `hel1` (Helsinki). The app is US-West, so both are transatlantic; SyncKit blobs in particular have no CDN in front of them, unlike content, which Cloudflare caches at `cdn.makenot.work`.
16
16
17
17
**Tailscale mesh** carries deploy, CI (astra → alpha), PoM peer health, build offload. Tailscale is **not** in the fan request path, fans go Browser → Cloudflare → public origin.