Wunschlisten-Reservierung erklärt: wie Doppelkäufe verhindert werden
Eine Wunschliste wird erst richtig nützlich, wenn mehrere Personen wissen wer welches Geschenk übernimmt. Das Reservierungs-Pattern macht das ohne Server möglich, und ohne dass die beschenkte Person die Reservierungen sieht.
Ein Tool das nur eine Wunschliste anzeigt löst nur das halbe Problem. Was die Familie wirklich braucht ist eine Antwort auf “wer kauft eigentlich was?”, und zwar so, dass die beschenkte Person nichts davon mitbekommt. Das Reservierungs-Pattern macht genau das. Ohne Server, ohne Anmeldung, ohne dass die Ueberraschung am Heiligabend kaputt geht.
Was eine Reservierung technisch ist
Eine Reservierung ist ein einzelner Eintrag in der Wunschliste, der einen Namen mitnimmt. Aus
{ "title": "Lego Hogwarts", "priority": 3 }
wird
{ "title": "Lego Hogwarts", "priority": 3, "reservedBy": "Oma" }
Diese Information lebt nicht auf einem Server. Sie steckt im Share-Link, den die reservierende Person nach dem Klick auf “Reservieren” bekommt. Der Link enthält den kompletten neuen Zustand der Liste, inklusive aller Reservierungen.
Warum das Wunschkind nichts sieht
Das Wunschkind hat über das Tool einen Share-Link erzeugt, nennen wir ihn Link A. Diesen Link gibt es den Erwachsenen. Link A enthält die Wunschliste ohne Reservierungen.
Wenn Oma jetzt über Link A “Reservieren” klickt, erzeugt das Tool für sie Link B, derselbe Inhalt plus die Reservierung “Lego Hogwarts → Oma”. Oma schickt Link B weiter an Papa. Papa öffnet Link B, sieht die Reservierung, reserviert das Buch für sich → Link C. Und so weiter.
Das Wunschkind benutzt aber weiterhin seinen ursprünglichen Link A. In Link A stehen keine Reservierungen. Selbst wenn das Wunschkind im Browser auf “Aktualisieren” klickt, ändert sich nichts, weil der Link den die Erwachsenen austauschen ein anderer ist als der den das Wunschkind hat.
<rect class="box b" x="230" y="20" width="140" height="80" rx="10"/>
<text class="head" x="300" y="50">Link B</text>
<text class="label" x="300" y="70">Oma reserviert Lego</text>
<text class="label" x="300" y="85">+ Reservierung Oma</text>
<rect class="box b" x="430" y="20" width="140" height="80" rx="10"/>
<text class="head" x="500" y="50">Link C</text>
<text class="label" x="500" y="70">Papa reserviert Buch</text>
<text class="label" x="500" y="85">+ Reservierung Papa</text>
<rect class="box a" x="30" y="160" width="140" height="60" rx="10"/>
<text class="head" x="100" y="185">Wunschkind</text>
<text class="label" x="100" y="205">sieht weiterhin Link A</text>
<rect class="box b" x="430" y="160" width="140" height="60" rx="10"/>
<text class="head" x="500" y="185">Erwachsenen-Runde</text>
<text class="label" x="500" y="205">teilt Link C</text>
<path class="arrow" d="M 170 70 L 230 60"/>
<path class="arrow" d="M 370 60 L 430 60"/>
<path class="arrow" d="M 500 100 L 500 160"/>
<path class="arrow" d="M 100 120 L 100 160"/>
Was die Erwachsenen-Runde austauschen muss
Damit das Pattern funktioniert, muss in der Erwachsenen-Runde immer der neueste Link zählen. Wer noch Link B nutzt obwohl schon Link C existiert, sieht Papa’s Reservierung nicht. In der Praxis pinnt man den jeweils neuesten Link in der Familien-Whatsapp-Gruppe oder einer geteilten Notiz, damit alle wissen wo der aktuelle Stand liegt.
Eine schöne Konvention: die Person die zuletzt reserviert hat, postet den neuen Link mit kurzer Notiz: “Habe das Buch reserviert, neuer Link → …”
Was passiert technisch beim Klick
Hinter den Kulissen läuft beim Klick auf “Reservieren” folgendes ab:
- Die aktuelle Wunschliste wird als JavaScript-Objekt im Browser kopiert.
- In der Kopie wird das Feld
reservedByauf den Namen der reservierenden Person gesetzt. - Die Kopie wird per JSON serialisiert, dann per Base64 codiert (Unicode-sicher, damit Umlaute funktionieren), dann werden URL-unfreundliche Zeichen ersetzt.
- Das Ergebnis wird an die URL nach
#share=angehängt. - Diese URL ist der neue Link den die Person an die Familie weitergibt.
Es findet keine Server-Anfrage statt. Das Tool könnte auch komplett offline funktionieren, die einzige Voraussetzung ist dass die Person eine URL kopieren und weiterschicken kann.
Wann das Pattern an Grenzen kommt
Sehr große Familien mit zehn schenkenden Personen. Wenn zehn Erwachsene gleichzeitig Reservierungen machen, wird die Link-Kette unübersichtlich. Hier hilft ein klares Protokoll wer den neuesten Link postet, und im Zweifel telefoniert man halt.
Reservierungen die nicht gekauft werden. Wenn jemand reserviert und dann doch nicht kauft, blockiert die Reservierung den Wunsch. Lösung: Reservierung aktiv zurückziehen sobald klar ist dass der Kauf nicht stattfindet.
Mehrere Anlässe parallel. Wenn dieselbe Familie an Weihnachten und zum Geburtstag eines Kindes koordinieren will, sollten getrennte Listen verwendet werden, sonst mischen sich die Reservierungen.
Gerät wechseln mid-Reservierung. Wer die Wunschliste auf dem Smartphone erstellt hat und sie auf dem Laptop weiterbearbeiten will, muss den aktuellen Share-Link selbst per Mail oder Cloud-Drive übertragen. Das Tool synchronisiert nichts zwischen Geräten.
Worauf es wirklich ankommt
Der Trick beim Reservierungs-Pattern ist die Trennung zweier Link-Spuren: die Wunschkind-Spur ohne Reservierungen, die Erwachsenen-Spur mit Reservierungen. Das Wunschkind sieht nichts von den Reservierungen, die Erwachsenen koordinieren transparent untereinander. Solange in der Erwachsenen-Runde immer der neueste Link zählt, funktioniert das Pattern verlässlich, auch ohne dass irgendein Server beteiligt ist.
Häufige Fragen
Warum sieht das Wunschkind keine Reservierungen?
Weil das Wunschkind den ursprünglichen Share-Link ohne Reservierungs-Status verwendet. Die Reservierungen entstehen erst beim Klick durch die Erwachsenen und leben in einer parallelen Link-Spur die nur die Erwachsenen-Runde sieht.
Was passiert wenn zwei Personen gleichzeitig dasselbe reservieren?
Da es keinen zentralen Server gibt, kann es theoretisch zu einer Kollision kommen, wenn beide gleichzeitig auf 'Reservieren' klicken und beide den eigenen neuen Link weiterschicken. In der Praxis ist das selten, weil die Reservierung von zwei Erwachsenen auf demselben Wunsch fast nie zeitgleich passiert. Falls doch: die Familie spricht es kurz aus und einer storniert.
Kann man eine Reservierung zurückziehen?
Ja. Wer einen Wunsch reserviert hat, kann ihn über den eigenen Link wieder freigeben. Andere Personen können die Reservierung nicht aufheben, das ist absichtlich so, sonst könnten Geschwister die Reservierungen ihrer Eltern saboten.
Wie lange ist eine Reservierung gültig?
Solange der entsprechende Share-Link in der Familie weitergegeben wird. Eine Reservierung verfällt nicht automatisch. Wer den Wunsch nicht kauft, sollte sie aktiv zurückziehen damit andere die Möglichkeit haben.
Was wenn jemand den Link verliert?
Wenn der Link verloren geht, kann die Person die Liste neu vom Wunschkind anfordern. Die Reservierungen die nur im verlorenen Link standen wären dann allerdings weg. Empfehlung: Link in einer Whatsapp-Familienchat-Pinnnachricht oder einer geteilten Notiz ablegen.