Hosting options
Pick one level at a time, and know what the next one buys you.
You don't have to deploy rememd. You ship it wherever Docker runs. The right answer depends on where your team is right now, and it usually changes over time as you go from "is this even useful?" to "this is how we work every day."
Climb the ladder only when the current level actually pinches.
Level 1 - laptop Docker (where to start)
docker compose up -d on your MacBook, teammates join from the same Wi-Fi via your LAN IP.
- Setup cost: 5 minutes.
- Running cost: $0.
- Who it's for: you + 1 person in the same office, same day.
Pros: nothing to sign up for, no DNS, no TLS, no cloud bill. You can tear it all down and restart from scratch if you wreck it.
Cons: only reachable on your network. If your laptop sleeps, everyone disconnects.
Move up when: a teammate isn't in the same room anymore.
Level 2 - ngrok (cheap remoting)
ngrok http 8080 gives you a public HTTPS URL that tunnels to your laptop.
- Setup cost: 5 minutes if you already have ngrok; 10 if you don't.
- Running cost: $0 free tier or $10/mo for a stable URL.
Pros: anyone on the internet can reach you, TLS is free, no DNS, no server to maintain.
Cons:
- Your laptop still has to be awake. Close the lid → everyone's disconnected.
- Free-tier URL changes every restart. Every change = every teammate re-runs
rememd join. - Traffic routes through ngrok's edge; every PRD and session log passes through their infra.
- Rate limits bite on a busy day.
Good for: demos, pairing sessions, letting dev B try it for a day.
Move up when: dev B needs to add a note while you're at dinner.
Level 3 - Tailscale (the sweet spot most teams miss)
Install Tailscale on your laptop and each teammate's machine. Your docker compose up stays the same, but your laptop now has a stable 100.x.x.x address reachable only from your tailnet.
Teammates join with rememd join "http://100.x.x.x:8080/join?token=...".
- Setup cost: 15 minutes (install, sign in, done).
- Running cost: free up to 3 users + 100 devices for personal use.
Pros:
- Stable IP that works through NATs, coffee-shop Wi-Fi, anywhere your laptop has a connection.
- Private - your data never hits the public internet. No DNS, no TLS setup.
- Your laptop can move networks (office → home → train) and teammates stay connected.
Cons:
- Your laptop still has to be awake. Lid closed = nobody can reach it.
- Not suitable for users outside your trust boundary (external contractors, clients).
Good for: the first real month of team use. Most two-person teams never need to leave this level.
Move up when: you're sick of your laptop being part of the critical path.
Level 4 - VPS / EC2 / Fly.io (always-on)
A small cloud box runs docker compose up -d 24/7. See the "Running the backend in the cloud" page for the EC2 + Caddy + TLS walkthrough.
- Setup cost: 30 - 60 minutes the first time.
- Running cost: ~$0 on Fly.io free tier, ~$15/mo on a t4g.small EC2.
Pros:
- Always reachable. Laptops sleep, backend keeps running.
- Real TLS via Caddy + Let's Encrypt or managed platform.
- Scales to your whole team.
- Backups, rotations, EBS snapshots - all the grown-up stuff.
Cons:
- You're managing a server. Updates, security patches, monitoring.
- Costs real money, however small.
- Public exposure means you actually have to think about rate limits and secrets (see "Running the backend in the cloud" → "What you still don't have").
Good for: teams of 3+, or any setup where someone needs to collaborate outside your laptop's awake hours.
Level 5 - managed / hosted rememd
Doesn't exist yet. If rememd ever offers a hosted tier, it'd slot in here so you don't have to run anything.
How to move between levels
The data migrates cleanly at every step because the backend is just docker compose + a Postgres volume.
Laptop → EC2 (or any other move):
# On the old box
cd backend/ && make backup
scp backups/rememd-<latest>.sql.gz ubuntu@ec2-box:~/
# On the new box
cd backend/
mv ~/rememd-<latest>.sql.gz backups/
docker compose up -d
make restore FILE=backups/rememd-<latest>.sql.gz
Then each teammate updates ~/.recall/remote.json to the new server URL (or runs rememd join <new-invite-url> - access tokens from the dump work on the new host because the hashes match).
Moving in the other direction (EC2 → laptop) is the exact same sequence, just reversed. No rewrite, no data loss, no magic.
My honest recommendation
- Day 0: Level 1. Don't overbuild.
- Week 1: Level 3 (Tailscale). Skip ngrok unless you have a specific demo reason.
- Month 1+: Level 4, but only if Level 3 is actively annoying you. Many two-person teams live happily at Level 3 forever.
Don't skip levels upward. Every level up is more responsibility. Climb when the current level genuinely hurts, not because the next one sounds more serious.