Copy/paste from below into the respective terminals and claude sessions.
The library will keep expanding as I make more videos
Pack 3 · Domain + HTTPS
Connect your domain to the droplet
Point a domain at the droplet, put nginx in front as a reverse proxy, get a free Let's Encrypt cert, and run your app as a systemd service - so every UI and module you build is reachable over HTTPS at its own subdomain.
Step 1 · DNS
1. Point the domain at the droplet
In your registrar (or DigitalOcean's DNS), add an A record for the host you want pointing at the droplet's public IP. Use a subdomain like app.yourdomain.com so you can run many modules off one box.
# Add these records at your DNS provider (TTL can be low while testing):
# Type Host Value
# A app YOUR_DROPLET_IP
# A @ (optional apex) YOUR_DROPLET_IP
# Check it has propagated (from your laptop):
dig +short app.yourdomain.com
# …should print YOUR_DROPLET_IP before you go further.
Step 2 · Reverse proxy
2. Put nginx in front of your app
Install nginx and add a server block that reverse-proxies the subdomain to the local port your app listens on. One server block per subdomain/module.
sudo apt install -y nginx
# Create the site (swap in your subdomain + app port):
sudo tee /etc/nginx/sites-available/app.yourdomain.com >/dev/null <<'NGINX'
server {
listen 80;
server_name app.yourdomain.com;
location / {
proxy_pass http://127.0.0.1:4000;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
NGINX
sudo ln -s /etc/nginx/sites-available/app.yourdomain.com /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx
Step 3 · HTTPS
3. Get a free HTTPS certificate
Use certbot to issue a Let's Encrypt cert for the subdomain. Issue with certonly, then let it wire HTTPS into the server block - this keeps it from clobbering other sites on the box.
sudo apt install -y certbot python3-certbot-nginx
# Issue the cert for just this host (certonly avoids rewriting other vhosts):
sudo certbot certonly --nginx -d app.yourdomain.com
# Then add the 443 server block (certbot can do this for the single domain):
sudo certbot --nginx -d app.yourdomain.com
# Auto-renewal is installed as a timer - confirm it:
sudo certbot renew --dry-run
Step 4 · Keep it running
4. Run the app as a service
So the app survives reboots and crashes, run it under systemd. Use an absolute node path and your non-root user.
# Create the service (swap in your user, project path, and node path):
sudo tee /etc/systemd/system/follow-up-engine.service >/dev/null <<'UNIT'
[Unit]
Description=Follow-up engine
After=network.target postgresql.service
[Service]
User=claude
WorkingDirectory=/home/claude/apps/follow-up-engine
EnvironmentFile=/home/claude/apps/follow-up-engine/.env
ExecStart=/usr/local/bin/node --import tsx src/server.ts
Restart=on-failure
[Install]
WantedBy=multi-user.target
UNIT
sudo systemctl daemon-reload
sudo systemctl enable --now follow-up-engine
sudo systemctl status follow-up-engine --no-pager
Step 4 · Keep it running
5. Verify the whole path
Confirm the request flows domain → nginx → your app over HTTPS, end to end.
# From your laptop:
curl -i https://app.yourdomain.com/health
# Expect HTTP/2 200 and { "ok": true } from the app you scaffolded in Pack 1.
Some links above are affiliate or referral links - if you sign up through them I may earn a credit or commission, at no extra cost to you. I only point you at tools I actually use.