Architektur-Konzept — Interne Dokumentation

ZWEI DOMAINS.
EINE MARKE.
EIN HOST.

LLMOReady.com wird zur Libers Suite. Die bisherige Monolith-Landingpage löst sich auf in zwei Domains: libers.works für den Unternehmensauftritt, libers.ai für das SaaS-Produkt. Beide laufen auf derselben bestehenden Hetzner-Infrastruktur — cyon.ch bleibt reiner Mail-Host. Alle Onboarding-Trails, API und das Dashboard bleiben unverändert — nur der Aussenauftritt ändert sich.

Entschieden · Update 10.07.2026
llmoready-saas (Laravel 12, wird umbenannt)
libers.works · libers.ai
Hetzner (Web, beide Domains) · cyon.ch (nur Mail)

Update 10.07.2026 — Architektur korrigiert

Die ursprüngliche Zwei-Host-Planung (cyon für libers.works, Hetzner für libers.ai) wurde bei der Umsetzung verworfen: der Blog hängt am bestehenden Studio-CMS (Laravel/Hetzner) und existiert bereits — die in diesem Dokument ursprünglich behauptete Neu-Entwicklung auf cyon war falsch. Damit war die Domain-Trennung ohnehin durchbrochen; libers.works läuft jetzt als eigene Route innerhalb des bestehenden llmoready-saas-Repos auf Hetzner, cyon bleibt nur noch Mail-Host. Details/Begründung: llmoready-saas/.cursor/rules/domain-migration-libers.mdc und review-migrationsplan-2026-07-10.md in diesem Repo. Betroffene Abschnitte unten sind mit markiert.

01 — Domain-Architektur

ZWEI DOMAINS. KLARE TRENNUNG.

Die Markenarchitektur aus den Brand Guidelines wird 1:1 umgesetzt. libers.works ist das Gesicht der Firma — ruhig, vertrauensbildend, statisch. libers.ai ist das Produkt — dynamisch, SaaS, Conversion-optimiert. Beide Domains kommunizieren dieselbe Marke, bedienen aber unterschiedliche Ziele.

Dachmarke / Firmenseite
LIBERS
.WORKS
→ Hetzner · eigene Route im llmoready-saas-Repo

Unternehmensauftritt als eigene Domain-Route. Marke, Mission, Story, Legal. Kein Blog hier (siehe rechts), keine App-Logik, kein Login. Gebaut für Vertrauen und organischen Traffic — technisch aber Teil derselben Codebasis wie libers.ai.

PRIO 1 Homepage — Marke + Lead-Magnetlibers.works /
PRIO 1 Über uns — Herkunft, Werte, Schweizer Kreuzlibers.works/ueber-uns
PRIO 2 Datenschutz / Impressum / AGBlibers.works/legal
SPÄTER Press Kit / Partnerprogrammlibers.works/press
Kernprodukt — Libers Suite
LIBERS
.AI
→ Hetzner Lumi16gb · 159.69.125.224 (bestehend)

Das gesamte SaaS-Produkt. Signup, Dashboard, API, alle Module. Entspricht dem bisherigen llmoready.com + app.llmoready.com kombiniert. Alle bestehenden Trails und Services bleiben unverändert — nur Domain und CI ändern sich.

PRIO 1 Suite Landing / Signup — Conversionlibers.ai /
PRIO 1 Pricing — €29 / €79 / €499+libers.ai/pricing
PRIO 1 Dashboard SPA (bisheriges app.llmoready.com)app.libers.ai
API REST API (bisheriges api.llmoready.com)api.libers.ai
MODUL Visibility / Schema / Readabilitylibers.ai/modules
MODUL Website-Analyzer (bisher llmoready.com/website-analyzer)libers.ai/analyzer
INTERN Hub / Studio / Admin (bleiben intern)hub.libers.ai

WO WAS LÄUFT. ● korrigiert 10.07.2026

Bestehende Hetzner-Infrastruktur bleibt vollständig erhalten und bedient jetzt beide Domains. cyon.ch wird nicht als Web-Host genutzt (ursprünglicher Plan verworfen) — cyon bleibt bei seiner bewährten Rolle: E-Mail-Infrastruktur (MX/SPF/DKIM), wie bisher für llmoready.

CYON.CH
Schweizer Datacenter · Bestehendes Hosting-Konto

Nur Mailserver — bleibt so. Kein Web-Hosting (ursprünglich hier als "NEU: libers.works" geplant, das wurde verworfen: doppeltes Design-System + der Blog hängt ohnehin am Studio-CMS auf Hetzner, die Trennung wäre nie sauber gewesen).

NEU mail.libers.works — MX / SPF / DKIM
BEHALTEN mail.llmoready.com — bleibt aktiv bis Migration
VERWORFEN libers.works als Webhosting
HETZNER
Lumi16gb · 159.69.125.224 · + GEX44 · 188.40.37.166

Zentrale Infrastruktur für alles — Produkt und Firmenseite. Alle bestehenden Services, Queue Worker, MySQL, Redis und die GPU-Instanz (Ollama/LLM) laufen weiter wie bisher. Domain-Umbenennung + neue Domain-Route per Nginx/Laravel Route::domain() — Muster existiert bereits für messe.llmoready.com.

UMBENENNEN libers.ai / — bisheriges llmoready.com
UMBENENNEN app.libers.ai — bisheriges app.llmoready.com (Vue SPA)
UMBENENNEN api.libers.ai — bisheriges api.llmoready.com (Laravel API)
UMBENENNEN hub.libers.ai / studio.libers.ai (intern)
NEU ● libers.works — eigene Route::domain()-Gruppe, gleiches Repo
BEHALTEN llm.libers.ai (GEX44 · Ollama) — optional
BEHALTEN MySQL 8.0 + Redis 7.x — unverändert
BEHALTEN Supervisor Queue Worker — 2 Prozesse

Bewusster Trade-off: ein Host statt zwei

Ein gemeinsamer Host heisst: Bei einem Hetzner-Ausfall ist auch die Firmen-/Investorenseite nicht erreichbar, nicht nur das Produkt. Von Martin bewusst akzeptiert (10.07.2026): ein Produkt-Ausfall ist ohnehin der grössere Schaden — die Redundanz einer separat gehosteten Firmenseite wiegt den laufenden Mehraufwand von zwei parallel gepflegten Design-Systemen (PHP-Includes auf cyon vs. Blade auf Hetzner) nicht auf.

Domain libers.works auf Hetzner zeigen lassen (DNS A-Record → 159.69.125.224, dieselbe IP wie libers.ai)
Eigenes SSL-Zertifikat für libers.works via Certbot auf Hetzner (Server verwaltet ohnehin schon mehrere Domain-Zertifikate)
MX-Records für mail.libers.works weiterhin auf cyon setzen (wie bei llmoready bereits vorhanden) — nur Mail, kein A-Record auf cyon
Lokales Testen erfordert /etc/hosts-Eintrag + Nginx-Docker-Config-Erweiterung, siehe laravel-local-dev SKILL.md in llmoready-saas
03 — Content & Feature Mapping

WAS GEHT WOHIN.

Alle bisherigen Inhalte und Features von llmoready.com werden auf die zwei neuen Domains verteilt — beide technisch auf Hetzner, siehe Update oben. Die Kernregel bleibt inhaltlich: Alles, was Conversion, App-Logik oder API benötigt, läuft unter libers.ai. Alles, was Marke, Story und organischen Traffic erzeugt (ausser dem Blog, der am Studio-CMS hängt), läuft unter libers.works.

Bisherige URL Neue Domain Neue URL Aktion
llmoready.com /
Landing Page (Blade)
libers.works
Hetzner ●
libers.works /
Homepage im neuen Libers CI
MIGRIEREN
Copy aus libers-website-copy als Blade-View im llmoready-saas-Repo bauen (nicht mehr auf cyon)
llmoready.com/website-analyzer
Website-Analyzer (Trail B)
libers.ai
Hetzner
libers.ai/analyzer BEHALTEN
Nur Domain + CI Update
app.llmoready.com
Dashboard SPA (Vue 3)
libers.ai
Hetzner
app.libers.ai BEHALTEN
Nginx vHost umbenennen, CI-Anpassungen im Frontend
api.llmoready.com
REST API (Laravel 11)
libers.ai
Hetzner
api.libers.ai BEHALTEN
Nginx vHost + CORS-Konfiguration updaten
hub.llmoready.com
Admin Hub (Vue 3)
libers.ai intern
Hetzner
hub.libers.ai BEHALTEN
Nur Domain umbenennen
studio.llmoready.com
Studio Admin (Filament)
libers.ai intern
Hetzner
studio.libers.ai BEHALTEN
Nur Domain umbenennen
extension.llmoready.com
Chrome Extension Landing
libers.ai
Hetzner
extension.libers.ai BEHALTEN
CI Update + Extension Store Update nötig

Noch nicht vorhanden
libers.works
Hetzner ●
libers.works/ueber-uns NEU BAUEN
Copy aus Brand Guidelines / website-copy übernehmen
llmoready.com/blog
Blog (Blade + Studio-CMS)
libers.ai
Hetzner
libers.ai/blog BEHALTEN
Korrektur: existiert bereits (Studio-CMS mit Bild-Upload, EEAT-Feldern, Mehrsprachigkeit) — ursprünglich fälschlich als "noch nicht vorhanden, neu auf cyon bauen" gelistet. Bleibt am Studio-CMS auf Hetzner, nur Domain + CI. libers.works verlinkt im Footer dorthin, hostet keinen eigenen Blog.
messe.llmoready.com
Messe-Tool
libers.ai
Hetzner
messe.libers.ai BEHALTEN
Domain + CI Update
llm.llmoready.com
Ollama GEX44
Intern
Hetzner GEX44
llm.libers.ai (intern) BEHALTEN
Interne URL, optional umbenennen
04 — Migrations-Reihenfolge

IN DIESER REIHENFOLGE.

Die Migration erfolgt in Phasen, damit der laufende Betrieb nie unterbrochen wird. llmoready.com bleibt so lange aktiv, bis alle Redirects stabil laufen und die neuen Domains indexiert sind.

Phase 01 · Parallel-Aufbau (Keine Downtime) — korrigiert ●
LIBERS.WORKS ALS ROUTE IN LLMOREADY-SAAS

Update 10.07.2026: Nicht mehr auf cyon.ch, sondern als eigene Route::domain('libers.works')-Gruppe direkt im bestehenden llmoready-saas-Repo — Muster existiert bereits für messe.llmoready.com. Grund: der Blog hängt am Studio-CMS (Laravel/Hetzner) und existiert schon, die ursprünglich geplante Trennung wäre nie sauber gewesen.

Inhalte direkt aus libers-website-copy.html und den Brand Guidelines übernehmen: Homepage (bereits als Vorlage geschrieben), Über uns, Legal. Blog wird nicht mit übernommen — bleibt unter libers.ai/blog.

Voraussetzung lokal: /etc/hosts-Eintrag + Nginx-Docker-Config-Erweiterung nötig, siehe laravel-local-dev SKILL.md — ohne das ist die neue Route lokal nicht erreichbar.

Phase 02 · CI Update auf Hetzner
LIBERS CI IN LLMOREADY-SAAS

Im bestehenden llmoready-saas Repo das CI auf Libers Suite anpassen (wird dabei über GitHub-Settings umbenannt, nicht neu angelegt — Historie bleibt erhalten). Alle Blade-Templates, Vue-Komponenten und E-Mail-Templates auf das neue Libers Look&Feel umbauen.

Libers Red (#D62B2B), Bebas Neue, DM Sans — konsistent in allen Frontends umsetzen: Landing, Dashboard SPA, Extension Landing, Messe-Tool, und jetzt auch libers.works (Phase 01). Detaillierte Schicht-Reihenfolge: ci-migration-libers.mdc im llmoready-saas-Repo.

Achtung: Frontend-CI und Domain sind unabhängige Schritte. CI kann deployed werden, bevor die Domain umschaltet. Sinnvoll, Phase 01 nach Phase 02 anzusetzen, damit libers.works direkt die neuen Tokens nutzt statt zweimal angefasst zu werden.

Phase 03 · Nginx Umbenennung auf Hetzner
NEUE DOMAINS AKTIVIEREN

Nginx vHost-Konfigurationen auf Hetzner Lumi16gb anpassen: llmoready.comlibers.ai, app.llmoready.comapp.libers.ai, etc.

DNS-Records für alle libers.ai Subdomains auf 159.69.125.224 setzen. SSL-Zertifikate via Let's Encrypt erneuern (Certbot). CORS-Whitelist in Laravel .env und config/cors.php mit neuen Domains erweitern.

Parallel halten: llmoready.com Domains noch 60–90 Tage aktiv lassen mit 301-Redirects.

Phase 04 · Redirect-Kette & SEO
301 REDIRECTS SCHALTEN

Von llmoready.com auf libers.ai und libers.works mit 301-Redirects. Sitemap.xml für beide neuen Domains erstellen und bei Google Search Console anmelden. Canonical-Tags setzen.

Google Search Console: Property-Change anmelden («Change of Address»). Backlinks auf llmoready.com werden via 301 an Linkjuice auf libers.ai weitergegeben.

SEO-Risiko: Ranking-Drop von 2–8 Wochen ist normal. Kein Notfall, aber bewusst einplanen — nicht kurz vor wichtigen Kampagnen starten.

Phase 05 · Transaktions-E-Mails
RESEND + E-MAIL UPDATE

Resend-Konfiguration anpassen: Absender-Domain von @llmoready.com auf @libers.ai (für SaaS-E-Mails wie Trial, Rechnungen) und @libers.works (für Firmenkommunikation).

SPF/DKIM/DMARC Einträge für beide neuen Domains auf cyon (libers.works) und optional auf Hetzner (libers.ai) setzen. Laravel MAIL_FROM_ADDRESS in .env auf Produktiv-Server anpassen.

cyon: Bestehende cyon-Mailer-Konfiguration für llmoready bereits vorhanden — als Vorlage nutzen.

Phase 06 · Bereinigung
LLMOREADY ABSCHALTEN

Nach 90 Tagen stabilem Betrieb auf den neuen Domains: llmoready.com Domains aus Nginx entfernen, Zertifikate nicht mehr erneuern. Domain llmoready.com und Subdomains weiterhin registriert halten (Markenschutz) — aber kein aktiver Traffic mehr.

Git-Deployment-Skript (deploy-llmo) auf neue Domain-Namen anpassen oder umbenennen. GitHub Actions Secrets mit neuen Domains updaten.

05 — Redirect-Map

301 REDIRECT-LOGIK.

Alle bestehenden llmoready.com URLs erhalten 301-Redirects. Nginx-Konfiguration auf Hetzner — keine Laravel-Route nötig, da die Redirects auf Webserver-Ebene passieren.

# /etc/nginx/sites-available/llmoready-redirects.conf
server {
  server_name llmoready.com www.llmoready.com;
  return 301 https://libers.ai$request_uri;
}
server {
  server_name app.llmoready.com;
  return 301 https://app.libers.ai$request_uri;
}
server {
  server_name api.llmoready.com;
  return 301 https://api.libers.ai$request_uri;
}
# hub, studio, extension, messe, star analog ...
Von (llmoready) Nach (libers) Code
llmoready.com/* libers.ai/* (inkl. /website-analyzer → /analyzer) 301
app.llmoready.com/* app.libers.ai/* 301
api.llmoready.com/* api.libers.ai/* 301
hub.llmoready.com/* hub.libers.ai/* 301
studio.llmoready.com/* studio.libers.ai/* 301
extension.llmoready.com/* extension.libers.ai/* 301
messe.llmoready.com/* messe.libers.ai/* 301
API-Clients (Shopify App, WooCommerce Plugin) Manuell auf api.libers.ai umstellen — 301 bei API nicht zuverlässig! MANUELL
Wichtig — API-Clients: Die Shopify App (Vercel), WooCommerce-Plugins und Chrome Extension enthalten hartcodierte API-URLs. Diese müssen aktiv auf api.libers.ai umgestellt werden. 301-Redirects für API-Calls sind nicht zuverlässig (POST-Requests verlieren Body). Shopify App neu deployen auf Vercel mit neuer API-URL als Environment Variable.
06 — Risiken & Gegenmassnahmen

WAS SCHIEFGEHEN KANN.

Risiko
Beschreibung + Gegenmassnahme
Einstufung
SEO-Drop
Domain-Wechsel führt zu temporärem Ranking-Verlust auf llmoready.com. 301-Redirects übertragen Linkjuice, aber Google braucht 4–12 Wochen. Gegenmassnahme: Search Console «Change of Address» anmelden. Migration nicht vor wichtigen Traffic-Perioden starten. Blog bleibt unter libers.ai/blog bestehen (Studio-CMS unverändert) — sichert SEO-Kontinuität, statt neu aufgebaut zu werden.
MITTEL
API-Clients brechen
Shopify App, WooCommerce Plugin, Chrome Extension haben hartcodierte API-URLs. Nach Domain-Wechsel ohne Update funktioniert nichts mehr. Gegenmassnahme: Alle API-Clients inventarisieren. Erst neuen Nginx aktiv schalten, wenn alle Clients upgedated und gedeployt sind. Übergangsphase: beide Domains parallel aktiv.
HOCH
E-Mail-Zustellung
Wechsel von @llmoready.com auf @libers.ai kann zu Spam-Einstufungen führen, wenn neue Domain zu jung ist. Gegenmassnahme: Resend Domain-Verifizierung frühzeitig einrichten. SPF/DKIM für libers.ai und libers.works vor dem Domain-Go-live konfigurieren. libers.works auf cyon nutzt das bewährte cyon-Mail-Setup.
MITTEL
CORS-Fehler
Nach Domain-Umbenennung lehnt Laravel API Requests von neuen Domains ab. Gegenmassnahme: config/cors.php und CORS_ALLOWED_ORIGINS in .env vor dem Go-live auf beiden Domains erweitern (nicht ersetzen). Browsertest nach jedem Nginx-Switch.
HOCH
Stripe Webhooks
Stripe Webhook-Endpoint ist auf api.llmoready.com registriert. Nach Domain-Wechsel kommen Webhooks nicht mehr an — Subscription-Events gehen verloren. Gegenmassnahme: In Stripe Dashboard neuen Webhook-Endpoint api.libers.ai/api/stripe/webhook eintragen, bevor alte Domain deaktiviert wird.
HOCH
OAuth-Callbacks
Google SSO und Microsoft SSO sind mit app.llmoready.com als Callback-URL registriert. Gegenmassnahme: In Google Cloud Console und Microsoft Azure neue Redirect-URIs mit app.libers.ai eintragen. Alte URIs parallel aktiv lassen während Übergangsphase.
MITTEL
SSL-Zertifikate
Neue Domains brauchen neue Let's Encrypt Zertifikate. Certbot auf Hetzner muss für alle libers.ai Subdomains ausgeführt werden. Gegenmassnahme: Certbot mit Wildcard-Zertifikat für *.libers.ai — ein Zertifikat für alle Subdomains.
NIEDRIG
Deployment-Skript
Das bestehende GitHub Actions Skript deploy-llmo enthält Referenzen auf llmoready-Pfade und Domain-Namen. Gegenmassnahme: Skript umbenennen, Pfade anpassen. Kein Breaking Change für die eigentliche App-Logik.
NIEDRIG

ZWEI DOMAINS.
EIN HOST.
NULL DOWNTIME.