Zuletzt aktualisiert:

Doku-Archiv für Silverscale: here.now vs. selbst hosten

Tiefenrecherche · 07.06.2026 · für Dennis (Silverscale Family Hub)

Frage: Wo soll das permanente Doku-Archiv des Projekts leben — als here.now-Site unter silverscale-docs.dennisfisch.de (Kandidat A) oder selbst gehostet auf dem VPS (Kandidat B)? Inklusive User-Hilfe + „?"-Buttons in der iOS-App.


1. Executive Summary — Empfehlung

Empfehlung: Selbst hosten auf dem VPS, als eigene Subdomain mit eigenem Traefik-Router ohne Auth — Variante B2 (docs.silverscale.dennisfisch.de).

Der entscheidende Faktor ist nicht Komfort, sondern die iOS-App. Das Frontend hat einen globalen Interceptor (app/frontend/src/lib/native.js, initExternalLinks), der jeden Cross-Origin-Link zwingend in ein SFSafariViewController-Sheet schickt. Eine here.now-Domain ist immer Cross-Origin, also würde jeder „?"-Button die App verlassen und ein Safari-Sheet öffnen (eigene Chrome, eigener Scroll, „Fertig"-Button zum Schließen). Eine VPS-Subdomain kann dagegen so behandelt werden, dass die Hilfeseite im selben WebView-Kontext (oder als gebrandetes In-App-Overlay) erscheint — kein Bruch.

Hinzu kommt: Die Docs liegen dann im Repo (versioniert, im 03:30-Backup, per Mac-Klon-Push deploybar) und gehorchen demselben Designsystem ohne Render-Umweg. here.now bleibt das richtige Werkzeug für Wegwerf-Reviews (MD-Doc publishen, URL teilen — so wie bisher), ist aber für ein permanentes, in die App eingebettetes Archiv das schwächere Zuhause.

Wenn maximale Bequemlichkeit + Null-VPS-Wartung wichtiger wären als die In-App-UX, wäre here.now sauber machbar (Custom Domain via CNAME, eigenes CSS, stabile Pfade, permanent bei aktivem Account). Aber der „?"-Button-Bruch und die Account-/Zahlungs-Abhängigkeit kippen die Waage Richtung Selbsthosten.


2. In einfachen Worten

Stell dir den „?"-Knopf in der App vor. Wenn die Hilfeseite auf here.now liegt, ist das für die App „eine fremde Website" — iOS klappt dann ein extra Browser-Fenster hoch, das man wieder wegklicken muss. Wenn die Hilfeseite dagegen auf deiner eigenen Adresse liegt, kann die App sie einfach selbst anzeigen, als gehörte sie dazu. Das fühlt sich an wie „in der App bleiben" statt „raus aus der App".

Dazu zwei praktische Punkte: (1) Die Docs liegen dann bei deinem Code — gleiche Sicherung, gleiche Versionsgeschichte, deploybar wie alles andere. (2) Du hängst nicht von einem fremden Account ab. Solange der VPS läuft, laufen die Docs. here.now ist super, um schnell mal ein Dokument zum Drüberschauen ins Netz zu legen — aber das dauerhafte Hilfe-Archiv sollte bei dir wohnen.


3. Top 10 Entscheidungsfaktoren (mit Konfidenz)

# Faktor Erkenntnis Konfidenz
1 „?"-Button-UX in der WKWebView Frontend zwingt JEDEN Cross-Origin-Link ins Safari-Sheet (initExternalLinks). here.now = immer extern → App-Bruch. VPS-Subdomain kann same-context/in-app gerendert werden. Stärkstes Argument für B. Hoch (Code gelesen)
2 Permanenz / Kontrolle here.now-Auth-Sites sind „permanent by default", aber an Account+Zahlung gebunden; kein dokumentierter Export. VPS-Docs liegen im Repo + Backup = volle Kontrolle. Hoch
3 Custom Domain auf here.now geht Subdomain via CNAME → fallback.here.now, SSL automatisch nach DNS-Verifikation. Funktioniert technisch sauber. Hoch (Doku)
4 Cloudflare-Proxy-Falle here.now stellt eigenes Zertifikat aus. Mit Cloudflare Orange-Cloud (Proxy AN) terminiert Cloudflare TLS selbst → CNAME-Verifikation/Cert-Issuance bricht (bräuchte Cloudflare-for-SaaS/O2O). Lösung: Grey-Cloud (DNS-only) für den here.now-CNAME. Mittel-Hoch
5 Designsystem-Freiheit Beide voll frei (eigenes CSS/Fonts). here.now hat kein erzwungenes Branding / keinen Forced-Viewer bei statischen Uploads. Unentschieden. Hoch (Doku)
6 Stabile Hilfe-URLs here.now: nested Pfade funktionieren (/guide/scan). VPS: trivial. Beide ok für vorhersagbare „?"-Ziele. Hoch
7 Workflow / Versionierung here.now: publish.sh (Slug-Update, inkrementell via SHA-256). VPS: git commit + Deploy → echte Git-Historie statt Upload-Snapshots. B integriert sich in den bestehenden Mac-Klon-Push. Hoch
8 Sicherheits-Blast-Radius Öffentlicher /docs-Pfad auf der Auth-Domain (B1) braucht Middleware-Ausnahme = Risiko, dass die Ausnahme zu breit greift. Eigene Subdomain ohne Auth (B2) isoliert sauber, eigener Router, kein Loch in der App-Auth. Hoch (ADR-16/Compose gelesen)
9 Aufwand here.now: ~30 Min einmalig (Domain+Link+publish), Null-Wartung. B2: ~1–2 h einmalig (Container/Static-Mount + Router + DNS), danach git-Deploy. Mittel
10 Ausfall-Kopplung here.now: unabhängig vom VPS (Doku oben, wenn App down — Vorteil bei Incident-Runbooks!). B2: teilt VPS-Schicksal mit der App. Einziger echter Pluspunkt für A. Hoch

4. Body

4.1 Kandidat A — here.now im Detail

Quelle: https://here.now/docs (gründlich gelesen, read-only; Account existiert, publish.sh authenticated funktioniert bereits).

Custom Domains (unterstützt, nicht nur {slug}.here.now): - Subdomain wie silverscale-docs.dennisfisch.de: CNAME mit Wert fallback.here.now. - Apex (nicht relevant hier): zwei A-Records + CNAME www → fallback.here.now. - „SSL is provisioned automatically once DNS is verified." - Status: „pending until verified, then active"; Status-Endpoint-Abruf „also triggers on-demand verification" — kein fester Zeitrahmen genannt. - Anlage: POST /api/v1/domains (liefert DNS-Instruktionen), danach Link anlegen: POST /api/v1/links mit {"location": "", "slug": "<dein-slug>", "domain": "dennisfisch.de"} (location:"" = Root der Domain). Eine API-Call pro Verknüpfung nach DNS-Verifikation.

Cloudflare-Proxy — der wunde Punkt: Die Doku nennt nur Standard-DNS (A/CNAME) und sagt nichts zu Orange- vs. Grey-Cloud. Da here.now ein eigenes Zertifikat ausstellt, sobald der CNAME auf fallback.here.now zeigt, ist der proxied (orange) Modus problematisch: Cloudflare würde TLS selbst terminieren und müsste das Cert für silverscale-docs.* selbst haben (Cloudflare-for-SaaS / Orange-to-Orange). Der dokumentierte, einfache Weg ist DNS-only (grey cloud) — dann verifiziert und besichert here.now direkt. (Belege: Cloudflare Proxy-Status, Cloudflare for SaaS / Getting started.) Heißt konkret: Diese eine Subdomain liefe ohne Cloudflare-Schutz — anders als der Rest, der hinter Traefik/Cloudflare hängt.

Limits / Kosten (aus der Limits-Tabelle):

Feature Free Hobby Developer
Storage 10 GB 500 GB 2 TB
Sites 500 1.000 unbegrenzt
Custom Domains 1 5 20
Max. Site-Datei 5 GB 5 GB 5 GB
Publish-Rate 60/h 60/h 200/h

Free reicht für genau eine Custom Domain. Falls du here.now schon für andere Custom Domains nutzt, bräuchte es Hobby. Subdomain-Handles (yourname.here.now) brauchen laut Doku einen bezahlten Plan — die eigene Custom Domain dagegen ist auch im Free-Tier dabei (1 Stück). Konkrete Preise nennt die Doku nicht; einzuplanen, falls mehr als 1 Domain.

Sites & Updates: Publish via POST /api/v1/publish (Manifest → presigned Uploads → finalize). Update: PUT /api/v1/publish/:slug bzw. publish.sh --slug <slug>. Inkrementell: SHA-256 pro Datei, unveränderte Dateien werden übersprungen. Metadaten (Titel, Beschreibung, Passwort, TTL, SPA): PATCH /api/v1/publish/:slug/metadata.

Multi-Page / Unterordner / stabile URLs: Verschachtelte Ordner und mehrere HTML-Dateien funktionieren — „Each site gets its own subdomain: https://<slug>.here.now/", Pfade relativ zur Site-Root (index.html, guide/scan.html, report.pdf). → vorhersagbare Hilfe-URLs wie silverscale-docs.dennisfisch.de/hilfe/scan sind machbar.

Suche: Keine Volltext-Suche im Viewer dokumentiert. Es gibt nur eine Owner-API zum Auffinden von Sites (GET /api/v1/publishes/search?q=...). End-User-Suche im Archiv müsste man selbst (statisch/JS) bauen.

Versionierung: Keine Versionshistorie der Inhalte. Updates überschreiben den Slug; alte Stände sind weg (inkrementeller Deploy ist kein Versionssystem). Versionierung käme nur aus deinem lokalen Git der Quell-MDs.

Passwortschutz: Serverseitig erzwungen, übersteht Redeploys; aber passwortgeschützte Sites tauchen nicht auf öffentlichen Profilen auf. Für öffentliche Docs irrelevant.

Permanenz / Account-/Zahlungsrisiko: Authentifizierte (eigene) Sites sind „permanent by default" (optional TTL). Aber: kein dokumentierter Export für Sites oder Site-Data. Permanenz hängt am bestehenden Account + Zahlung. Mitigation: Quell-MDs liegen ohnehin im Repo → Re-Publish jederzeit möglich, aber die Live-URL ist nicht in deiner Hand.

Erzwungene Viewer / Branding: Keine gefunden — statische Uploads rendern dein HTML/CSS pur. Designsystem also frei. (Es gibt optionale Viewer-Metadaten für Titel/Beschreibung, kein Pflicht-Branding.)

Site Data / Proxy-Routes: here.now bietet sogar serverseitigen Storage (10 Collections/Site, 16 KB/Record, Rate-Limits) und Proxy-Routes für API-Keys — für ein statisches Doku-Archiv nicht nötig, aber nett zu wissen.

Fazit A: Technisch rund, schnell, wartungsarm, designfrei, stabile Pfade, permanent solange Account aktiv. Schwächen: kein Export/keine Versionierung/keine Suche, Cloudflare-Proxy muss aus, und — entscheidend — Cross-Origin für die iOS-App.


4.2 Kandidat B — Selbst hosten (Repo-Kontext gelesen)

Gelesen: CLAUDE.md, traefik/traefik.yml, docker-compose.yml. Setup: Traefik v3, exposedByDefault: false, Let's Encrypt DNS-01 über Cloudflare (Resolver cf), je Container Router-Labels. Die App (silverscale.dennisfisch.de) hängt komplett hinter Pocket-ID-Auth (Middleware, ADR-16).

Variante B1 — silverscale.dennisfisch.de/docs (öffentlicher Pfad auf der Auth-Domain)

Variante B2 — docs.silverscale.dennisfisch.de (eigene Subdomain, eigener Router, KEINE Auth) — empfohlen


4.3 Bewertungsmatrix

Bewertung: ++ stark · + ok · ~ Einschränkung · - schwach

Kriterium A: here.now B1: /docs (Auth-Domain) B2: docs.* Subdomain
Custom-Domain-Fähigkeit + CNAME→fallback, SSL auto + trivial (Pfad) ++ eigener Router
Cloudflare-Proxy-Kompatibilität ~ nur Grey-Cloud (DNS-only) ++ Orange ok ++ Orange ok
Permanenz / Kontrolle ~ Account+Zahlung, kein Export ++ Repo ++ Repo
Versionierung - keine (nur lokal) ++ Git ++ Git
Workflow / neues Doc + publish.sh ++ git+deploy ++ git+deploy
Designsystem-Freiheit + frei, kein Forced-Brand ++ frei ++ frei
Suche im Archiv - keine (selbst bauen) + selbst + selbst
„?"-Button in WKWebView - immer Safari-Sheet (extern) ++ same-origin, in-app + steuerbar in-app
Sicherheit / Blast-Radius ++ isoliert (fremd) - Auth-Ausnahme riskant ++ isolierter Router
Aufwand initial ++ ~30 Min ~ Middleware-Regel testen + ~1–2 h
Aufwand laufend ++ Null + git-Deploy + git-Deploy
Kosten + Free (1 Domain) ++ 0 ++ 0
Ausfall-Entkopplung von App ++ unabhängig - teilt App-Schicksal ~ teilt VPS-Schicksal

Lesart: A gewinnt nur bei Wartung, Aufwand-initial und Ausfall-Entkopplung. B2 gewinnt bei Kontrolle, Versionierung, Sicherheit, Kosten und ist bei der In-App-UX überlegen, weil wir den Interceptor besitzen. B1 hat die beste rohe UX, aber das Sicherheitsrisiko diskreditiert es.


4.4 Empfohlene Ziel-Architektur (B2)

docs.silverscale.dennisfisch.de
        |  (Cloudflare DNS-Record, Proxy nach Wunsch; Cert via Traefik DNS-01)
        v
   Traefik v3  -- Router "docs" (Host=docs.silverscale.dennisfisch.de)
        |           KEINE Auth-Middleware
        v
   nginx:alpine  (Volume: ./docs/site:/usr/share/nginx/html:ro)
        ^
   ./docs/site/  <- Build aus ./docs/src/*.md (Renderer im Repo, maritimes CSS)
        ^
   git commit + docker compose up -d  (oder Mac-Klon-Push)

Migrationsschritte: 1. Repo-Struktur: docs/src/*.md (Quellen) + docs/build.py (Renderer aus /tmp/render-design.py ableiten, maritime Tokens, Navigation/Index erzeugen) → Output docs/site/ (committed oder im Deploy gebaut). 2. Compose: nginx-Service mit traefik.enable=true, Host-Regel docs.silverscale.dennisfisch.de, entrypoints=websecure, tls.certresolver=cf, Port 80, read-only Volume. Keine Auth-Labels. 3. DNS: Cloudflare docs.silverscale.dennisfisch.de (A/CNAME auf VPS-IP). Cert kommt per DNS-01 → Proxy-Status egal. 4. „?"-Button-Konzept (siehe 4.5). 5. Optional Suche: statisches lunr.js/Pagefind beim Build erzeugen. 6. Wegwerf-Reviews bleiben bei here.now (publish.sh, MEMORY-Workflow) — das permanente Archiv zieht auf B2.

4.5 „?"-Button-Konzept

4.6 Offene Fragen


5. Quellenverzeichnis


Hinweis: Recherche read-only. Keine Domains konfiguriert, keine Sites angelegt/geändert, keine mutierenden API-Calls.