Parachute Cloud — architecture sketch

Date: 2026-04-20 Status: Sketch. Aaron asked for a shape that aligns cloud with the module architecture. This is that shape — a plausible north star we refine when a first cloud user materializes.

Companions:

The core claim

Cloud is a deployment target of the same ecosystem, not a separate product. The module contracts are identical. A Notes client configured against https://me.parachute.computer/ works the same as against https://parachute.<tailnet>.ts.net/. What changes is infrastructure — identity, storage, scale — not the API surface clients see.

This decision preserves Parachute's open-source story: self-hosting remains equivalent, cloud is just an operational upgrade path.

The two axes of change

Self-hosted → Cloud differs on two axes:

  1. Scale: one user one machine → many users, many tenants, one cluster.
  2. Operations: user runs services → Parachute team runs services.

Everything else is invariant.

Tenant shape

A tenant is one user (or team) with their own data. Each tenant gets:

Subdomain per tenant is the cleaner shape (solves same-origin issues, matches single-user self-hosted URL shape). Path-based is a fallback when DNS automation can't be had.

Module mapping

Vault (cloud)

Notes (cloud)

Scribe (cloud)

Channel (cloud)

Hub (cloud)

Identity

Cloud uses centralized identity at auth.parachute.computer — a dedicated auth service.

This mirrors the self-hosted architecture where vault is the IDP for its tenant (Phase 0+1). Cloud just factors the IDP out sooner because multi-tenant demands it.

Scopes in cloud

Scopes gain tenant-awareness:

Data residency & portability

Billing tiers (sketch)

Self-hosting is free forever, no tier. Cloud billing is metered against storage + transcription compute primarily.

Deployment shape

Target stack (initial, iterate):

Why Cloudflare-heavy: cheap at small scale, global edge, DNS automation, object storage and D1 integrate.

Alternative: full Postgres + self-managed K8s if we outgrow Workers. Probably Year 2 problem.

Per-tenant provisioning flow

When a user signs up:

  1. Choose subdomain: aaron.parachute.computer.
  2. Cloudflare API creates the DNS record + TLS cert.
  3. Worker spawns a new vault namespace (or row in shared DB with tenant_id).
  4. /.well-known/parachute.json for the new origin lists vault + notes + optionally scribe.
  5. auth.parachute.computer issues an initial token for the tenant's owner.
  6. User lands on aaron.parachute.computer/ — hub renders, shows vault + notes cards.
  7. User clicks Notes → OAuth flow → lands in their fresh empty vault.

Elapsed time target: under 60s from signup to first note.

Abuse / rate-limiting

Open questions

  1. Team / shared vaults: when does multi-user-single-vault enter the picture? Probably Year 2 after Personal tier is validated. Requires sharing primitives in vault that don't exist yet.
  2. Offline sync for cloud PWA: Notes already has IndexedDB sync; cloud version keeps that, just syncs to remote vault instead of local. No change.
  3. MCP access in cloud: Claude / GPT connectors call aaron.parachute.computer/vault/default/mcp — cloud just routes this to the tenant's vault like any other API call. No MCP-specific cloud work needed.
  4. Per-tenant secrets (like SCRIBE_TOKEN if a user BYOs): stored encrypted per-tenant in the control plane. Accessible only to that tenant's services.
  5. Tenant deletion + retention: 30-day soft delete, then hard. Standard SaaS practice.
  6. Beta → GA transition: cloud launches as paid beta (small count, curated); free tier opens after stability proven. Avoids "free tier abuse day one" problem.

Beta path

To go from "launch of self-hosted on 2026-04-23" to "first paying cloud user":

  1. Week 1–2 post-launch: stabilize self-hosted. Observe real usage patterns.
  2. Week 3–4: factor vault's Store interface to async. Write Postgres (Neon) backend.
  3. Week 5–6: stand up auth.parachute.computer — initially just proxy to a single cloud vault's OAuth impl, same as the self-hosted Phase 0 seam. Iterate to real multi-tenant IDP.
  4. Week 7–8: provision flow for subdomains. Small closed beta (5–10 invited users, hand-provisioned).
  5. Week 9–12: self-serve signup. Paid tier.
  6. Month 4+: scale based on real demand.

Why the module architecture matters for cloud

Because each module declares its own contracts, cloud operations can:

The cloud is the self-hosted architecture, run by us, at scale, with centralized identity. Same shape all the way down.

TL;DR