2026-03-15 11:50:33 +00:00
<!DOCTYPE html>
2026-02-12 16:35:02 +00:00
< html lang = "en" >
< head >
< meta charset = "UTF-8" >
< meta name = "viewport" content = "width=device-width, initial-scale=1.0" >
2026-03-15 11:32:05 +00:00
< title > Haven — Private Chat That Lives On Your Machine< / title >
< meta name = "description" content = "Haven is a free, open-source private chat server you run on your own computer. Voice chat, screen sharing, 25+ themes, sub-channels, direct messages, file sharing, and more. Only the host downloads — friends join from their browser." >
2026-02-12 17:12:24 +00:00
< meta name = "keywords" content = "private chat, self-hosted, discord alternative, open source, voice chat, screen sharing, encrypted, no cloud, mobile compatible" >
2026-02-12 16:35:02 +00:00
<!-- Open Graph -->
2026-03-15 11:32:05 +00:00
< meta property = "og:title" content = "Haven — Private Chat That Lives On Your Machine" >
< meta property = "og:description" content = "Free, open-source private chat with voice, screen sharing, and 25+ themes. Only the host downloads — friends join from their browser." >
2026-02-12 16:35:02 +00:00
< meta property = "og:type" content = "website" >
2026-02-25 00:20:25 +00:00
< meta property = "og:url" content = "https://ancsemi.github.io/Haven/" >
Fix subchannel arrow layout, add missing login themes, ambient religious theme effects, fix hero image
- Move subchannel collapse arrow to right edge (no longer indents channel name)
- Normalize sub-channel font size to 14px to match parent channels
- Add all 9 missing themes to login page (darksouls, eldenring, minecraft, ffx, zelda, fallout, crt, win95, rgb)
- Scripture: subtle pulsating crucifix sunlight shadow effect
- Chapel: prismatic stained glass light beam effect
- Gospel: soft divine radiance descending effect
- Fix hero image with correct asset from issue #1
2026-02-14 07:48:04 +00:00
< meta property = "og:image" content = "https://github.com/user-attachments/assets/a3205eb4-7011-4b7b-825e-7aba76aa5c11" >
2026-02-12 16:35:02 +00:00
2026-02-25 00:20:25 +00:00
< link rel = "canonical" href = "https://ancsemi.github.io/Haven/" >
2026-02-12 17:47:50 +00:00
< meta name = "theme-color" content = "#191b28" >
2026-02-12 16:35:02 +00:00
<!-- Twitter Card -->
< meta name = "twitter:card" content = "summary_large_image" >
2026-03-15 11:32:05 +00:00
< meta name = "twitter:title" content = "Haven — Private Chat That Lives On Your Machine" >
2026-02-14 15:42:37 +00:00
< meta name = "twitter:description" content = "Free, open-source private chat. Voice, streaming, 25+ themes. Only the host downloads." >
Fix subchannel arrow layout, add missing login themes, ambient religious theme effects, fix hero image
- Move subchannel collapse arrow to right edge (no longer indents channel name)
- Normalize sub-channel font size to 14px to match parent channels
- Add all 9 missing themes to login page (darksouls, eldenring, minecraft, ffx, zelda, fallout, crt, win95, rgb)
- Scripture: subtle pulsating crucifix sunlight shadow effect
- Chapel: prismatic stained glass light beam effect
- Gospel: soft divine radiance descending effect
- Fix hero image with correct asset from issue #1
2026-02-14 07:48:04 +00:00
< meta name = "twitter:image" content = "https://github.com/user-attachments/assets/a3205eb4-7011-4b7b-825e-7aba76aa5c11" >
2026-02-12 17:47:50 +00:00
< meta name = "twitter:site" content = "@ancsemi" >
2026-02-12 16:35:02 +00:00
2026-03-15 11:32:05 +00:00
< link rel = "icon" type = "image/svg+xml" href = "data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'><text y='.9em' font-size='90'>⬡</text></svg>" >
2026-02-12 16:35:02 +00:00
2026-02-14 03:02:54 +00:00
<!-- Google tag (gtag.js) -->
< script async src = "https://www.googletagmanager.com/gtag/js?id=AW-17950126697" > < / script >
< script >
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'AW-17950126697');
< / script >
2026-02-12 16:35:02 +00:00
< style >
/* ============================================
RESET & BASE
============================================ */
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
:root {
--bg-deep: #15172a;
--bg-card: #1c1e33;
--bg-card-hover: #252840;
--bg-surface: #191b28;
--bg-hover: #2c2f4a;
--bg-active: #333660;
--bg-input: #15172a;
--accent: #7c5cfc;
--accent-bright: #9478ff;
--accent-dim: #5a3fd4;
--accent-glow: rgba(124, 92, 252, 0.25);
--accent-glow-strong: rgba(124, 92, 252, 0.45);
--green: #43b581;
--green-glow: rgba(67, 181, 129, 0.35);
--danger: #f04747;
--warning: #faa61a;
--pink: #fd79a8;
--text: #e2e4f0;
--text-muted: #9498b3;
--text-dim: #5d6180;
--text-link: #82aaff;
--border: #2d3050;
--border-light: #383b5e;
--radius: 8px;
--radius-lg: 16px;
--font: 'Segoe UI', system-ui, -apple-system, sans-serif;
}
html { scroll-behavior: smooth; }
body {
font-family: var(--font);
background: var(--bg-deep);
color: var(--text);
line-height: 1.6;
overflow-x: hidden;
-webkit-font-smoothing: antialiased;
}
h1, h2, h3, h4 { line-height: 1.2; font-weight: 700; }
h1 { font-size: clamp(2.5rem, 6vw, 4.5rem); letter-spacing: -0.03em; }
h2 { font-size: clamp(1.8rem, 4vw, 3rem); letter-spacing: -0.02em; }
h3 { font-size: 1.25rem; }
p { color: var(--text-muted); font-size: 1.1rem; }
a { color: var(--text-link); text-decoration: none; transition: color 0.15s ease; }
a:hover { color: var(--accent-bright); }
2026-02-12 17:12:24 +00:00
.container { max-width: 1200px; margin: 0 auto; padding: 0 24px; }
section { padding: 100px 0; }
2026-02-12 16:35:02 +00:00
/* ============================================
NAV
============================================ */
nav {
2026-02-12 17:12:24 +00:00
position: fixed; top: 0; left: 0; right: 0; z-index: 1000;
2026-02-12 16:35:02 +00:00
background: rgba(21, 23, 42, 0.85);
2026-02-12 17:12:24 +00:00
backdrop-filter: blur(20px); -webkit-backdrop-filter: blur(20px);
2026-02-12 16:35:02 +00:00
border-bottom: 1px solid var(--border);
2026-02-12 17:12:24 +00:00
padding: 0 24px; transition: background 0.3s;
2026-02-12 16:35:02 +00:00
}
.nav-inner {
2026-02-12 17:12:24 +00:00
max-width: 1200px; margin: 0 auto;
display: flex; align-items: center; justify-content: space-between; height: 64px;
2026-02-12 16:35:02 +00:00
}
2026-02-12 17:12:24 +00:00
.nav-brand { display: flex; align-items: center; gap: 10px; font-weight: 700; font-size: 1.2rem; color: #fff; }
.nav-brand .hex { font-size: 1.6rem; color: var(--accent); filter: drop-shadow(0 0 10px var(--accent-glow)); text-shadow: 0 0 12px var(--accent-glow); }
.nav-links { display: flex; align-items: center; gap: 32px; list-style: none; }
.nav-links a { color: var(--text-muted); font-size: 0.9rem; font-weight: 500; transition: color 0.15s ease; }
2026-02-12 16:35:02 +00:00
.nav-links a:hover { color: var(--text); }
.nav-cta {
2026-02-12 17:12:24 +00:00
background: var(--accent); color: #fff !important; padding: 8px 20px;
border-radius: var(--radius); font-weight: 600; font-size: 0.9rem;
transition: all 0.15s ease; box-shadow: 0 0 16px var(--accent-glow);
2026-02-12 16:35:02 +00:00
}
2026-02-12 17:12:24 +00:00
.nav-cta:hover { background: var(--accent-bright); transform: translateY(-1px); box-shadow: 0 0 24px var(--accent-glow-strong); }
.nav-mobile-toggle { display: none; background: none; border: none; color: var(--text); font-size: 1.5rem; cursor: pointer; padding: 4px; }
2026-02-12 16:35:02 +00:00
/* ============================================
HERO
============================================ */
.hero {
2026-02-12 17:12:24 +00:00
min-height: 100vh; display: flex; align-items: center;
position: relative; overflow: hidden; padding-top: 64px;
2026-02-12 16:35:02 +00:00
}
.hero::before {
2026-02-12 17:12:24 +00:00
content: ''; position: absolute; top: -20%; left: -10%;
width: 600px; height: 600px;
2026-02-12 16:35:02 +00:00
background: radial-gradient(circle, rgba(124, 92, 252, 0.18) 0%, transparent 70%);
2026-02-12 17:12:24 +00:00
animation: floatOrb 15s ease-in-out infinite; pointer-events: none;
2026-02-12 16:35:02 +00:00
}
.hero::after {
2026-02-12 17:12:24 +00:00
content: ''; position: absolute; bottom: -10%; right: -10%;
width: 500px; height: 500px;
2026-02-12 16:35:02 +00:00
background: radial-gradient(circle, rgba(67, 181, 129, 0.12) 0%, transparent 70%);
2026-02-12 17:12:24 +00:00
animation: floatOrb 18s ease-in-out infinite reverse; pointer-events: none;
2026-02-12 16:35:02 +00:00
}
@keyframes floatOrb {
0%, 100% { transform: translate(0, 0); }
33% { transform: translate(30px, -40px); }
66% { transform: translate(-20px, 30px); }
}
2026-02-12 17:12:24 +00:00
.hero-content { position: relative; z-index: 2; text-align: center; max-width: 800px; margin: 0 auto; }
2026-02-12 16:35:02 +00:00
.hero-badge {
2026-02-12 17:12:24 +00:00
display: inline-flex; align-items: center; gap: 8px;
background: rgba(124, 92, 252, 0.12); border: 1px solid rgba(124, 92, 252, 0.3);
padding: 6px 16px; border-radius: 999px; font-size: 0.85rem;
color: var(--accent-bright); margin-bottom: 24px; font-weight: 500;
}
.hero-badge .dot { width: 8px; height: 8px; background: var(--green); border-radius: 50%; animation: pulse 2s ease-in-out infinite; }
@keyframes pulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.4; } }
.hero h1 { color: #fff; margin-bottom: 20px; }
.hero h1 .gradient-text {
background: linear-gradient(135deg, var(--accent) 0%, var(--accent-bright) 40%, var(--text-link) 100%);
-webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text;
2026-02-12 16:35:02 +00:00
}
2026-02-12 17:12:24 +00:00
.hero-subtitle { font-size: clamp(1.1rem, 2.5vw, 1.35rem); color: var(--text-muted); max-width: 600px; margin: 0 auto 40px; line-height: 1.7; }
.hero-actions { display: flex; align-items: center; justify-content: center; gap: 16px; flex-wrap: wrap; margin-bottom: 48px; }
2026-02-12 16:35:02 +00:00
2026-02-12 17:12:24 +00:00
.btn {
display: inline-flex; align-items: center; gap: 10px;
padding: 14px 32px; border-radius: var(--radius); font-weight: 600;
font-size: 1.05rem; transition: all 0.15s ease; cursor: pointer; border: none; text-decoration: none;
}
.btn-primary { background: var(--accent); color: #fff; box-shadow: 0 4px 24px var(--accent-glow), 0 0 0 1px rgba(124, 92, 252, 0.3); }
.btn-primary:hover { background: var(--accent-bright); color: #fff; transform: translateY(-2px); box-shadow: 0 8px 36px var(--accent-glow-strong), 0 0 0 1px rgba(148, 120, 255, 0.5); }
.btn-secondary { background: rgba(255, 255, 255, 0.05); color: var(--text); border: 1px solid var(--border); }
.btn-secondary:hover { background: rgba(255, 255, 255, 0.1); color: #fff; transform: translateY(-2px); border-color: rgba(255, 255, 255, 0.15); }
.btn .icon { font-size: 1.2rem; }
.hero-note { font-size: 0.85rem; color: var(--text-dim); }
.hero-note strong { color: var(--text-muted); }
2026-02-12 16:35:02 +00:00
v2.0.0 Discord history import, E2E password-change fix, scroll fix
Added:
- Discord history import Direct Connect (paste token, pick server, select channels)
- Discord history import File upload (DiscordChatExporter JSON/ZIP)
- Tabbed import modal (Upload File | Connect to Discord)
- Full server structure import (text, announcement, forum, media, threads)
- Forum tag resolution and display
- Discord avatar preservation (webhook_avatar column)
- Channel type indicators in import picker
Fixed:
- E2E key loss on password change (re-wraps key with new password)
- Scroll-to-bottom loop when images load while scrolled up
- ARM64 Docker support (#34)
Changed:
- Website, README, GUIDE updated with Discord import docs
- Version bumped to 2.0.0
2026-02-19 00:53:58 +00:00
/* ============================================
DISCORD IMPORT BANNER
============================================ */
.discord-banner {
background: linear-gradient(135deg, #5865f2 0%, #7c5cfc 50%, #43b581 100%);
padding: 2px;
position: relative;
}
.discord-banner-inner {
background: var(--bg-deep);
padding: 64px 24px;
text-align: center;
}
.discord-banner h2 {
color: #fff;
font-size: clamp(1.8rem, 4vw, 2.8rem);
margin-bottom: 16px;
}
.discord-banner h2 .discord-blue { color: #5865f2; }
.discord-banner p {
color: var(--text-muted);
font-size: 1.15rem;
max-width: 700px;
margin: 0 auto 32px;
line-height: 1.7;
}
.discord-features {
display: flex;
flex-wrap: wrap;
justify-content: center;
gap: 16px;
max-width: 800px;
margin: 0 auto;
}
.discord-feat {
display: inline-flex;
align-items: center;
gap: 8px;
background: rgba(88, 101, 242, 0.12);
border: 1px solid rgba(88, 101, 242, 0.3);
padding: 8px 18px;
border-radius: 999px;
font-size: 0.9rem;
color: var(--text);
font-weight: 500;
}
@media (max-width: 768px) {
.discord-banner-inner { padding: 40px 16px; }
.discord-feat { font-size: 0.8rem; padding: 6px 14px; }
}
2026-02-24 23:54:00 +00:00
/* ============================================
DESKTOP APP BANNER
============================================ */
.desktop-banner {
background: linear-gradient(135deg, #7c5cfc 0%, #43b581 50%, #82aaff 100%);
padding: 2px;
position: relative;
}
.desktop-banner-inner {
background: var(--bg-deep);
padding: 64px 24px;
text-align: center;
}
.desktop-banner h2 {
color: #fff;
font-size: clamp(1.8rem, 4vw, 2.8rem);
margin-bottom: 16px;
}
.desktop-banner .desktop-accent { color: var(--accent-bright); }
.desktop-banner p {
color: var(--text-muted);
font-size: 1.15rem;
max-width: 700px;
margin: 0 auto 32px;
line-height: 1.7;
}
.beta-badge-inline {
display: inline-block;
background: rgba(250, 166, 26, 0.2);
color: var(--warning);
font-size: 0.55em;
font-weight: 700;
padding: 4px 12px;
border-radius: 6px;
border: 1px solid rgba(250, 166, 26, 0.4);
vertical-align: middle;
letter-spacing: 0.08em;
}
2026-03-06 04:56:14 +00:00
.closed-beta-badge-inline {
display: inline-block;
background: rgba(61, 220, 132, 0.15);
color: #3ddc84;
font-size: 0.55em;
font-weight: 700;
padding: 4px 12px;
border-radius: 6px;
border: 1px solid rgba(61, 220, 132, 0.4);
vertical-align: middle;
letter-spacing: 0.08em;
}
/* Android banner */
.android-banner {
background: linear-gradient(135deg, #3ddc84 0%, #2bb55e 50%, #82aaff 100%);
padding: 2px;
position: relative;
}
.android-banner-inner {
background: var(--bg-deep);
padding: 64px 24px;
text-align: center;
}
.android-banner h2 {
color: #fff;
font-size: clamp(1.8rem, 4vw, 2.8rem);
margin-bottom: 16px;
}
.android-banner .android-accent { color: #3ddc84; }
.android-banner p {
color: var(--text-muted);
font-size: 1.15rem;
max-width: 700px;
margin: 0 auto 32px;
line-height: 1.7;
}
.android-beta-email-form {
display: flex;
flex-direction: column;
align-items: center;
gap: 12px;
margin-top: 28px;
}
.android-beta-email-form input[type="email"] {
padding: 12px 18px;
font-size: 1rem;
border-radius: 8px;
border: 1px solid var(--border-light);
background: var(--bg-card);
color: var(--text);
width: 100%;
max-width: 360px;
outline: none;
transition: border-color 0.15s;
}
.android-beta-email-form input[type="email"]:focus {
border-color: #3ddc84;
box-shadow: 0 0 0 2px rgba(61, 220, 132, 0.2);
}
.android-beta-email-form .btn-android {
padding: 12px 24px;
font-size: 1rem;
font-weight: 600;
border-radius: 8px;
background: linear-gradient(135deg, #3ddc84, #2bb55e);
color: #fff;
border: none;
cursor: pointer;
transition: transform 0.1s, box-shadow 0.15s;
}
.android-beta-email-form .btn-android:hover {
transform: scale(1.03);
box-shadow: 0 4px 20px rgba(61, 220, 132, 0.35);
}
.android-credit {
margin-top: 20px;
font-size: 0.9rem;
color: var(--text-dim);
font-style: italic;
}
@media (max-width: 768px) {
.android-banner-inner { padding: 40px 16px; }
}
2026-02-24 23:54:00 +00:00
@media (max-width: 768px) {
.desktop-banner-inner { padding: 40px 16px; }
}
2026-04-06 02:45:32 +00:00
/* ============================================
COMMUNITY SERVER BANNER
============================================ */
.community-banner {
background: linear-gradient(135deg, #43b581 0%, #7c5cfc 50%, #82aaff 100%);
padding: 2px;
position: relative;
}
.community-banner-inner {
background: var(--bg-deep);
padding: 48px 24px;
text-align: center;
}
.community-banner h2 {
color: #fff;
font-size: clamp(1.5rem, 3vw, 2.2rem);
margin-bottom: 12px;
}
.community-banner .community-accent { color: var(--green); }
.community-banner p {
color: var(--text-muted);
font-size: 1.05rem;
max-width: 600px;
margin: 0 auto 24px;
line-height: 1.7;
}
@media (max-width: 768px) {
.community-banner-inner { padding: 32px 16px; }
}
2026-02-12 17:12:24 +00:00
.hero-screenshot {
position: relative; z-index: 2; max-width: 1000px; margin: 0 auto;
border-radius: var(--radius-lg); overflow: hidden;
box-shadow: 0 20px 80px rgba(0, 0, 0, 0.6), 0 0 0 1px var(--border), 0 0 60px var(--accent-glow);
v1.8.1: E2E per-account keys, W95 UI fixes, games pop-out, website overhaul
- E2E encryption: keys now sync per-account via PBKDF2 password wrapping (not per-device)
- E2E: private keys stored encrypted server-side, decrypted with user password
- Win95 theme: 3D beveled buttons for all controls (voice, sidebar, modal, toolbar)
- Win95 theme: fixed double scrollbar arrows, black text on gray backgrounds
- Games: default to pop-out window, with iframe fallback if blocked
- Dual-role display: User badge now properly stripped when higher role exists
- Ruffle/Flash: CSP headers fixed (wasm-unsafe-eval + unpkg worker-src)
- Website: carousel fixed height (no more page jumping), interval 4s
- Website: replaced screenshots with latest, updated feature cards
- Website: added E2E encryption to selling points, features grid, comparison table
- Website: updated file sharing limit (configurable up to 1.5 GB), games card expanded
2026-02-17 00:43:46 +00:00
aspect-ratio: 1920 / 948; /* fixed ratio prevents layout shift during carousel */
2026-02-12 16:35:02 +00:00
}
2026-02-14 15:42:37 +00:00
.hero-screenshot img {
v1.8.1: E2E per-account keys, W95 UI fixes, games pop-out, website overhaul
- E2E encryption: keys now sync per-account via PBKDF2 password wrapping (not per-device)
- E2E: private keys stored encrypted server-side, decrypted with user password
- Win95 theme: 3D beveled buttons for all controls (voice, sidebar, modal, toolbar)
- Win95 theme: fixed double scrollbar arrows, black text on gray backgrounds
- Games: default to pop-out window, with iframe fallback if blocked
- Dual-role display: User badge now properly stripped when higher role exists
- Ruffle/Flash: CSP headers fixed (wasm-unsafe-eval + unpkg worker-src)
- Website: carousel fixed height (no more page jumping), interval 4s
- Website: replaced screenshots with latest, updated feature cards
- Website: added E2E encryption to selling points, features grid, comparison table
- Website: updated file sharing limit (configurable up to 1.5 GB), games card expanded
2026-02-17 00:43:46 +00:00
width: 100%; height: 100%; object-fit: cover; display: block;
2026-02-14 15:42:37 +00:00
position: absolute; top: 0; left: 0;
opacity: 0; transition: opacity 1s ease-in-out;
}
v1.8.1: E2E per-account keys, W95 UI fixes, games pop-out, website overhaul
- E2E encryption: keys now sync per-account via PBKDF2 password wrapping (not per-device)
- E2E: private keys stored encrypted server-side, decrypted with user password
- Win95 theme: 3D beveled buttons for all controls (voice, sidebar, modal, toolbar)
- Win95 theme: fixed double scrollbar arrows, black text on gray backgrounds
- Games: default to pop-out window, with iframe fallback if blocked
- Dual-role display: User badge now properly stripped when higher role exists
- Ruffle/Flash: CSP headers fixed (wasm-unsafe-eval + unpkg worker-src)
- Website: carousel fixed height (no more page jumping), interval 4s
- Website: replaced screenshots with latest, updated feature cards
- Website: added E2E encryption to selling points, features grid, comparison table
- Website: updated file sharing limit (configurable up to 1.5 GB), games card expanded
2026-02-17 00:43:46 +00:00
.hero-screenshot img.active { opacity: 1; }
2026-02-12 16:35:02 +00:00
2026-02-12 17:12:24 +00:00
/* ============================================
PLATFORM SHOWCASE (Desktop + Mobile)
============================================ */
.platform-showcase {
background: var(--bg-surface);
border-top: 1px solid var(--border);
border-bottom: 1px solid var(--border);
overflow: hidden;
2026-02-12 16:35:02 +00:00
}
2026-02-12 17:12:24 +00:00
.showcase-layout {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 64px;
align-items: center;
2026-02-12 16:35:02 +00:00
}
2026-02-12 17:12:24 +00:00
.showcase-text h2 { color: #fff; margin-bottom: 16px; }
.showcase-text p { margin-bottom: 20px; }
2026-02-12 16:35:02 +00:00
2026-02-12 17:12:24 +00:00
.platform-tags {
2026-02-12 16:35:02 +00:00
display: flex;
flex-wrap: wrap;
2026-02-12 17:12:24 +00:00
gap: 10px;
margin-top: 24px;
2026-02-12 16:35:02 +00:00
}
2026-02-12 17:12:24 +00:00
.platform-tag {
2026-02-12 16:35:02 +00:00
display: inline-flex;
align-items: center;
2026-02-12 17:12:24 +00:00
gap: 6px;
background: var(--bg-card);
border: 1px solid var(--border);
padding: 8px 16px;
border-radius: 999px;
font-size: 0.85rem;
color: var(--text);
font-weight: 500;
2026-02-12 16:35:02 +00:00
}
2026-02-12 17:12:24 +00:00
.platform-tag .ptag-icon { font-size: 1rem; }
2026-02-12 16:35:02 +00:00
2026-02-12 17:12:24 +00:00
/* Phone Mockup Frames */
.phone-mockups {
display: flex;
gap: 24px;
justify-content: center;
align-items: flex-start;
2026-02-12 16:35:02 +00:00
}
2026-02-12 17:12:24 +00:00
.phone-frame {
position: relative;
width: 220px;
background: #000;
border-radius: 28px;
padding: 8px;
box-shadow: 0 20px 60px rgba(0, 0, 0, 0.5), 0 0 0 1px rgba(255, 255, 255, 0.08), 0 0 40px var(--accent-glow);
2026-02-12 16:35:02 +00:00
}
2026-02-12 17:12:24 +00:00
.phone-frame::before {
content: '';
position: absolute;
top: 8px;
left: 50%;
transform: translateX(-50%);
width: 80px;
height: 20px;
background: #000;
border-radius: 0 0 12px 12px;
z-index: 5;
2026-02-12 16:35:02 +00:00
}
2026-02-12 17:12:24 +00:00
.phone-frame img {
width: 100%;
height: auto;
border-radius: 20px;
display: block;
2026-02-12 16:35:02 +00:00
}
2026-02-12 17:12:24 +00:00
.phone-frame .phone-label {
text-align: center;
font-size: 0.75rem;
2026-02-12 16:35:02 +00:00
color: var(--text-dim);
2026-02-12 17:12:24 +00:00
margin-top: 10px;
padding-bottom: 2px;
2026-02-12 16:35:02 +00:00
}
2026-02-12 17:12:24 +00:00
.phone-frame:nth-child(2) {
margin-top: 40px;
2026-02-12 16:35:02 +00:00
}
2026-02-12 17:12:24 +00:00
/* ============================================
SCREENSHOT GALLERY (Desktop views)
============================================ */
.screenshot-gallery {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 20px;
margin-top: 48px;
}
.screenshot-item {
2026-02-12 16:35:02 +00:00
border-radius: var(--radius-lg);
overflow: hidden;
2026-02-12 17:12:24 +00:00
border: 1px solid var(--border);
transition: all 0.3s ease;
position: relative;
2026-02-12 16:35:02 +00:00
}
2026-02-12 17:12:24 +00:00
.screenshot-item:hover {
border-color: rgba(124, 92, 252, 0.3);
box-shadow: 0 8px 32px rgba(0, 0, 0, 0.4), 0 0 20px var(--accent-glow);
transform: translateY(-4px);
}
.screenshot-item img {
2026-02-12 16:35:02 +00:00
width: 100%;
height: auto;
display: block;
}
2026-02-12 17:12:24 +00:00
.screenshot-item .ss-caption {
position: absolute;
bottom: 0;
left: 0;
right: 0;
padding: 12px 16px;
background: linear-gradient(transparent, rgba(0, 0, 0, 0.8));
font-size: 0.85rem;
color: #fff;
font-weight: 500;
}
/* Single wide screenshot */
.screenshot-wide {
grid-column: span 2;
}
2026-02-12 16:35:02 +00:00
/* ============================================
HOW IT WORKS
============================================ */
.how-it-works {
background: var(--bg-surface);
border-top: 1px solid var(--border);
border-bottom: 1px solid var(--border);
}
2026-02-12 17:12:24 +00:00
.section-header { text-align: center; margin-bottom: 64px; }
2026-02-12 16:35:02 +00:00
.section-header .overline {
2026-02-12 17:12:24 +00:00
display: inline-block; font-size: 0.8rem; font-weight: 600;
text-transform: uppercase; letter-spacing: 0.15em;
color: var(--accent); margin-bottom: 12px;
2026-02-12 16:35:02 +00:00
}
2026-02-12 17:12:24 +00:00
.section-header h2 { color: #fff; margin-bottom: 16px; }
.section-header p { max-width: 560px; margin: 0 auto; font-size: 1.1rem; }
2026-02-12 16:35:02 +00:00
2026-02-12 17:12:24 +00:00
.steps { display: grid; grid-template-columns: repeat(3, 1fr); gap: 32px; position: relative; }
2026-02-12 16:35:02 +00:00
.steps::before {
2026-02-12 17:12:24 +00:00
content: ''; position: absolute; top: 48px;
left: calc(16.66% + 48px); right: calc(16.66% + 48px);
2026-02-12 16:35:02 +00:00
height: 2px;
background: linear-gradient(90deg, var(--accent) 0%, var(--accent-bright) 50%, var(--green) 100%);
opacity: 0.3;
}
2026-02-12 17:12:24 +00:00
.step { text-align: center; position: relative; }
2026-02-12 16:35:02 +00:00
.step-number {
2026-02-12 17:12:24 +00:00
width: 96px; height: 96px; border-radius: var(--radius-lg);
2026-02-12 16:35:02 +00:00
background: linear-gradient(135deg, var(--bg-card) 0%, var(--bg-card-hover) 100%);
border: 1px solid var(--border-light);
2026-02-12 17:12:24 +00:00
display: flex; align-items: center; justify-content: center;
margin: 0 auto 20px; font-size: 2.5rem; position: relative; z-index: 2;
2026-02-12 16:35:02 +00:00
box-shadow: 0 4px 16px rgba(0, 0, 0, 0.3);
}
2026-02-12 17:12:24 +00:00
.step h3 { color: #fff; margin-bottom: 8px; font-size: 1.15rem; }
.step p { font-size: 0.95rem; max-width: 280px; margin: 0 auto; }
2026-02-12 16:35:02 +00:00
/* ============================================
KEY SELLING POINTS
============================================ */
2026-02-12 17:12:24 +00:00
.selling-points { display: grid; grid-template-columns: repeat(2, 1fr); gap: 24px; margin-top: 64px; }
2026-02-12 16:35:02 +00:00
.sell-card {
2026-02-12 17:12:24 +00:00
background: var(--bg-card); border: 1px solid var(--border);
border-radius: var(--radius-lg); padding: 36px;
transition: all 0.15s ease; position: relative; overflow: hidden;
2026-02-12 16:35:02 +00:00
}
.sell-card:hover {
2026-02-12 17:12:24 +00:00
border-color: rgba(124, 92, 252, 0.35); transform: translateY(-4px);
2026-02-12 16:35:02 +00:00
box-shadow: 0 12px 40px rgba(0, 0, 0, 0.4), 0 0 20px var(--accent-glow);
}
.sell-card.highlight {
grid-column: span 2;
background: linear-gradient(135deg, rgba(124, 92, 252, 0.08) 0%, rgba(67, 181, 129, 0.04) 100%);
border-color: rgba(124, 92, 252, 0.2);
}
2026-02-12 17:12:24 +00:00
.sell-card .card-icon { font-size: 2rem; margin-bottom: 16px; display: block; }
.sell-card h3 { color: #fff; margin-bottom: 10px; font-size: 1.25rem; }
.sell-card p { font-size: 1rem; line-height: 1.7; }
2026-02-12 16:35:02 +00:00
.sell-card .highlight-tag {
2026-02-12 17:12:24 +00:00
display: inline-block; background: rgba(67, 181, 129, 0.15); color: var(--green);
padding: 4px 12px; border-radius: 4px; font-size: 0.8rem; font-weight: 600; margin-bottom: 16px;
2026-02-12 16:35:02 +00:00
}
/* ============================================
FEATURES GRID
============================================ */
2026-02-12 17:12:24 +00:00
.features-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 20px; }
2026-02-12 16:35:02 +00:00
.feature-card {
2026-02-12 17:12:24 +00:00
background: var(--bg-card); border: 1px solid var(--border);
border-radius: var(--radius); padding: 28px; transition: all 0.15s ease;
2026-02-12 16:35:02 +00:00
}
.feature-card:hover {
2026-02-12 17:12:24 +00:00
border-color: rgba(124, 92, 252, 0.3); background: var(--bg-card-hover);
transform: translateY(-2px); box-shadow: 0 4px 16px rgba(0, 0, 0, 0.3);
2026-02-12 16:35:02 +00:00
}
2026-02-12 17:12:24 +00:00
.feature-card .f-icon { font-size: 1.6rem; margin-bottom: 14px; display: block; }
.feature-card h3 { color: #fff; font-size: 1rem; margin-bottom: 6px; }
.feature-card p { font-size: 0.9rem; line-height: 1.6; color: var(--text-muted); }
2026-02-12 16:35:02 +00:00
2026-02-12 17:12:24 +00:00
/* ============================================
THEMES SHOWCASE
============================================ */
.themes-showcase {
margin-top: 48px;
border-radius: var(--radius-lg);
overflow: hidden;
border: 1px solid var(--border);
box-shadow: 0 12px 48px rgba(0, 0, 0, 0.4), 0 0 40px var(--accent-glow);
2026-02-12 16:35:02 +00:00
}
2026-02-12 17:12:24 +00:00
.themes-showcase img { width: 100%; height: auto; display: block; }
2026-02-12 16:35:02 +00:00
/* ============================================
COMPARISON
============================================ */
.comparison-section {
background: var(--bg-surface);
2026-02-12 17:12:24 +00:00
border-top: 1px solid var(--border); border-bottom: 1px solid var(--border);
2026-02-12 16:35:02 +00:00
}
.comparison-table {
2026-02-12 17:12:24 +00:00
width: 100%; border-collapse: collapse; background: var(--bg-card);
border-radius: var(--radius-lg); overflow: hidden; border: 1px solid var(--border);
2026-02-12 16:35:02 +00:00
}
.comparison-table thead th {
2026-02-12 17:12:24 +00:00
background: var(--bg-active); padding: 18px 24px; text-align: left;
font-weight: 600; font-size: 0.95rem; color: #fff; border-bottom: 1px solid var(--border);
2026-02-12 16:35:02 +00:00
}
2026-02-12 17:12:24 +00:00
.comparison-table thead th:first-child { color: var(--text-muted); }
.comparison-table thead th.haven-col { color: var(--accent-bright); }
2026-02-12 16:35:02 +00:00
.comparison-table tbody td {
2026-02-12 17:12:24 +00:00
padding: 14px 24px; border-bottom: 1px solid var(--border);
font-size: 0.9rem; color: var(--text-muted);
2026-02-12 16:35:02 +00:00
}
2026-02-12 17:12:24 +00:00
.comparison-table tbody tr:last-child td { border-bottom: none; }
.comparison-table tbody td:first-child { font-weight: 500; color: var(--text); }
2026-02-12 16:35:02 +00:00
.check { color: var(--green); font-size: 1.2rem; font-weight: 700; }
.cross { color: var(--danger); font-size: 1.2rem; }
.meh { color: var(--warning); font-size: 0.85rem; }
/* ============================================
2026-02-12 17:12:24 +00:00
DOWNLOAD
2026-02-12 16:35:02 +00:00
============================================ */
2026-02-12 17:12:24 +00:00
.download-section { text-align: center; }
2026-02-12 16:35:02 +00:00
.download-card {
2026-02-12 17:12:24 +00:00
max-width: 640px; margin: 0 auto; background: var(--bg-card);
border: 1px solid var(--border); border-radius: var(--radius-lg);
padding: 48px; position: relative; overflow: hidden;
2026-02-12 16:35:02 +00:00
}
.download-card::before {
2026-02-12 17:12:24 +00:00
content: ''; position: absolute; top: 0; left: 0; right: 0; height: 2px;
2026-02-12 16:35:02 +00:00
background: linear-gradient(90deg, var(--accent-dim), var(--accent), var(--accent-bright), var(--green));
box-shadow: 0 0 12px var(--accent-glow);
}
2026-02-12 17:12:24 +00:00
.download-version { font-size: 0.85rem; color: var(--text-dim); margin-top: 4px; margin-bottom: 24px; }
.download-card h2 { color: #fff; margin-bottom: 4px; font-size: 1.6rem; }
.download-btn-group { display: flex; flex-direction: column; gap: 12px; align-items: center; margin-bottom: 32px; }
.download-main { width: 100%; max-width: 400px; justify-content: center; font-size: 1.1rem; padding: 16px 32px; }
.download-alt-links { display: flex; gap: 20px; justify-content: center; flex-wrap: wrap; }
.download-alt-links a { font-size: 0.85rem; color: var(--text-muted); display: inline-flex; align-items: center; gap: 6px; }
.download-alt-links a:hover { color: var(--accent-bright); }
2026-02-12 16:35:02 +00:00
/* Version History */
2026-02-12 17:12:24 +00:00
.version-history { margin-top: 40px; text-align: left; }
2026-02-12 16:35:02 +00:00
.version-toggle {
2026-02-12 17:12:24 +00:00
background: none; border: 1px solid var(--border); color: var(--text-muted);
padding: 10px 20px; border-radius: 8px; cursor: pointer; font-size: 0.9rem;
width: 100%; display: flex; align-items: center; justify-content: space-between;
transition: all 0.2s; font-family: var(--font);
}
.version-toggle:hover { border-color: var(--accent); color: var(--text); }
.version-toggle .arrow { transition: transform 0.3s; }
.version-toggle.open .arrow { transform: rotate(180deg); }
.version-list { max-height: 0; overflow: hidden; transition: max-height 0.4s ease; }
.version-list.open { max-height: 600px; }
.version-list-inner { padding-top: 12px; }
2026-02-12 16:35:02 +00:00
.version-item {
2026-02-12 17:12:24 +00:00
display: flex; align-items: baseline; justify-content: space-between;
padding: 10px 16px; border-radius: 8px; transition: background 0.15s;
2026-02-12 16:35:02 +00:00
}
2026-02-12 17:12:24 +00:00
.version-item:hover { background: rgba(255, 255, 255, 0.03); }
.version-item .v-name { font-weight: 600; color: var(--text); font-size: 0.9rem; }
.version-item .v-date { font-size: 0.8rem; color: var(--text-dim); }
2026-02-12 16:35:02 +00:00
.version-item .v-tag {
2026-02-12 17:12:24 +00:00
display: inline-block; font-size: 0.7rem; padding: 2px 8px; border-radius: 4px;
background: rgba(124, 92, 252, 0.15); color: var(--accent-bright); margin-left: 8px;
2026-02-12 16:35:02 +00:00
}
2026-02-12 17:12:24 +00:00
.version-item .v-tag.latest { background: rgba(67, 181, 129, 0.15); color: var(--green); }
.version-item a { font-size: 0.8rem; }
2026-02-12 16:35:02 +00:00
/* ============================================
SETUP STEPS
============================================ */
2026-02-12 17:12:24 +00:00
.setup-steps { display: grid; grid-template-columns: repeat(2, 1fr); gap: 20px; margin-top: 48px; }
2026-02-12 16:35:02 +00:00
.setup-step {
2026-02-12 17:12:24 +00:00
background: var(--bg-card); border: 1px solid var(--border);
border-radius: var(--radius); padding: 28px; display: flex; gap: 16px; align-items: flex-start;
2026-02-12 16:35:02 +00:00
}
.setup-step .s-num {
2026-02-12 17:12:24 +00:00
flex-shrink: 0; width: 36px; height: 36px; background: var(--accent);
color: #fff; border-radius: 10px; display: flex; align-items: center;
justify-content: center; font-weight: 700; font-size: 0.95rem;
2026-02-12 16:35:02 +00:00
}
2026-02-12 17:12:24 +00:00
.setup-step h4 { color: #fff; font-size: 1rem; margin-bottom: 4px; }
.setup-step p { font-size: 0.9rem; color: var(--text-muted); }
2026-02-12 16:35:02 +00:00
/* ============================================
SUPPORT / DONATE
============================================ */
2026-02-12 17:12:24 +00:00
.support-section { text-align: center; }
2026-02-12 16:35:02 +00:00
.support-card {
2026-02-12 17:12:24 +00:00
max-width: 560px; margin: 0 auto;
2026-02-12 16:35:02 +00:00
background: linear-gradient(135deg, rgba(124, 92, 252, 0.08) 0%, rgba(67, 181, 129, 0.06) 100%);
border: 1px solid rgba(124, 92, 252, 0.25);
2026-02-12 17:12:24 +00:00
border-radius: var(--radius-lg); padding: 48px;
2026-02-12 16:35:02 +00:00
}
2026-02-12 17:12:24 +00:00
.support-card .heart { font-size: 3rem; margin-bottom: 16px; display: block; }
.support-card h2 { color: #fff; font-size: 1.6rem; margin-bottom: 12px; }
.support-card p { margin-bottom: 24px; max-width: 420px; margin-left: auto; margin-right: auto; }
2026-02-12 16:35:02 +00:00
.btn-donate {
background: linear-gradient(135deg, var(--accent) 0%, var(--accent-bright) 100%);
2026-02-12 17:12:24 +00:00
color: #fff; box-shadow: 0 4px 20px var(--accent-glow);
2026-02-12 16:35:02 +00:00
}
2026-02-12 17:12:24 +00:00
.btn-donate:hover { color: #fff; transform: translateY(-2px); box-shadow: 0 8px 30px var(--accent-glow-strong); }
.support-note { margin-top: 16px; font-size: 0.8rem !important; color: var(--text-dim) !important; }
2026-02-12 16:35:02 +00:00
/* ============================================
FOOTER
============================================ */
2026-02-12 17:12:24 +00:00
footer { border-top: 1px solid var(--border); padding: 48px 0; text-align: center; }
.footer-brand { display: flex; align-items: center; justify-content: center; gap: 10px; font-weight: 700; font-size: 1.1rem; color: #fff; margin-bottom: 12px; }
.footer-brand .hex { font-size: 1.4rem; color: var(--accent); text-shadow: 0 0 10px var(--accent-glow); }
footer p { font-size: 0.85rem; color: var(--text-dim); margin-bottom: 16px; }
.footer-links { display: flex; justify-content: center; gap: 24px; list-style: none; }
.footer-links a { color: var(--text-muted); font-size: 0.85rem; }
2026-02-12 16:35:02 +00:00
.footer-links a:hover { color: #fff; }
/* ============================================
RESPONSIVE
============================================ */
@media (max-width: 1024px) {
.features-grid { grid-template-columns: repeat(2, 1fr); }
.selling-points { grid-template-columns: 1fr; }
.sell-card.highlight { grid-column: span 1; }
2026-02-12 17:12:24 +00:00
.showcase-layout { grid-template-columns: 1fr; gap: 48px; }
.phone-mockups { justify-content: center; }
.screenshot-gallery { grid-template-columns: 1fr; }
.screenshot-wide { grid-column: span 1; }
2026-02-12 16:35:02 +00:00
}
@media (max-width: 768px) {
section { padding: 64px 0; }
.nav-links { display: none; }
.nav-links.open {
2026-02-12 17:12:24 +00:00
display: flex; flex-direction: column; position: absolute;
top: 64px; left: 0; right: 0;
background: rgba(21, 23, 42, 0.97); backdrop-filter: blur(20px);
padding: 24px; gap: 20px; border-bottom: 1px solid var(--border);
2026-02-12 16:35:02 +00:00
}
.nav-mobile-toggle { display: block; }
.steps { grid-template-columns: 1fr; gap: 40px; }
.steps::before { display: none; }
.features-grid { grid-template-columns: 1fr; }
.setup-steps { grid-template-columns: 1fr; }
.comparison-table { font-size: 0.85rem; }
2026-02-12 17:12:24 +00:00
.comparison-table thead th, .comparison-table tbody td { padding: 10px 12px; }
2026-02-12 16:35:02 +00:00
.hero-actions { flex-direction: column; }
.btn { width: 100%; max-width: 320px; justify-content: center; }
.download-card { padding: 32px 24px; }
2026-02-12 17:12:24 +00:00
.phone-frame { width: 160px; border-radius: 22px; padding: 6px; }
.phone-frame img { border-radius: 16px; }
.phone-frame::before { width: 60px; height: 16px; top: 6px; }
2026-02-12 16:35:02 +00:00
}
@media (max-width: 480px) {
.container { padding: 0 16px; }
h1 { font-size: 2rem; }
.hero-subtitle { font-size: 1rem; }
2026-02-12 17:12:24 +00:00
.phone-mockups { gap: 12px; }
.phone-frame { width: 140px; border-radius: 18px; }
2026-02-12 16:35:02 +00:00
}
/* ============================================
ANIMATIONS
============================================ */
.fade-in {
2026-02-12 17:12:24 +00:00
opacity: 0; transform: translateY(24px);
2026-02-12 16:35:02 +00:00
transition: opacity 0.6s ease, transform 0.6s ease;
}
2026-02-12 17:12:24 +00:00
.fade-in.visible { opacity: 1; transform: translateY(0); }
.stagger > * { opacity: 0; transform: translateY(16px); transition: opacity 0.5s ease, transform 0.5s ease; }
2026-02-12 16:35:02 +00:00
.stagger.visible > *:nth-child(1) { transition-delay: 0s; }
.stagger.visible > *:nth-child(2) { transition-delay: 0.1s; }
.stagger.visible > *:nth-child(3) { transition-delay: 0.2s; }
.stagger.visible > *:nth-child(4) { transition-delay: 0.25s; }
.stagger.visible > *:nth-child(5) { transition-delay: 0.3s; }
.stagger.visible > *:nth-child(6) { transition-delay: 0.35s; }
.stagger.visible > *:nth-child(7) { transition-delay: 0.4s; }
.stagger.visible > *:nth-child(8) { transition-delay: 0.45s; }
.stagger.visible > *:nth-child(9) { transition-delay: 0.5s; }
2026-02-12 17:12:24 +00:00
.stagger.visible > * { opacity: 1; transform: translateY(0); }
2026-02-12 16:35:02 +00:00
< / style >
< / head >
< body >
<!-- ===== NAV ===== -->
< nav >
< div class = "nav-inner" >
2026-03-15 11:32:05 +00:00
< div class = "nav-brand" > < span class = "hex" > ⬡< / span > HAVEN< / div >
< button class = "nav-mobile-toggle" onclick = "document.querySelector('.nav-links').classList.toggle('open')" aria-label = "Toggle menu" > ☰< / button >
2026-02-12 16:35:02 +00:00
< ul class = "nav-links" >
< li > < a href = "#features" > Features< / a > < / li >
< li > < a href = "#how-it-works" > How It Works< / a > < / li >
2026-02-12 17:12:24 +00:00
< li > < a href = "#screenshots" > Screenshots< / a > < / li >
2026-02-12 16:35:02 +00:00
< li > < a href = "#compare" > Compare< / a > < / li >
< li > < a href = "#download" > Download< / a > < / li >
2026-02-24 23:54:00 +00:00
< li > < a href = "#desktop" > Desktop App< / a > < / li >
2026-03-06 04:56:14 +00:00
< li > < a href = "#android" > Android App< / a > < / li >
2026-04-06 02:45:32 +00:00
< li > < a href = "#community" > Try Haven< / a > < / li >
2026-02-12 16:35:02 +00:00
< li > < a href = "#support" > Support< / a > < / li >
< li > < a href = "https://github.com/ancsemi/Haven" target = "_blank" class = "nav-cta" > GitHub< / a > < / li >
< / ul >
< / div >
< / nav >
<!-- ===== HERO ===== -->
< section class = "hero" >
< div class = "container" >
< div class = "hero-content" >
< div class = "hero-badge" >
< span class = "dot" > < / span >
Open Source & Free Forever
< / div >
2026-02-14 07:19:03 +00:00
< h1 > Free private chat that< br > < span class = "gradient-text" > lives on your machine< / span > < / h1 >
2026-02-12 16:35:02 +00:00
< p class = "hero-subtitle" >
2026-02-14 15:42:37 +00:00
Haven is a full-featured chat server you host yourself. Voice chat, screen sharing, 25+ themes, GIFs, sub-channels, direct messages, file sharing, and more — no cloud, no Big Tech accounts, no one reading your messages.
2026-02-12 16:35:02 +00:00
< / p >
< div class = "hero-actions" >
< a href = "#download" class = "btn btn-primary" >
2026-03-15 11:32:05 +00:00
< span class = "icon" > ⬇< / span > Download Haven
2026-02-12 16:35:02 +00:00
< / a >
2026-04-06 03:17:22 +00:00
< a href = "#community" class = "btn btn-secondary" style = "border-color: var(--green); color: var(--green);" >
2026-04-06 02:45:32 +00:00
< span class = "icon" > ▶< / span > Try it Live
< / a >
2026-02-12 16:35:02 +00:00
< a href = "https://github.com/ancsemi/Haven" target = "_blank" class = "btn btn-secondary" >
< span class = "icon" > ⛭ < / span > View Source
< / a >
< / div >
< p class = "hero-note" >
2026-02-14 19:22:22 +00:00
< strong > Only the host downloads Haven.< / strong > Friends join from their web browser — no download necessary.
2026-02-12 16:35:02 +00:00
< / p >
< / div >
2026-02-14 15:42:37 +00:00
<!-- Hero image carousel -->
2026-02-12 16:35:02 +00:00
< div class = "hero-screenshot fade-in" style = "margin-top: 48px;" >
Fix subchannel arrow layout, add missing login themes, ambient religious theme effects, fix hero image
- Move subchannel collapse arrow to right edge (no longer indents channel name)
- Normalize sub-channel font size to 14px to match parent channels
- Add all 9 missing themes to login page (darksouls, eldenring, minecraft, ffx, zelda, fallout, crt, win95, rgb)
- Scripture: subtle pulsating crucifix sunlight shadow effect
- Chapel: prismatic stained glass light beam effect
- Gospel: soft divine radiance descending effect
- Fix hero image with correct asset from issue #1
2026-02-14 07:48:04 +00:00
< img src = "https://github.com/user-attachments/assets/a3205eb4-7011-4b7b-825e-7aba76aa5c11"
2026-02-14 15:42:37 +00:00
alt="Haven login screen with theme selection" class="active" loading="eager">
< img src = "https://github.com/user-attachments/assets/4103f3b8-547a-4508-b4d7-07fb321118e4"
alt="Haven chat interface with voice chat" loading="lazy">
< img src = "https://github.com/user-attachments/assets/ac18c642-0410-4900-ba88-52f925cde982"
alt="Haven themed chat view" loading="lazy">
< img src = "https://github.com/user-attachments/assets/47bfe39d-4fb2-4923-bf75-cc781e8d57a7"
alt="Haven desktop with channels and sidebar" loading="lazy">
< img src = "https://github.com/user-attachments/assets/f745a6b8-ed7a-4f2f-a073-61c001cfda61"
alt="Haven screen sharing and streaming" loading="lazy">
< img src = "https://github.com/user-attachments/assets/a6da197e-66df-4df6-a2a8-c215bf02ac10"
alt="Haven theme gallery showcase" loading="lazy">
2026-02-12 16:35:02 +00:00
< / div >
< / div >
< / section >
2026-04-06 02:45:32 +00:00
<!-- ===== COMMUNITY SERVER BANNER ===== -->
< section class = "community-banner fade-in" id = "community" >
< div class = "community-banner-inner" >
< div class = "container" >
< h2 > 🌐 Try Haven — < span class = "community-accent" > No Download Required< / span > < / h2 >
< p >
Want to see what Haven feels like before hosting your own? Jump into the community server
and explore — chat, voice, themes, the works.
< / p >
< div style = "margin-top: 20px; display: flex; gap: 12px; justify-content: center; flex-wrap: wrap;" >
2026-04-20 12:48:11 +00:00
< a href = "https://haven.moviethingy.xyz/" target = "_blank" class = "btn btn-primary" style = "padding: 14px 32px; font-size: 1.05rem; background: var(--green); box-shadow: 0 4px 24px var(--green-glow);" >
2026-04-06 02:45:32 +00:00
< span class = "icon" > ▶< / span > Join Community Server
< / a >
< / div >
2026-04-20 12:48:11 +00:00
< div style = "margin-top: 24px; background: rgba(67, 181, 129, 0.08); border: 1px solid rgba(67, 181, 129, 0.25); border-radius: 12px; padding: 20px 28px; max-width: 480px; margin-left: auto; margin-right: auto;" >
< p style = "font-size: 0.95rem; color: var(--text); margin-bottom: 8px; font-weight: 600;" > 🔑 After signing up, enter this channel code to join:< / p >
< code style = "display: inline-block; background: rgba(67, 181, 129, 0.18); padding: 8px 20px; border-radius: 6px; color: var(--green); font-size: 1.3rem; font-weight: 700; letter-spacing: 0.05em;" > da0b9be7< / code >
< / div >
2026-04-06 02:59:28 +00:00
< p style = "margin-top: 16px; font-size: 0.8rem; color: var(--text-dim); font-style: italic;" >
2026-04-06 03:17:22 +00:00
Volunteer-hosted community server — thanks MutantRabbit!
2026-04-06 02:45:32 +00:00
< / p >
< / div >
< / div >
< / section >
v2.0.0 Discord history import, E2E password-change fix, scroll fix
Added:
- Discord history import Direct Connect (paste token, pick server, select channels)
- Discord history import File upload (DiscordChatExporter JSON/ZIP)
- Tabbed import modal (Upload File | Connect to Discord)
- Full server structure import (text, announcement, forum, media, threads)
- Forum tag resolution and display
- Discord avatar preservation (webhook_avatar column)
- Channel type indicators in import picker
Fixed:
- E2E key loss on password change (re-wraps key with new password)
- Scroll-to-bottom loop when images load while scrolled up
- ARM64 Docker support (#34)
Changed:
- Website, README, GUIDE updated with Discord import docs
- Version bumped to 2.0.0
2026-02-19 00:53:58 +00:00
<!-- ===== DISCORD IMPORT BANNER ===== -->
< section class = "discord-banner fade-in" id = "discord-import" >
< div class = "discord-banner-inner" >
< div class = "container" >
2026-03-15 11:32:05 +00:00
< h2 > 🚀 NEW — Import your < span class = "discord-blue" > Discord< / span > history< / h2 >
v2.0.0 Discord history import, E2E password-change fix, scroll fix
Added:
- Discord history import Direct Connect (paste token, pick server, select channels)
- Discord history import File upload (DiscordChatExporter JSON/ZIP)
- Tabbed import modal (Upload File | Connect to Discord)
- Full server structure import (text, announcement, forum, media, threads)
- Forum tag resolution and display
- Discord avatar preservation (webhook_avatar column)
- Channel type indicators in import picker
Fixed:
- E2E key loss on password change (re-wraps key with new password)
- Scroll-to-bottom loop when images load while scrolled up
- ARM64 Docker support (#34)
Changed:
- Website, README, GUIDE updated with Discord import docs
- Version bumped to 2.0.0
2026-02-19 00:53:58 +00:00
< p >
Leaving Discord? Bring everything with you. Haven v2.0 imports your entire server —
every channel, thread, forum post, reaction, pin, attachment, and avatar —
directly from the app. No external tools. No command line. Just paste your token, pick a server, and go.
< / p >
< div class = "discord-features" >
2026-03-15 11:32:05 +00:00
< span class = "discord-feat" > 💬 Text channels< / span >
< span class = "discord-feat" > 📢 Announcements< / span >
< span class = "discord-feat" > 💬 Forums & tags< / span >
< span class = "discord-feat" > 🧵 Threads< / span >
< span class = "discord-feat" > 😀 Reactions< / span >
< span class = "discord-feat" > 📌 Pins< / span >
< span class = "discord-feat" > 📎 Attachments< / span >
2026-03-15 11:50:33 +00:00
< span class = "discord-feat" > 🖼️ Avatars< / span >
< span class = "discord-feat" > ↩️ Replies< / span >
v2.0.0 Discord history import, E2E password-change fix, scroll fix
Added:
- Discord history import Direct Connect (paste token, pick server, select channels)
- Discord history import File upload (DiscordChatExporter JSON/ZIP)
- Tabbed import modal (Upload File | Connect to Discord)
- Full server structure import (text, announcement, forum, media, threads)
- Forum tag resolution and display
- Discord avatar preservation (webhook_avatar column)
- Channel type indicators in import picker
Fixed:
- E2E key loss on password change (re-wraps key with new password)
- Scroll-to-bottom loop when images load while scrolled up
- ARM64 Docker support (#34)
Changed:
- Website, README, GUIDE updated with Discord import docs
- Version bumped to 2.0.0
2026-02-19 00:53:58 +00:00
< / div >
< / div >
< / div >
< / section >
2026-02-24 23:54:00 +00:00
<!-- ===== DESKTOP APP BANNER ===== -->
< section class = "desktop-banner fade-in" id = "desktop" >
< div class = "desktop-banner-inner" >
< div class = "container" >
2026-03-15 11:50:33 +00:00
< h2 > 🖥️ NEW — < span class = "desktop-accent" > Haven Desktop< / span > < span class = "beta-badge-inline" > BETA< / span > < / h2 >
2026-02-24 23:54:00 +00:00
< p >
A native desktop app that connects to any Haven server — with features that go beyond the browser.
Per-app audio sharing, device switching mid-call, native notifications, system tray, and a one-click installer.
< / p >
< div class = "discord-features" >
2026-03-15 11:32:05 +00:00
< span class = "discord-feat" > 🎵 Per-App Audio< / span >
< span class = "discord-feat" > 🎧 Device Switching< / span >
< span class = "discord-feat" > 🔔 Native Notifications< / span >
< span class = "discord-feat" > 📌 System Tray< / span >
< span class = "discord-feat" > ⚡ One-Click Install< / span >
2026-03-15 11:50:33 +00:00
< span class = "discord-feat" > 🖥️ Windows & Linux< / span >
2026-02-24 23:54:00 +00:00
< / div >
2026-02-25 00:27:14 +00:00
< div style = "margin-top: 28px; display: flex; gap: 12px; justify-content: center; flex-wrap: wrap;" >
2026-04-19 01:12:53 +00:00
< a href = "https://github.com/ancsemi/Haven-Desktop/releases/download/v1.3.0/Haven-Setup-1.3.0.exe" class = "btn btn-primary" style = "padding: 12px 24px; font-size: 1rem;" >
2026-03-15 11:32:05 +00:00
< span class = "icon" > ⬇< / span > Windows Installer
2026-02-24 23:54:00 +00:00
< / a >
2026-04-19 01:12:53 +00:00
< a href = "https://github.com/ancsemi/Haven-Desktop/releases/download/v1.3.0/Haven-1.3.0.AppImage" class = "btn btn-primary" style = "padding: 12px 24px; font-size: 1rem;" >
2026-03-15 11:32:05 +00:00
< span class = "icon" > ⬇< / span > Linux AppImage
2026-02-25 00:27:14 +00:00
< / a >
2026-04-19 01:12:53 +00:00
< a href = "https://github.com/ancsemi/Haven-Desktop/releases/download/v1.3.0/haven-desktop_1.3.0_amd64.deb" class = "btn btn-primary" style = "padding: 12px 24px; font-size: 1rem;" >
2026-03-15 11:32:05 +00:00
< span class = "icon" > ⬇< / span > Linux .deb
2026-02-25 00:27:14 +00:00
< / a >
< / div >
< div style = "margin-top: 12px;" >
< a href = "https://github.com/ancsemi/Haven-Desktop" target = "_blank" class = "btn btn-secondary" style = "padding: 10px 24px; font-size: 0.95rem;" >
2026-02-24 23:54:00 +00:00
< span class = "icon" > ⛭ < / span > View on GitHub
< / a >
< / div >
< p style = "margin-top: 16px; font-size: 0.85rem; color: var(--text-dim);" >
2026-03-15 11:50:33 +00:00
⚠️ Beta release — feedback & bug reports are greatly appreciated. < strong > Requires a < a href = "https://github.com/ancsemi/Haven" style = "color: var(--accent-bright);" > Haven server< / a > < / strong > to connect to.
2026-02-24 23:54:00 +00:00
< / p >
< / div >
< / div >
< / section >
2026-03-06 04:56:14 +00:00
<!-- ===== ANDROID APP BANNER ===== -->
< section class = "android-banner fade-in" id = "android" >
< div class = "android-banner-inner" >
< div class = "container" >
2026-03-28 02:17:52 +00:00
< h2 > 📱 < span class = "android-accent" > Amni-Haven!< / span > — Now on Google Play< / h2 >
2026-03-06 04:56:14 +00:00
< p >
A native Android app for Haven, built from the ground up. Full chat and voice support,
2026-03-28 02:17:52 +00:00
push notifications, and a true mobile-native experience — available now on Google Play.
2026-03-06 04:56:14 +00:00
< / p >
< div class = "discord-features" >
2026-03-15 11:32:05 +00:00
< span class = "discord-feat" > 📱 Native Android< / span >
< span class = "discord-feat" > 🔔 Push Notifications< / span >
< span class = "discord-feat" > 💬 Full Chat Support< / span >
2026-03-15 11:50:33 +00:00
< span class = "discord-feat" > 🎙️ Voice Chat< / span >
2026-03-15 11:32:05 +00:00
< span class = "discord-feat" > 🚀 Built for Haven< / span >
2026-03-06 04:56:14 +00:00
< / div >
2026-03-28 02:17:52 +00:00
< div style = "margin-top:20px;text-align:center" >
< a href = "https://play.google.com/store/apps/details?id=com.havenapp.mobile" target = "_blank" rel = "noopener" style = "display:inline-block" >
< img src = "https://play.google.com/intl/en_us/badges/static/images/badges/en_badge_web_generic.png" alt = "Get it on Google Play" style = "height:60px" >
< / a >
2026-03-06 04:56:14 +00:00
< / div >
2026-03-15 11:50:33 +00:00
< p class = "android-credit" > Built with ❤️ by < strong > Amnibro< / strong > — thank you for your incredible work building the Haven Android app from the ground up.< / p >
2026-03-06 04:56:14 +00:00
< / div >
< / div >
< / section >
2026-02-12 17:12:24 +00:00
<!-- ===== WORKS EVERYWHERE ===== -->
< section class = "platform-showcase" id = "mobile" >
< div class = "container" >
< div class = "showcase-layout fade-in" >
< div class = "showcase-text" >
< span class = "section-header" style = "margin-bottom: 0; text-align: left;" >
< span class = "overline" > Works Everywhere< / span >
< / span >
< h2 > Desktop, tablet, and phone< / h2 >
< p > Haven isn't just for desktop. Friends can join from their phone's browser — no app download required. The interface adapts automatically to any screen size.< / p >
< p > Full chat, channels, direct messages, voice chat, and the sidebar — all fully functional on mobile. Just open the link and go.< / p >
< div class = "platform-tags" >
2026-03-15 11:50:33 +00:00
< span class = "platform-tag" > < span class = "ptag-icon" > 🖥️< / span > Windows< / span >
< span class = "platform-tag" > < span class = "ptag-icon" > 🍎< / span > macOS< / span >
< span class = "platform-tag" > < span class = "ptag-icon" > 🐧< / span > Linux< / span >
2026-03-15 11:32:05 +00:00
< span class = "platform-tag" > < span class = "ptag-icon" > 📱< / span > iOS Safari< / span >
< span class = "platform-tag" > < span class = "ptag-icon" > 🤖< / span > Android< / span >
2026-03-15 11:50:33 +00:00
< span class = "platform-tag" > < span class = "ptag-icon" > 🌐< / span > Any Browser< / span >
2026-02-12 17:12:24 +00:00
< / div >
< / div >
< div class = "phone-mockups" >
<!-- Phone 1: Welcome / Channel view -->
< div class = "phone-frame" >
2026-02-12 22:52:29 +00:00
< img src = "https://github.com/user-attachments/assets/e03573f7-da20-4a8c-bfae-d6f88d2c5e73"
2026-03-15 11:32:05 +00:00
alt="Haven mobile view — Welcome screen with channel selection"
2026-02-12 17:12:24 +00:00
loading="lazy">
< div class = "phone-label" > Welcome view< / div >
< / div >
<!-- Phone 2: Sidebar with channels & DMs -->
< div class = "phone-frame" >
2026-02-12 22:52:29 +00:00
< img src = "https://github.com/user-attachments/assets/74bcf6af-4313-42de-a83e-0e1955f1af2b"
2026-03-15 11:32:05 +00:00
alt="Haven mobile view — Sidebar showing channels, DMs, and user profile"
2026-02-12 17:12:24 +00:00
loading="lazy">
< div class = "phone-label" > Channels & DMs< / div >
< / div >
< / div >
< / div >
< / div >
< / section >
2026-02-12 16:35:02 +00:00
<!-- ===== HOW IT WORKS ===== -->
< section class = "how-it-works" id = "how-it-works" >
< div class = "container" >
< div class = "section-header fade-in" >
< span class = "overline" > Dead Simple< / span >
< h2 > Up and running in 3 steps< / h2 >
v1.8.1: E2E per-account keys, W95 UI fixes, games pop-out, website overhaul
- E2E encryption: keys now sync per-account via PBKDF2 password wrapping (not per-device)
- E2E: private keys stored encrypted server-side, decrypted with user password
- Win95 theme: 3D beveled buttons for all controls (voice, sidebar, modal, toolbar)
- Win95 theme: fixed double scrollbar arrows, black text on gray backgrounds
- Games: default to pop-out window, with iframe fallback if blocked
- Dual-role display: User badge now properly stripped when higher role exists
- Ruffle/Flash: CSP headers fixed (wasm-unsafe-eval + unpkg worker-src)
- Website: carousel fixed height (no more page jumping), interval 4s
- Website: replaced screenshots with latest, updated feature cards
- Website: added E2E encryption to selling points, features grid, comparison table
- Website: updated file sharing limit (configurable up to 1.5 GB), games card expanded
2026-02-17 00:43:46 +00:00
< p > No terminal commands, no config files. Just double-click. (Docker supported too!)< / p >
2026-02-12 16:35:02 +00:00
< / div >
< div class = "steps stagger" >
< div class = "step" >
2026-03-15 11:32:05 +00:00
< div class = "step-number" > 📥< / div >
2026-02-12 16:35:02 +00:00
< h3 > Download & unzip< / h3 >
< p > Download the .zip from GitHub and unzip it anywhere. Desktop is fine.< / p >
< / div >
< div class = "step" >
2026-03-15 11:50:33 +00:00
< div class = "step-number" > ▶️< / div >
2026-02-12 16:35:02 +00:00
< h3 > Double-click to start< / h3 >
< p > Run < strong > Start Haven.bat< / strong > (Windows) or < strong > start.sh< / strong > (Mac/Linux). It handles everything.< / p >
< / div >
< div class = "step" >
2026-03-15 11:32:05 +00:00
< div class = "step-number" > 🔗< / div >
2026-02-12 16:35:02 +00:00
< h3 > Share the link< / h3 >
< p > Send your friends your IP address. They open it in their browser — that's it. No download for them.< / p >
< / div >
< / div >
< div class = "setup-steps stagger" >
< div class = "setup-step" >
< div class = "s-num" > ?< / div >
< div >
< h4 > What's a "self-hosted" server?< / h4 >
< p > It means the chat runs on YOUR computer, not a company's server. Your messages never leave your machine — you're the cloud.< / p >
< / div >
< / div >
< div class = "setup-step" >
< div class = "s-num" > !< / div >
< div >
< h4 > Do my friends need to download anything?< / h4 >
2026-02-12 17:12:24 +00:00
< p > Nope. They open a link in Chrome, Firefox, Edge, Safari — any modern browser. Zero installs on their end. Works on phones too.< / p >
2026-02-12 16:35:02 +00:00
< / div >
< / div >
< div class = "setup-step" >
2026-03-15 11:32:05 +00:00
< div class = "s-num" > 🔒< / div >
2026-02-12 16:35:02 +00:00
< div >
< h4 > Is it secure?< / h4 >
< p > HTTPS encryption, bcrypt passwords, JWT auth, rate limiting, CSP headers, and more. Check the < a href = "https://github.com/ancsemi/Haven" target = "_blank" > source code< / a > yourself.< / p >
< / div >
< / div >
< div class = "setup-step" >
2026-03-15 11:32:05 +00:00
< div class = "s-num" > 💻< / div >
2026-02-12 16:35:02 +00:00
< div >
< h4 > What do I need?< / h4 >
v1.8.1: E2E per-account keys, W95 UI fixes, games pop-out, website overhaul
- E2E encryption: keys now sync per-account via PBKDF2 password wrapping (not per-device)
- E2E: private keys stored encrypted server-side, decrypted with user password
- Win95 theme: 3D beveled buttons for all controls (voice, sidebar, modal, toolbar)
- Win95 theme: fixed double scrollbar arrows, black text on gray backgrounds
- Games: default to pop-out window, with iframe fallback if blocked
- Dual-role display: User badge now properly stripped when higher role exists
- Ruffle/Flash: CSP headers fixed (wasm-unsafe-eval + unpkg worker-src)
- Website: carousel fixed height (no more page jumping), interval 4s
- Website: replaced screenshots with latest, updated feature cards
- Website: added E2E encryption to selling points, features grid, comparison table
- Website: updated file sharing limit (configurable up to 1.5 GB), games card expanded
2026-02-17 00:43:46 +00:00
< p > Windows, Mac, or Linux. < a href = "https://nodejs.org/" target = "_blank" > Node.js< / a > (free, 2-click install). About 50 MB disk space. That's everything. Or use < strong > Docker< / strong > — < code > docker compose up -d< / code > and you're done.< / p >
2026-02-12 16:35:02 +00:00
< / div >
< / div >
< / div >
< / div >
< / section >
<!-- ===== KEY SELLING POINTS ===== -->
< section id = "features" >
< div class = "container" >
< div class = "section-header fade-in" >
< span class = "overline" > Why Haven< / span >
< h2 > Everything you need, nothing you don't< / h2 >
< p > A Discord-like experience that's completely private, completely free, and yours to control.< / p >
< / div >
< div class = "selling-points stagger" >
< div class = "sell-card highlight" >
< span class = "highlight-tag" > Key Differentiator< / span >
2026-03-15 11:50:33 +00:00
< span class = "card-icon" > 🌐< / span >
2026-02-12 16:35:02 +00:00
< h3 > Only the host downloads — friends join from any browser< / h3 >
2026-02-12 17:12:24 +00:00
< p > One person runs Haven on their computer. Everyone else just opens a link. No apps to install, no accounts to create with some company, no app stores. Your non-tech friends can join in 30 seconds — from their laptop or phone.< / p >
2026-02-12 16:35:02 +00:00
< / div >
< div class = "sell-card" >
2026-03-15 11:32:05 +00:00
< span class = "card-icon" > 🎤< / span >
2026-02-12 16:35:02 +00:00
< h3 > Crystal-clear voice chat< / h3 >
2026-02-14 15:42:37 +00:00
< p > Peer-to-peer voice that goes directly between users — not through a middleman server. Per-user volume sliders, mute, deafen, talking indicators, join/leave sounds, and sound effects.< / p >
2026-02-12 16:35:02 +00:00
< / div >
< div class = "sell-card" >
2026-03-15 11:50:33 +00:00
< span class = "card-icon" > 🖥️< / span >
2026-02-12 16:35:02 +00:00
< h3 > Screen sharing & streaming< / h3 >
< p > Share your screen with anyone in the voice channel. Multiple people can stream at once in a tiled grid. Perfect for watch parties, co-working, or showing gameplay.< / p >
< / div >
< div class = "sell-card" >
2026-03-15 11:32:05 +00:00
< span class = "card-icon" > 🔒< / span >
v1.8.1: E2E per-account keys, W95 UI fixes, games pop-out, website overhaul
- E2E encryption: keys now sync per-account via PBKDF2 password wrapping (not per-device)
- E2E: private keys stored encrypted server-side, decrypted with user password
- Win95 theme: 3D beveled buttons for all controls (voice, sidebar, modal, toolbar)
- Win95 theme: fixed double scrollbar arrows, black text on gray backgrounds
- Games: default to pop-out window, with iframe fallback if blocked
- Dual-role display: User badge now properly stripped when higher role exists
- Ruffle/Flash: CSP headers fixed (wasm-unsafe-eval + unpkg worker-src)
- Website: carousel fixed height (no more page jumping), interval 4s
- Website: replaced screenshots with latest, updated feature cards
- Website: added E2E encryption to selling points, features grid, comparison table
- Website: updated file sharing limit (configurable up to 1.5 GB), games card expanded
2026-02-17 00:43:46 +00:00
< h3 > Truly private — with E2E encrypted DMs< / h3 >
< p > No cloud. No telemetry. No analytics. No data collection. Messages live on YOUR computer. Direct messages are end-to-end encrypted with AES-256-GCM — not even the server host can read them. Haven doesn't phone home — ever.< / p >
2026-02-12 16:35:02 +00:00
< / div >
< div class = "sell-card" >
2026-03-15 11:32:05 +00:00
< span class = "card-icon" > 📱< / span >
2026-02-12 17:12:24 +00:00
< h3 > Mobile-ready out of the box< / h3 >
< p > Fully responsive design that works on any phone or tablet. Channels, DMs, voice chat, and file sharing — all from your mobile browser. No app store needed.< / p >
< / div >
< / div >
< / div >
< / section >
<!-- ===== SCREENSHOTS ===== -->
< section id = "screenshots" style = "padding-top: 0;" >
< div class = "container" >
< div class = "section-header fade-in" >
< span class = "overline" > See It In Action< / span >
< h2 > Screenshots< / h2 >
< p > Haven running with different themes. Every pixel is customizable.< / p >
< / div >
< div class = "screenshot-gallery stagger" >
< div class = "screenshot-item" >
v1.8.1: E2E per-account keys, W95 UI fixes, games pop-out, website overhaul
- E2E encryption: keys now sync per-account via PBKDF2 password wrapping (not per-device)
- E2E: private keys stored encrypted server-side, decrypted with user password
- Win95 theme: 3D beveled buttons for all controls (voice, sidebar, modal, toolbar)
- Win95 theme: fixed double scrollbar arrows, black text on gray backgrounds
- Games: default to pop-out window, with iframe fallback if blocked
- Dual-role display: User badge now properly stripped when higher role exists
- Ruffle/Flash: CSP headers fixed (wasm-unsafe-eval + unpkg worker-src)
- Website: carousel fixed height (no more page jumping), interval 4s
- Website: replaced screenshots with latest, updated feature cards
- Website: added E2E encryption to selling points, features grid, comparison table
- Website: updated file sharing limit (configurable up to 1.5 GB), games card expanded
2026-02-17 00:43:46 +00:00
< img src = "https://github.com/user-attachments/assets/a2acb368-0cd2-46ab-818e-b2a0785fe2de"
2026-03-15 11:32:05 +00:00
alt="Haven desktop — default Haven theme with voice chat, channels, and DMs"
2026-02-12 17:12:24 +00:00
loading="lazy">
< div class = "ss-caption" > Haven Theme — Full desktop chat< / div >
< / div >
< div class = "screenshot-item" >
v1.8.1: E2E per-account keys, W95 UI fixes, games pop-out, website overhaul
- E2E encryption: keys now sync per-account via PBKDF2 password wrapping (not per-device)
- E2E: private keys stored encrypted server-side, decrypted with user password
- Win95 theme: 3D beveled buttons for all controls (voice, sidebar, modal, toolbar)
- Win95 theme: fixed double scrollbar arrows, black text on gray backgrounds
- Games: default to pop-out window, with iframe fallback if blocked
- Dual-role display: User badge now properly stripped when higher role exists
- Ruffle/Flash: CSP headers fixed (wasm-unsafe-eval + unpkg worker-src)
- Website: carousel fixed height (no more page jumping), interval 4s
- Website: replaced screenshots with latest, updated feature cards
- Website: added E2E encryption to selling points, features grid, comparison table
- Website: updated file sharing limit (configurable up to 1.5 GB), games card expanded
2026-02-17 00:43:46 +00:00
< img src = "https://github.com/user-attachments/assets/b4d7fd0d-92a1-48f5-a961-574af969cc36"
2026-03-15 11:32:05 +00:00
alt="Haven desktop — activities, games, Flash emulation, and themes"
2026-02-12 17:12:24 +00:00
loading="lazy">
v1.8.1: E2E per-account keys, W95 UI fixes, games pop-out, website overhaul
- E2E encryption: keys now sync per-account via PBKDF2 password wrapping (not per-device)
- E2E: private keys stored encrypted server-side, decrypted with user password
- Win95 theme: 3D beveled buttons for all controls (voice, sidebar, modal, toolbar)
- Win95 theme: fixed double scrollbar arrows, black text on gray backgrounds
- Games: default to pop-out window, with iframe fallback if blocked
- Dual-role display: User badge now properly stripped when higher role exists
- Ruffle/Flash: CSP headers fixed (wasm-unsafe-eval + unpkg worker-src)
- Website: carousel fixed height (no more page jumping), interval 4s
- Website: replaced screenshots with latest, updated feature cards
- Website: added E2E encryption to selling points, features grid, comparison table
- Website: updated file sharing limit (configurable up to 1.5 GB), games card expanded
2026-02-17 00:43:46 +00:00
< div class = "ss-caption" > Activities — Games, Flash emulation & more< / div >
2026-02-12 17:12:24 +00:00
< / div >
< div class = "screenshot-item screenshot-wide" >
2026-02-17 22:31:23 +00:00
< img src = "https://github.com/user-attachments/assets/b39edb2e-753f-4e38-8522-496a1d5b9dde"
2026-03-15 11:32:05 +00:00
alt="Haven desktop — screen sharing with voice chat, multi-stream, and Win95 theme"
2026-02-12 17:12:24 +00:00
loading="lazy">
2026-02-12 21:54:51 +00:00
< div class = "ss-caption" > Screen Sharing — Voice chat with multi-stream< / div >
2026-02-12 16:35:02 +00:00
< / div >
< / div >
< / div >
< / section >
<!-- ===== ALL FEATURES ===== -->
< section style = "padding-top: 0;" >
< div class = "container" >
< div class = "section-header fade-in" >
< span class = "overline" > Packed< / span >
< h2 > All the features< / h2 >
< p > Haven isn't a toy — it's a full-featured chat platform.< / p >
< / div >
< div class = "features-grid stagger" >
v2.0.0 Discord history import, E2E password-change fix, scroll fix
Added:
- Discord history import Direct Connect (paste token, pick server, select channels)
- Discord history import File upload (DiscordChatExporter JSON/ZIP)
- Tabbed import modal (Upload File | Connect to Discord)
- Full server structure import (text, announcement, forum, media, threads)
- Forum tag resolution and display
- Discord avatar preservation (webhook_avatar column)
- Channel type indicators in import picker
Fixed:
- E2E key loss on password change (re-wraps key with new password)
- Scroll-to-bottom loop when images load while scrolled up
- ARM64 Docker support (#34)
Changed:
- Website, README, GUIDE updated with Discord import docs
- Version bumped to 2.0.0
2026-02-19 00:53:58 +00:00
< div class = "feature-card" >
2026-03-15 11:32:05 +00:00
< span class = "f-icon" > 📥< / span >
v2.0.0 Discord history import, E2E password-change fix, scroll fix
Added:
- Discord history import Direct Connect (paste token, pick server, select channels)
- Discord history import File upload (DiscordChatExporter JSON/ZIP)
- Tabbed import modal (Upload File | Connect to Discord)
- Full server structure import (text, announcement, forum, media, threads)
- Forum tag resolution and display
- Discord avatar preservation (webhook_avatar column)
- Channel type indicators in import picker
Fixed:
- E2E key loss on password change (re-wraps key with new password)
- Scroll-to-bottom loop when images load while scrolled up
- ARM64 Docker support (#34)
Changed:
- Website, README, GUIDE updated with Discord import docs
- Version bumped to 2.0.0
2026-02-19 00:53:58 +00:00
< h3 > Discord Import< / h3 >
< p > Import your entire Discord server's history directly from Haven — channels, threads, forums, reactions, pins, attachments, and avatars. Paste your token, pick a server, done.< / p >
< / div >
2026-02-14 19:22:22 +00:00
< div class = "feature-card" >
2026-03-15 11:32:05 +00:00
< span class = "f-icon" > 🎵< / span >
2026-02-14 19:22:22 +00:00
< h3 > Music & Video Streaming< / h3 >
v1.8.1: E2E per-account keys, W95 UI fixes, games pop-out, website overhaul
- E2E encryption: keys now sync per-account via PBKDF2 password wrapping (not per-device)
- E2E: private keys stored encrypted server-side, decrypted with user password
- Win95 theme: 3D beveled buttons for all controls (voice, sidebar, modal, toolbar)
- Win95 theme: fixed double scrollbar arrows, black text on gray backgrounds
- Games: default to pop-out window, with iframe fallback if blocked
- Dual-role display: User badge now properly stripped when higher role exists
- Ruffle/Flash: CSP headers fixed (wasm-unsafe-eval + unpkg worker-src)
- Website: carousel fixed height (no more page jumping), interval 4s
- Website: replaced screenshots with latest, updated feature cards
- Website: added E2E encryption to selling points, features grid, comparison table
- Website: updated file sharing limit (configurable up to 1.5 GB), games card expanded
2026-02-17 00:43:46 +00:00
< p > Spotify, YouTube, and SoundCloud Listen Together with synced playback and seek bar. Share audio files or screen-share a movie — everyone hears and sees it together in real time.< / p >
2026-02-14 19:22:22 +00:00
< / div >
2026-02-12 16:35:02 +00:00
< div class = "feature-card" >
2026-03-15 11:32:05 +00:00
< span class = "f-icon" > 💬< / span >
2026-02-12 16:35:02 +00:00
< h3 > Rich Chat< / h3 >
2026-02-14 15:42:37 +00:00
< p > Real-time messaging, image uploads, typing indicators, message editing, replies, emoji reactions, @mentions, and editable channel names with collapsible sub-channels.< / p >
2026-02-12 16:35:02 +00:00
< / div >
< div class = "feature-card" >
2026-03-15 11:50:33 +00:00
< span class = "f-icon" > 🎙️< / span >
2026-02-12 16:35:02 +00:00
< h3 > Voice Chat< / h3 >
< p > Peer-to-peer audio. Per-user volume sliders. Mute, deafen, noise suppression. Talking indicators.< / p >
< / div >
< div class = "feature-card" >
2026-03-15 11:50:33 +00:00
< span class = "f-icon" > 🖥️< / span >
2026-02-12 16:35:02 +00:00
< h3 > Screen Sharing< / h3 >
< p > Multi-stream support. Tiled grid layout. Resizable viewer. Share screens simultaneously.< / p >
< / div >
< div class = "feature-card" >
2026-03-15 11:50:33 +00:00
< span class = "f-icon" > 🔐< / span >
v1.8.1: E2E per-account keys, W95 UI fixes, games pop-out, website overhaul
- E2E encryption: keys now sync per-account via PBKDF2 password wrapping (not per-device)
- E2E: private keys stored encrypted server-side, decrypted with user password
- Win95 theme: 3D beveled buttons for all controls (voice, sidebar, modal, toolbar)
- Win95 theme: fixed double scrollbar arrows, black text on gray backgrounds
- Games: default to pop-out window, with iframe fallback if blocked
- Dual-role display: User badge now properly stripped when higher role exists
- Ruffle/Flash: CSP headers fixed (wasm-unsafe-eval + unpkg worker-src)
- Website: carousel fixed height (no more page jumping), interval 4s
- Website: replaced screenshots with latest, updated feature cards
- Website: added E2E encryption to selling points, features grid, comparison table
- Website: updated file sharing limit (configurable up to 1.5 GB), games card expanded
2026-02-17 00:43:46 +00:00
< h3 > Encrypted Direct Messages< / h3 >
< p > End-to-end encrypted DMs using ECDH + AES-256-GCM. Keys sync across devices via password wrapping. Not even the server host can read them.< / p >
2026-02-12 16:35:02 +00:00
< / div >
< div class = "feature-card" >
2026-03-15 11:32:05 +00:00
< span class = "f-icon" > 🎨< / span >
2026-02-14 15:42:37 +00:00
< h3 > 25+ Themes< / h3 >
< p > Haven, Discord, Matrix, Tron, HALO, LoTR, Cyberpunk, Dark Souls, Elden Ring, Minecraft, Scripture, Chapel, Gospel, FFX, Zelda, Fallout, CRT, Win95, RGB, and more.< / p >
2026-02-12 16:35:02 +00:00
< / div >
< div class = "feature-card" >
2026-03-15 11:50:33 +00:00
< span class = "f-icon" > 🎞️< / span >
v1.8.1: E2E per-account keys, W95 UI fixes, games pop-out, website overhaul
- E2E encryption: keys now sync per-account via PBKDF2 password wrapping (not per-device)
- E2E: private keys stored encrypted server-side, decrypted with user password
- Win95 theme: 3D beveled buttons for all controls (voice, sidebar, modal, toolbar)
- Win95 theme: fixed double scrollbar arrows, black text on gray backgrounds
- Games: default to pop-out window, with iframe fallback if blocked
- Dual-role display: User badge now properly stripped when higher role exists
- Ruffle/Flash: CSP headers fixed (wasm-unsafe-eval + unpkg worker-src)
- Website: carousel fixed height (no more page jumping), interval 4s
- Website: replaced screenshots with latest, updated feature cards
- Website: added E2E encryption to selling points, features grid, comparison table
- Website: updated file sharing limit (configurable up to 1.5 GB), games card expanded
2026-02-17 00:43:46 +00:00
< h3 > GIF Search & /gif Command< / h3 >
< p > Search and send GIFs inline, powered by GIPHY. Use the < code > /gif< / code > slash command for quick access. One-click admin setup.< / p >
2026-02-12 16:35:02 +00:00
< / div >
< div class = "feature-card" >
2026-03-15 11:50:33 +00:00
< span class = "f-icon" > 📁< / span >
2026-02-12 16:35:02 +00:00
< h3 > File Sharing< / h3 >
v1.8.1: E2E per-account keys, W95 UI fixes, games pop-out, website overhaul
- E2E encryption: keys now sync per-account via PBKDF2 password wrapping (not per-device)
- E2E: private keys stored encrypted server-side, decrypted with user password
- Win95 theme: 3D beveled buttons for all controls (voice, sidebar, modal, toolbar)
- Win95 theme: fixed double scrollbar arrows, black text on gray backgrounds
- Games: default to pop-out window, with iframe fallback if blocked
- Dual-role display: User badge now properly stripped when higher role exists
- Ruffle/Flash: CSP headers fixed (wasm-unsafe-eval + unpkg worker-src)
- Website: carousel fixed height (no more page jumping), interval 4s
- Website: replaced screenshots with latest, updated feature cards
- Website: added E2E encryption to selling points, features grid, comparison table
- Website: updated file sharing limit (configurable up to 1.5 GB), games card expanded
2026-02-17 00:43:46 +00:00
< p > Share PDFs, docs, audio, video, archives up to 1.5 GB (admin-configurable). Inline audio/video players.< / p >
2026-02-12 16:35:02 +00:00
< / div >
< div class = "feature-card" >
2026-03-15 11:32:05 +00:00
< span class = "f-icon" > 🔗< / span >
2026-02-12 16:35:02 +00:00
< h3 > Link Previews< / h3 >
< p > Automatic OpenGraph previews for shared URLs with title, description, and thumbnail.< / p >
< / div >
< div class = "feature-card" >
2026-03-15 11:50:33 +00:00
< span class = "f-icon" > ⌨️< / span >
2026-02-12 16:35:02 +00:00
< h3 > Slash Commands< / h3 >
< p > /shrug, /tableflip, /roll, /flip, /me, /tts — with autocomplete and descriptions.< / p >
< / div >
< div class = "feature-card" >
2026-03-15 11:50:33 +00:00
< span class = "f-icon" > 🔍< / span >
2026-02-12 16:35:02 +00:00
< h3 > Message Search< / h3 >
< p > Ctrl+F to search any channel. Results with highlighted matches and jump-to-message.< / p >
< / div >
< div class = "feature-card" >
2026-03-15 11:32:05 +00:00
< span class = "f-icon" > 📌< / span >
2026-02-12 16:35:02 +00:00
< h3 > Pinned Messages< / h3 >
< p > Admins can pin important messages. Dedicated panel to browse all pins in a channel.< / p >
< / div >
< div class = "feature-card" >
2026-03-15 11:50:33 +00:00
< span class = "f-icon" > 🛡️< / span >
2026-02-12 16:35:02 +00:00
< h3 > Moderation Tools< / h3 >
< p > Kick, mute (timed), ban, delete users, manage channels, auto-cleanup old messages.< / p >
< / div >
< div class = "feature-card" >
2026-03-15 11:50:33 +00:00
< span class = "f-icon" > 🌐< / span >
2026-02-12 16:35:02 +00:00
< h3 > Multi-Server< / h3 >
< p > Add friends' Haven servers to your sidebar. Live online/offline status indicators.< / p >
< / div >
< div class = "feature-card" >
2026-03-15 11:32:05 +00:00
< span class = "f-icon" > 🔔< / span >
2026-02-12 16:35:02 +00:00
< h3 > Notification Sounds< / h3 >
< p > 5 distinct tones. Per-channel volume. Enable/disable per channel. Unread badges persist.< / p >
< / div >
< div class = "feature-card" >
2026-03-15 11:32:05 +00:00
< span class = "f-icon" > 🎮< / span >
v1.8.1: E2E per-account keys, W95 UI fixes, games pop-out, website overhaul
- E2E encryption: keys now sync per-account via PBKDF2 password wrapping (not per-device)
- E2E: private keys stored encrypted server-side, decrypted with user password
- Win95 theme: 3D beveled buttons for all controls (voice, sidebar, modal, toolbar)
- Win95 theme: fixed double scrollbar arrows, black text on gray backgrounds
- Games: default to pop-out window, with iframe fallback if blocked
- Dual-role display: User badge now properly stripped when higher role exists
- Ruffle/Flash: CSP headers fixed (wasm-unsafe-eval + unpkg worker-src)
- Website: carousel fixed height (no more page jumping), interval 4s
- Website: replaced screenshots with latest, updated feature cards
- Website: added E2E encryption to selling points, features grid, comparison table
- Website: updated file sharing limit (configurable up to 1.5 GB), games card expanded
2026-02-17 00:43:46 +00:00
< h3 > Games & Activities< / h3 >
< p > Shippy Container, Flight, Learn to Fly 3, Bubble Tanks 3, Tanks, Super Smash Flash 2, and .io games. Server-wide leaderboards. Flash games via Ruffle emulator.< / p >
2026-02-12 16:35:02 +00:00
< / div >
< / div >
< / div >
< / section >
<!-- ===== COMPARISON ===== -->
< section class = "comparison-section" id = "compare" >
< div class = "container" >
< div class = "section-header fade-in" >
< span class = "overline" > Honest Comparison< / span >
< h2 > Haven vs. the incumbents< / h2 >
< / div >
< div class = "fade-in" >
< table class = "comparison-table" >
< thead >
< tr >
< th > < / th >
< th class = "haven-col" > Haven< / th >
2026-02-17 22:31:23 +00:00
< th > Fluxer< / th >
2026-02-12 16:35:02 +00:00
< th > Discord< / th >
< th > Slack< / th >
< th > Signal< / th >
< / tr >
< / thead >
< tbody >
< tr >
< td > Self-hosted (you own the data)< / td >
< td > < span class = "check" > ✓ < / span > < / td >
2026-02-17 22:31:23 +00:00
< td > < span class = "check" > ✓ < / span > < / td >
2026-02-12 16:35:02 +00:00
< td > < span class = "cross" > ✗ < / span > < / td >
< td > < span class = "cross" > ✗ < / span > < / td >
< td > < span class = "cross" > ✗ < / span > < / td >
< / tr >
< tr >
< td > No account with a company< / td >
< td > < span class = "check" > ✓ < / span > < / td >
2026-02-17 22:31:23 +00:00
< td > < span class = "check" > ✓ < / span > < / td >
2026-02-12 16:35:02 +00:00
< td > < span class = "cross" > ✗ < / span > < / td >
< td > < span class = "cross" > ✗ < / span > < / td >
< td > < span class = "cross" > ✗ < / span > < / td >
< / tr >
v1.8.1: E2E per-account keys, W95 UI fixes, games pop-out, website overhaul
- E2E encryption: keys now sync per-account via PBKDF2 password wrapping (not per-device)
- E2E: private keys stored encrypted server-side, decrypted with user password
- Win95 theme: 3D beveled buttons for all controls (voice, sidebar, modal, toolbar)
- Win95 theme: fixed double scrollbar arrows, black text on gray backgrounds
- Games: default to pop-out window, with iframe fallback if blocked
- Dual-role display: User badge now properly stripped when higher role exists
- Ruffle/Flash: CSP headers fixed (wasm-unsafe-eval + unpkg worker-src)
- Website: carousel fixed height (no more page jumping), interval 4s
- Website: replaced screenshots with latest, updated feature cards
- Website: added E2E encryption to selling points, features grid, comparison table
- Website: updated file sharing limit (configurable up to 1.5 GB), games card expanded
2026-02-17 00:43:46 +00:00
< tr >
< td > End-to-end encrypted DMs< / td >
< td > < span class = "check" > ✓ < / span > < / td >
< td > < span class = "cross" > ✗ < / span > < / td >
< td > < span class = "cross" > ✗ < / span > < / td >
2026-02-17 22:31:23 +00:00
< td > < span class = "cross" > ✗ < / span > < / td >
v1.8.1: E2E per-account keys, W95 UI fixes, games pop-out, website overhaul
- E2E encryption: keys now sync per-account via PBKDF2 password wrapping (not per-device)
- E2E: private keys stored encrypted server-side, decrypted with user password
- Win95 theme: 3D beveled buttons for all controls (voice, sidebar, modal, toolbar)
- Win95 theme: fixed double scrollbar arrows, black text on gray backgrounds
- Games: default to pop-out window, with iframe fallback if blocked
- Dual-role display: User badge now properly stripped when higher role exists
- Ruffle/Flash: CSP headers fixed (wasm-unsafe-eval + unpkg worker-src)
- Website: carousel fixed height (no more page jumping), interval 4s
- Website: replaced screenshots with latest, updated feature cards
- Website: added E2E encryption to selling points, features grid, comparison table
- Website: updated file sharing limit (configurable up to 1.5 GB), games card expanded
2026-02-17 00:43:46 +00:00
< td > < span class = "check" > ✓ < / span > < / td >
< / tr >
2026-02-12 16:35:02 +00:00
< tr >
< td > Voice chat< / td >
< td > < span class = "check" > ✓ < / span > < / td >
< td > < span class = "check" > ✓ < / span > < / td >
2026-02-17 22:31:23 +00:00
< td > < span class = "check" > ✓ < / span > < / td >
2026-02-12 16:35:02 +00:00
< td > < span class = "meh" > Paid< / span > < / td >
< td > < span class = "check" > ✓ < / span > < / td >
< / tr >
< tr >
< td > Screen sharing< / td >
< td > < span class = "check" > ✓ < / span > < / td >
< td > < span class = "check" > ✓ < / span > < / td >
2026-02-17 22:31:23 +00:00
< td > < span class = "check" > ✓ < / span > < / td >
2026-02-12 16:35:02 +00:00
< td > < span class = "meh" > Paid< / span > < / td >
< td > < span class = "cross" > ✗ < / span > < / td >
< / tr >
< tr >
< td > Open source< / td >
< td > < span class = "check" > ✓ < / span > < / td >
2026-02-17 22:31:23 +00:00
< td > < span class = "check" > ✓ < / span > < / td >
2026-02-12 16:35:02 +00:00
< td > < span class = "cross" > ✗ < / span > < / td >
< td > < span class = "cross" > ✗ < / span > < / td >
< td > < span class = "check" > ✓ < / span > < / td >
< / tr >
< tr >
< td > Themes / customization< / td >
2026-02-14 15:42:37 +00:00
< td > < span class = "check" > 25+< / span > < / td >
2026-02-17 22:31:23 +00:00
< td > < span class = "check" > CSS< / span > < / td >
2026-02-12 16:35:02 +00:00
< td > < span class = "meh" > Limited< / span > < / td >
< td > < span class = "meh" > Limited< / span > < / td >
< td > < span class = "cross" > ✗ < / span > < / td >
< / tr >
< tr >
< td > Group channels< / td >
< td > < span class = "check" > ✓ < / span > < / td >
< td > < span class = "check" > ✓ < / span > < / td >
< td > < span class = "check" > ✓ < / span > < / td >
< td > < span class = "check" > ✓ < / span > < / td >
2026-02-17 22:31:23 +00:00
< td > < span class = "check" > ✓ < / span > < / td >
2026-02-12 16:35:02 +00:00
< / tr >
< tr >
< td > No email/phone required< / td >
< td > < span class = "check" > ✓ < / span > < / td >
< td > < span class = "cross" > ✗ < / span > < / td >
< td > < span class = "cross" > ✗ < / span > < / td >
< td > < span class = "cross" > ✗ < / span > < / td >
2026-02-17 22:31:23 +00:00
< td > < span class = "cross" > ✗ < / span > < / td >
2026-02-12 16:35:02 +00:00
< / tr >
< tr >
< td > Free forever (no paid tier)< / td >
< td > < span class = "check" > ✓ < / span > < / td >
< td > < span class = "meh" > Freemium< / span > < / td >
< td > < span class = "meh" > Freemium< / span > < / td >
2026-02-17 22:31:23 +00:00
< td > < span class = "meh" > Freemium< / span > < / td >
2026-02-12 16:35:02 +00:00
< td > < span class = "check" > ✓ < / span > < / td >
< / tr >
< tr >
< td > Friends join with zero install< / td >
< td > < span class = "check" > ✓ < / span > < / td >
2026-02-17 22:31:23 +00:00
< td > < span class = "check" > ✓ < / span > < / td >
2026-02-12 16:35:02 +00:00
< td > < span class = "cross" > ✗ < / span > < / td >
< td > < span class = "cross" > ✗ < / span > < / td >
< td > < span class = "cross" > ✗ < / span > < / td >
< / tr >
2026-02-12 17:12:24 +00:00
< tr >
< td > Works on mobile browsers< / td >
< td > < span class = "check" > ✓ < / span > < / td >
2026-02-17 22:31:23 +00:00
< td > < span class = "check" > ✓ < / span > < / td >
2026-02-12 17:12:24 +00:00
< td > < span class = "cross" > App only< / span > < / td >
< td > < span class = "cross" > App only< / span > < / td >
< td > < span class = "cross" > App only< / span > < / td >
< / tr >
v2.0.0 Discord history import, E2E password-change fix, scroll fix
Added:
- Discord history import Direct Connect (paste token, pick server, select channels)
- Discord history import File upload (DiscordChatExporter JSON/ZIP)
- Tabbed import modal (Upload File | Connect to Discord)
- Full server structure import (text, announcement, forum, media, threads)
- Forum tag resolution and display
- Discord avatar preservation (webhook_avatar column)
- Channel type indicators in import picker
Fixed:
- E2E key loss on password change (re-wraps key with new password)
- Scroll-to-bottom loop when images load while scrolled up
- ARM64 Docker support (#34)
Changed:
- Website, README, GUIDE updated with Discord import docs
- Version bumped to 2.0.0
2026-02-19 00:53:58 +00:00
< tr >
< td > Import history from Discord< / td >
< td > < span class = "check" > ✓ < / span > < / td >
< td > < span class = "cross" > ✗ < / span > < / td >
< td > — < / td >
< td > < span class = "cross" > ✗ < / span > < / td >
< td > < span class = "cross" > ✗ < / span > < / td >
< / tr >
2026-02-12 16:35:02 +00:00
< / tbody >
< / table >
< / div >
< / div >
< / section >
<!-- ===== DOWNLOAD ===== -->
< section class = "download-section" id = "download" >
< div class = "container" >
< div class = "section-header fade-in" >
< span class = "overline" > Get Started< / span >
< h2 > Download Haven< / h2 >
< p > One zip file. Unzip, double-click, done.< / p >
< / div >
< div class = "download-card fade-in" >
2026-04-20 22:28:50 +00:00
< h2 > ⬡ Haven Server — v3.5.0< / h2 >
2026-02-12 20:11:39 +00:00
< p class = "download-version" > Latest stable release · Windows, macOS & Linux · ~5 MB< / p >
2026-02-12 16:35:02 +00:00
< div class = "download-btn-group" >
2026-04-20 22:28:50 +00:00
< a href = "https://github.com/ancsemi/Haven/archive/refs/tags/v3.5.0.zip" class = "btn btn-primary download-main" >
< span class = "icon" > ⬇ < / span > Download v3.5.0 (.zip)
2026-02-12 16:35:02 +00:00
< / a >
< div class = "download-alt-links" >
2026-02-12 17:12:24 +00:00
< a href = "https://github.com/ancsemi/Haven" target = "_blank" > ⛭ View on GitHub< / a >
2026-03-15 11:32:05 +00:00
< a href = "https://github.com/ancsemi/Haven/blob/main/GUIDE.md" target = "_blank" > 📖 Setup Guide< / a >
< a href = "https://github.com/ancsemi/Haven/blob/main/CHANGELOG.md" target = "_blank" > 📋 Full Changelog< / a >
2026-02-12 16:35:02 +00:00
< / div >
< / div >
< div class = "version-history" >
< button class = "version-toggle" onclick = "this.classList.toggle('open'); this.nextElementSibling.classList.toggle('open');" >
< span > Version History< / span >
2026-03-15 11:32:05 +00:00
< span class = "arrow" > ▼< / span >
2026-02-12 16:35:02 +00:00
< / button >
< div class = "version-list" >
< div class = "version-list-inner" >
< div class = "version-item" >
2026-04-20 22:28:50 +00:00
< div > < span class = "v-name" > v3.5.0< / span > < span class = "v-tag latest" > Latest< / span > < / div >
< a href = "https://github.com/ancsemi/Haven/archive/refs/tags/v3.5.0.zip" > Download → < / a >
< / div >
< div class = "version-item" >
< div > < span class = "v-name" > v3.4.0< / span > — Quote/edit UX, bot API upgrades, SSO quality fixes< / div >
2026-04-19 20:57:53 +00:00
< a href = "https://github.com/ancsemi/Haven/archive/refs/tags/v3.4.0.zip" > Download → < / a >
< / div >
< div class = "version-item" >
< div > < span class = "v-name" > v3.3.0< / span > — Last read indicator, per-event volume sliders, server list sync improvements< / div >
2026-04-19 01:12:53 +00:00
< a href = "https://github.com/ancsemi/Haven/archive/refs/tags/v3.3.0.zip" > Download → < / a >
< / div >
< div class = "version-item" >
< div > < span class = "v-name" > v3.2.0< / span > — Mark as Read, pinned message jump, iOS Safari fixes< / div >
2026-04-16 22:00:19 +00:00
< a href = "https://github.com/ancsemi/Haven/archive/refs/tags/v3.2.0.zip" > Download → < / a >
< / div >
< div class = "version-item" >
< div > < span class = "v-name" > v3.1.1< / span > — Status bar toggle, server URL display, mobile fixes< / div >
2026-04-15 05:18:59 +00:00
< a href = "https://github.com/ancsemi/Haven/archive/refs/tags/v3.1.1.zip" > Download → < / a >
< / div >
< div class = "version-item" >
< div > < span class = "v-name" > v3.1.0< / span > — Server banners, server icon sync< / div >
2026-04-15 01:44:28 +00:00
< a href = "https://github.com/ancsemi/Haven/archive/refs/tags/v3.1.0.zip" > Download → < / a >
< / div >
< div class = "version-item" >
< div > < span class = "v-name" > v3.0.0< / span > — SSO registration, advanced search filters, reply notifications< / div >
2026-04-14 05:13:43 +00:00
< a href = "https://github.com/ancsemi/Haven/archive/refs/tags/v3.0.0.zip" > Download → < / a >
< / div >
< div class = "version-item" >
< div > < span class = "v-name" > v2.9.9< / span > — Encrypted server list sync, jump-to-bottom, edit-mode emoji picker< / div >
2026-04-13 05:41:45 +00:00
< a href = "https://github.com/ancsemi/Haven/archive/refs/tags/v2.9.9.zip" > Download → < / a >
< / div >
< div class = "version-item" >
< div > < span class = "v-name" > v2.9.8< / span > — Read-only channels, server-relayed mic illumination, role display picker< / div >
2026-04-12 04:04:01 +00:00
< a href = "https://github.com/ancsemi/Haven/archive/refs/tags/v2.9.8.zip" > Download → < / a >
< / div >
< div class = "version-item" >
< div > < span class = "v-name" > v2.9.7< / span > — Open-source STUN servers, STUN_URLS env var< / div >
2026-04-09 04:04:49 +00:00
< a href = "https://github.com/ancsemi/Haven/archive/refs/tags/v2.9.7.zip" > Download → < / a >
< / div >
< div class = "version-item" >
< div > < span class = "v-name" > v2.9.6< / span > — Custom Terms of Service, unpin fix< / div >
2026-04-08 02:47:02 +00:00
< a href = "https://github.com/ancsemi/Haven/archive/refs/tags/v2.9.6.zip" > Download → < / a >
< / div >
< div class = "version-item" >
< div > < span class = "v-name" > v2.9.5< / span > — License changed to AGPL-3.0< / div >
2026-04-07 02:21:47 +00:00
< a href = "https://github.com/ancsemi/Haven/archive/refs/tags/v2.9.5.zip" > Download → < / a >
< / div >
< div class = "version-item" >
< div > < span class = "v-name" > v2.9.4< / span > — Bot webhook callbacks, community server< / div >
2026-04-06 02:59:28 +00:00
< a href = "https://github.com/ancsemi/Haven/archive/refs/tags/v2.9.4.zip" > Download → < / a >
< / div >
< div class = "version-item" >
< div > < span class = "v-name" > v2.9.3< / span > — Android popup refresh, Desktop naming fix< / div >
2026-04-06 01:51:46 +00:00
< a href = "https://github.com/ancsemi/Haven/archive/refs/tags/v2.9.3.zip" > Download → < / a >
< / div >
< div class = "version-item" >
< div > < span class = "v-name" > v2.9.2< / span > — Per-app audio CSP fix< / div >
2026-04-05 20:10:45 +00:00
< a href = "https://github.com/ancsemi/Haven/archive/refs/tags/v2.9.2.zip" > Download → < / a >
< / div >
< div class = "version-item" >
< div > < span class = "v-name" > v2.9.1< / span > — View All Members permission fix< / div >
2026-04-05 01:32:58 +00:00
< a href = "https://github.com/ancsemi/Haven/archive/refs/tags/v2.9.1.zip" > Download → < / a >
< / div >
< div class = "version-item" >
< div > < span class = "v-name" > v2.9.0< / span > — Temp voice channels, voice permission fix, AFK idle fix< / div >
2026-04-03 01:55:27 +00:00
< a href = "https://github.com/ancsemi/Haven/archive/refs/tags/v2.9.0.zip" > Download → < / a >
< / div >
< div class = "version-item" >
< div > < span class = "v-name" > v2.8.9< / span > — Voice presence fixes, channel organize, collapsed sub badges< / div >
2026-04-02 02:22:38 +00:00
< a href = "https://github.com/ancsemi/Haven/archive/refs/tags/v2.8.9.zip" > Download → < / a >
< / div >
< div class = "version-item" >
< div > < span class = "v-name" > v2.8.8< / span > — Voice AFK presence fix, video thumbnails< / div >
2026-04-01 02:03:37 +00:00
< a href = "https://github.com/ancsemi/Haven/archive/refs/tags/v2.8.8.zip" > Download → < / a >
< / div >
< div class = "version-item" >
< div > < span class = "v-name" > v2.8.7< / span > — Donor & sponsor list update< / div >
2026-03-31 00:04:54 +00:00
< a href = "https://github.com/ancsemi/Haven/archive/refs/tags/v2.8.7.zip" > Download → < / a >
< / div >
< div class = "version-item" >
< div > < span class = "v-name" > v2.8.6< / span > — Heart/donate button position fix< / div >
2026-03-29 19:43:40 +00:00
< a href = "https://github.com/ancsemi/Haven/archive/refs/tags/v2.8.6.zip" > Download → < / a >
< / div >
< div class = "version-item" >
< div > < span class = "v-name" > v2.8.5< / span > — Noise gate, screen share rejoin, setup script fixes< / div >
2026-03-29 18:45:38 +00:00
< a href = "https://github.com/ancsemi/Haven/archive/refs/tags/v2.8.5.zip" > Download → < / a >
< / div >
< div class = "version-item" >
< div > < span class = "v-name" > v2.8.4< / span > — AFK voice channel rework, video embed fullscreen fix< / div >
2026-03-29 03:14:55 +00:00
< a href = "https://github.com/ancsemi/Haven/archive/refs/tags/v2.8.4.zip" > Download → < / a >
< / div >
< div class = "version-item" >
< div > < span class = "v-name" > v2.8.3< / span > — Bulk emoji upload, TTS permission, Shippy popout fix< / div >
2026-03-28 02:17:52 +00:00
< a href = "https://github.com/ancsemi/Haven/archive/refs/tags/v2.8.3.zip" > Download → < / a >
< / div >
< div class = "version-item" >
< div > < span class = "v-name" > v2.8.2< / span > — Camera device selector, TTS abuse fixes, E2E spoiler fix< / div >
2026-03-24 04:03:40 +00:00
< a href = "https://github.com/ancsemi/Haven/archive/refs/tags/v2.8.2.zip" > Download → < / a >
< / div >
< div class = "version-item" >
< div > < span class = "v-name" > v2.8.1< / span > — Camera selector, TTS fixes, channel sort sync, spoiler in E2E DMs< / div >
2026-03-22 02:30:39 +00:00
< a href = "https://github.com/ancsemi/Haven/archive/refs/tags/v2.8.1.zip" > Download → < / a >
< / div >
< div class = "version-item" >
< div > < span class = "v-name" > v2.8.0< / span > — Expanded permissions, deleted users list, configurable voice bitrate< / div >
2026-03-19 02:09:04 +00:00
< a href = "https://github.com/ancsemi/Haven/archive/refs/tags/v2.8.0.zip" > Download → < / a >
< / div >
< div class = "version-item" >
< div > < span class = "v-name" > v2.7.9< / span > — Custom login title, reset roles, Desktop push notif fix< / div >
2026-03-18 01:04:36 +00:00
< a href = "https://github.com/ancsemi/Haven/archive/refs/tags/v2.7.9.zip" > Download → < / a >
< / div >
< div class = "version-item" >
< div > < span class = "v-name" > v2.7.8< / span > — Upload progress bar, view all members, stream reopen, Docker fix< / div >
2026-03-17 01:54:49 +00:00
< a href = "https://github.com/ancsemi/Haven/archive/refs/tags/v2.7.8.zip" > Download → < / a >
< / div >
< div class = "version-item" >
< div > < span class = "v-name" > v2.7.7< / span > — Temporary channels, members list privacy, URL @ fix< / div >
2026-03-16 04:39:40 +00:00
< a href = "https://github.com/ancsemi/Haven/archive/refs/tags/v2.7.7.zip" > Download → < / a >
< / div >
< div class = "version-item" >
< div > < span class = "v-name" > v2.7.6< / span > — Per-feature channel toggles, popout menu< / div >
2026-03-15 06:03:48 +00:00
< a href = "https://github.com/ancsemi/Haven/archive/refs/tags/v2.7.6.zip" > Download → < / a >
< / div >
< div class = "version-item" >
< div > < span class = "v-name" > v2.7.5< / span > — Keyboard nav, dynamic sort, scroll fixes< / div >
2026-03-14 04:23:04 +00:00
< a href = "https://github.com/ancsemi/Haven/archive/refs/tags/v2.7.5.zip" > Download → < / a >
< / div >
< div class = "version-item" >
< div > < span class = "v-name" > v2.7.4< / span > — Account recovery codes, admin panel fixes< / div >
2026-03-12 03:35:52 +00:00
< a href = "https://github.com/ancsemi/Haven/archive/refs/tags/v2.7.4.zip" > Download → < / a >
< / div >
< div class = "version-item" >
< div > < span class = "v-name" > v2.7.3< / span > — Video fullscreen, PiP seek bar, stream tile fixes< / div >
2026-03-11 04:32:32 +00:00
< a href = "https://github.com/ancsemi/Haven/archive/refs/tags/v2.7.3.zip" > Download → < / a >
< / div >
< div class = "version-item" >
< div > < span class = "v-name" > v2.7.2< / span > — Scroll-to-bottom fixes< / div >
2026-03-10 04:59:48 +00:00
< a href = "https://github.com/ancsemi/Haven/archive/refs/tags/v2.7.2.zip" > Download → < / a >
< / div >
< div class = "version-item" >
< div > < span class = "v-name" > v2.7.1< / span > — Media toggle, channel functions polish, voice fixes< / div >
2026-03-09 04:26:55 +00:00
< a href = "https://github.com/ancsemi/Haven/archive/refs/tags/v2.7.1.zip" > Download → < / a >
< / div >
< div class = "version-item" >
2026-03-10 04:59:48 +00:00
< div > < span class = "v-name" > v2.7.0< / span > — Performance overhaul, RGB freeze fix, app modularization< / div >
2026-03-08 08:03:49 +00:00
< a href = "https://github.com/ancsemi/Haven/archive/refs/tags/v2.7.0.zip" > Download → < / a >
< / div >
< div class = "version-item" >
< div > < span class = "v-name" > v2.6.0< / span > — Android beta sign-up, auto-accept streams< / div >
2026-03-06 04:56:14 +00:00
< a href = "https://github.com/ancsemi/Haven/archive/refs/tags/v2.6.0.zip" > Download → < / a >
< / div >
< div class = "version-item" >
< div > < span class = "v-name" > v2.5.8< / span > — Auto-accept streams setting< / div >
2026-03-06 04:15:43 +00:00
< a href = "https://github.com/ancsemi/Haven/archive/refs/tags/v2.5.8.zip" > Download → < / a >
< / div >
< div class = "version-item" >
< div > < span class = "v-name" > v2.5.7< / span > — Submenu overflow fix; email @mention false-tag fix< / div >
2026-03-06 02:53:34 +00:00
< a href = "https://github.com/ancsemi/Haven/archive/refs/tags/v2.5.7.zip" > Download → < / a >
< / div >
< div class = "version-item" >
< div > < span class = "v-name" > v2.5.6< / span > — Channel re-parenting, modal resize/expand, organize drill-down< / div >
2026-03-05 02:45:20 +00:00
< a href = "https://github.com/ancsemi/Haven/archive/refs/tags/v2.5.6.zip" > Download → < / a >
< / div >
< div class = "version-item" >
< div > < span class = "v-name" > v2.5.5< / span > — Settings layout hotfix; TOTP 2FA fixes< / div >
2026-03-04 03:11:08 +00:00
< a href = "https://github.com/ancsemi/Haven/archive/refs/tags/v2.5.5.zip" > Download → < / a >
< / div >
< div class = "version-item" >
< div > < span class = "v-name" > v2.5.4< / span > — Link preview fixes: Reddit JSON API, fxtwitter image fallback, HTML entity decoding< / div >
2026-03-04 01:49:02 +00:00
< a href = "https://github.com/ancsemi/Haven/archive/refs/tags/v2.5.4.zip" > Download → < / a >
< / div >
< div class = "version-item" >
< div > < span class = "v-name" > v2.5.3< / span > — Built-in AOL sounds bundled with every server< / div >
< a href = "https://github.com/ancsemi/Haven/archive/refs/tags/v2.5.3.zip" > Download → < / a >
< / div >
< div class = "version-item" >
< div > < span class = "v-name" > v2.5.2< / span > — manage_soundboard permission; fxtwitter, Pixiv & oEmbed autodiscovery fixes< / div >
2026-03-03 12:54:41 +00:00
< a href = "https://github.com/ancsemi/Haven/archive/refs/tags/v2.5.2.zip" > Download → < / a >
< / div >
< div class = "version-item" >
< div > < span class = "v-name" > v2.5.1< / span > — Bug fixes: image upload race, DM reply encryption, voice reconnect; manage_emojis permission< / div >
2026-03-03 04:57:44 +00:00
< a href = "https://github.com/ancsemi/Haven/archive/refs/tags/v2.5.1.zip" > Download → < / a >
< / div >
< div class = "version-item" >
< div > < span class = "v-name" > v2.5.0< / span > — One-click installer, FCM push notifications, admin update banner< / div >
2026-03-02 02:49:29 +00:00
< a href = "https://github.com/ancsemi/Haven/archive/refs/tags/v2.5.0.zip" > Download → < / a >
< / div >
< div class = "version-item" >
< div > < span class = "v-name" > v2.4.0< / span > — Emoji upload crop/zoom editor, jumbo emoji messages< / div >
2026-03-01 20:51:37 +00:00
< a href = "https://github.com/ancsemi/Haven/archive/refs/tags/v2.4.0.zip" > Download → < / a >
< / div >
< div class = "version-item" >
< div > < span class = "v-name" > v2.3.9< / span > — Two-factor authentication (TOTP), native OS notifications< / div >
2026-03-01 07:09:56 +00:00
< a href = "https://github.com/ancsemi/Haven/archive/refs/tags/v2.3.9.zip" > Download → < / a >
< / div >
< div class = "version-item" >
< div > < span class = "v-name" > v2.3.8< / span > — Private channel code visibility, Docker healthcheck fix< / div >
2026-02-28 05:15:03 +00:00
< a href = "https://github.com/ancsemi/Haven/archive/refs/tags/v2.3.8.zip" > Download → < / a >
2026-02-28 03:49:22 +00:00
< / div >
< div class = "version-item" >
2026-02-28 05:15:03 +00:00
< div > < span class = "v-name" > v2.3.7< / span > — Private channel invite lockdown, creator auto-mod role< / div >
< a href = "https://github.com/ancsemi/Haven/archive/refs/tags/v2.3.7.zip" > Download → < / a >
2026-02-27 01:24:02 +00:00
< / div >
< div class = "version-item" >
< div > < span class = "v-name" > v2.3.4< / span > — Right-click voice users, donor tier styling< / div >
2026-02-26 19:36:17 +00:00
< a href = "https://github.com/ancsemi/Haven/archive/refs/tags/v2.3.4.zip" > Download → < / a >
< / div >
< div class = "version-item" >
< div > < span class = "v-name" > v2.3.3< / span > — Member list DM/nickname, sidebar members, admin recovery< / div >
2026-02-26 00:38:27 +00:00
< a href = "https://github.com/ancsemi/Haven/archive/refs/tags/v2.3.3.zip" > Download → < / a >
< / div >
< div class = "version-item" >
< div > < span class = "v-name" > v2.3.2< / span > — Sound Manager, kick channel revoke, font scaling< / div >
2026-02-25 20:52:30 +00:00
< a href = "https://github.com/ancsemi/Haven/archive/refs/tags/v2.3.2.zip" > Download → < / a >
< / div >
< div class = "version-item" >
< div > < span class = "v-name" > v2.3.1< / span > — Plugin CSP fix, health check 404 fix< / div >
2026-02-25 03:18:03 +00:00
< a href = "https://github.com/ancsemi/Haven/archive/refs/tags/v2.3.1.zip" > Download → < / a >
< / div >
< div class = "version-item" >
2026-02-25 20:52:30 +00:00
< div > < span class = "v-name" > v2.3.0< / span > — Webcam video, plugins, font size, channel invites< / div >
2026-02-24 23:54:00 +00:00
< a href = "https://github.com/ancsemi/Haven/archive/refs/tags/v2.3.0.zip" > Download → < / a >
< / div >
< div class = "version-item" >
< div > < span class = "v-name" > v2.2.5< / span > — Security fixes, desktop code removed< / div >
2026-02-24 02:52:38 +00:00
< a href = "https://github.com/ancsemi/Haven/archive/refs/tags/v2.2.5.zip" > Download → < / a >
< / div >
< div class = "version-item" >
< div > < span class = "v-name" > v2.2.4< / span > — Security hardening, SSRF fix, JWT verification< / div >
2026-02-22 14:55:49 +00:00
< a href = "https://github.com/ancsemi/Haven/archive/refs/tags/v2.2.4.zip" > Download → < / a >
< / div >
< div class = "version-item" >
< div > < span class = "v-name" > v2.2.3< / span > — Screen share fixes, role save UX< / div >
2026-02-22 04:45:41 +00:00
< a href = "https://github.com/ancsemi/Haven/archive/refs/tags/v2.2.3.zip" > Download → < / a >
< / div >
< div class = "version-item" >
< div > < span class = "v-name" > v2.2.2< / span > — FORCE_HTTP, auto-assign roles, Docker ARM fix< / div >
2026-02-21 18:30:54 +00:00
< a href = "https://github.com/ancsemi/Haven/archive/refs/tags/v2.2.2.zip" > Download → < / a >
< / div >
< div class = "version-item" >
< div > < span class = "v-name" > v2.2.1< / span > — Mobile UI fixes, TURN credential fix, file upload fix< / div >
2026-02-21 04:00:04 +00:00
< a href = "https://github.com/ancsemi/Haven/archive/refs/tags/v2.2.1.zip" > Download → < / a >
< / div >
< div class = "version-item" >
< div > < span class = "v-name" > v2.2.0< / span > — CRT vignette, YouTube embeds, emoji flip< / div >
2026-02-20 07:02:10 +00:00
< a href = "https://github.com/ancsemi/Haven/archive/refs/tags/v2.2.0.zip" > Download → < / a >
< / div >
< div class = "version-item" >
< div > < span class = "v-name" > v2.1.0< / span > — E2E multi-device sync, channel organizer fix< / div >
2026-02-20 01:01:48 +00:00
< a href = "https://github.com/ancsemi/Haven/archive/refs/tags/v2.1.0.zip" > Download → < / a >
< / div >
< div class = "version-item" >
< div > < span class = "v-name" > v2.0.1< / span > — Security fix (installer removal)< / div >
2026-02-19 06:17:55 +00:00
< a href = "https://github.com/ancsemi/Haven/archive/refs/tags/v2.0.1.zip" > Download → < / a >
< / div >
< div class = "version-item" >
< div > < span class = "v-name" > v2.0.0< / span > — Discord import, E2E key fix, ARM64 Docker< / div >
v2.0.0 Discord history import, E2E password-change fix, scroll fix
Added:
- Discord history import Direct Connect (paste token, pick server, select channels)
- Discord history import File upload (DiscordChatExporter JSON/ZIP)
- Tabbed import modal (Upload File | Connect to Discord)
- Full server structure import (text, announcement, forum, media, threads)
- Forum tag resolution and display
- Discord avatar preservation (webhook_avatar column)
- Channel type indicators in import picker
Fixed:
- E2E key loss on password change (re-wraps key with new password)
- Scroll-to-bottom loop when images load while scrolled up
- ARM64 Docker support (#34)
Changed:
- Website, README, GUIDE updated with Discord import docs
- Version bumped to 2.0.0
2026-02-19 00:53:58 +00:00
< a href = "https://github.com/ancsemi/Haven/archive/refs/tags/v2.0.0.zip" > Download → < / a >
< / div >
< div class = "version-item" >
< div > < span class = "v-name" > v1.9.2< / span > — Image lightbox, emoji autocomplete, GIF avatars< / div >
2026-02-18 18:53:05 +00:00
< a href = "https://github.com/ancsemi/Haven/archive/refs/tags/v1.9.2.zip" > Download → < / a >
< / div >
< div class = "version-item" >
< div > < span class = "v-name" > v1.9.1< / span > — Auto-cleanup fix, server branding, emoji modal< / div >
2026-02-18 16:55:42 +00:00
< a href = "https://github.com/ancsemi/Haven/archive/refs/tags/v1.9.1.zip" > Download → < / a >
< / div >
< div class = "version-item" >
< div > < span class = "v-name" > v1.9.0< / span > — Custom emojis, emoji quickbar, JWT security< / div >
2026-02-18 00:40:22 +00:00
< a href = "https://github.com/ancsemi/Haven/archive/refs/tags/v1.9.0.zip" > Download → < / a >
< / div >
< div class = "version-item" >
< div > < span class = "v-name" > v1.8.2< / span > — PiP revert, YouTube playlists, bot fixes< / div >
2026-02-17 08:15:33 +00:00
< a href = "https://github.com/ancsemi/Haven/archive/refs/tags/v1.8.2.zip" > Download → < / a >
< / div >
< div class = "version-item" >
< div > < span class = "v-name" > v1.8.1< / span > — Upload limits, mobile refresh, E2E sync< / div >
v1.8.1: upload fix, optional flash games, mic icons, verification codes, mobile fix
- Fix: client-side upload limit now reads server setting (was hardcoded 25 MB)
- Fix: compact message timestamp no longer shifts text on hover
- Fix: mobile foreground resume re-fetches messages/channels/members
- Changed: mute button uses mic icon, deafen uses speaker icon
- Changed: Flash game SWFs removed from repo (~37 MB); now optional in-app download
- Added: E2E verification codes (safety numbers) for DM encryption verification
- Added: server endpoints for flash ROM status check and download-on-demand
- Added: muted mic CSS strikethrough, flash install banner, disabled game cards
- Updated: package.json, CHANGELOG, website, docs for v1.8.1
2026-02-17 02:12:25 +00:00
< a href = "https://github.com/ancsemi/Haven/archive/refs/tags/v1.8.1.zip" > Download → < / a >
< / div >
< div class = "version-item" >
< div > < span class = "v-name" > v1.8.0< / span > — E2E encryption, Flash games, seek bar< / div >
2026-02-16 22:46:13 +00:00
< a href = "https://github.com/ancsemi/Haven/archive/refs/tags/v1.8.0.zip" > Download → < / a >
< / div >
< div class = "version-item" >
< div > < span class = "v-name" > v1.7.0< / span > — Role inheritance, voice dot colors< / div >
< span class = "v-date" > Feb 16, 2026< / span >
v1.7.0 role inheritance, UI polish, voice dot colors
- Role inheritance: server roles cascade to all channels, channel roles
cascade to sub-channels (getUserEffectiveLevel, userHasPermission,
getUserHighestRole all use getChannelRoleChain helper)
- Voice dot color matches user's highest role color (server sends
roleColor in broadcastVoiceUsers / request-voice-users)
- Transfer Admin modal redesigned with warning box, note, and error
styling
- Noise-suppression slider track made visible (6px, border, 0.3 alpha)
and thumb enlarged to 14px
- User hover tooltip now opaque (bg-secondary, no backdrop-filter,
solid box-shadow)
- Version bump 1.6.0 -> 1.7.0 in package.json, website, docs
- Changelog entries added for v1.6.0 and v1.7.0
2026-02-15 21:08:45 +00:00
< / div >
< div class = "version-item" >
< div > < span class = "v-name" > v1.6.0< / span > — Roles, voice controls, admin transfer< / div >
< span class = "v-date" > Feb 15, 2026< / span >
2026-02-15 04:46:51 +00:00
< / div >
< div class = "version-item" >
< div > < span class = "v-name" > v1.5.0< / span > — Push notifications, emoji search< / div >
< span class = "v-date" > Feb 14, 2026< / span >
< / div >
< div class = "version-item" >
< div > < span class = "v-name" > v1.4.7< / span > < / div >
< span class = "v-date" > Feb 13, 2026< / span >
2026-02-14 03:02:54 +00:00
< / div >
< div class = "version-item" >
< div > < span class = "v-name" > v1.4.6< / span > < / div >
< span class = "v-date" > Feb 13, 2026< / span >
< / div >
< div class = "version-item" >
< div > < span class = "v-name" > v1.4.5< / span > < / div >
< span class = "v-date" > Feb 12, 2026< / span >
2026-02-12 20:11:39 +00:00
< / div >
< div class = "version-item" >
< div > < span class = "v-name" > v1.4.2< / span > < / div >
2026-02-14 03:02:54 +00:00
< span class = "v-date" > Feb 12, 2026< / span >
2026-02-12 16:35:02 +00:00
< / div >
< div class = "version-item" >
2026-02-12 17:12:24 +00:00
< div > < span class = "v-name" > v1.4.1< / span > < / div >
2026-02-14 03:02:54 +00:00
< span class = "v-date" > Feb 12, 2026< / span >
2026-02-12 16:35:02 +00:00
< / div >
< div class = "version-item" >
2026-02-12 17:12:24 +00:00
< div > < span class = "v-name" > v1.4.0< / span > — Display names, mobile voice< / div >
2026-02-14 03:02:54 +00:00
< span class = "v-date" > Feb 12, 2026< / span >
2026-02-12 16:35:02 +00:00
< / div >
< div class = "version-item" >
2026-02-12 17:12:24 +00:00
< div > < span class = "v-name" > v1.3.0< / span > — DMs, user status, file sharing< / div >
2026-02-12 16:35:02 +00:00
< span class = "v-date" > Feb 12, 2026< / span >
< / div >
< div class = "version-item" >
2026-02-12 17:12:24 +00:00
< div > < span class = "v-name" > v1.2.0< / span > — Voice UX, pinning, link previews< / div >
2026-02-12 16:35:02 +00:00
< span class = "v-date" > Feb 12, 2026< / span >
< / div >
< div class = "version-item" >
2026-02-12 17:12:24 +00:00
< div > < span class = "v-name" > v1.1.0< / span > — Data isolation< / div >
2026-02-12 16:35:02 +00:00
< span class = "v-date" > Feb 11, 2026< / span >
< / div >
< div class = "version-item" >
2026-02-12 17:12:24 +00:00
< div > < span class = "v-name" > v1.0.0< / span > < span class = "v-tag" > First Release< / span > < / div >
2026-03-15 11:32:05 +00:00
< a href = "https://github.com/ancsemi/Haven/releases/tag/v1.0.0" target = "_blank" > Release notes →< / a >
2026-02-12 16:35:02 +00:00
< / div >
< / div >
< / div >
< / div >
< / div >
2026-02-24 23:54:00 +00:00
<!-- Desktop App Download Card -->
< div class = "download-card fade-in" style = "margin-top: 32px; border-color: rgba(250, 166, 26, 0.25);" >
< div style = "position: absolute; top: 0; left: 0; right: 0; height: 2px; background: linear-gradient(90deg, var(--accent-dim), var(--warning), var(--green)); box-shadow: 0 0 12px rgba(250, 166, 26, 0.3);" > < / div >
2026-03-15 11:50:33 +00:00
< h2 > 🖥️ Haven Desktop < span class = "beta-badge-inline" > BETA< / span > — v1.1.4< / h2 >
2026-02-25 20:52:30 +00:00
< p class = "download-version" > Latest beta release · Windows & Linux · Standalone installer< / p >
2026-02-24 23:54:00 +00:00
< div class = "download-btn-group" >
< a href = "https://github.com/ancsemi/Haven-Desktop/releases/latest" class = "btn btn-primary download-main" style = "background: var(--warning); box-shadow: 0 4px 24px rgba(250, 166, 26, 0.25), 0 0 0 1px rgba(250, 166, 26, 0.3);" >
2026-03-15 11:32:05 +00:00
< span class = "icon" > ⬇< / span > Download Desktop v1.1.4
2026-02-24 23:54:00 +00:00
< / a >
< div class = "download-alt-links" >
< a href = "https://github.com/ancsemi/Haven-Desktop" target = "_blank" > ⛭ View on GitHub< / a >
2026-03-15 11:32:05 +00:00
< a href = "https://github.com/ancsemi/Haven-Desktop/blob/main/README.md" target = "_blank" > 📖 README< / a >
2026-03-15 11:50:33 +00:00
< a href = "https://github.com/ancsemi/Haven-Desktop/issues" target = "_blank" > 🐛 Report a Bug< / a >
2026-02-24 23:54:00 +00:00
< / div >
< / div >
< p style = "font-size: 0.85rem; color: var(--text-dim); margin-top: 16px;" >
2026-03-15 11:50:33 +00:00
⚠️ < strong > Beta software< / strong > — feedback & bug reports are greatly appreciated.< br >
2026-02-24 23:54:00 +00:00
The desktop app is a client. You still need a < a href = "https://github.com/ancsemi/Haven" style = "color: var(--accent-bright);" > Haven server< / a > to connect to.
< / p >
< / div >
2026-04-06 01:51:46 +00:00
<!-- Android App Card -->
2026-03-06 04:56:14 +00:00
< div class = "download-card fade-in" style = "margin-top: 32px; border-color: rgba(61, 220, 132, 0.25);" >
< div style = "position: absolute; top: 0; left: 0; right: 0; height: 2px; background: linear-gradient(90deg, #3ddc84, #2bb55e, #82aaff); box-shadow: 0 0 12px rgba(61, 220, 132, 0.3);" > < / div >
2026-04-06 01:51:46 +00:00
< h2 > 📱 Amni-Haven Android < span class = "closed-beta-badge-inline" style = "background: #3ddc84; color: #1a1a2e;" > RELEASED< / span > < / h2 >
< p class = "download-version" > Available now · Android · Google Play< / p >
2026-03-06 05:28:41 +00:00
2026-04-06 01:51:46 +00:00
< div style = "margin-top:20px;text-align:center" >
< a href = "https://play.google.com/store/apps/details?id=com.havenapp.mobile&gl=US" target = "_blank" rel = "noopener" style = "display:inline-block" >
< img src = "https://play.google.com/intl/en_us/badges/static/images/badges/en_badge_web_generic.png" alt = "Get it on Google Play" style = "height:60px" >
< / a >
< / div >
2026-03-06 04:56:14 +00:00
< p style = "font-size: 0.85rem; color: var(--text-dim); margin-top: 16px; font-style: italic;" >
2026-04-06 01:51:46 +00:00
Built with ❤️ by < strong > Amnibro< / strong > — thank you for your incredible work building the Amni-Haven Android app from the ground up.
2026-03-06 04:56:14 +00:00
< / p >
< / div >
2026-02-12 16:35:02 +00:00
< div class = "setup-steps stagger" style = "margin-top: 48px;" >
< div class = "setup-step" >
< div class = "s-num" > 1< / div >
< div >
< h4 > Install Node.js< / h4 >
< p > Download from < a href = "https://nodejs.org/" target = "_blank" > nodejs.org< / a > (click the big green LTS button). Restart your PC after installing.< / p >
< / div >
< / div >
< div class = "setup-step" >
< div class = "s-num" > 2< / div >
< div >
< h4 > Unzip Haven< / h4 >
< p > Extract the zip anywhere. Desktop, Documents, wherever you like. It creates one folder.< / p >
< / div >
< / div >
< div class = "setup-step" >
< div class = "s-num" > 3< / div >
< div >
< h4 > Double-click Start Haven.bat< / h4 >
< p > A terminal opens, does its thing, and your browser opens automatically. First boot takes ~30 seconds.< / p >
< / div >
< / div >
< div class = "setup-step" >
< div class = "s-num" > 4< / div >
< div >
< h4 > Create an account & invite friends< / h4 >
< p > Register as admin, create channels, and share your IP + channel code. Friends open the link in their browser.< / p >
< / div >
< / div >
< / div >
< / div >
< / section >
<!-- ===== SUPPORT ===== -->
< section class = "support-section" id = "support" >
< div class = "container" >
< div class = "support-card fade-in" >
2026-03-15 11:50:33 +00:00
< span class = "heart" > ❤️< / span >
2026-02-12 16:35:02 +00:00
< h2 > Support Haven< / h2 >
< p > Haven is built by one person in their spare time and will always be free. If it's useful to you, a small donation helps keep development going.< / p >
< a href = "https://ko-fi.com/ancsemi" target = "_blank" class = "btn btn-donate" >
2026-03-15 11:32:05 +00:00
☕ Buy me a coffee on Ko-fi
2026-02-12 16:35:02 +00:00
< / a >
< p class = "support-note" > Ko-fi takes zero fees — 100% goes to the developer. No account required to donate.< / p >
< / div >
< / div >
< / section >
<!-- ===== FOOTER ===== -->
< footer >
< div class = "container" >
2026-03-15 11:32:05 +00:00
< div class = "footer-brand" > < span class = "hex" > ⬡< / span > HAVEN< / div >
2026-02-12 16:35:02 +00:00
< p > Your server. Your rules. No cloud. No one reading your messages.< / p >
< ul class = "footer-links" >
2026-02-24 23:54:00 +00:00
< li > < a href = "https://github.com/ancsemi/Haven" target = "_blank" > GitHub (Server)< / a > < / li >
< li > < a href = "https://github.com/ancsemi/Haven-Desktop" target = "_blank" > GitHub (Desktop)< / a > < / li >
2026-03-06 05:28:41 +00:00
2026-02-12 16:35:02 +00:00
< li > < a href = "https://github.com/ancsemi/Haven/blob/main/GUIDE.md" target = "_blank" > Setup Guide< / a > < / li >
< li > < a href = "https://github.com/ancsemi/Haven/blob/main/CHANGELOG.md" target = "_blank" > Changelog< / a > < / li >
2026-02-12 20:34:30 +00:00
< li > < a href = "mailto:help.havenapp@gmail.com?subject=Haven%20Bug%20Report" > Report a Bug< / a > < / li >
2026-02-25 00:20:25 +00:00
< li > < a href = "https://ancsemi.github.io/Haven/support.html" target = "_blank" > Help & Support< / a > < / li >
2026-04-07 02:21:47 +00:00
< li > < a href = "https://github.com/ancsemi/Haven/blob/main/LICENSE" target = "_blank" > AGPL-3.0 License< / a > < / li >
2026-02-12 16:35:02 +00:00
< / ul >
< / div >
< / footer >
< script >
const observer = new IntersectionObserver((entries) => {
2026-02-12 17:12:24 +00:00
entries.forEach(entry => { if (entry.isIntersecting) entry.target.classList.add('visible'); });
2026-02-12 16:35:02 +00:00
}, { threshold: 0.1, rootMargin: '0px 0px -40px 0px' });
document.querySelectorAll('.fade-in, .stagger').forEach(el => observer.observe(el));
document.querySelectorAll('.nav-links a').forEach(link => {
2026-02-12 17:12:24 +00:00
link.addEventListener('click', () => document.querySelector('.nav-links').classList.remove('open'));
2026-02-12 16:35:02 +00:00
});
window.addEventListener('scroll', () => {
2026-02-12 17:12:24 +00:00
document.querySelector('nav').style.background = window.scrollY > 100 ? 'rgba(21, 23, 42, 0.97)' : 'rgba(21, 23, 42, 0.85)';
2026-02-12 16:35:02 +00:00
});
2026-02-14 15:42:37 +00:00
// Hero image carousel
(() => {
const imgs = document.querySelectorAll('.hero-screenshot img');
if (imgs.length < 2 ) return ;
let current = 0;
setInterval(() => {
imgs[current].classList.remove('active');
current = (current + 1) % imgs.length;
imgs[current].classList.add('active');
v1.8.1: E2E per-account keys, W95 UI fixes, games pop-out, website overhaul
- E2E encryption: keys now sync per-account via PBKDF2 password wrapping (not per-device)
- E2E: private keys stored encrypted server-side, decrypted with user password
- Win95 theme: 3D beveled buttons for all controls (voice, sidebar, modal, toolbar)
- Win95 theme: fixed double scrollbar arrows, black text on gray backgrounds
- Games: default to pop-out window, with iframe fallback if blocked
- Dual-role display: User badge now properly stripped when higher role exists
- Ruffle/Flash: CSP headers fixed (wasm-unsafe-eval + unpkg worker-src)
- Website: carousel fixed height (no more page jumping), interval 4s
- Website: replaced screenshots with latest, updated feature cards
- Website: added E2E encryption to selling points, features grid, comparison table
- Website: updated file sharing limit (configurable up to 1.5 GB), games card expanded
2026-02-17 00:43:46 +00:00
}, 4000);
2026-02-14 15:42:37 +00:00
})();
2026-02-12 16:35:02 +00:00
< / script >
< / body >
2026-02-12 17:12:24 +00:00
< / html >