Zum Inhalt springen
Tai Chi Startseite

Tai Chi — Methodik

Die einzige Quelle der Wahrheit für dieses Projekt. Marke, Designsystem, Evidenzbasis, Verordnungslogik, Inhaltsrichtlinie und Sicherheitsrahmen stehen alle hier. Wenn Code und dieses Dokument sich widersprechen, ist eines von beiden ein Fehler — sag im PR, welches.

Status: lebendes Dokument · Letzte inhaltliche Überarbeitung: 2026-08-02

Übersetzung des englischen Dokuments docs/METHODOLOGY.md, Abschnitt für Abschnitt und in derselben Reihenfolge. Diese Entsprechung ist tragend: die Überschriften-Ids von /de/method stammen positionsbezogen aus der englischen Datei, sodass /method#42-joints und /de/method#42-joints denselben Abschnitt bezeichnen. Diese Übersetzung hatte keine muttersprachliche Durchsicht; siehe §11.


1. Was das ist, und was es sich weigert zu sein

Tai Chi ist ein kostenloser, öffentlicher Tai-Chi-Begleiter ohne Anmeldung. Du öffnest ihn, er weiß, welcher Tag ist, und er gibt dir eine Einheit, geformt davon, wie sicher du auf den Beinen stehst, wie viel Zeit du hast und was du trainieren willst.

Er ist:

  • Ein Planer und Timer, um den Unterricht anderer Menschen herumgelegt.
  • Eine Rotationsmaschine, deren Hauptaufgabe ist, dafür zu sorgen, dass morgen sich nicht wie heute anfühlt.
  • Ein ehrlicher Vermittler: jedes Video ist genannt, zurückverlinkt und vollständig auf der Bibliotheksseite aufgeführt.

Er ist bewusst nicht:

  • Ein Lehrer. Er korrigiert deine Haltung nicht, er kann dich nicht sehen, und er wird nie behaupten, eine Bewegung sei „richtig“.
  • Ein Medizinprodukt oder eine klinische Intervention. Er fasst veröffentlichte Evidenz zusammen, um zu erklären, warum die Einheiten so geformt sind; er diagnostiziert nicht, behandelt nicht und passt sich keiner Erkrankung an.
  • Ein kontobasiertes Produkt. Keine Anmeldung, keine E-Mail, kein serverseitiges Profil, keine Analytik. Alles liegt in localStorage auf einem Gerät.

1.1 Warum keine Anmeldung

Die Zielgruppe ist überproportional über 65. Jede Anmeldeschranke ist ein Absprung, und ein Wohlfühlwerkzeug, das eine 78-Jährige bittet, eine E-Mail zu bestätigen, ist ein Werkzeug, das sie einmal öffnet. Die Kosten dieser Entscheidung sind real und wir stehen in der Oberfläche offen dazu: keine Synchronisation zwischen Geräten, und das Löschen der Websitedaten löscht die Serie.


2. Marke

2.1 Der Name

Tai Chi (太極, tài jí) benennt die Praxis selbst statt einer Stimmung um sie herum. Er wurde den Alternativen vorgezogen, weil:

  • Er sagt genau, wofür die App da ist, mit den Wörtern, die Menschen ohnehin verwenden, wenn sie danach suchen.
  • Er ist konkret. „Flow“, „Balance“, „Serenity“ sind Adjektive, die so tun, als wären sie Produkte.
  • Er trägt keine Behauptung. Die App plant den Unterricht anderer Menschen; ein erfundener Markenname würde eine eigene Methode andeuten, und es gibt keine.

2.2 Die Stimme

Schlicht, ruhig und leicht trocken. Kurze Sätze. Nie atemlos, nie mystisch, nie ein Coach, der Ermutigung brüllt.

Wir schreibenWir schreiben nicht
„Hier ist nichts zu erreichen. Steh einfach.“„Umarme deine innere Stille!“
„Ziehen ist in Ordnung; scharfer Schmerz nicht.“„Hör auf deinen Körper 🙏“
„Ruhe ist Training, keine Lücke darin.“„Reiß deine Serie nicht ab!“
„Dieses läuft hier nicht.“„Hoppla! Etwas ist schiefgelaufen.“

Schuld wird nie als Motivation eingesetzt. Es gibt keinen Zustand „du hast 3 Tage verpasst“, und eine abgerissene Serie wird kommentarlos gemeldet.

2.3 Das Zeichen

Zwei verschränkte Bögen — einer steigt, einer sinkt, mit gemeinsamer Mitte — die den Weg nachzeichnen, den die Hände in den „Wolkenhänden“ nehmen. Es trägt den Yin-Yang-Austausch, auf dem die Praxis beruht, ohne das Taijitu zu verwenden, das visuell erschöpft ist und wie ein Logo von 1997 wirkt. Eine Strichstärke, 24-Einheiten-Raster, lesbar in Favicon-Größe.

2.4 Farbe — tiefe Nacht und Mondlicht

Die App ist standardmäßig dunkel, und dunkel ist der entworfene Zustand, kein Zugeständnis. Tai-Chi wird im Morgengrauen geübt, in einem dämmrigen Raum, oft bevor das Licht angeht. Eine hellweiße Seite um sechs Uhr früh ist feindselig. Der helle Modus existiert und ist vollständig, aber er ist dieselbe Marke am Mittag, nicht eine andere.

Der Bildschirm ist ein Nachthimmel mit einer einzigen Lichtquelle darin. Alles folgt daraus: der Mond steht fest oben rechts, die Glanzkanten der Glasscheiben nehmen Licht von oben rechts an, und keine Fläche sendet eigene Farbe aus — sie fangen das Mondlicht ein.

Alles ist oklch, sodass Helligkeitsrampen wahrnehmungsmäßig gleichmäßig sind und sich die durchscheinenden Schichten vorhersagbar mischen.

RampeRolleWarum dieser Farbton
NachtHintergrund und StrukturBlauschwarz, nie neutrales Grau. Das leichte Blau ist, was den Akzent als Licht lesen lässt statt als Farbe
MondlichtPrimär. Die einzige Lichtquelle, und der AkzentBlasses, entsättigtes Blau. Für die Abspieltaste, den Timer-Ring und den aktiven Zustand — und fast nichts sonst
SeladonDie Praxisfarbe: Qigong, Aufwärmen, sanftEin so weit zurückgenommenes Jade, dass es als glasiertes Porzellan im Mondlicht liest, nicht als „Wellness-Grün“
LampenlichtHeute, Serien, mittlere AnstrengungDer einzige warme Ton im normalen Gebrauch. Hart rationiert, damit er etwas bedeutet
GlutKräftige Intensität, destruktive AktionenDer einzige heiße Ton. Er erscheint auf vielleicht zwei Flächen in der ganzen App

Farbe ist nie das einzige Signal. Jeder Phasen-Chip verbindet Farbe mit einem Label und einem Symbol; die Intensitätspunkte tragen ein textliches sr-only-Äquivalent.

2.5 Schrift

Zwei Familien, nach dem Gegenstand gewählt und nicht nach der Mode.

  • Cormorant (Display) — eine kalligrafische Renaissance-Antiqua mit pinselartiger Strichmodulation. Sie trägt die Tuschmalerei-Qualität der Praxis, ohne zu einer pastichehaften „orientalischen“ Schrift zu greifen, die zugleich hässlich und leicht beleidigend wäre. Nur in Displaygrößen: sie ist viel zu fein für Fließtext, und wir setzen darin nie welchen.
  • Inter (alles Funktionale) — Oberfläche, Bedienelemente und vor allem der Timer. Große x-Höhe, neutral, und echte Tabellenziffern.

Tabellenziffern werden beim Timer und bei jedem Wert erzwungen, der sich an Ort und Stelle ändert, damit die Ziffern beim Wechseln nicht zittern.


3. Designsystem

3.1 Token-Ebenen

Drei Ebenen, eine Abhängigkeitsrichtung. Komponenten konsumieren nur Ebene 3.

  1. Primitiv--ch-moon-400, --ch-night-950. Rohe Markenwerte. Nie von einer Komponente referenziert.
  2. Semantisch--primary, --phase-form, --glass-blur. Bedeutungstragend, themenschaltbar. Das ist die Ebene, die hell/dunkel tauscht.
  3. Komponente — Tailwind-Utilities, erzeugt in @theme inline (bg-phase-form, text-timer, rounded-3xl).

Eine neue Farbe, die direkt in eine Komponente wandert, ist ein Review-Kommentar, kein Patch.

3.2 Liquid Glass, spezifiziert

Eine Scheibe besteht aus vier gestapelten Signalen. Fehlt eines, sieht das aus wie ein durchscheinendes Rechteck und nicht wie Glas.

  1. Brechungbackdrop-filter: blur() saturate() brightness(). Die Sättigung ist es, die es verkauft; Unschärfe allein liest sich wie mattiertes Plastik. Im dunklen Build sind die Scheiben eher rauchig als mattiert: die Füllung fällt auf ~6 % und die Helligkeitsanhebung leistet die Arbeit.
  2. Körper — eine durchscheinende Tönungsfüllung (--glass-tint / --glass-fill).
  3. Kanten — eine helle Haarlinie oben (inset 0 1px 0) und eine dunkle Kontaktlinie unten. Das ist es, was Dicke andeutet.
  4. Glanzlicht — ein diagonaler Glanzstreifen über ::before, dazu ein Rauschkorn von 3,5 % über ::after. Das Korn existiert, um den Plastikeindruck großer weichgezeichneter Flächen zu besiegen.

Bereitgestellt als @utility glass, glass-faint, glass-strong, glass-specular, glass-grain, glass-press, und konsumiert über eine einzige <Glass>-Primitive mit drei Achsen: depth, tone, radius.

Regel: bastle nie ein backdrop-blur an einer Komponente zusammen. Nimm <Glass>, oder ergänze eine Variante.

Zwei Dinge machen das tragfähig statt dekorativ:

  • Der Nachthimmel. Glas liest sich nur als Glas, wenn dahinter etwas ist, das gebrochen zu werden lohnt. Ein fester Mond plus zwei langsame, kalte Bodenfelder liegen bei -z-10 hinter allem. Reines CSS, kein Canvas, kein rAF. Ein Schleier darüber garantiert den Textkontrast, wo immer ein Feld gerade landet — der Himmel ist Dekoration, und Text darf nie von ihm abhängen.
  • Der @supports-Rückfall. Wo backdrop-filter nicht unterstützt oder abgeschaltet ist, springen die Füllungen auf 88–98 % Deckkraft. Textkontrast hängt nie davon ab, dass die Unschärfe greift.

3.3 Bewegung

RegelGrund
Nur zwei Easings, beide eigens gebaut--ease-glass fürs Material, --ease-settle für Ankünfte. Mehr als zwei liest sich als Inkonsistenz.
Nichts fährt von der Seite einPeriphere Bewegung zieht das Auge und bricht eine stehende Haltung. Hinweise blenden an Ort und Stelle über.
Umgebungsschleifen dauern 28–44 sLangsam genug, um unbemerkt zu bleiben; schneller wird daraus ein Metronom, gegen das man ankämpft.
prefers-reduced-motion beendet das Driften…behält aber Deckkraft- und Farbübergänge, denn die tragen den Zustand der Einheit.

3.4 Barrierefreiheits-Zusagen

  • Berührziele: 44 px Untergrenze, 48 px für die Transportleiste, 64 px fürs Abspielen.
  • Jedes Bedienelement hat ein echtes aria-label; der Timer-Ring ist aria-hidden mit einer groben sr-only-Live-Region, damit er nicht jede Sekunde angesagt wird.
  • role="radiogroup" für die Einrichtungsoptionen, damit Pfeiltasten und Positionsansagen funktionieren.
  • Sprunglink, sichtbarer Fokusring, aria-current auf der Navigation und dem aktiven Block.
  • Kein maximumScale. Diese App richtet sich an Menschen über 65; Zoom ist nicht optional.
  • Untertitel standardmäßig an im Player — ein großer Teil der Bibliothek ist still, akzentgefärbt oder auf Mandarin, und die zuschauende Person steht quer durch den Raum.

3.5 Responsive Architektur

Der erste Build brach unterhalb von ~400 px, was für eine App inakzeptabel ist, deren Nutzer sie am ehesten auf einem an eine Lampe gelehnten Telefon öffnen. Die Regeln jetzt:

  • Die Navigation wandert, sie schrumpft nicht. Unterhalb von md trägt die Kopfzeile nur das Markenzeichen und zwei Bedienelemente; die vier Navigationen werden zu einer festen gläsernen Tab-Leiste unten, mit Rücksicht auf die sicheren Bereiche und mit Symbolen und Beschriftungen. Reine Symbolleisten sind für die Altersgruppe, für die das gebaut ist, unlesbar.
  • overflow-x: hidden auf html und body, und min-width: 0 auf jedem Element. Nichts ist je breiter als das Viewport; wenn doch, ist das ein Fehler — aber ein Fehler, der nicht zu einer seitwärts scrollenden Seite werden darf.
  • Der Wochenstreifen muss sieben Zellen bei 330 px fassen. Die Textmarke entfällt unterhalb von sm; der Anfangsbuchstabe des Tages, das Datum und der Farbpunkt überleben. Die Zellen bleiben unabhängig davon ≥44 px hoch — es ist das meistgetippte Bedienelement der App.
  • Sichere Bereiche überall: env(safe-area-inset-*) an Kopfzeile, Tab-Leiste und Einstellungsblatt.
  • Der Timer wird gegen seinen Ring dimensioniert, nicht gegen das Viewport. Ein vw-getriebenes clamp lief auf breiten Bildschirmen aus dem Ring heraus.
  • font-size: max(16px, 1em) auf Bedienelementen, damit iOS die Seite nie zoomt.

3.6 Internationalisierung

Die Sprache wird beim ersten Besuch automatisch aus dem Browser erkannt und danach gemerkt.

  1. navigator.languages lesen — die eigene, geordnete Präferenzliste des Nutzers — und den ersten unterstützten Eintrag nehmen. Wessen Liste [ca, es, en] lautet, bekommt Spanisch, nicht Englisch.
  2. Nur nach der Primär-Subtag vergleichen: es-419, es-MX und es lösen alle auf Spanisch auf. Jede chinesische Variante löst auf Vereinfacht auf — zh-Hant ohne echte Übersetzung ins Traditionelle auszuliefern wäre schlimmer als Vereinfacht zu zeigen.
  3. Eine ausdrückliche Wahl im Einstellungsblatt überschreibt die Erkennung und wird in localStorage geschrieben. „Meinem Browser folgen“ löscht sie.

Ausgelieferte Sprachen: Englisch, Spanisch, Französisch, Deutsch, Vereinfachtes Chinesisch.

Zwei Architekturentscheidungen machen, dass das funktioniert statt halb zu funktionieren:

  • Der Motor gibt Schlüssel aus, nie Prosa. prescribe und select sind rein und sprachblind, geben also Note = { key, values } zurück, und die Oberfläche löst es auf. Begründung, Warnhinweise und Blocknotizen sind daher übersetzt, nicht bloß das Drumherum. Wo ein Wert selbst ein übersetzbarer Begriff ist („du hast sanft verlangt“), gibt der Motor ihn hinter einer NUL-Sentinel aus, und translate löst eine Ebene tief auf.
  • Englisch ist Quelle der Wahrheit und zugleich der Typ. Jede andere Sprache ist als Record<keyof typeof en, string> typisiert, ein fehlender Schlüssel ist also ein Compile-Fehler. Ein zur Laufzeit fehlender Schlüssel fällt auf Englisch zurück, statt den rohen Schlüssel darzustellen.

Jede Routenfamilie ist übersetzt: das Drumherum, die Kursseiten, die dreizehn /for/*-Essays, die Installationsanleitung und dieses Dokument. src/lib/i18n/coverage.ts bleibt die Quelle der Wahrheit dafür, welche davon in welcher Sprache indexiert werden dürfen, und eine Behauptung zurückzunehmen ist eine Zeile pro Familie.

Zwei Kategorien sind bewusst unübersetzt, und eine ist bewusst auf ungewöhnliche Weise übersetzt:

  • Unübersetzt: die Rangnamen (Eigennamen, wie Kyū- und Dan-Grade) und die Videotitel und Kanalnamen (die Nennung muss mit der Quelle übereinstimmen).
  • Unübersetzt: die Überschriften-Anker der Methodik. /method#42-joints löst in jeder Sprache auf, weil die Ids des gerenderten Dokuments positionsbezogen aus der englischen Datei stammen und nicht aus dem Slug der übersetzten Überschriften. Ein Anker ist ein Bezeichner, und Bezeichner werden nicht übersetzt. Der Preis: eine Übersetzung darf keinen Abschnitt hinzufügen, weglassen oder umstellen; der Test setzt das durch.
  • Vom Hersteller übersetzt, nicht von uns: die Menübeschriftungen von /install. iOS, Chrome, Firefox und Samsung Internet lokalisieren ihre eigenen Menüs, also trägt install.label.* die Formulierung des jeweiligen Herstellers je Sprache. Übersetzt ein Hersteller eine Beschriftung nicht, ist die englische Zeichenkette der richtige Wert — die einzige Stelle in den Wörterbüchern, an der das gilt.

3A. Fortschritt

Fortschritt wird in Tagen gemessen, an denen du da warst — nie in Minuten, nie in Intensität. Eine fünfminütige Einheit im Sitzen an einem schlechten Tag zählt genau so viel wie eine fünfundvierzigminütige Form an einem guten.

Das ist keine Weichspülung. Volumen zu belohnen würde genau die Menschen, für die diese App gebaut ist — älter, steifer, unsicherer — dazu drängen, zu viel zu tun, und das ist der Hauptweg, auf dem eine Bewegungsintervention Schaden anrichtet.

Ränge (aus abgeschlossenen Tagen abgeleitet, nie gespeichert):

RangTageRangTage
Anfängergeist初心0Weißer Kranich白鶴60
Erstes Licht初光1Langer Strom長江100
Stilles Wasser靜水5Grundgestein磐石180
Grüner Bambus青竹15Alte Kiefer古松365
Ziehende Wolke行雲30

Meilensteine werden verdient und nie verloren. Einer davon — Zurückgekommen — ist ausdrücklich für die Rückkehr nach vierzehn Tagen Pause, weil das schwerer ist als eine Serie und kein Gewohnheitstracker es je belohnt.

Anti-Muster, die dieser Bildschirm ablehnt:

  • Kein Zustand „du hast deine Serie gerissen“, und nirgendwo Rot.
  • Heute noch nicht geübt reißt die Serie nicht. Der Tag ist nicht vorbei.
  • Kein Vergleich mit anderen Menschen. Hier ist sonst niemand.
  • Alles wird bei jedem Render aus dem Protokoll abgeleitet. Eine Serie neben der Historie zu speichern, die sie erzeugt, ist der Weg, auf dem jeder Gewohnheitstracker am Ende eine Zahl anzeigt, der seine eigenen Daten widersprechen.

4. Die Evidenzbasis

Jede Behauptung unten trägt ihre Quelle und ihren Prüfstatus: ✅ geprüft heißt, die Zahlen wurden beim Schreiben gegen die Quelle kontrolliert; ⚠️ ungeprüft heißt, sie ist aus Allgemeinwissen formuliert und sollte bestätigt werden, bevor sie in einer öffentlichen Marketingaussage verwendet wird.

4.1 Stürze

  • Tai-Chi senkt die Sturzrate um etwa 19 % bei zu Hause lebenden älteren Menschen (RaR 0,81; 95-%-KI 0,67–0,99; 2.655 Teilnehmende über 7 Studien; Evidenz niedriger Sicherheit). Sherrington et al., Cochrane Database of Systematic Reviews, 2019. ✅ geprüft
    • Derselbe Review bewertet Gleichgewichts- und Funktionstraining höher: 24 % Reduktion, Evidenz hoher Sicherheit (RaR 0,76; 95-%-KI 0,70–0,81; 39 Studien). Tai-Chi ist gut, nicht am besten, und die Sicherheit ist geringer.
  • In einer Hochrisikogruppe senkte ein therapeutisches Tai-Ji-Quan-Protokoll Stürze um 58 % gegenüber Dehnen und um 31 % gegenüber multimodalem Training (IRR 0,42; 95-%-KI 0,31–0,56 vs. Dehnen). Li et al., JAMA Internal Medicine, 2018, 670 Erwachsene ab 70 Jahren mit Sturzanamnese oder eingeschränkter Mobilität. ✅ geprüft

Was wir daraus mitnehmen: Gleichgewichtsarbeit ist der wertvollste Block für ältere Übende, also verdoppelt der Schwerpunkt balance diese Phase in etwa, und die Rahmung als Sturzprävention ist ehrlich statt überzogen.

4.2 Gelenke

  • Bei Kniearthrose erzielte Tai-Chi WOMAC-Verbesserungen vergleichbar mit Standard-Physiotherapie nach 12 Wochen (Tai-Chi 167 Punkte, 95-%-KI 145–190; PT 143 Punkte, 95-%-KI 119–167; Unterschied zwischen den Gruppen nicht signifikant). Wang et al., Annals of Internal Medicine, 2016, n = 204. ✅ geprüft
  • Dr. Paul Lams Tai Chi for Arthritis (Sun-Stil, hoher Stand, keine tiefe Kniebeugung) ist das am weitesten verbreitete Protokoll in diesem Feld und ist der Standardinhalt für form beim Schwerpunkt joints und im Band 75+. ⚠️ ungeprüft (Verbreitung des Programms, keine Wirksamkeitsbehauptung)

4.3 Dosis

  • WHO-Leitlinien 2020, Erwachsene ab 65: 150–300 min aerobe Aktivität mittlerer Intensität pro Woche, Muskelkräftigung an ≥2 Tagen/Woche und abwechslungsreiche multikomponente Aktivität mit Betonung auf funktionellem Gleichgewicht und Kraft, bei mittlerer oder höherer Intensität, an ≥3 Tagen/Woche. ✅ geprüft

Was wir daraus mitnehmen: der Standardplan sind 5 Tage/Woche, und die Wochenplanung garantiert, dass der Gleichgewichtsschwerpunkt an mehreren nicht aufeinanderfolgenden Tagen auftaucht. Wer weniger als 3 Tage wählt, wird nicht gewarnt — Nörgeln widerspricht der Marke —, aber der Plan verteilt den Schwerpunkt trotzdem, statt eine Qualität zu wiederholen.

4.4 Intensität

  • Allgemeines Tai-Chi wird konventionell als leicht bis mittel intensiv, um 3,0 MET eingestuft (Compendium of Physical Activities). ⚠️ ungeprüft — nur als Entwurfsheuristik behandelt, Nutzern nie als Zahl angezeigt.

Intensität ist im Tai-Chi nicht Tempo. Sie wird moduliert über:

  1. Standhöhe — die mit Abstand dominierende Variable.
  2. Bewegungsumfang.
  3. Einbeinzeit — der Haupttreiber sowohl des Trainingseffekts als auch des Sturzrisikos.
  4. Kontinuität — wie viel der Einheit ununterbrochene Bewegung ist.

Deshalb steht in der Oberfläche direkt unter der Intensitätssteuerung: „Im Tai-Chi sind das Standhöhe und Einbeinzeit, nicht Tempo.“

4.5 Atem

  • Die geführten Blöcke takten auf rund 5,5 Atemzüge pro Minute (ein 11-Sekunden-Zyklus), innerhalb des Resonanzfrequenzbereichs, der mit den deutlichsten kurzfristigen Effekten auf Herzratenvariabilität und Barorezeptorempfindlichkeit verbunden ist. ⚠️ ungeprüft — als Vorschlag dargestellt; nichts in der App verlangt, dass man ihn trifft.

4.6 Gewohnheit

  • Der stärkste Hebel auf die Beibehaltung, den wir tatsächlich ziehen können, ist die nächste Einheit sichtbar und bereits entschieden zu machen. Daher ist der Wochenstreifen über allem angeheftet, und Ruhetage werden dargestellt statt weggelassen. ⚠️ ungeprüft als konkrete Effektstärke; als Produktprinzip behandelt.

4.7 Was die Evidenz nicht hergibt

Klar gesagt, damit niemand auf Sand baut:

  • Es ist nicht gezeigt worden, dass Tai-Chi gut gemachtem konventionellem Gleichgewichtstraining bei Stürzen überlegen ist.
  • Die Evidenzsicherheit speziell für Tai-Chi ist insgesamt niedrig bis moderat; die Studien sind klein, Verblindung ist unmöglich, und Aufmerksamkeitskontrollen sind uneinheitlich.
  • Nichts hier stützt Behauptungen über Immunsystem, „Energie“, Organfunktion oder Krankheitsumkehr. Die App stellt sie nie auf, auch nicht in den Qigong-Texten, wo Videotitel das manchmal tun. Wir geben Titel zur Nennung wörtlich wieder — das ist keine Zustimmung.

5. Das Verordnungsmodell

src/lib/engine/prescribe.ts — Profil rein, Bauplan raus. Hier wird kein Inhalt ausgewählt, was die Gestalt der Einheit testbar macht, ohne die Videobibliothek anzufassen.

5.1 Der fünfphasige Bogen

Jede Einheit folgt bei jeder Dauer demselben Bogen. Vertrautheit ist der Punkt: das Ritual sollte sich nicht ändern, bloß weil der Inhalt es tut.

Phase中文ZweckBasisanteil
Ankommen無極Ankommen. Den Atem setzen, die senkrechte Ausrichtung finden.8 %
Aufwärmen熱身Sprunggelenke, Hüften, Wirbelsäule, Schultern im schmerzfreien Umfang mobilisieren.17 %
Qigong氣功Wiederholbare, an den Atem gebundene Bewegung. Baut Koordination auf.27 %
Form套路Durchgehende Choreografie. Der kognitive und haltungsbezogene Kern.30 %
Gleichgewicht平衡Bewusste Gewichtsverlagerung, kontrolliertes Schreiten, schmaler Stand.13 %
Abschluss收功Herunterfahren. Den Atem verlangsamen, in den Raum zurückkehren.5 %

Ankommen und Abschluss sind immer da und werden immer von der App gesprochen, nicht von einem Video. Drei Gründe: niemand veröffentlicht ein gutes zweiminütiges Ausklingen; ein festes Öffnen und Schließen ist der stärkste verfügbare Gewohnheitsanker; und es heißt, dass eine Einheit noch funktioniert, wenn ein Video zurückgezogen wird oder die Verbindung abbricht.

5.2 Neugewichtung durch den Schwerpunkt

Der Schwerpunkt multipliziert die Basisanteile, dann wird alles renormiert — ein Schwerpunkt kann eine Phase also betonen, sie aber nie durch Arithmetik löschen.

SchwerpunktBetonung
GleichgewichtGleichgewicht ×2,0; Aufwärmen ×1,1; Form/Qigong ×0,85
GelenkeAufwärmen ×1,55; Qigong ×1,2; Form ×0,8
RuheAnkommen ×2,2; Abschluss ×2,0; Qigong ×1,2; Form ×0,7
KraftGleichgewicht ×1,45; Form ×1,15; Ankommen ×0,7
AusdauerForm ×1,3; Qigong ×1,2; Ankommen ×0,5
KognitionForm ×1,55; Gleichgewicht ×1,1; Qigong ×0,8

5.3 Phasen-Untergrenzen und Weglassen

Jede Phase hat ein Minimum, unter dem sie sich nicht lohnt — man verbrächte den ganzen Block damit, die Startposition des Videos zu finden.

center 90s · warmup 120s · qigong 180s · form 240s · balance 120s · close 90s

Die Zuteilung iteriert: Anteile berechnen → unterversorgte Phasen finden → die am niedrigsten gewichtete weglassbare weglassen → neu rechnen. Das Iterieren ist wichtig, weil das Weglassen einer Phase eine andere über ihre Untergrenze heben kann. center und close sind geschützt und werden nie weggelassen; mindestens eines von qigong / form / balance muss überleben. Die Enddauern runden auf 15 s, der Rest wird auf den größten Block geschoben.

Deshalb hat eine 10-Minuten-Einheit vier Blöcke und eine 45-Minuten-Einheit sechs, ohne fest verdrahtete Vorlagen pro Dauer.

5.4 Sicherheitsobergrenzen

Mobilität ist die harte Schranke. Alter ist eine weiche. Eine sichere 80-Jährige sticht einen unsicheren 55-Jährigen, und die Oberfläche fragt zuerst nach der Mobilität, um zu signalisieren, dass es eine Sicherheitsfrage ist und keine demografische.

mobility ceiling:   seated → gentle   supported → gentle   steady → vigorous
age ceiling:        <50 → vigorous    50–64 → vigorous
                    65–74 → moderate  75+ → gentle
effective = min(requested, mobility ceiling, age ceiling)

Eine Ausnahme: sicher auf den Beinen und gefestigte Praxis hebt die Altersgrenze um eine Stufe. Nachgewiesenes Können sticht ein Geburtsjahr. Die Mobilitätsgrenze wird nie angehoben.

Wenn die verlangte Intensität gedeckelt wird, sagt die App das, und sie sagt, welche Einschränkung gebunden hat — „Der Halt im Stehen ist der begrenzende Faktor, nicht das Alter.“

Weitere strukturelle Folgen:

  • seateddie Gleichgewichtsphase entfällt ganz (es gibt kein ehrliches sitzendes Gegenstück zum Einbeinstand), und ihre Zeit geht ans Qigong, wo Rumpfkontrolle und Gewichtsverlagerung im Sitzen trainierbar sind.
  • seated oder supportedrequireChairFriendly, ein harter Filter auf den Inhalt, keine Vorliebe.
  • new → Aufwärmen ×1,25; Form ×0,85; und Lehrende, die Schritt für Schritt vorgehen, werden bevorzugt.
  • established → Form ×1,2; Aufwärmen ×0,85.

5.5 Kurzformat

Dieselbe Einheit, anders geschnitten. prescribe() nimmt ein Format — "full" oder "shorts" — und die Übende wechselt zwischen beiden auf dem Übungsbildschirm. Alles, worauf es ankommt, ist geteilt: dasselbe Profil, dieselben Minuten, derselbe fünfphasige Bogen in derselben Reihenfolge und dieselbe Sicherheitsobergrenze, berechnet vom selben Code. Eine kurze Einheit ist keine leichtere Einheit.

Was sich ändert:

  • Phasen werden in Karten geschnitten. Ziel 75 s, nie unter 45 s oder über 105 s, höchstens 26 Karten. Beide Enden sind gekappt: eine Untergrenze allein ließ eine 110-Sekunden-Phase als eine Karte durch, und das ist ein Block der vollen Einheit im Kartenkostüm.
  • Die Phasen-Untergrenzen sinken auf etwa je eine Karte (center 45 · warmup 45 · qigong 60 · form 60 · balance 45 · close 45), und die Zuteilungskörnung geht von 15 s auf 5 s. Eine kurze Einheit von 15 Minuten kann daher alle fünf Phasen enthalten, wo das volle Format zwei davon weggelassen hätte — der Bogen ist vollständiger, nicht weniger.
  • Der Inhalt muss in eine Karte passen. Der Selektor deckelt die Laufzeit von Kandidaten auf 5 Minuten, gelockert auf 10 und nicht weiter; ein 42-minütiger Sitzkurs, 75 Sekunden lang gezeigt, ist kein Kurs, sondern ein Fragment davon.
  • Etwa jede dritte Karte ist geführt statt gefilmt, zusätzlich zu Ankommen und Abschluss, die es immer sind. Dafür sind die 29 micro-Blöcke da: je ein benannter Grundbaustein, mit seinem Chinesisch und Pinyin auf der Karte.

Warum es das Format überhaupt gibt: die volle Einheit setzt voraus, dass du dich entschieden hast zu üben. Der Feed setzt voraus, dass du das nicht hast, und bittet um eine Minute. Die Literatur zur Dosis (§4.3) handelt von angesammelten Übungswochen, nicht von der Länge einer Einheit — eine fünfzehnminütige Einheit als zwölf Karten ist also keine abgespeckte Version von irgendetwas.

Was es bewusst nicht von den Feeds übernimmt, denen es ähnelt: es endet, nichts wird beschnitten, um den Rahmen zu füllen, und die Uhr — nicht das Video — entscheidet, wann eine Karte vorbei ist.


6. Der Anti-Wiederholungs-Motor

src/lib/engine/select.ts. Das ist der Teil, an dem das ganze Produkt hängt: es darf sich nicht jeden Tag wie dasselbe anfühlen.

Ein naiver Bester-Treffer-Bewerter scheitert sofort — der beste Treffer ist deterministisch, also ist Tag 2 identisch mit Tag 1. Neuheit ist hier deshalb kein Stichentscheid. Sie ist der größte einzelne Term der Bewertung.

6.1 Bewertung

score = 0.42 · novelty        # days since last served / 21, capped at 1
      + 0.30 · durationFit    # how well the runtime covers the block
      + 0.20 · fit            # focus, intensity, level, teaching style
      + 0.08 · jitter         # seeded random — what "Shuffle" perturbs

× 0.55 if the channel appeared in either of the last two sessions
× 0.85 if the style appeared in the last session

Die Karten des Kurzformats gewichten dieselben Terme neu, statt einen anderen Bewerter zu verwenden: novelty 0.32 · durationFit 0.46 · fit 0.17 · jitter 0.05. Die Dauer-Passung dominiert, weil eine Karte 75 Sekunden hat und die Strafe für einen Kurs, der mitten in der Karte ausgeht, hart ist.

Sprache wird nach der Wahl angewandt, nicht in der Bewertung. Fünfzehn Kurse sind wortlos; der Rest ist gesprochen, fast alle auf Englisch. Die Rangfolge ist für jede Sprache identisch, und erst danach — innerhalb des Mischfensters, aus dem ohnehin gewählt wurde — bekommt eine nicht englischsprachige Person den ersten verständlichen Kurs, falls der gezogene es nicht war. Die Bewertung stattdessen nach Sprache zu gewichten sortiert die ganze Liste je Sprache um, und der Rotationsindex des Tages adressiert dann in jeder Sortierung einen anderen Kurs — eine spanischsprachige Person könnte so den englischen Kurs erhalten, den ein wortloser in ihrer eigenen Liste gerade verdrängt hatte. Das Versprechen „nie weniger wortlose Kurse, als eine englischsprachige Person bekommt“ ist jetzt konstruktionsbedingt wahr.

6.2 Harte Regeln, und die Reihenfolge, in der sie nachgeben

Regel
HARTKein Video zweimal in einer Einheit
HARTKein Kanal zweimal in einer Einheit — der größte einzelne Treiber von „das fühlt sich gleich an“
HARTKein Video, das innerhalb von cooldownDays gesehen wurde
WEICHKanal-Abwertung über die letzten beiden Einheiten
WEICHStil-Abwertung über die letzte Einheit

cooldownDays = clamp(floor(eligiblePoolSize × 0.6), 1, 14). Das skaliert mit dem, was die Phase tatsächlich erreichen kann: eine Phase mit 15 in Frage kommenden Videos bekommt 9 Tage Abklingzeit, eine mit 3 bekommt 1 Tag. Eine feste Konstante würde entweder schmale Phasen aushungern oder breite kaum rotieren.

Wenn eine Phase leer bliebe, lockern sich die Bedingungen in einer definierten Reihenfolge — (1) Abgleich der Erfahrungsstufe, (2) die Abklingzeit, (3) Intensitätsband und Kanalvielfalt, (4) keine Wiederholungen innerhalb der Einheit — und die Sicherheitsobergrenze lockert sich auf keiner Stufe. Stufe 4 existiert nur für den Kurzformat-Feed, der bis zu 26 verschiedene Dinge verlangt, wo die volle Einheit sechs verlangt; selbst dort wird derselbe Kurs nie auf zwei aufeinanderfolgenden Karten ausgespielt, und das ist die einzige Wiederholung, die jemand wirklich bemerken würde. Die Kartenlängen-Deckelung lockert sich auf Stufe 3 statt auf Stufe 4: der Selektor wiederholt also lieber einen kurzen Kurs, als einen 40-Minuten-Kurs als 75-Sekunden-Karte auszuspielen. Welche Regeln gelockert wurden, wird in session.rationale zurückgemeldet und dem Nutzer gezeigt, denn die eigenen Bedingungen stillschweigend zu ignorieren ist der Weg, auf dem ein Empfehlungssystem verrottet.

6.3 Die Dauer-Passung ist absichtlich asymmetrisch

Ein Video, das länger ist als sein Block, ist unproblematisch — du übst die ersten N Minuten und der Timer schiebt dich weiter, genau wie ein Kurs. Ein Video, das kürzer ist als sein Block, lässt dich in Stille stehen, und das ist ein viel schlimmeres Scheitern. Also:

r = budget / runtime
r > 1  →  max(0, 1 − (r−1) × 1.25)   # too short: punished hard
r ≤ 1  →  r ^ 0.45                    # long is acceptable, not preferred

6.4 Determinismus

Die Einheit, die du bekommen hast, darf sich nicht stillschweigend neu mischen, wenn du mitten im Üben neu lädst. Jede Zufallsziehung stammt aus einem mulberry32-PRNG, gesät mit hash(date, profileKey, variant). variant ist das Einzige, was die Einheit eines Tages ändert, und genau ein Bedienelement erhöht es: „Andere Einheit“.

6.5 Warum die Bibliothek so gebaut ist, wie sie ist

Der Motor kann nur durch das rotieren, was existiert. Deshalb führt die Bibliothek bewusst dieselben kanonischen Sets, unterrichtet von verschiedenen Lehrenden — sieben Aufnahmen von Ba Duan Jin, sechs von Shibashi, acht der Yang-24-Form. Das ist der Trick: der Inhalt bleibt vertraut (du lernst eine Form, nicht fünfzig), während Stimme, Tempo und Kamerawinkel rotieren. Vertraute Praxis, frische Einheit.

Redaktionelles Ziel: ≥5 verschiedene Kanäle pro Zelle (Phase × Intensität).


7. Wochenplanung

src/lib/engine/week.ts. Eine Woche identischer Einheiten ist der schnellste Weg aufzuhören, und obendrein schlechtes Training.

  • Ein langer Tag — der eigene Schwerpunkt der Übenden, Dauer ×1,5, gelegt auf ihren letzten gewählten Wochentag (meist das Wochenende, meist der einzige Tag mit Zeit). Das ist die Einheit, in der eine Form tatsächlich gelernt wird. Erfordert ≥3 Übungstage.
  • Ein leichter Tag — eine Intensitätsstufe tiefer, Schwerpunkt auf stress umgestellt, in die Wochenmitte gelegt. Erholung, keine Lücke. Erfordert ≥4 Übungstage.
  • Alles andere wechselt zwischen dem gewählten Schwerpunkt und seinem Komplement, sodass keine einzelne Qualität an aufeinanderfolgenden Tagen trainiert wird.
balance ↔ strength    strength → joints    joints → stress
stress  → balance     cardio   → balance   cognition → joints
  • Ruhetage werden dargestellt, nicht versteckt. Ein leerer Donnerstag ist eine Entscheidung des Plans. Ihn auszuwählen bietet „Trotzdem üben“ an, was mit verringerter Intensität baut, statt sich zu weigern.

Wochen beginnen am Montag — so sprechen Menschen über „diese Woche“, und so liegt der natürliche lange Tag am Ende statt in der Mitte.


8. Inhaltsrichtlinie

8.1 Prüfung

Jeder Eintrag in src/lib/content/videos.ts wurde vor dem Ausliefern maschinell geprüft:

  • https://www.youtube.com/oembed?url=… → existiert, ist öffentlich, echter Titel, echter Kanal.
  • die Wiedergabeseite → lengthSeconds, und playableInEmbed: true.

Führ es erneut aus mit bun run verify:library.

Titel lügen ständig. „10 min“ sitzt regelmäßig auf einem 14-Minuten-Video. Das Feld seconds ist immer YouTubes eigene Zahl, denn der Timer plant dagegen.

Von 52 Kandidaten wurden 51 ausgeliefert; einer (ILFcKMnMkPQ) meldete playableInEmbed: false und wurde verworfen, statt als toter Rahmen ausgeliefert zu werden.

8.2 Redaktionelle Regeln für einen neuen Eintrag

  1. Echte Laufzeit in seconds. Nie die Zahl aus dem Titel.
  2. chairFriendly ist eine Sicherheitsaussage, kein Bequemlichkeits-Tag. Nur wahr, wenn das Video im Sitzen ist oder langsam und schmal genug im Stand, um es an einer Stuhllehne festhaltend zu machen.
  3. Tagge nie ein Video in mehr als drei Phasen. Übertaggen ist der Weg, auf dem sich eine Bibliothek aus 50 wie eine aus 6 anfühlt.
  4. Ziel: ≥5 verschiedene Kanäle pro Zelle (Phase × Intensität).

8.3 Nennung und faire Nutzung

Nichts wird gehostet, neu hochgeladen, heruntergeladen oder entkleidet. Videos werden über YouTubes eigenen Player eingebettet (Host youtube-nocookie), mit aktiv gelassenen nativen Bedienelementen, Kanalnamen auf jeder Fläche und einem „Auf YouTube ansehen“-Link auf jeder Bibliothekskarte. Die vollständige Bibliothek ist öffentlich unter /library.

Bittet eine Urheberin darum, entfernt zu werden, wird der Eintrag entfernt. Keine Verhandlung, kein „aber der Motor braucht ihn“.

8.4 Elegantes Scheitern

Videos werden gelöscht und Einbettungsrechte ändern sich. Wenn der Player einen Fehler wirft, degradiert die Bühne zu einer Karte mit dem Vorschaubild, einer Erklärung und einem externen Link — und der Timer läuft weiter. Ein leeres iframe ist nie akzeptabel.


9. Sicherheitsrahmen

Was die App tut:

  • Fragt vor allem anderen nach der Standsicherheit.
  • Erzwingt eine harte Intensitätsobergrenze, die kein Lockerungspfad aushebeln kann.
  • Zeigt Warnhinweise über dem Player, in jeder Einheit, nicht einmal beim Einrichten.
  • Allgemeine Warnhinweise: aufhören bei scharfem Schmerz, Brustschmerz, Schwindel oder Atemnot, die nicht nachlässt; das Knie nie über die Zehen hinaus drücken; das Knie läuft über dem Fuß.
  • Bedingte Warnhinweise: Stuhl in Reichweite bei supported; fester Stuhl, keine Rollen, Füße flach bei seated; „erhöhe den Stand, bevor du die Einheit kürzt“ ab mittlerer Intensität.

Was sie ausdrücklich nicht tut und ohne klinische Begleitung nicht zu tun beginnen darf:

  • Auf Gegenanzeigen prüfen (kürzliche Operationen, akute kardiale Ereignisse, vestibuläre Störungen, unkontrollierter Bluthochdruck).
  • Sich an eine benannte Diagnose anpassen.
  • Für eine einzelne Person ein therapeutisches Ergebnis behaupten.

10. Architektur

src/
  app/                 routes: / · /progress · /library · /method
  components/
    brand/             mark, wordmark, lockup
    glass/             NightSky, Glass — the material layer
    ui/                shadcn primitives (extended, not forked)
    layout/            header, bottom tab bar, skip link, nav definition
    practice/          stage, timer, transport, rail, screen,
                       full player + short-form feed, format switch
    progress/          rank, milestones, stats
    calendar/          week strip
    setup/             option groups, setup sheet
    library/           library browser
  hooks/               timer, session runtime, chime, wake lock, hydration gate
  lib/
    domain/types.ts    the vocabulary. Nothing decorative lives here
    content/           verified video registry + app-narrated guided blocks
    engine/            prescribe → select → week. Pure, locale-blind
    progress/          ranks + derived stats. Pure
    i18n/              detection, dictionaries (en·es·fr·de·zh), provider
    store/             the only persisted state
docs/METHODOLOGY.md    this file
docs/methodology/      its translations
scripts/verify-library.ts

Konventionen

  • lib/engine/* und lib/progress/* sind rein: kein React, kein DOM, kein implizites Date.now() und keine Sprache. Jede Funktion bekommt das Datum als Argument, was Einheiten reproduzierbar und testbar macht, und gibt Wörterbuchschlüssel statt Sätzen zurück.
  • Ein Feld existiert in domain/types.ts nur, wenn eine Motorregel es liest oder ein Label es darstellt.
  • kebab-case-Dateien, benannte Exporte, direkte Importe, keine Barrel-Dateien.
  • Client-Komponenten sind Blätter. PracticeScreen hält das gewählte Datum und das gewählte Format, alles andere wird abgeleitet.
  • Beide Player teilen eine Laufzeit. useSessionRuntime besitzt den Timer, den Klang, die Bildschirmsperre, das Einfrieren des Nachthimmels und das Protokoll, sodass die volle Einheit und der Feed nicht darüber uneins sein können, wie viel du geübt hast — oder darüber, was passiert, wenn du auf halbem Weg gehst, nämlich ein Teilprotokoll oberhalb von zwei Minuten und gar keines darunter.

10.1 Der Timer, im Einzelnen

Drei Entscheidungen, die es zu verteidigen lohnt:

  1. Die Uhr ist ein einziger Skalar. Eine Zahl — verstrichene Millisekunden in der ganzen Einheit — und der aktuelle Block wird daraus gegen kumulierte Grenzen abgeleitet. Springen, Zurück und Scrubben sind alle dieselbe Operation. Ein getrennter Countdown pro Block neben einer Gesamtzeit ist der Weg, auf dem diese beiden auseinanderdriften.
  2. Wanduhr, nicht Tick-Zählung. Verstrichen ist committed + (now − startedAt), bei jedem Tick neu berechnet. +250 ms je Intervall zu akkumulieren verliert über eine 45-Minuten-Einheit Minuten, weil Hintergrundtabs Timer hart drosseln.
  3. Deshalb übersteht er den Hintergrund. Ein Telefon, das mitten in der Einheit sperrt, setzt zur richtigen Zeit fort, nicht zu der, zu der es gesperrt hat.

Der Timer ist außerdem die Quelle der Wahrheit für das Video: die Einheit zu pausieren pausiert YouTube, und dass ein Video sein eigenes Ende erreicht, beendet den Block nicht.


11. Bekannte Lücken

Ehrliche Liste. Sie sind nicht hinter „künftige Arbeit“ versteckt.

  • Noch keine Tests. prescribe, select, week und progress/stats sind rein und wurden testbar geschrieben; geschrieben wurde nichts. Das ist mit Abstand die größte Lücke.

  • Nur localStorage. Keine Synchronisation, kein Export, kein Import. Ein JSON-Export/Import-Knopf ist die billigste sinnvolle Abhilfe und gäbe zudem eine Möglichkeit, ein Jahr Praxis auf ein neues Telefon mitzunehmen.

  • Die Sprache wird nach dem Mounten angewandt, das erste gezeichnete Bild ist also Englisch. Behoben. Die Sprache ist ein Routensegment: Englisch wird unpräfixiert unter /library ausgeliefert, die anderen vier unter /de/library und so weiter, und <html lang> stimmt ab dem ersten Byte. Es gibt keine Korrektur beim Mounten und kein Aufblitzen von Englisch.

  • Seiten-<title> und Meta-Beschreibungen sind nur auf Englisch. Behoben: sie kommen jetzt aus dem Wörterbuch, wie alles andere.

  • Nur drei Routenfamilien sind tatsächlich übersetzt. Geschlossen. Jede Familie wird nun in allen fünf Sprachen ausgeliefert — die Kursseiten, die dreizehn /for/*-Essays, die Installationsanleitung und dieses Dokument, samt Metadaten, JSON-LD, Markdown-Spiegeln und llms.txt. src/lib/i18n/coverage.ts bleibt die Quelle der Wahrheit dafür, was indexiert werden darf:

    RoutenfamilieAusgelieferte SprachenIndexierbar
    Start, /library, /library/teachers, Kursseiten, /for/*, /method, /installalle fünfja, mit reziprokem hreflang
    /progressnie, in keiner Sprache

    Für eine URL, die diese Sprache nicht ausliefert, wird keine hreflang-Annotation ausgegeben; eine erfundene ist schlimmer als keine. Diese Regel hat sich nicht geändert — geändert hat sich, dass die URLs die Sprache nun ausliefern.

  • Die Übersetzungen hatten keine muttersprachliche Durchsicht, und das ist nun die größte inhaltliche Lücke. Sie wurden maschinell erzeugt. Für das Drumherum und die Kursseiten ist das eine risikoarme Wette: kurze, sachliche Zeichenketten, stark durch die Daten um sie herum eingeschränkt. Für die /for/*-Essays und für dieses Dokument ist sie es nicht, und §9 ist der Grund: das ist der Inhalt, bei dem falsch zu liegen jemandem schaden könnte, und eine maschinelle Übersetzung von Bewegungsanleitungen ist genau die Art von falsch, die sich flüssig liest. Das Gegenmittel steht in der Tabelle oben: eine Familie in coverage.ts auf [DEFAULT_LOCALE] zurückzusetzen ist eine Zeile, und das setzt die Varianten auf noindex, nimmt sie aus der Sitemap und stellt die Kennzeichnung „(auf Englisch)“ auf jedem Link dorthin wieder her.

  • Die Menübeschriftungen von /install sind der Teil, der am ehesten falsch ist, und falsch auf eine Weise, die eine lesende Person nicht umgehen kann: sie müssen die Formulierung des jeweiligen Herstellers in dieser Sprache sein, keine Übersetzung des Englischen. Prüf sie an einem Gerät, bevor du diese Seite für fertig hältst.

  • Chinesisch ist mit hreflang allein nicht gelöst. Baidu ignoriert es und gewichtet Domain- und Hosting-Signale anders, /zh zu platzieren ist also ein eigenes Stück Arbeit und nicht dieselbe Arbeit noch einmal.

  • Die Bibliothek im Sitzen ist schmaler als die im Stehen und neigt zu zwei Kanälen. Die Regel zur Kanalvielfalt lockert sich für sitzende Übende daher früher.

  • Kein Offline-Modus. Die geführten Blöcke funktionieren offline von Haus aus; die Videoblöcke nicht.

  • Zwei Behauptungen bleiben ⚠️ ungeprüft (§4.4 MET, §4.5 Atemfrequenz) und dürfen bis zur Prüfung nicht in öffentlichen Texten verwendet werden.

12. Änderungsprotokoll

DatumÄnderung
2026-08-01Erster Build. Marke, dreistufige Tokens, Liquid-Glass-System, geprüfte Bibliothek mit 51 Videos, Verordnungsmotor, Anti-Wiederholungs-Selektor, Wochenplaner.
2026-08-01Visuelle Richtung geändert zu tiefer Nacht und Mondlicht, dunkel zuerst. Cormorant + Inter ersetzen Newsreader + Geist. Vollständiger Mobil-Durchgang: Tab-Leiste unten, sichere Bereiche, Überlaufschutz, ringbezogene Timergröße.
2026-08-01Automatische Erkennung der Browsersprache mit en · es · fr · de · zh. Motor umgebaut, sodass er übersetzbare Schlüssel statt Prosa ausgibt.
2026-08-01Fortschritt ergänzt: neun Ränge, neun Meilensteine, Serien — alles aus dem Protokoll abgeleitet, alles in Tagen statt in Volumen gemessen.
2026-08-02Kurzformat. prescribe() nimmt ein Format; "shorts" schneidet jede Phase in Karten von 45–105 s, und der Feed spielt und scrollt sich selbst, im Vollbild, und endet, wenn die Einheit endet. Bibliothek auf 287 Kurse gewachsen (93 unter drei Minuten) und 41 geführte Blöcke, 29 davon einzelne benannte Grundbausteine mit Chinesisch und Pinyin.
2026-08-02Jede Routenfamilie übersetzt. Kursseiten, die sieben /for/*-Essays, /install und dieses Dokument existieren nun in allen fünf Sprachen, samt Metadaten, JSON-LD, Markdown-Spiegeln und einem llms.txt je Sprache. Die Methodik-Anker bleiben konstruktionsbedingt englisch, sodass eine Zitatstelle in jeder Sprache auflöst. Die Installations-Menübeschriftungen tragen die Formulierung des jeweiligen Herstellers. Muttersprachliche Durchsicht steht aus — siehe §11.
2026-08-02Beide Player sagen jetzt, was als Nächstes kommt, und bieten einen Weg daran vorbei — der Eröffnungsblock hatte kein Video, und mehrere Leute lasen den stehenden Bildschirm als defekt. Die Sprachpräferenz wurde von einem Score-Multiplikator zu einer Präferenz nach der Wahl, womit ein Fall behoben ist, in dem eine nicht englischsprachige Person weniger wortlose Kurse bekommen konnte als eine englischsprachige. Der Rückfall auf geführte Blöcke umgeht die Intensitätsobergrenze nicht mehr.
2026-08-15Sechs weitere /for/*-Seiten und ein zusätzlicher Abschnitt auf jeder der ursprünglichen sieben. Die neuen benennen eine Sache, statt eine Situation zu beschreiben — die Yang-24er-Form, Shibashi, Ba Duan Jin und die klassischen Sets, Stehmeditation, zwanzig Minuten, fünf Minuten —, denn wer weiß, was Ba Duan Jin ist, sucht nicht nach „Qigong für steife Gelenke“. Drei der sechs filtern über ein Titelmuster statt über ein Feld, dokumentiert in topics.ts: dass ein Kurs ein kanonisches Set lehrt, führt die Registry nicht, und jede Lehrperson schreibt es in den Titel. Alle dreizehn existieren in allen fünf Sprachen.

Quellen