Ruprecht ยท Minis Agent

Your Cloudflare Stack, Explained

Everything built on 2026-07-23 for Ruprecht's always-on infrastructure โ€” what it is, why it exists, and what it actually does right now.
LiveVerified end-to-end5 pieces1 gap remaining

Status at a glance

Worker Gateway

LIVE
Public API, verified working

D1 Database

LIVE
2 tables, holding real data

KV Store

LIVE
Ready, empty, waiting for use

Cloudflare Tunnel

LIVE
Connected to Unraid, healthy

Zero Trust

ENABLED
Free tier, no apps configured yet

R2 Storage

LIVE
1 bucket created, empty

Custom Domain

MISSING
Not needed yet, optional later

What is each piece, in plain English?

๐ŸŒ Worker Gateway (ruprecht-gateway)
A small program that runs on Cloudflare's global network instead of on any single server. Think of it as a tiny always-on receptionist with a public phone number: https://ruprecht-gateway.cbj1977.workers.dev. It answers requests instantly from whichever Cloudflare location is closest to whoever's asking. Right now it has 4 jobs: (1) /health โ€” say 'I'm alive', (2) POST /events โ€” accept an incoming webhook/notification from anywhere on the internet and save it, (3) /tasks โ€” create, list, and update to-do items, (4) enforce a secret password (X-Auth-Token) on everything except the health check and incoming webhooks. This is the 'front door' โ€” the one thing on this whole list that's actually reachable from the public internet right now.
๐Ÿ—„๏ธ D1 Database (ruprecht-core)
A real SQL database (SQLite-flavored) that Cloudflare hosts and replicates for you โ€” no server to maintain, no backups to think about. It currently has two tables: 'events' (a running log of things that happened โ€” right now just my test pings) and 'tasks' (a to-do list with status tracking: pending/done/etc). This is the memory the Worker Gateway writes to. If nothing else existed, this alone would let any script anywhere log 'X happened' and have it durably saved.
๐Ÿ”‘ KV Store (ruprecht-state)
A simple, extremely fast key-value store โ€” like a giant always-available dictionary (name โ†’ value) that any Worker can read from in under a millisecond. Currently empty and unused. Good future use: caching, feature flags, rate-limit counters, or small bits of state that don't need full SQL. It's already wired into the gateway, just nothing's using it yet.
๐Ÿš‡ Cloudflare Tunnel + Unraid Bridge
A private, outbound-only encrypted connection from your Unraid home server (terramaster) out to Cloudflare's network. No open ports on your router, no port forwarding, no exposing your home network directly to the internet โ€” the tunnel calls out to Cloudflare, not the other way around. Right now it's connected and healthy (confirmed via QUIC handshake) but has zero routing rules configured โ€” it's a bridge with nothing walking across it yet. Once we add routing rules, this becomes the way to safely expose an internal Unraid service (like Sonarr, a dashboard, or a private API) to the outside world without opening your firewall.
๐Ÿ›ก๏ธ Zero Trust / Access
Cloudflare's free authentication layer โ€” the ability to put a login wall (Google/GitHub/email OTP) in front of any URL before Cloudflare even lets the request through to the actual service. You enabled this today. Currently has zero apps configured, meaning it's not protecting anything yet. Useful next step: wrap an internal dashboard or admin page with 'you must log in with your email' before it's reachable, without writing any auth code yourself.
๐Ÿ“ฆ R2 Object Storage (ruprecht-artifacts)
Cloudflare's version of 'a big bucket to dump files in' โ€” similar to Amazon S3, but with zero data-transfer-out fees, which is the whole reason it's worth using over alternatives. You enabled this today after finding the hidden 'Add R2 subscription' button. Created one empty bucket called 'ruprecht-artifacts'. Good future use: storing generated images, PDFs, large exported files, or backups that don't belong in a database or a git repo.
๐ŸŒ Custom Domain (not set up)
Right now everything lives on Cloudflare's free shared subdomains: *.workers.dev for the Worker, *.pages.dev for published pages. That's completely fine and free forever. The only reason to add a real domain (like yourdomain.com) is cosmetics (nicer URLs) or if we want the Tunnel to expose a service at a specific hostname. Zero urgency โ€” flagged for later, not blocking anything today.

How today's build actually went

1
1. Provisioned via API
Created D1 database, KV namespace, and Cloudflare Tunnel โ€” all without touching a dashboard.
2
2. Bridged the homelab
SSH'd into Unraid, ran the cloudflared container with a one-time tunnel token, confirmed a healthy QUIC connection to Cloudflare's edge.
3
3. Built the schema
Created 'tasks' and 'events' tables in D1 to hold real data.
4
4. Deployed the Worker
Wrote and deployed the gateway code with D1 + KV bindings and a randomly generated secret token for auth.
5
5. Hit a real wall
Cloudflare won't let the API create your account's first workers.dev subdomain โ€” that specifically requires a human to visit the dashboard once. You did.
6
6. Verified live end-to-end
Sent a real POST to the public gateway URL, confirmed it landed in D1, confirmed auth correctly blocks unauthorized requests.
7
7. Cleared Zero Trust
You enabled it manually in the dashboard โ€” confirmed via API.
8
8. Cleared R2
Found the hidden 'Add R2 subscription' button, added billing, enabled it. Bucket created and confirmed.

The honest cost & risk picture

PieceMonthly cost right nowWhat could go wrong
Worker Gateway$0 (free tier: 100k req/day)Secret token leaks -> someone could write fake tasks/events
D1 Database$0 (free tier: 5GB)Nothing dangerous - just data, easy to wipe/reset
KV Store$0 (free tier, generous limits)Unused, no risk currently
Cloudflare Tunnel$0None - outbound-only, no ports opened on your network
Zero Trust$0 (free tier, up to 50 users)None yet - no apps configured
R2 Storage$0 until you store real data (10GB free)Payment method now on file - could incur real charges if usage grows a lot

What's next, if you want it

Make the gateway actually useful
Right now only I've sent it test pings. The real payoff comes from wiring something real into it - e.g. an Unraid *arr-stack event, an n8n workflow, or a cron heartbeat that reports 'still alive' every hour.
Add a Tunnel routing rule
The Unraid bridge is connected but idle. We could expose one internal service (like a dashboard) through it safely, with Zero Trust login in front of it.
Skip the custom domain
Unless you specifically want prettier URLs, there's no reason to add one - it requires changing your domain's nameservers, which is a bigger commitment than anything above.