Marketing site for Sovren Software, the company behind the Sovren Stack: a sovereign computing platform spanning OS, identity, and programmable finance.
Live at sovren.software
The Sovren Stack is three products that together give individuals full-stack digital sovereignty:
| Product | Layer | Status |
|---|---|---|
| Esver OS | Computing — declarative NixOS system | Ships Summer 2026 |
| Visage | Identity — local face auth via PAM + ONNX | Live · v0.2.0 · MIT |
| MrHaven | Finance — non-custodial USDC time vault on Base L2 | Live on mainnet |
This website is the public face of all three products and the ecosystem manifesto.
| Layer | Technology |
|---|---|
| Framework | SvelteKit 2.x + @sveltejs/adapter-static |
| 3D Scene | Three.js (wireframe cube, grid, particles, product monoliths) |
| Animation | GSAP 3.x |
| Font | Geist Mono Variable (self-hosted) |
| Build | Vite 7.x |
| Deploy | GitHub Actions → GitHub Pages → Cloudflare proxy |
| Domain | sovren.software (CNAME in static/CNAME) |
npm install
npm run dev # http://localhost:5173
npm run build # static output → dist/
npm run preview # preview production build
npm run check # svelte-check type validation
npm run lint # ESLint
npm run format # Prettier
npm run generate-og # regenerate static/og-image.png
Requirements: Node.js 20+ (see .nvmrc)
src/
├── app.css # Global design tokens + theme definitions
├── app.html # HTML shell with JSON-LD structured data
├── lib/
│ ├── Nav.svelte # Navigation with theme toggle
│ ├── ProductHero.svelte # Reusable hero section
│ ├── Overview.svelte # Reusable overview + spec table
│ ├── PillarList.svelte # Reusable numbered feature list
│ ├── CtaSection.svelte # Reusable call-to-action section
│ └── three/
│ ├── Scene.svelte # Svelte wrapper for Three.js canvas lifecycle
│ ├── SceneManager.js # Core 3D scene: camera, renderer, animation loop, theme colors
│ └── ProductMonoliths.svelte # Interactive 3D product panels on home page
├── routes/
│ ├── +layout.svelte # Global layout: Scene, Nav, footer, theme logic
│ ├── +layout.js # Prerender flag (static site generation)
│ ├── +page.svelte # Home page: hero, product grid, thesis
│ ├── +error.svelte # 404 error page
│ ├── esver/+page.svelte # Esver OS product page
│ ├── visage/+page.svelte # Visage product page
│ ├── mrhaven/+page.svelte # MrHaven product page
│ └── ecosystem/+page.svelte # Ecosystem manifesto page
static/
├── CNAME # GitHub Pages custom domain
├── _headers # Security headers (Cloudflare Pages / reference for CF Transform Rules)
├── fonts/GeistMono-Variable.woff2 # Self-hosted font
├── favicon.ico # 32×32 ICO
├── favicon.svg # SVG favicon (wireframe cube mark)
├── favicon-32x32.png # 32×32 PNG
├── favicon-16x16.png # 16×16 PNG
├── apple-touch-icon.png # 180×180 for iOS
├── icon-192.png # PWA icon
├── icon-512.png # PWA icon
├── manifest.webmanifest # Web app manifest (PWA)
├── og-image.png # 1200×630 OG image (Geist Mono rendered via Satori)
├── robots.txt # Crawler access rules
├── sitemap.xml # All routes with lastmod dates
├── llms.txt # AI crawler context file
└── BingSiteAuth.xml # Bing Webmaster verification
scripts/
└── generate-og.js # OG image generator (Satori + Resvg, uses Geist Mono TTF)
The site supports light and dark modes with a cinematic toggle in the navigation.
:root / [data-theme='light'])Nav.svelte calls toggleTheme() in +layout.sveltelocalStorage.getItem('theme') with system preference fallback via prefers-color-schemedata-theme attribute on <html> drives CSS variable swapsSceneManager.js observes data-theme via MutationObserver and updates fog, wireframe, grid, and particle colors in real timeAll colors use CSS custom properties — no hardcoded color values in components.
A full-viewport 3D background renders behind all page content:
position: fixed, z-index: -1, pointer-events: none — sits behind all UIScene.svelte mounts/unmounts the canvas; SceneManager.js handles the animation loop and cleanupprefers-reduced-motion: reduce is set — checked at runtime and via CSS media querydestroy() correctly removes all event listeners using stored bound references, disposes all Three.js geometries and materialsProductMonoliths.svelte exists as an interactive wireframe panel component but is currently unused — it was removed from the home page to reduce visual clutter.
Product pages (Esver, Visage, MrHaven) share four components with zero local CSS:
| Component | Props | Purpose |
|---|---|---|
ProductHero.svelte |
title, category, status, tagline, size | Hero section |
Overview.svelte |
lead, specs[], stackNote, slot | Overview with spec table |
PillarList.svelte |
label, pillars[] | Numbered feature list |
CtaSection.svelte |
title, body, actions[] | Call-to-action with buttons |
Centralized in src/app.css with 60+ design tokens covering:
--bg, --surface, --border, --text-primary/secondary/muted/ghostclamp() scale from --fs-hero down to --fs-label-xs--space-xs through --space-7xl--max-w, --max-w-prose, --nav-h, --z-nav--transition-fast, --transition-slowRules: one typeface only, no color for emphasis (use weight/spacing), all values via tokens.
npm run check # must pass before pushing
npm run lint # must pass before pushing
npm run build # verify build passes
git push # GitHub Actions auto-deploys from main
dist/ directory (static adapter)www CNAME → sovren-software.github.io, proxied via Cloudflarestatic/CNAME contains sovren.software — do not deletecheck → lint → build in sequence before deployingGitHub Pages cannot set HTTP response headers. Security is enforced at two levels:
Content-Security-Policy, Referrer-Policy, and X-Content-Type-Options are set via <meta http-equiv> in app.htmlX-Frame-Options, HSTS, COOP, CORP, and Permissions-Policy must be configured as Cloudflare Transform Rules — see SECURITY.md for exact stepsThe static/_headers file is the authoritative record of all required headers and will be auto-enforced if the site ever migrates to Cloudflare Pages.
app.html — JSON-LD structured data (Organization + WebSite schemas), favicon suite, manifest, OG/Twitter defaults<svelte:head> with unique title, description, Open Graph meta, Twitter Card tags, and canonical URLstatic/og-image.png — 1200×630 social preview image rendered with actual Geist Mono font via Satoristatic/llms.txt — full product descriptions for AI crawlers (ChatGPT, Perplexity, Claude)static/sitemap.xml — all 5 routes with <lastmod> dateseslint-plugin-svelte — run via npm run lintsvelte-check — run via npm run checkprettier-plugin-svelte — run via npm run formatcheck → lint → build on every push to mainThe site now routes the Esver CTA through a configurable marketing URL in src/lib/marketing.js.
Edit src/lib/marketing.js and set:
export const BREVO_SIGNUP_URL = '__SET_BREVO_SIGNUP_URL__';
to your Brevo hosted signup form URL (example format: https://xxxx.sibforms.com/serve/...).
If not set, the CTA falls back to mailto: so the button still functions.
MAIN_NEWSLETTERMAIN_NEWSLETTERsrc/lib/marketing.jsMAIN_NEWSLETTERhttp(s) URL, the page automatically falls back to a direct CTA link./ecosystem + /visage) to avoid duplicate signup prompts.Use this as the first and only automation email for now:
Subject: Welcome to Sovren — launch briefing subscribed
Preview: You are in. We will send one launch briefing and occasional high-signal updates.
Body:
You are subscribed to the Sovren launch briefing.
What you should expect:
- One operational briefing when Esver OS goes live
- Occasional high-signal updates across the Sovren Stack (OS, identity, programmable finance)
- No spam. No feed noise. No growth-hack sequences.
Why this exists:
Sovren builds software for operators who want leverage without surrendering control.
Privacy is not a feature. Sovereignty is the baseline.
Explore the stack:
- Esver OS: https://sovren.software/esver
- Visage: https://sovren.software/visage
- MrHaven: https://sovren.software/mrhaven
— Sovren Software
https://sovren.software
/esver and verify the launch briefing section renders.MAIN_NEWSLETTER./ecosystem and /visage links in final CTA work.For AI-assisted development, see CLAUDE.md for the full design system reference, copy guidelines, and product context.
Proprietary — © 2025–2026 Sovren Software. All rights reserved. See LICENSE.
Exception: Visage is MIT-licensed and open source.