piggyback-hosting
Ein Hosting-Muster für Anwendungen, die von vornherein niemals fremde
Daten annehmen.
Blaupause entstanden am 2026-08-02 beim Bau dreier Call-Agenten.
Wiederverwendbar für jede Anwendung, die für einen einzelnen lokalen
Nutzer entworfen wurde, aber auch für andere hostbar sein soll.
Zum Namen
Im Englischen heißt dieses Muster piggyback — auf fremder
Infrastruktur mitreiten ist dort bereits der Fachbegriff dafür. Englischer
Fließtext in diesem Skill sagt daher piggyback; "huckepack" ist der
deutsche Arbeitstitel, unter dem das Muster gebaut wurde, und zugleich
der Name des Repositories, aus dem dieser Skill migriert wurde. Die
wörtlichen Modus-Werte bleiben huckepack-gift und huckepack-only-host
— sie sind das, was in Code und Konfiguration verschifft wird, genau so
geschrieben, unabhängig davon, in welcher Sprache der umgebende Fließtext
steht.
Das Problem
Eine Anwendung wird lokal gebaut: eine Datenbank, ein API-Key, State, der
im Prozess lebt. Auf der eigenen Maschine ist das schlicht korrekt. Sobald
jemand sie für andere hostet, wird jede dieser drei Annahmen zu einem Bug —
jeder Besucher teilt sich denselben State, dieselbe Datenbank, denselben
Key. Wer die Seite öffnet, sieht die Daten aller anderen.
Die übliche Lösung ist Nutzerverwaltung: Accounts, Login, Zugriffsprüfungen,
Löschfristen, eine Datenschutzerklärung, ein Auftragsverarbeitungsvertrag.
Oft ein größeres Unterfangen als die Anwendung selbst.
Die Idee
Der Besucher behält alles auf dem eigenen Gerät. Der Host behält nichts.
Das löst die Nutzerverwaltung nicht — es macht sie gegenstandslos. Wo
keine fremden Daten auf dem Server liegen, gibt es nichts zwischen
Besuchern abzuschotten, nichts nach Zeitplan zu löschen, und die
Datenschutzerklärung schrumpft auf das, was der Dienst tatsächlich tut.
Die drei Modi
| Modus |
API-Key |
Daten |
Nutzerverwaltung |
huckepack-gift |
vom Host |
auf dem Gerät des Besuchers |
keine |
huckepack-only-host |
vom Besucher |
auf dem Gerät des Besuchers |
keine |
pay-membership |
des Hosts, abgerechnet |
Server |
erforderlich |
huckepack-gift — der Host liefert seinen eigenen Key und verschenkt
die Ausführung. Eine reibungslose Einladung, das Tool auszuprobieren.
huckepack-only-host — der Besucher bringt seinen eigenen Key mit.
Der Host zahlt nichts und speichert nichts.
pay-membership — bewusst als Stub belassen. Hier wird alles wieder
nötig, was die anderen beiden vermeiden — Accounts, Abrechnung,
serverseitige Speicherung. Ein eigenes Unterfangen, kein Schalter zum
Umlegen.
Es gibt immer einen local-Standard: wer nichts konfiguriert, bekommt
die Anwendung genau so, wie sie vorher lief, auf der eigenen Maschine.
Die Bausteine
| Baustein |
Zweck |
| Modus als Install-Time-Einstellung |
eine Eigenschaft des Deployments, nicht der Session |
| Austauschbare Speicherschicht |
dieselbe Datenbank, anderer Ort |
| SQLite im Browser (WASM + OPFS) |
dasselbe Schema, dieselben Queries, anderer Ausführungsort |
| Key-Feld, maskiert |
nur im only-host-Modus, nie geloggt |
| Export und Import |
nicht optional — Browser-Daten sind flüchtig |
| Beleg als herunterladbare Datei, Zielordner wählbar |
kein Server an der Auslieferung beteiligt |
Der eigentliche Engineering-Aufwand liegt darin, die Speicherschicht
austauschbar zu machen: die Anwendung schreibt so oder so nach SQLite,
aber eine Zwischenschicht entscheidet, ob dieses Schreiben auf dem Server
oder im Browser des Besuchers landet (sql.js / der offizielle
SQLite-WASM-Build, persistiert über das Origin Private File System). Die
Browser-Speicher-Optionen nach Gewicht ordnen, falls WASM zu schwer ist:
SQLite-WASM + OPFS (eine echte Datenbank, größte Kapazität) > IndexedDB
(strukturiert, eigenes Query-Modell) > localStorage (nur für Kleinigkeiten
wie Sprache und Theme geeignet).
Was dieses Muster nicht löst — offen gesagt
- Gelöschte Browser-Daten heißt, alles ist weg. Es gibt keine
serverseitige Kopie. Deshalb ist Export eine Bedingung, kein Nice-to-have.
- Kein Gerätewechsel ohne Export und Import.
- Der im Browser lebende Key (
only-host) ist weniger geschützt als
einer auf einem Server. Er gehört aber dem Besucher, und die Alternative
wäre, ihn dem Host zu übergeben — nicht offensichtlich die sicherere Wahl.
- Die Ausführung läuft weiterhin über den Host. Bei Diensten, die einen
Dritten erreichen — etwa einen Telefonanruf — verarbeitet der Host die
Daten dieses Dritten unabhängig davon, wo die eigenen Aufzeichnungen des
Besuchers liegen. Eine Datenschutzerklärung wird dadurch nicht
überflüssig, nur kurz.
Was die Rechtsprüfung ergab
Eine rechtliche Ersteinschätzung (references/RECHT.md, deutsch — sie
prüft deutsche und EU-Vorschriften, weshalb ein Zitieren in Übersetzung
weniger genau, nicht zugänglicher wäre) prüfte das Muster gegen DSGVO,
TDDDG und UWG. Ersteinschätzung mit Fundstellen, keine Rechtsberatung.
Drei Befunde in je einer Zeile:
- Der Host bleibt Verantwortlicher, auch wenn er nichts speichert.
Art. 4(7) DSGVO knüpft die Verantwortlichkeit an das Entscheiden über
Zwecke und Mittel, nicht an die Speicherung; der EuGH hat das ausdrücklich
so gesagt (C-683/21). Gegenstandslos wird die Nutzerverwaltung, nicht
die Verantwortung.
- Für die kontaktierte Person schrumpft nichts. Informationspflichten
nach Art. 14, eine dokumentierte Abwägung der Rechtsgrundlage, ein
Auftragsverarbeitungsvertrag mit dem Dienst, der den Kontakt ausführt —
das sind meist die längsten Abschnitte einer Datenschutzerklärung, und
das Muster rührt sie nicht an.
- Die Haushaltsausnahme hilft dem Besucher, nicht dem Host. Sie deckt
rein persönliche Nutzung durch eine natürliche Person; ein Dienst, der
anderen angeboten wird, ist keine rein persönliche Tätigkeit. Genau dort
beginnt Piggyback-Hosting.
Der Gewinn liegt im Umfang der Pflichten und der Größe der Angriffsfläche,
nicht in ihrer Art — was zugleich die ehrlichere Aussage über das Muster ist.
Wie dieses Muster angewendet wird
references/DATA-FLOW-TEMPLATE.md lesen und für die tatsächliche
Anwendung ausfüllen, belegorientiert (jede Zeile braucht ein file:line
oder "nicht gefunden"). Das legt genau offen, welche lokalen Annahmen
unter Multi-Besucher-Hosting brechen, bevor Code geändert wird.
- Entscheiden, welche Modi die Anwendung tatsächlich braucht —
local
ist immer der Standard; huckepack-gift und huckepack-only-host sind
die beiden, die Nutzerverwaltung vermeiden; pay-membership bleibt ein
Stub, solange kein konkreter Grund für echte Accounts besteht.
- Die Speicherschicht austauschbar machen (der oben genannte Kern-Schritt),
das maskierte Key-Feld für
only-host ergänzen und Export/Import
verdrahten, bevor irgendetwas ausgeliefert wird — es ist das
Sicherheitsnetz für flüchtigen Browser-Speicher.
references/PRIVACY-TEMPLATE.md für das konkrete Deployment ausfüllen;
nicht zutreffende Blöcke löschen, jede Anbieter-Angabe gegen aktuelle
Verträge prüfen und eine fallbezogene Rechtsprüfung einholen, bevor
echte Daten verarbeitet werden. Die Vorlage ist ein Ausgangspunkt,
keine fertige Erklärung.
- Bei jeder Installation, die echte Dritte betrifft (Telefonanrufe,
Nachrichten an Personen, die sich nicht selbst angemeldet haben) oder
Forschungsteilnehmende, die Empfehlungen aus
references/RECHT.md als
Checkliste behandeln, nicht als Freigabe — vor dem ersten öffentlichen
Lauf einen Anwalt einbeziehen.
Referenzen
references/DATA-FLOW-TEMPLATE.md — Vorlage und Verfahren für einen
Data-Flow-Plan: jede Zeile braucht ein file:line, sonst ist es eine
Vermutung, kein Befund.
references/PRIVACY-TEMPLATE.md — Muster-Datenschutzerklärung mit
markierten Platzhaltern für eine Piggyback-Installation.
references/RECHT.md — rechtliche Ersteinschätzung (deutsch) mit
DSGVO-, TDDDG- und UWG-Fundstellen.
Beide Vorlagen sind Muster, keine Rechtsberatung. Wer eine Anwendung
hostet, passt sie an und ist für das Ergebnis verantwortlich.
Herkunft
Entstanden beim Bau von HungryCall, Ringedingeding und ResearchCall — drei
Call-Agenten, bei denen ein Data-Flow-Audit zeigte, dass ein unverändertes
Hosting ein Datenschutzvorfall mit angehängtem Namen gewesen wäre. Migriert
aus dem eigenständigen huckepack-Repository in diese Skill-Bibliothek.
1---2name: piggyback-hosting3description: Hosting-Muster, um eine lokal gebaute Anwendung (eigene Datenbank, eigener API-Key, In-Process-State) sicher hostbar zu machen, ohne Nutzerverwaltung zu bauen. Kernzug — der Host speichert nichts, der Browser des Besuchers speichert alles — sodass Pro-Besucher-Accounts, Zugriffsprüfungen und Löschfristen gegenstandslos werden, statt gelöst werden zu müssen. Nutzen, wenn eine lokal gebaute App für mehrere Besucher gehostet werden soll, bei "mach das ohne Login hostbar", "keine Nutzerkonten bauen", "Datenschutzerklärung für ein gehostetes Tool verkleinern", "wer ist verantwortlich, wenn wir nichts speichern" oder beim Wählen/Implementieren eines Server-Modus (`local`, `huckepack-gift`, `huckepack-only-host`, `pay-membership`). Liefert eine Data-Flow-Plan-Vorlage, eine Datenschutz-Vorlage und eine rechtliche Ersteinschätzung (DSGVO/TDDDG/UWG, deutsch) als Referenzen.4---56<img src="banner.png" width="100%" alt="piggyback-hosting banner">78# piggyback-hosting910**Ein Hosting-Muster für Anwendungen, die von vornherein niemals fremde11Daten annehmen.**1213> Blaupause entstanden am 2026-08-02 beim Bau dreier Call-Agenten.14> Wiederverwendbar für jede Anwendung, die für einen einzelnen lokalen15> Nutzer entworfen wurde, aber auch für andere hostbar sein soll.1617## Zum Namen1819Im Englischen heißt dieses Muster **piggyback** — auf fremder20Infrastruktur mitreiten ist dort bereits der Fachbegriff dafür. Englischer21Fließtext in diesem Skill sagt daher *piggyback*; **"huckepack" ist der22deutsche Arbeitstitel**, unter dem das Muster gebaut wurde, und zugleich23der Name des Repositories, aus dem dieser Skill migriert wurde. **Die24wörtlichen Modus-Werte bleiben `huckepack-gift` und `huckepack-only-host`**25— sie sind das, was in Code und Konfiguration verschifft wird, genau so26geschrieben, unabhängig davon, in welcher Sprache der umgebende Fließtext27steht.2829## Das Problem3031Eine Anwendung wird lokal gebaut: eine Datenbank, ein API-Key, State, der32im Prozess lebt. Auf der eigenen Maschine ist das schlicht korrekt. Sobald33jemand sie für andere hostet, wird jede dieser drei Annahmen zu einem Bug —34jeder Besucher teilt sich denselben State, dieselbe Datenbank, denselben35Key. Wer die Seite öffnet, sieht die Daten aller anderen.3637Die übliche Lösung ist Nutzerverwaltung: Accounts, Login, Zugriffsprüfungen,38Löschfristen, eine Datenschutzerklärung, ein Auftragsverarbeitungsvertrag.39Oft ein größeres Unterfangen als die Anwendung selbst.4041## Die Idee4243**Der Besucher behält alles auf dem eigenen Gerät. Der Host behält nichts.**4445Das löst die Nutzerverwaltung nicht — es macht sie **gegenstandslos**. Wo46keine fremden Daten auf dem Server liegen, gibt es nichts zwischen47Besuchern abzuschotten, nichts nach Zeitplan zu löschen, und die48Datenschutzerklärung schrumpft auf das, was der Dienst tatsächlich tut.4950## Die drei Modi5152| Modus | API-Key | Daten | Nutzerverwaltung |53|---|---|---|---|54| **`huckepack-gift`** | vom Host | auf dem Gerät des Besuchers | keine |55| **`huckepack-only-host`** | vom Besucher | auf dem Gerät des Besuchers | keine |56| **`pay-membership`** | des Hosts, abgerechnet | Server | erforderlich |5758- **`huckepack-gift`** — der Host liefert seinen eigenen Key und verschenkt59 die Ausführung. Eine reibungslose Einladung, das Tool auszuprobieren.60- **`huckepack-only-host`** — der Besucher bringt seinen eigenen Key mit.61 Der Host zahlt nichts und speichert nichts.62- **`pay-membership`** — bewusst als Stub belassen. Hier wird alles wieder63 nötig, was die anderen beiden vermeiden — Accounts, Abrechnung,64 serverseitige Speicherung. Ein eigenes Unterfangen, kein Schalter zum65 Umlegen.6667Es gibt immer einen **`local`**-Standard: wer nichts konfiguriert, bekommt68die Anwendung genau so, wie sie vorher lief, auf der eigenen Maschine.6970## Die Bausteine7172| Baustein | Zweck |73|---|---|74| Modus als Install-Time-Einstellung | eine Eigenschaft des Deployments, nicht der Session |75| Austauschbare Speicherschicht | dieselbe Datenbank, anderer Ort |76| SQLite im Browser (WASM + OPFS) | dasselbe Schema, dieselben Queries, anderer Ausführungsort |77| Key-Feld, maskiert | nur im `only-host`-Modus, nie geloggt |78| Export und Import | **nicht optional** — Browser-Daten sind flüchtig |79| Beleg als herunterladbare Datei, Zielordner wählbar | kein Server an der Auslieferung beteiligt |8081Der eigentliche Engineering-Aufwand liegt darin, die Speicherschicht82austauschbar zu machen: die Anwendung schreibt so oder so nach SQLite,83aber eine Zwischenschicht entscheidet, ob dieses Schreiben auf dem Server84oder im Browser des Besuchers landet (`sql.js` / der offizielle85SQLite-WASM-Build, persistiert über das Origin Private File System). Die86Browser-Speicher-Optionen nach Gewicht ordnen, falls WASM zu schwer ist:87SQLite-WASM + OPFS (eine echte Datenbank, größte Kapazität) > IndexedDB88(strukturiert, eigenes Query-Modell) > `localStorage` (nur für Kleinigkeiten89wie Sprache und Theme geeignet).9091## Was dieses Muster nicht löst — offen gesagt9293- **Gelöschte Browser-Daten heißt, alles ist weg.** Es gibt keine94 serverseitige Kopie. Deshalb ist Export eine Bedingung, kein Nice-to-have.95- **Kein Gerätewechsel** ohne Export und Import.96- **Der im Browser lebende Key** (`only-host`) ist weniger geschützt als97 einer auf einem Server. Er gehört aber dem Besucher, und die Alternative98 wäre, ihn dem Host zu übergeben — nicht offensichtlich die sicherere Wahl.99- **Die Ausführung läuft weiterhin über den Host.** Bei Diensten, die einen100 Dritten erreichen — etwa einen Telefonanruf — verarbeitet der Host die101 Daten dieses Dritten unabhängig davon, wo die eigenen Aufzeichnungen des102 Besuchers liegen. Eine Datenschutzerklärung wird dadurch nicht103 überflüssig, nur kurz.104105## Was die Rechtsprüfung ergab106107Eine rechtliche Ersteinschätzung (`references/RECHT.md`, deutsch — sie108prüft deutsche und EU-Vorschriften, weshalb ein Zitieren in Übersetzung109weniger genau, nicht zugänglicher wäre) prüfte das Muster gegen DSGVO,110TDDDG und UWG. **Ersteinschätzung mit Fundstellen, keine Rechtsberatung.**111Drei Befunde in je einer Zeile:112113- **Der Host bleibt Verantwortlicher, auch wenn er nichts speichert.**114 Art. 4(7) DSGVO knüpft die Verantwortlichkeit an das Entscheiden über115 Zwecke und Mittel, nicht an die Speicherung; der EuGH hat das ausdrücklich116 so gesagt (C-683/21). Gegenstandslos wird die **Nutzerverwaltung**, nicht117 die Verantwortung.118- **Für die kontaktierte Person schrumpft nichts.** Informationspflichten119 nach Art. 14, eine dokumentierte Abwägung der Rechtsgrundlage, ein120 Auftragsverarbeitungsvertrag mit dem Dienst, der den Kontakt ausführt —121 das sind meist die längsten Abschnitte einer Datenschutzerklärung, und122 das Muster rührt sie nicht an.123- **Die Haushaltsausnahme hilft dem Besucher, nicht dem Host.** Sie deckt124 rein persönliche Nutzung durch eine natürliche Person; ein Dienst, der125 anderen angeboten wird, ist keine rein persönliche Tätigkeit. Genau dort126 beginnt Piggyback-Hosting.127128Der Gewinn liegt im **Umfang der Pflichten und der Größe der Angriffsfläche**,129nicht in ihrer Art — was zugleich die ehrlichere Aussage über das Muster ist.130131## Wie dieses Muster angewendet wird1321331. `references/DATA-FLOW-TEMPLATE.md` lesen und für die tatsächliche134 Anwendung ausfüllen, belegorientiert (jede Zeile braucht ein `file:line`135 oder "nicht gefunden"). Das legt genau offen, welche lokalen Annahmen136 unter Multi-Besucher-Hosting brechen, bevor Code geändert wird.1372. Entscheiden, welche Modi die Anwendung tatsächlich braucht — `local`138 ist immer der Standard; `huckepack-gift` und `huckepack-only-host` sind139 die beiden, die Nutzerverwaltung vermeiden; `pay-membership` bleibt ein140 Stub, solange kein konkreter Grund für echte Accounts besteht.1413. Die Speicherschicht austauschbar machen (der oben genannte Kern-Schritt),142 das maskierte Key-Feld für `only-host` ergänzen und Export/Import143 verdrahten, bevor irgendetwas ausgeliefert wird — es ist das144 Sicherheitsnetz für flüchtigen Browser-Speicher.1454. `references/PRIVACY-TEMPLATE.md` für das konkrete Deployment ausfüllen;146 nicht zutreffende Blöcke löschen, jede Anbieter-Angabe gegen aktuelle147 Verträge prüfen und eine fallbezogene Rechtsprüfung einholen, bevor148 echte Daten verarbeitet werden. Die Vorlage ist ein Ausgangspunkt,149 keine fertige Erklärung.1505. Bei jeder Installation, die echte Dritte betrifft (Telefonanrufe,151 Nachrichten an Personen, die sich nicht selbst angemeldet haben) oder152 Forschungsteilnehmende, die Empfehlungen aus `references/RECHT.md` als153 Checkliste behandeln, nicht als Freigabe — vor dem ersten öffentlichen154 Lauf einen Anwalt einbeziehen.155156## Referenzen157158- `references/DATA-FLOW-TEMPLATE.md` — Vorlage und Verfahren für einen159 Data-Flow-Plan: jede Zeile braucht ein file:line, sonst ist es eine160 Vermutung, kein Befund.161- `references/PRIVACY-TEMPLATE.md` — Muster-Datenschutzerklärung mit162 markierten Platzhaltern für eine Piggyback-Installation.163- `references/RECHT.md` — rechtliche Ersteinschätzung (deutsch) mit164 DSGVO-, TDDDG- und UWG-Fundstellen.165166Beide Vorlagen sind **Muster, keine Rechtsberatung**. Wer eine Anwendung167hostet, passt sie an und ist für das Ergebnis verantwortlich.168169## Herkunft170171Entstanden beim Bau von HungryCall, Ringedingeding und ResearchCall — drei172Call-Agenten, bei denen ein Data-Flow-Audit zeigte, dass ein unverändertes173Hosting ein Datenschutzvorfall mit angehängtem Namen gewesen wäre. Migriert174aus dem eigenständigen `huckepack`-Repository in diese Skill-Bibliothek.