From cfae99bba1b5283414779cd69bb988f4e61aae5f Mon Sep 17 00:00:00 2001 From: Aaron Gabriel Date: Wed, 20 May 2026 07:25:40 -0600 Subject: [PATCH 1/5] =?UTF-8?q?feat(site):=20/deploy/render/=20page=20?= =?UTF-8?q?=E2=80=94=20one-click=20Deploy=20to=20Render=20walkthrough?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adds the public-facing Render self-host surface promised by #42 and the v0.6 deploy arc. Hero + Deploy-to-Render button, "what you get" framing, six numbered walkthrough steps (deploy → wait → open URL → first-boot wizard → install modules → connect Claude Code), custom-domain section, cost transparency, limitations, links onward to /install/ and the v0.6 design note. Voice and structure match install.njk — sectioned with "Why this step" / "What you should see" framing, code-inline blocks for commands, upgrade-callout for the "set PARACHUTE_HUB_ORIGIN once" caveat. Button links to render.com/deploy?repo=parachute-hub, which reads the render.yaml shipped in hub#258. Refs #42. Co-Authored-By: Claude Opus 4.7 (1M context) --- deploy/render.njk | 172 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 172 insertions(+) create mode 100644 deploy/render.njk diff --git a/deploy/render.njk b/deploy/render.njk new file mode 100644 index 0000000..d72cd29 --- /dev/null +++ b/deploy/render.njk @@ -0,0 +1,172 @@ +--- +layout: base.njk +title: "Deploy to Render" +description: "One-click deploy Parachute to Render. Your own hub, your own data, in a browser tab. About five minutes from click to a running URL." +permalink: /deploy/render/ +--- +
+ +
+

Deploy to Render

+

Your own Parachute, your own data, in a browser tab. About five minutes from click to a running URL.

+
+ +
+

One click to start

+ +

Why this path. Parachute is happiest on your own machine, but a laptop sleeps. Render is the simplest "always-on URL" we've found that still lets you own everything — a single container running your hub, with a persistent disk for your vault, all in your Render account. No tenancy, no shared database, no Parachute-operated cloud sitting between you and your data.

+ +

+ + Deploy to Render + +

+ +

Render will ask for a GitHub connection, read render.yaml from parachute-hub, and provision a single web service with a persistent disk attached. The first build takes about two to three minutes.

+
+ +
+

What you get

+ +

One Render web service (Starter plan, $7/month) running hub-as-supervisor — the same architecture you'd run locally, just inside a Render container. One persistent disk mounted at /parachute for module installs and vault data. HTTPS and a *.onrender.com subdomain included; a custom domain attaches in a couple of clicks afterward.

+ +

Modules are not pre-installed. The container ships with only the hub. After first boot, the admin UI lets you install Vault, Notes, and Scribe with one click each — they install onto the persistent disk under /parachute/modules, so they survive redeploys.

+ +

This is the deploy mirror of the local model: locally, the hub supervises vault, notes, and scribe as child processes sharing ~/.parachute/. On Render, the hub supervises the same children in the same container, sharing the mounted disk. See the v0.6 deploy architecture note for the full shape.

+
+ +
+

1. Click "Deploy to Render"

+ +

Why this step. Render reads the repo's render.yaml, which declares the service shape (web service, Docker, disk at /parachute, env vars) and pre-fills everything on the Render dashboard. You're just confirming.

+ +

Sign in or sign up. Accept the GitHub connection if you don't already have one. Render shows the "Apply Blueprint" page with one service (parachute-hub) and one disk. Click Apply.

+ +

What you should see. Render kicks off a build. The dashboard lands on the service page with a live deploy log streaming.

+
+ +
+

2. Wait ~2–3 minutes

+ +

Why this step. First build pulls the Docker image, sets up the persistent disk, and boots the hub. Subsequent redeploys (after you push to the repo, or click "Manual Deploy") are faster — about 30 seconds — because the disk and image layers are cached.

+ +

The deploy log shows the build, then the hub start. Look for a line like parachute-hub listening on :1939. When the dashboard banner switches from "Deploying" to Live, you're up.

+ +

What you should see. Status: Live. A URL on the service page like https://parachute-hub-abc123.onrender.com.

+
+ +
+

3. Open the Render URL

+ +

Why this step. Hub boots without an admin account on a fresh disk. The first request to any non-public route redirects to the first-boot wizard, which sets your admin credentials and names your first vault.

+ +

Click the URL on the Render dashboard. Hub redirects you to /admin/setup.

+ +

What you should see. The setup wizard's welcome screen, with five steps in the side rail: Welcome, Account, Vault, Expose, Done.

+
+ +
+

4. Walk the first-boot wizard

+ +

Why this step. The wizard sets up the things that have to be set up once and can't be defaulted: who you are, what to call your first vault, and how this hub is reachable on the internet.

+ +
    +
  1. Welcome. One screen of orientation. Continue.
  2. +
  3. Account. Pick a username and password. Stored in the hub's database with argon2 hashing. There's no email-based recovery on the self-hosted path — the hub belongs to you, so write the password down.
  4. +
  5. Vault. Names your first vault (defaults to default). You can add more vaults later from the admin UI.
  6. +
  7. Expose. Pick how this hub is reached. For Render: choose Public URL — Render handles TLS termination on the *.onrender.com subdomain (or your custom domain). The other options (Tailscale, Cloudflare Tunnel) are for the local-install path; on Render they're not the right fit.
  8. +
  9. Done. Shows the claude mcp add line for Claude Code, plus links into the admin UI to install Notes and Scribe.
  10. +
+ +

What you should see. The done screen renders the MCP install command pre-filled with your hub's URL and a freshly minted token. Copy it; you'll paste it into Claude Code in step 6.

+
+ +
+

5. Install modules from the admin UI

+ +

Why this step. The hub on its own is just the supervisor — useful for OAuth and module lifecycle, but not yet the thing you want to talk to. Modules are where the actual reading, writing, and capturing happens.

+ +

Navigate to /admin/modules. You'll see Vault, Notes, and Scribe listed as available. Click Install next to each one you want. Install takes about a minute per module — the hub runs bun install against the package and persists it under /parachute/modules/node_modules/, then spawns it as a child process and mounts its routes under /vault, /notes, /scribe.

+ +

What you should see. Each installed module switches to a Running badge with its mounted path. Notes is reachable at <your-hub>/notes, vault's REST API at <your-hub>/vault/default, scribe at <your-hub>/scribe.

+
+ +
+

6. Connect Claude Code

+ +

Why this step. The vault is running and reachable, but no client is wired to it yet. Claude Code is the zero-config path — one command and the MCP server is registered in ~/.claude.json.

+ +

Paste the claude mcp add line from the wizard's done screen into your terminal. It looks like:

+ +
+ claude mcp add parachute-vault https://your-hub.onrender.com/vault/default/mcp --header "Authorization: Bearer pvt_..." +
+ +

Start a new Claude Code session in any project. Run /mcpparachute-vault should appear with its nine tools resolved. Memory now persists across every session, backed by your Render-hosted hub.

+ +

What you should see. parachute-vault in /mcp's list with status connected. Asking Claude to write a note succeeds and the note appears in the Notes UI on <your-hub>/notes immediately.

+
+ +
+

Custom domain (optional)

+ +

Why this step. The *.onrender.com subdomain works forever, but most people want their own domain — both for memorability and because the OAuth tokens the hub mints are bound to a canonical origin you'd rather control.

+ +
    +
  1. In Render: Service → Settings → Custom Domains. Add your domain. Render gives you a CNAME target.
  2. +
  3. In your DNS: point a CNAME from your subdomain to that target. Wait for propagation (usually under a minute, sometimes longer).
  4. +
  5. Render automatically provisions a TLS certificate from Let's Encrypt.
  6. +
  7. Back in Render: Service → Environment. Set PARACHUTE_HUB_ORIGIN=https://your-domain.example.com. The variable's already declared in render.yaml with sync: false, so Render's UI is where you fill it in. Save — Render redeploys automatically.
  8. +
+ + +
+ +
+

Cost

+ +
    +
  • Render Starter: $7/month, flat. The web service tier. The free tier doesn't support persistent disks, and the hub needs a disk for module installs and vault data — so Starter is the minimum.
  • +
  • Persistent disk: $0.25 per GB per month beyond the 1GB included with Starter. Vault databases are tiny — typical single-operator usage stays well under 1GB through the first year, so most people pay nothing extra.
  • +
  • Custom domain: free, assuming you already own the domain. TLS via Let's Encrypt is included.
  • +
+ +

Expected total: ~$7–8 per month for hub + vault + notes + scribe running together.

+ +

Compare locally: the same stack on your own Mac or Linux box is free, but you give up the always-on URL and the "works from my phone, anywhere" property. The Render path is the trade.

+
+ +
+

Limitations

+ +
    +
  • One container shares 512MB of RAM. Render Starter is enough for hub + vault + notes + scribe at typical sub-1000-note usage. If you hit the ceiling — large vaults, heavy transcription workloads — the path is either upgrade the Render plan (Standard is 2GB) or split a module out to its own service later. We'll document that when someone needs it.
  • +
  • No free tier. Free Render web services don't support persistent disks, and a stateful hub needs a disk. Starter ($7) is the floor.
  • +
  • Module installs take a minute. Each "Install" click runs a real bun install on the container against the npm registry. First-time installs of vault or notes take roughly a minute; redeploys re-use the cached disk.
  • +
  • Redeploys are not zero-downtime. When you push to the repo (or Render redeploys for any reason), the container restarts. Expect ~30 seconds where the hub is unreachable. For a single-operator hub this is a non-issue; for teams it's worth knowing.
  • +
+
+ +
+

What comes next

+ +
    +
  • Local install — the same stack on your own machine. Free, but sleeps when your laptop sleeps.
  • +
  • v0.6 deploy architecture — the design note explaining why it's one container with hub-as-supervisor.
  • +
  • parachute-hub issues — deploy questions, bugs, friction. We read all of them.
  • +
+
+ +
+

+ + Deploy to Render + +

+

Or install locally.

+
+ +
From f963698a295d1ab05139667fcb4df2df78053b41 Mon Sep 17 00:00:00 2001 From: Aaron Gabriel Date: Wed, 20 May 2026 07:25:47 -0600 Subject: [PATCH 2/5] feat(site): surface /deploy/render/ from the install page MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adds a "One-click deploy to Render" entry to install.njk's "Running it somewhere other than your laptop" section. Lands directly above the Parachute Cloud waitlist and the BYO-VPS path — the natural place for people reading install docs to discover the always-on hosted path. Chose the install-page addition over a homepage hero modification: less disruptive to the landing page, and people who want one-click deploy are likely already on /install/ deciding which install shape they want. Refs #42. Co-Authored-By: Claude Opus 4.7 (1M context) --- install.njk | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/install.njk b/install.njk index 4feeb98..70e2392 100644 --- a/install.njk +++ b/install.njk @@ -149,9 +149,11 @@ permalink: /install/

Your laptop sleeps. If you want your Vault always on, you have options:

+

One-click deploy to Render. The fastest "always-on URL" path — about five minutes from click to a running hub on your own subdomain. Single container, hub-as-supervisor, persistent disk, ~$7/month flat. Modules install onto the disk from the admin UI after first boot. Deploy to Render →

+

Wait for Parachute Cloud. We're working on a hosted version — same architecture, same guarantees, no server to run. Subscribe for updates.

-

Run it on a Mac or Linux box yourself. Vault is Bun + SQLite. Install Bun, clone the repo, bun src/cli.ts init. On Linux enable the systemd unit in deploy/; on macOS the init command wires up a launchd agent for you. Any VPS works — Render, Railway, Fly.io, Hetzner, DigitalOcean, or a home server. We don't have step-by-step per-provider guides yet; want one? Open an issue.

+

Run it on a Mac or Linux box yourself. Vault is Bun + SQLite. Install Bun, clone the repo, bun src/cli.ts init. On Linux enable the systemd unit in deploy/; on macOS the init command wires up a launchd agent for you. Any VPS works — Railway, Fly.io, Hetzner, DigitalOcean, or a home server. We don't have step-by-step per-provider guides yet; want one? Open an issue.

From fcd293e4431f06dfa92ff0ffd8604307d997a75c Mon Sep 17 00:00:00 2001 From: Aaron Gabriel Date: Wed, 20 May 2026 07:25:50 -0600 Subject: [PATCH 3/5] docs(site): mark v0.6 Render self-host as shipped in the roadmap MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Surgical addition to roadmap.njk's "Here now" list — surfaces the v0.6 Render self-host path as just-shipped, links to /deploy/render/ and the v0.6 architecture note. Bumps the "Updated" date. Refs #42. Co-Authored-By: Claude Opus 4.7 (1M context) --- roadmap.njk | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/roadmap.njk b/roadmap.njk index e60d0a5..1b84d0d 100644 --- a/roadmap.njk +++ b/roadmap.njk @@ -7,7 +7,7 @@ permalink: /roadmap/

Roadmap

-

Updated 2026-05-15 · Refreshed every couple of weeks · What shipped since launch →

+

Updated 2026-05-20 · Refreshed every couple of weeks · What shipped since launch →

@@ -20,6 +20,7 @@ permalink: /roadmap/
  • Parachute Hub — the coordinator. install, start, stop, expose, lifecycle for every service. OAuth issuer with per-vault scopes and cross-origin approve flow that works across loopback, tailnet, and public layers. Source →
  • Parachute Agent — a Parachute-flavored Claude Code distribution. Single binary, prewired to the hub, scoped tokens. Source →
  • Parachute Channel — messaging gateway that lets Claude Code agents reach you through Telegram, Discord, and other channels. Exploration; may retire if not pulled by real use. Source →
  • +
  • v0.6 Render self-host (just shipped) — one-click Deploy to Render. Single container, hub-as-supervisor, persistent disk; modules install at runtime via the admin UI. ~$7/month flat for an always-on hub on your own subdomain. Architecture note →
  • From 62b751dd0750c86ba13cc67c06cf582457b2aab5 Mon Sep 17 00:00:00 2001 From: Aaron Gabriel Date: Wed, 20 May 2026 07:25:53 -0600 Subject: [PATCH 4/5] docs(site): link v0.6 deploy architecture note from docs.njk Adds the 2026-05-18 v0.6 deploy architecture note to the design-notes index, on-site (the file builds to /design/.../ via design.11tydata.json). Drops the launch-window date framing now that we have a post-launch note. Adds a one-line clarification to the cloud-offering-sketch excerpt distinguishing it from the v0.6 self-host shape. Refs #42. Co-Authored-By: Claude Opus 4.7 (1M context) --- docs.njk | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/docs.njk b/docs.njk index 0a599ff..1a7edcc 100644 --- a/docs.njk +++ b/docs.njk @@ -16,8 +16,15 @@ permalink: /docs/

    Architecture design notes

    -

    Written 2026-04-20 in the week before public launch, capturing the shape Parachute is evolving toward.

    +

    Capturing the shape Parachute is evolving toward.

    From ad6cd2f0a81a426bc4cb5e678f2dba5395c58564 Mon Sep 17 00:00:00 2001 From: Aaron Gabriel Date: Wed, 20 May 2026 07:33:30 -0600 Subject: [PATCH 5/5] =?UTF-8?q?polish(site):=20/deploy/render/=20=E2=80=94?= =?UTF-8?q?=20match=20wizard=20done-screen=20reality=20+=20link=20Render?= =?UTF-8?q?=20pricing?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Reviewer caught three drift points between the walkthrough and what the hub wizard actually renders today. Two were copy-the-command-and-it-401s class problems; one was a pricing claim we couldn't independently verify. Fixes: 1. Wizard's MCP command does NOT include an auth header or token. The wizard renders `claude mcp add --transport http parachute-${vault} ${hubOrigin}/vault/${vault}/mcp` and directs to /admin/tokens for token mint. Rewrote step 6 as a two-step pattern: copy the wizard's command, mint a token from /admin/tokens, re-run with --header. The example block now shows both forms — bare first, then the full Bearer-bearing form — in the order a visitor encounters them. Updated step 4's "What you should see" to drop the "freshly minted token" claim; says what the wizard actually does. 2. Done screen renders two tiles ("Open the admin UI" → /admin/vaults and "Connect Claude Code (MCP)") — not direct Notes/Scribe install links. Rewrote step 4's Done bullet to describe the actual tiles. Updated step 5's intro to reflect the navigation path: done → /admin/vaults → /admin/modules. 3. Hardcoded $0.25/GB disk pricing replaced with a link to render.com/pricing — couldn't verify the per-GB number from public sources, and pricing drift would silently break our page. Kept the $7 Starter mention since that's well-documented. Updated the expected-total line accordingly. A hub follow-up (mint a token on the wizard done screen + direct Notes/Scribe install buttons) would be better UX but lives outside this site PR. Refs #42. Co-Authored-By: Claude Opus 4.7 (1M context) --- deploy/render.njk | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/deploy/render.njk b/deploy/render.njk index d72cd29..bb37e5c 100644 --- a/deploy/render.njk +++ b/deploy/render.njk @@ -75,10 +75,10 @@ permalink: /deploy/render/
  • Account. Pick a username and password. Stored in the hub's database with argon2 hashing. There's no email-based recovery on the self-hosted path — the hub belongs to you, so write the password down.
  • Vault. Names your first vault (defaults to default). You can add more vaults later from the admin UI.
  • Expose. Pick how this hub is reached. For Render: choose Public URL — Render handles TLS termination on the *.onrender.com subdomain (or your custom domain). The other options (Tailscale, Cloudflare Tunnel) are for the local-install path; on Render they're not the right fit.
  • -
  • Done. Shows the claude mcp add line for Claude Code, plus links into the admin UI to install Notes and Scribe.
  • +
  • Done. Two tiles: Open the admin UI (lands on /admin/vaults; from there you can navigate to /admin/modules to install Notes, Scribe, and any other modules) and Connect Claude Code (MCP) (the install command for the MCP wiring — see step 6).
  • -

    What you should see. The done screen renders the MCP install command pre-filled with your hub's URL and a freshly minted token. Copy it; you'll paste it into Claude Code in step 6.

    +

    What you should see. The done screen renders the claude mcp add command pre-filled with your hub's URL and vault name. Note: the wizard's command does not include an auth header — you mint a token separately from /admin/tokens and add the header yourself. Step 6 walks the full pattern.

    @@ -86,7 +86,7 @@ permalink: /deploy/render/

    Why this step. The hub on its own is just the supervisor — useful for OAuth and module lifecycle, but not yet the thing you want to talk to. Modules are where the actual reading, writing, and capturing happens.

    -

    Navigate to /admin/modules. You'll see Vault, Notes, and Scribe listed as available. Click Install next to each one you want. Install takes about a minute per module — the hub runs bun install against the package and persists it under /parachute/modules/node_modules/, then spawns it as a child process and mounts its routes under /vault, /notes, /scribe.

    +

    From the done screen's Open the admin UI tile (lands on /admin/vaults), navigate to Modules — that's /admin/modules. You'll see Vault, Notes, and Scribe listed as available. Click Install next to each one you want. Install takes about a minute per module — the hub runs bun install against the package and persists it under /parachute/modules/node_modules/, then spawns it as a child process and mounts its routes under /vault, /notes, /scribe.

    What you should see. Each installed module switches to a Running badge with its mounted path. Notes is reachable at <your-hub>/notes, vault's REST API at <your-hub>/vault/default, scribe at <your-hub>/scribe.

    @@ -94,17 +94,23 @@ permalink: /deploy/render/

    6. Connect Claude Code

    -

    Why this step. The vault is running and reachable, but no client is wired to it yet. Claude Code is the zero-config path — one command and the MCP server is registered in ~/.claude.json.

    +

    Why this step. The vault is running and reachable, but no client is wired to it yet. Claude Code talks MCP over HTTP — one command registers the server in ~/.claude.json, then it picks it up on the next session.

    -

    Paste the claude mcp add line from the wizard's done screen into your terminal. It looks like:

    +

    Connecting is a two-step pattern. First, copy the claude mcp add command from the wizard's done screen into your terminal — it looks like:

    - claude mcp add parachute-vault https://your-hub.onrender.com/vault/default/mcp --header "Authorization: Bearer pvt_..." + claude mcp add --transport http parachute-default https://your-hub.onrender.com/vault/default/mcp
    -

    Start a new Claude Code session in any project. Run /mcpparachute-vault should appear with its nine tools resolved. Memory now persists across every session, backed by your Render-hosted hub.

    +

    Then mint an API token: go to /admin/tokens in the admin UI, create a new token (default scope vault:write is what you want), and copy the pvt_... string. Re-run claude mcp add with the header flag — or edit the entry in ~/.claude.json directly — so the final form is:

    -

    What you should see. parachute-vault in /mcp's list with status connected. Asking Claude to write a note succeeds and the note appears in the Notes UI on <your-hub>/notes immediately.

    +
    + claude mcp add --transport http parachute-default https://your-hub.onrender.com/vault/default/mcp --header "Authorization: Bearer pvt_..." +
    + +

    Start a new Claude Code session in any project. Run /mcpparachute-default should appear with its nine tools resolved. Memory now persists across every session, backed by your Render-hosted hub.

    + +

    What you should see. parachute-default in /mcp's list with status connected. Asking Claude to write a note succeeds and the note appears in the Notes UI on <your-hub>/notes immediately.

    @@ -130,11 +136,11 @@ permalink: /deploy/render/
    • Render Starter: $7/month, flat. The web service tier. The free tier doesn't support persistent disks, and the hub needs a disk for module installs and vault data — so Starter is the minimum.
    • -
    • Persistent disk: $0.25 per GB per month beyond the 1GB included with Starter. Vault databases are tiny — typical single-operator usage stays well under 1GB through the first year, so most people pay nothing extra.
    • +
    • Persistent disk: Render charges separately for disk space beyond the included 1GB — see Render's pricing for current rates. Vault databases are tiny; typical single-operator usage stays well under 1GB through the first year, so most people pay nothing extra.
    • Custom domain: free, assuming you already own the domain. TLS via Let's Encrypt is included.
    -

    Expected total: ~$7–8 per month for hub + vault + notes + scribe running together.

    +

    Expected total: ~$7/month plus disk-overage for hub + vault + notes + scribe running together — most single-operator setups stay at the $7 floor.

    Compare locally: the same stack on your own Mac or Linux box is free, but you give up the always-on URL and the "works from my phone, anywhere" property. The Render path is the trade.