Die Rabattcodes haengen am Konto, nicht mehr am Abo

Filipe: "die partner codes sollen auch schon fuer die leute sichtbar sein
die angemeldet sind." Umgestellt, und auf Nachfrage dauerhaft: Rabattcodes
sind ab jetzt ein Konto-Vorteil, kein Abo-Vorteil.

WARUM DAS MEHR IST ALS EINE BEQUEMLICHKEIT

Der alte Riegel verlangte einen Abo-Status. Nachgesehen, statt vermutet:
Die Bezahlung auf abonnieren.html steht auf "Coming soon", bis Dogis
PayPal-Business-Zugang da ist (der Kommentar dort nennt es beim Namen).
Registrieren geht, bezahlen nicht. Der erste echte Partnercode lag damit
seit gestern hinter einer Tuer, die sich gar nicht oeffnen laesst -- er
waere fuer NIEMANDEN sichtbar gewesen ausser fuer Dogi und VanVan ueber
die Rollenvorschau.

Entschieden wird jetzt an "supporterToken" (beim Login gesetzt, beim
Logout entfernt, supporter.js). Der Abo-Stand wird als Sicherheitsnetz
weiter mitgelesen: Niemand soll Zugang verlieren, den er gestern hatte.

BEIDE STELLEN, NICHT EINE

Die Bedingung steht doppelt im Haus -- an der Kachel auf links.html und
an der Seite selbst. Nur eine davon umzustellen erzeugt einen Fehler, den
keine der beiden fuer sich zeigt: Man kaeme mit Konto auf die Seite und
saehe dort die Sperre. Beide sind umgestellt, tragen den Hinweis
aufeinander, und die Pruefung vergleicht sie in jedem Anmeldezustand
gegeneinander.

TEXTE, DIE SONST GELOGEN HAETTEN

"Nur fuer Supporter" auf einer Seite, die ein kostenloses Konto oeffnet,
schickt Leute zum Bezahlen fuer etwas, das sie umsonst bekommen. Kopf,
Vorspann, Kachelband, Beschreibung und Sperrtext sagen jetzt "Konto", in
allen fuenf Sprachen. Die Sperre bietet auf Filipes Wunsch beide Wege an:
den kostenlosen zuerst, das Abo daneben -- mit einer Zeile darunter, dass
es erst startet, wenn es offiziell live geht. Ohne die waere der zweite
Knopf eine Falle.

EIN FEHLER, DER SEIT DEM 03.08.2026 DRINSTAND

Die Pruefung meldete auf der FREIGESCHALTETEN Kachel weiter "Nur mit
Konto" statt "Freigeschaltet". Ursache: Das Skript setzte den Text
(`badge.textContent = ...`), aber applyTranslations() schreibt aus dem
data-i18n-Attribut zurueck -- und es laeuft danach noch einmal, weil
dogiSiteTexteLaden() die Texte aus der Verwaltung holt und dann neu
uebersetzt.

NACHGEMESSEN STATT HERGELEITET, und die erste Erklaerung war zu schnell:
Der Text war schon nach 50 ms falsch, also nicht "irgendwann spaeter
ueberschrieben". Der Grund ist, dass TEAM_API_BASIS auf den ECHTEN Worker
zeigt -- der Abruf gelingt selbst aus einer lokalen Testseite. Kontroll-
versuch mit blockiertem Abruf: derselbe alte Code, und das Band bleibt
korrekt. Ursache weg, Fehler weg.

Behoben, indem der SCHLUESSEL getauscht wird statt des Textes. Damit
schreibt jeder weitere Uebersetzungslauf von selbst das Richtige hin --
auch bei Sprachwechsel, wo die alte Fassung ebenfalls zurueckfiel.
Aufgefallen ist es nie, weil bis gestern niemand in den freigeschalteten
Zustand kommen konnte.

NEBENBEFUND, NICHT ANGEFASST: index.html hat dieselbe Bauart beim
Live-Status (#live-text mit data-i18n, Text per Skript gesetzt).
Gemessen ist es dort ein Wettlauf zweier Abrufe -- in meinem Lauf gewann
der Status um Haaresbreite, und ein Sprachwechsel repariert es dort
ohnehin (dogi-sprache-geaendert). Kleiner, aber echt. Auf Ansage.

pruef-rabattcodes EXIT=0 (63 Pruefungen, vorher 42). Neu darunter: drei
Anmeldezustaende statt zweier -- ausgeloggt, angemeldet ohne Abo,
angemeldet mit Abo --, jeder auf BEIDEN Seiten, dazu der Klick auf die
Kachel (fuehrt sie wirklich weiter?), die Beschriftung des Bands und als
Gegenprobe ein erzwungener Uebersetzungslauf, der den alten Fehler
zuverlaessig ausloest.

Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
2026-09-08 21:49:16 +02:00
co-authored by Claude Opus 5
parent 8cdc31bd46
commit 5a67ef2948
5 changed files with 336 additions and 99 deletions
+53 -13
View File
@@ -31,11 +31,13 @@
text-align: center;
}
/* Gesperrt-Zustand: an das Supporter-Abo gekoppelt (Nutzer-Feedback
03.08.2026), gleiche Prüfung wie die Karte auf links.html. Direkter
Aufruf dieser Seite (Lesezeichen, geteilter Link) soll die Sperre
genauso zeigen wie der Knopf dort — nicht nur auf links.html blockiert
sein. */
/* Gesperrt-Zustand. Er hängt seit dem 08.09.2026 am KONTO, nicht mehr
am bezahlten Abo (Filipe: "die partner codes sollen auch schon für
die leute sichtbar sein die angemeldet sind") — die Begründung steht
ausführlich beim Skript am Seitenende. Unverändert gilt: dieselbe
Prüfung wie die Kachel auf links.html, damit der direkte Aufruf
(Lesezeichen, geteilter Link) genau dasselbe zeigt wie der Knopf
dort. Zwei Sperren, die auseinanderlaufen, sind schlimmer als eine. */
.code-gesperrt-siegel {
width: 96px; height: 96px;
display: flex; align-items: center; justify-content: center;
@@ -367,6 +369,16 @@
}
.rc-partner.ist-abgelaufen .rc-code { cursor: not-allowed; opacity: .75; }
/* Steht unter den beiden Knöpfen der Sperrkachel: ohne sie wäre
"Supporter werden" eine Falle, weil das Abo noch nicht bezahlbar
ist. */
.rc-abo-hinweis {
max-width: 44ch;
margin: 1rem auto 0;
font-size: .84rem;
color: var(--text-muted);
}
.rc-mehr {
max-width: 620px;
margin: 1.4rem auto 0;
@@ -392,9 +404,9 @@
<section class="hero page-bg">
<div class="hero-banner"><img src="/assets/img/bg-links.jpg" alt="" loading="eager" /></div>
<div class="container">
<span class="eyebrow" data-i18n="rc_eyebrow">🏷️ Für Team Dogi</span>
<span class="eyebrow" data-i18n="rc_eyebrow">🔒 Nur mit Konto</span>
<h1 data-i18n="rc_h1">Rabattcodes</h1>
<p class="lead worlds" data-i18n="rc_lead">Codes von Dogis Partnern — damit deine Community bares Geld spart.</p>
<p class="lead worlds" data-i18n="rc_lead">Codes von Dogis Partnern — für alle mit einem Konto im DOGFATHER UNIVERSE.</p>
</div>
</section>
@@ -444,13 +456,17 @@
<p class="rc-mehr" data-i18n="rc_mehr">Weitere Codes folgen, sobald die nächsten Kooperationen stehen.</p>
</div>
<!-- Nur für Nicht-Supporter sichtbar (siehe Skript unten) -->
<!-- Nur für Ausgeloggte sichtbar (siehe Skript unten) -->
<div class="card code-platzhalter" id="rc-gesperrt" hidden>
<div class="code-gesperrt-siegel" aria-hidden="true">🔒</div>
<h2 data-i18n="rc_gesperrt_titel">Nur für Dogfather-Supporter</h2>
<p data-i18n="rc_gesperrt_text">Rabattcodes sind ein exklusiver Vorteil der DogiCrew 🩵. Der erste Partnercode ist schon drin — werde jetzt Teil davon, um ihn freizuschalten.</p>
<h2 data-i18n="rc_gesperrt_titel">Melde dich an, dann sind sie da</h2>
<p data-i18n="rc_gesperrt_text">Die Rabattcodes gibt es für alle mit einem Konto bei Dogfather — Registrieren ist kostenlos und dauert eine Minute. Der erste Partnercode wartet schon.</p>
<div class="btn-row" style="justify-content:center;margin-top:1.8rem;">
<a class="btn btn-primary" href="abonnieren.html" data-i18n="rc_btn_abo">Jetzt Supporter werden 👑</a>
<a class="btn btn-primary" href="abonnieren.html" data-i18n="rc_btn_anmelden">Anmelden oder kostenlos registrieren</a>
<a class="btn btn-outline" href="abonnieren.html" data-i18n="rc_btn_abo">Supporter werden 👑</a>
</div>
<p class="rc-abo-hinweis" data-i18n="rc_abo_hinweis">Fürs Abo brauchst du ebenfalls erst ein Konto — es startet, sobald es offiziell live geht.</p>
<div class="btn-row" style="justify-content:center;margin-top:.6rem;">
<a class="btn btn-outline" href="links.html" data-i18n="rc_btn_zurueck">← Zurück zu allen Links</a>
</div>
</div>
@@ -481,12 +497,36 @@
var ABLAUF = "2026-09-30";
document.addEventListener("DOMContentLoaded", function () {
/* WER DIE CODES SIEHT — seit 08.09.2026 das KONTO, nicht das Abo.
Anlass (Filipe): "die partner codes sollen auch schon für die leute
sichtbar sein die angemeldet sind." Der alte Riegel verlangte einen
Abo-Status. Der war zu diesem Zeitpunkt für NIEMANDEN erreichbar:
Die Bezahlung auf abonnieren.html steht auf "Coming soon", bis
Dogis PayPal-Business-Zugang da ist. Der erste echte Partnercode
wäre also hinter einer Tür gelegen, die sich gar nicht öffnen lässt.
"supporterToken" ist der Nachweis, dass jemand angemeldet ist — er
wird beim Login gesetzt und beim Logout wieder entfernt
(supporter.js, clearToken). "supporterSubStatus" sagt nur, OB und
wie bezahlt wird ("none", wenn ein Konto ohne Abo besteht).
Warum der Abo-Stand trotzdem noch mit abgefragt wird, obwohl er
ohne Token gar nicht vorkommen kann: Es ist ein Sicherheitsnetz.
Niemand, der die Codes gestern sehen konnte, soll sie heute
verlieren, nur weil ein Speicherstand anders aussieht als gedacht.
Die Prüfung ist bewusst rein clientseitig (wie vorher schon) — es
geht darum, wem etwas angeboten wird, nicht darum, ein Geheimnis zu
hüten. Der Code steht ohnehin in jedem geteilten Bildschirmfoto. */
var angemeldet = !!localStorage.getItem("supporterToken");
var status = localStorage.getItem("supporterSubStatus");
var hatAbo = ["active", "pending", "suspended", "cancelled"].indexOf(status) !== -1;
var darfSehen = angemeldet || hatAbo;
var inhalt = document.getElementById("rc-inhalt");
var gesperrt = document.getElementById("rc-gesperrt");
if (inhalt) inhalt.hidden = !hatAbo;
if (gesperrt) gesperrt.hidden = hatAbo;
if (inhalt) inhalt.hidden = !darfSehen;
if (gesperrt) gesperrt.hidden = darfSehen;
var karte = document.getElementById("rc-partner");
var knopf = document.getElementById("rc-code");