diff --git a/CHANGELOG.md b/CHANGELOG.md
index df1f2c3d..6584493e 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -19,6 +19,11 @@ Format follows [Keep a Changelog](https://keepachangelog.com/). Haven uses [Sema
people who never will. It is per browser, and the fold survives channel
switches and reloads. Requested by @quakeman00.
+### Changed
+- **Homepage.** The logo leads the page, the screenshots are full size with a
+ Gallery you can step through with the arrow keys, the phone shot sits beside
+ Security and privacy, and a community channel shot follows the feature list.
+
### Fixed
- **CRT text reads bigger (#5606).** The theme's VT323 face is scaled up a
further notch, so sub-channel names and other fine print no longer read a
diff --git a/docs/img/haven-4-6-default.jpg b/docs/img/haven-4-6-default.jpg
index b170d08a..f0118ff0 100644
Binary files a/docs/img/haven-4-6-default.jpg and b/docs/img/haven-4-6-default.jpg differ
diff --git a/docs/img/haven-features.jpg b/docs/img/haven-features.jpg
new file mode 100644
index 00000000..cc798269
Binary files /dev/null and b/docs/img/haven-features.jpg differ
diff --git a/docs/img/haven-theme-braid.jpg b/docs/img/haven-theme-braid.jpg
index 2a4cd980..2f1ccd04 100644
Binary files a/docs/img/haven-theme-braid.jpg and b/docs/img/haven-theme-braid.jpg differ
diff --git a/docs/img/haven-theme-crt.jpg b/docs/img/haven-theme-crt.jpg
index 108ebe4d..de46c58c 100644
Binary files a/docs/img/haven-theme-crt.jpg and b/docs/img/haven-theme-crt.jpg differ
diff --git a/docs/index.html b/docs/index.html
index 96197a76..84cd7857 100644
--- a/docs/index.html
+++ b/docs/index.html
@@ -7,11 +7,11 @@
-
+
-
+
@@ -135,7 +135,10 @@
/* ── Hero ────────────────────────────────────────── */
.hero { padding-top: clamp(40px, 6vw, 72px); }
.hero-grid { display: grid; grid-template-columns: minmax(0, 1.1fr) minmax(0, 0.9fr); gap: clamp(28px, 5vw, 64px); align-items: start; }
- .hero .lead { font-size: 20px; line-height: 1.5; margin-top: 22px; max-width: 34em; }
+ .hero-brand { display: inline-flex; align-items: center; gap: 0.32em; color: var(--ink); font-weight: 600; font-size: clamp(48px, 7vw, 76px); letter-spacing: 0.01em; line-height: 1; }
+ .hero-brand svg { width: 1.05em; height: 1.05em; flex: none; }
+ .hero-title { font-size: clamp(20px, 2.4vw, 25px); font-weight: 700; letter-spacing: -0.01em; margin-top: 30px; }
+ .hero .lead { font-size: 20px; line-height: 1.5; margin-top: 10px; max-width: 34em; }
.actions { display: flex; flex-wrap: wrap; gap: 12px; align-items: center; margin-top: 30px; }
.btn { display: inline-flex; align-items: center; gap: 8px; padding: 11px 18px; border-radius: 4px; font-weight: 600; font-size: 16px; text-decoration: none; border: 1px solid transparent; line-height: 1.2; }
.btn-primary { background: var(--accent); color: var(--accent-ink); }
@@ -166,8 +169,9 @@
.cols > div:first-child { padding-left: 0; border-left: 0; }
.cols > div:last-child { padding-right: 0; }
.cols h3 { margin-bottom: 10px; padding-bottom: 8px; border-bottom: 1px solid var(--rule); }
- .cols ul { list-style: none; padding: 0; }
- .cols li { padding-left: 0; font-size: 16px; }
+ .cols ul { list-style: disc; padding-left: 1.1em; }
+ .cols li { font-size: 16px; }
+ .cols li::marker { color: var(--accent); }
.cols li + li { margin-top: 0.5em; }
/* ── Steps ───────────────────────────────────────── */
@@ -205,6 +209,11 @@
.lightbox { position: fixed; inset: 0; z-index: 50; background: rgba(10, 8, 16, 0.92); display: flex; align-items: center; justify-content: center; padding: 24px; cursor: zoom-out; }
.lightbox[hidden] { display: none; }
.lightbox img { max-width: 100%; max-height: 100%; border-radius: 6px; box-shadow: 0 10px 40px rgba(0, 0, 0, 0.5); }
+ .lb-nav { position: absolute; top: 50%; transform: translateY(-50%); width: 44px; height: 44px; border: 0; border-radius: 50%; background: rgba(255, 255, 255, 0.14); color: #fff; font-size: 30px; line-height: 1; cursor: pointer; display: grid; place-items: center; padding: 0 0 4px; }
+ .lb-nav:hover { background: rgba(255, 255, 255, 0.26); }
+ .lb-prev { left: 18px; }
+ .lb-next { right: 18px; }
+ @media (max-width: 700px) { .lb-nav { width: 36px; height: 36px; font-size: 24px; } .lb-prev { left: 8px; } .lb-next { right: 8px; } }
/* ── Facts ───────────────────────────────────────── */
.facts { display: grid; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); gap: 0; border-top: 1px solid var(--rule-strong); border-bottom: 1px solid var(--rule-strong); }
@@ -263,6 +272,7 @@
CompareSetupSecurity
+ GalleryDownloadGitHubTry it now
@@ -275,7 +285,11 @@
-
A chat server you run yourself.
+
+
+ Haven
+
+
A chat server you run yourself.
Haven is a free, open source alternative to Discord. It runs on your own computer, your friends join with a link, and there's no company in the middle.
There's no company in the middle. No account with us, no email or phone number, and nothing to pay for. Your messages, files and voice calls stay on your own server.
Haven has been in development since February 2026. It's a spare-time project and it'll always be free.
Many helpful people with a shared passion for free, unfiltered and private chat have come together to improve it. Every change is public, with a changelog updated every release.
-
-
-
- Joining from a phone browser. No app needed.
-
@@ -354,10 +362,9 @@
Customization
-
26 themes, or write your own CSS
+
26 themes with customizable effects, or write your own CSS
Bots and webhooks
Sign in with your own identity provider
-
Backups and updates from the settings page
Guest access, invite links and channel codes
Available in 8 languages
@@ -368,9 +375,13 @@
Rich Presence: show what you're playing or listening to
Built-in games with leaderboards
Flash games, through Ruffle
+
Backups and updates from the settings page
+
+
+
@@ -427,7 +438,8 @@
Security and privacy
How it actually works.
-
+
+
Your data lives on the computer running the server, in one folder. Back it up, move it or delete it whenever you want.
Direct messages are end-to-end encrypted. The server stores them but can't read them, and neither can the admin.
@@ -436,6 +448,13 @@
No telemetry. The server doesn't send usage data or crash reports anywhere.
There's no central Haven server and no Haven account. Nothing to leak.
+
+
+
+ Joining from a phone browser. No app needed.
+
+
+
What the server connects to
Every outside service a Haven server contacts, and when.
Haven is a free, open source alternative to Discord. It runs on your own computer, your friends join with a link, and there's no company in the middle.
There's no company in the middle. No account with us, no email or phone number, and nothing to pay for. Your messages, files and voice calls stay on your own server.
Haven has been in development since February 2026. It's a spare-time project and it'll always be free.
Many helpful people with a shared passion for free, unfiltered and private chat have come together to improve it. Every change is public, with a changelog updated every release.
-
-
-
- Joining from a phone browser. No app needed.
-
@@ -354,10 +362,9 @@
Customization
-
26 themes, or write your own CSS
+
26 themes with customizable effects, or write your own CSS
Bots and webhooks
Sign in with your own identity provider
-
Backups and updates from the settings page
Guest access, invite links and channel codes
Available in 8 languages
@@ -368,9 +375,13 @@
Rich Presence: show what you're playing or listening to
Built-in games with leaderboards
Flash games, through Ruffle
+
Backups and updates from the settings page
+
+
+
@@ -427,7 +438,8 @@
Security and privacy
How it actually works.
-
+
+
Your data lives on the computer running the server, in one folder. Back it up, move it or delete it whenever you want.
Direct messages are end-to-end encrypted. The server stores them but can't read them, and neither can the admin.
@@ -436,6 +448,13 @@
No telemetry. The server doesn't send usage data or crash reports anywhere.
There's no central Haven server and no Haven account. Nothing to leak.
+
+
+
+ Joining from a phone browser. No app needed.
+
+
+
What the server connects to
Every outside service a Haven server contacts, and when.