diff --git a/README.md b/README.md
index b6c3ecc..312e592 100644
--- a/README.md
+++ b/README.md
@@ -6,7 +6,84 @@
-# Running Locally
+# Deploy Your Own Instance (Self-Host)
+
+1. Create accounts on [GitHub](https://github.com), [Namecheap](https://www.namecheap.com), and [DigitalOcean](https://www.digitalocean.com).
+
+2. [Fork](https://github.com/leafac/www.kill-the-newsletter.com/fork) this repository.
+
+3. Create a deployment SSH key pair:
+
+ ```console
+ $ ssh-keygen
+ ```
+
+ **Private key (`id_rsa`):** Add to your fork under **Settings > Secrets** as a new secret called `SSH_PRIVATE_KEY`.
+
+ **Public key (`id_rsa.pub`):** Add to your fork under **Settings > Deploy keys** and to your DigitalOcean account under **Account > Security > SSH keys**.
+
+4. Buy a domain on Namecheap.
+
+5. Create a DigitalOcean droplet:
+
+ | | |
+ | ---------------------- | ------------------------------------------------------- |
+ | **Image** | Ubuntu 18.04.3 (LTS) x64 |
+ | **Plan** | Starter Standard \$5/mo |
+ | **Additional options** | Monitoring |
+ | **Authentication** | Your Deployment SSH Key |
+ | **Hostname** | `` |
+ | **Backups** | Enable |
+
+6. Assign the new droplet a **Firewall**:
+
+ | | | |
+ | ----------------- | ------------------------------------------------------- | --------- |
+ | **Name** | `` | |
+ | **Inbound Rules** | ICMP | |
+ | | SSH | 22 |
+ | | Custom | 25 (SMTP) |
+ | | HTTP | 80 |
+ | | HTTPS | 443 |
+
+7. Assign the new droplet a **Floating IP**.
+
+8. Configure the DNS in Namecheap:
+
+ | Type | Host | Value |
+ | ------- | ----- | ------------------------------------------------------- |
+ | `A` | `@` | `` |
+ | `CNAME` | `www` | `` |
+ | `MX` | `@` | `` |
+
+9. Configure the deployment on [`package.json`](package.json), particularly under the following keys:
+
+ - `apps.env.BASE_URL`.
+ - `apps.env.EMAIL_DOMAIN`.
+ - `apps.env.ISSUE_REPORT`.
+ - `deploy.production.host`.
+ - `deploy.production.repo`.
+
+10. Configure [Caddy](https://caddyserver.com), the reverse proxy, on `Caddyfile`.
+
+11. Setup the server:
+
+ ```console
+ $ ssh-add
+ $ npx pm2 deploy package.json production setup
+ ```
+
+12. Migrate the existing feeds (if any):
+
+ ```console
+ $ ssh-add
+ $ ssh -A root@
+ root@ $ rsync -av /root/www.kill-the-newsletter.com/current/static/feeds/
+ ```
+
+13. Push to your fork, which will trigger the Action that deploys the code and starts the server.
+
+# Run Locally
Install [Node.js](https://nodejs.org/) and run:
@@ -17,63 +94,10 @@ $ npm start
The web server will be running at `http://localhost:8000` and the email server at `smtp://localhost:2525`.
-# Deployment
+# Run Tests
-1. Create a deployment SSH key pair:
+Install [Node.js](https://nodejs.org/) and run:
- ```console
- $ ssh-keygen
- ```
-
- **Private key (`id_rsa`):** Add to GitHub as a **Secret** called `SSH_PRIVATE_KEY`.
-
- **Public key (`id_rsa.pub`):** Add to DigitalOcean and to GitHub as a **Deploy key** for the repository.
-
-2. Create a DigitalOcean droplet:
-
- | | |
- | ------------------ | ------------------------- |
- | Image | Ubuntu 18.04.3 (LTS) x64 |
- | Plan | Starter Standard \$5/mo |
- | Additional options | Monitoring |
- | Authentication | Deployment SSH Key |
- | Hostname | `kill-the-newsletter.com` |
- | Backups | Enable |
-
- **Firewall**
-
- | | | |
- | ------------- | ------------------------- | --------- |
- | Name | `kill-the-newsletter.com` | |
- | Inbound Rules | ICMP | |
- | | SSH | 22 |
- | | Custom | 25 (SMTP) |
- | | HTTP | 80 |
- | | HTTPS | 443 |
-
- **Floating IP**
-
-3. Configure DNS in Namecheap:
-
- | Type | Host | Value |
- | ------- | ----- | ------------------------- |
- | `A` | `@` | `` |
- | `CNAME` | `www` | `kill-the-newsletter.com` |
- | `MX` | `@` | `kill-the-newsletter.com` |
-
-4. Setup the server:
-
- ```console
- $ ssh-add
- $ npx pm2 deploy package.json production setup
- ```
-
-5. Migrate the existing feeds:
-
- ```console
- $ ssh-add
- $ ssh -A root@kill-the-newsletter.com
- root@kill-the-newsletter.com $ rsync -av /root/www.kill-the-newsletter.com/current/static/feeds/
- ```
-
-6. Push to GitHub, which will trigger the Action that deploys the code and starts the server.
+```console
+$ npm install-test
+```