/profil — Das eigene Profil
Hinweis: Rahmen: 00-rahmen.md. Code:
packages/frontend/src/components/screens/Profilschirm.tsx·components/forms/Bildzuschnitt.tsx·components/forms/Rangwahl.tsx·components/formen/Profilbild.tsx·handlers/requests/profilHandler.ts·handlers/profilbilder.ts·packages/backend/src/routes/api/profil.ts·database/access/profil.ts· Knopf „Aufstufen“packages/plugins/src/rights/client/Aufstufknopf.tsxmitrights/client/kasse.tsundrights/server/kasse.ts· TestsProfilschirm.test.tsx,Bildzuschnitt.test.ts,Profilbild.test.tsx,profilbilder.test.ts,Aufstufknopf.test.tsx,kasse.test.ts· Nachweisenpm run verify:profil,npm run verify:rechte(Teil 11). Entscheidungen N367, N369 (E25),2026-10-08-stufen-im-rechtebaum(D19).
Wofür
Wer man in Denotato ist, an einer Stelle. Christian am 27.09.2026 (N367): oben rechts statt der Einzelknöpfe das eigene Profilbild als Knopf, „mit dem man zum eigenen Profil, Einstellungen, Sprache, Theme, Logout, etc. wechseln kann". Das Profil ist der erste Eintrag dieses Menüs. Hier setzt man das Bild, das an jedem eigenen Namen steht, sieht Namen, Stufe und seit wann es das Konto gibt, und wählt, welcher Rang am Namen und am Bild steht.
Weg und Rahmen
| Route | /profil — seit dem 28.09.2026 ein Werkzeug des Raums Konto in Leiste und Schublade (NV08, Schnitt 3, 00-rahmen.md §1); daneben der Kontoknopf oben rechts und der Befehl „Profil" der Schnellsuche. Seit dem 09.10.2026 hat der Raum Konto für jedes Konto keinen Abschnitt in der Seitenleiste, und die Schublade ist entfernt; es führen Kontoknopf und Schnellsuche hierher (NV-261007-seitenleiste, Entscheidung ../kontext/entscheidungen/2026-10-09-neue-navigation-immer.md) |
| Merkmal | keines — das Profil gehört zum Kern und ist nicht abschaltbar |
| Zimmer | keines: Rückfall außerhalb jedes Bereichs (Ortwort „Plattform", Anwendungsfarbe) |
| Endpunkte | PROFIL (lesen), PROFIL_BILD (setzen), PROFIL_BILD_ENTFERNEN, PROFIL_BILD_VON (das kleine Bild eines Kontos, roh, mit ETag), PROFIL_RAENGE (die gezeigten Ränge von bis zu hundert Konten in einer Anfrage, E22 — jedes Profilbild an einem fremden Namen holt seinen Rang darüber, gesammelt in handlers/raenge.ts); die große Fassung über FILES_UPLOAD; RECHTE_AUFSTUFEN (die Anfrage zum Aufstufen, D19) |
| MCP | profil (nur lesen), profil_raenge; das Aufstufen bleibt ohne Werkzeug, weil es zur Kasse führt (C25, N231) |
Was man sieht
Der Kopf. Das eigene Profilbild in 128 Pixeln — ohne Bild die Initialen im Kreis. Trägt das Konto einen Rang, liegt dessen Material als Ring um den Kreis und eine Plakette mit dem Namen des Rangs über dem unteren Rand, wie ein Namensschild (N369). Im Ring liegt der Kreis auf deckendem Papier, damit die Initialen nie auf dem Material stehen (§8.4, 13.10.2026). Daneben der Anzeigename als Überschrift, @benutzername, die Stufe als kleiner Knopf in ihrer Farbe (Frei, Premium, Admin, Dev) und „Mitglied seit 20.09.2026". Steht das Konto wirksam auf Frei — Lite zählt dazu —, folgt der Knopf „Aufstufen“; beim Kontowechsel fehlt er, denn wer impersoniert, kauft nicht für ein fremdes Konto (D19).
Der Zuschnitt, sobald ein Bild gewählt ist: ein quadratisches Fenster, in dem das Bild liegt und das es immer ganz deckt; ein Kreis zeigt, was davon im runden Bild zu sehen ist, die Ecken sind abgedunkelt. Darunter der Regler „Größe" (bis zum Vierfachen), daneben zwei Vorschauen in 96 und 36 Pixeln.
Ränge — nur, wenn das Konto einen trägt. Mit einem steht sein Abzeichen da; ab zwei die Wahl: jedes Abzeichen ein Knopf, gedrückt der gezeigte.
Erfolge — nur, wenn der Bereich Fortschritt an ist (NB-261019-soziales-erfolge). Oben die Serien (Lernserie und beste Gewohnheit, je aktuell und längste, in Tagen), darunter zwei Gruppen: Beständigkeit und Mengen. Jeder Erfolg ist eine runde Münze mit Riffelrand im Metall seiner Stufe (Bronze, Silber, Gold; seit 19.10.2026, Style-Guide §8.5), darauf sein Emblem und die erreichte Schwelle als Zahl; noch ohne Stufe ein gestrichelter Kreis. Daneben das Datum, an dem die Stufe erreicht wurde, und was die nächste verlangt. Eine erreichte Stufe bleibt, auch wenn die Zahl fällt. Erst dieses Lesen hält eine neue Stufe fest.
Konto — zwei Verweise in die Einstellungen: „Anzeigename ändern" (/settings?a=konto&g=anzeigename) und „Adresse, Passwort und zweiter Faktor" (/settings?a=konto).
Die Karten — Kopf, Zuschnitt, Ränge und Konto — sind Papier mit Haarlinie (seit 10.10.2026, ES-261010-glastoene-liegenden). Bis dahin trug das Panel aus controls/ den Glaston, und die Karten lagen halbdurchsichtig auf dem Himmelsstreifen.
Was man tun kann
| Element | Was passiert |
|---|---|
| Bild wählen / Bild ändern | öffnet die Dateiauswahl des Geräts; angenommen werden WebP, JPEG, PNG und GIF, alles andere meldet einen Satz und öffnet keinen Zuschnitt |
| Fenster ziehen | verschiebt das Bild; mit dem Fokus im Fenster tun es die Pfeiltasten (8 Pixel je Druck), Plus und Minus zoomen |
| Größe | zoomt um die Mitte des Fensters, der Punkt dort bleibt stehen |
| Übernehmen | schneidet 256 × 256 Pixel heraus (WebP, sonst JPEG, unter 128 KiB), lädt das Original in die Dateiablage und setzt beide; das Original wird öffentlich — lesbar für jedes angemeldete Konto, schreibbar für niemanden sonst. Nimmt die Ablage das Original nicht (etwa am Speicherplatz), steht das Bild trotzdem, und die Seite sagt, warum das Original fehlt |
| Abbrechen | verwirft die Wahl |
| Bild entfernen | fragt über Wegtun; danach verschwindet das Bild von jedem Namen, das Original wird wieder privat und bleibt in den Dateien |
| Rang-Abzeichen (ab zwei) | setzt rang.gezeigt; wer den ersten wählt, nimmt die Wahl zurück. Beim Impersonieren nicht zu drücken |
| Aufstufen | fragt den Zahlungsanbieter. Heute ist es die geschlossene Kasse, die mit „bald“ antwortet; der Knopf heißt danach „Aufstufen kommt bald“ und ist gesperrt, die Stufe bleibt. Scheitert die Anfrage, steht der Grund in der Meldung der Seite, und der Knopf bleibt bedienbar |
| Verweise unter „Konto" | springen in die Einstellungen, Gruppe aufgeklappt |
Ein neues oder entferntes Bild steht sofort an jedem Namen dieser Sitzung: Die Seite ruft PROFILBILD_RUF, und der Bildspeicher fragt beim nächsten Zeichnen nach. Andere Sitzungen sehen es nach höchstens fünf Minuten.
Was man hier nicht kann: den Namen ändern. Der Anzeigename hat eine Sperrfrist von einer Woche und ihre Begründung steht in Einstellungen › Konto; ein zweites Feld hier wäre eine zweite Stelle, die sie erklären müsste.
Woher die Daten kommen
Fünf Wege durch die AES-Strecke (registerEncryptedRoute, ohneRecht: 'jedesKonto') in packages/backend/src/routes/api/profil.ts, im Frontend in profilHandler.ts:
| Weg | Was | Tabelle |
|---|---|---|
PROFIL | Namen, „Mitglied seit", Bildstand, Ränge, gezeigter Rang (profilVon, raengeVon) | auth.users, auth.profilbilder, Ränge aus auth.effective_user_roles und auth.roles |
PROFIL_BILD | setzt das kleine Bild und macht das Original öffentlich (setzeProfilbild) | auth.profilbilder, study.files (visibility) |
PROFIL_BILD_ENTFERNEN | entfernt das Bild, das Original wird wieder privat | dieselben |
PROFIL_RAENGE | die gezeigten Ränge von bis zu hundert Konten (gezeigteRaengeVon) | auth.effective_user_roles, auth.roles |
RECHTE_AUFSTUFEN | die Anfrage zum Aufstufen; zahlungsanbieter().aufstufen antwortet heute bald | keine |
PROFIL_BILD_VON ist der eine Weg neben der Strecke: GET mit der Sitzung im Kopf Authorization, antwortet mit den Bytes des kleinen Bildes und einem ETag (304, wenn es gleich blieb), gelesen aus auth.profilbilder für das eigene Konto oder ein anderes, dessen Bild public ist. Ohne Bild — oder ohne eines, das man sehen darf — kommt ein leeres 204, kein 404: Jedes neue Konto hat keins, und ein Fehler in der Konsole wäre dafür falsch (D-261008-startseite-funktioniert). Auch ein leerer Körper wird gelesen (handlers/profilbilder.ts), sonst meldet Chromium die Anfrage als net::ERR_ABORTED. ich steht für das eigene Konto. Ein Bild passt nicht in einen JSON-Umschlag. Das Original geht über FILES_UPLOAD, ebenfalls vorbei an der AES-Strecke (Multipart), in die Dateiablage; der Schirm nennt dem Profil danach nur seine Kennung.
Die Rangwahl ist kein Profilweg: Sie setzt rang.gezeigt über PREFERENCE_SET (Rangwahl.tsx), und gezeigteRaengeVon liest die Wahl aus den Voreinstellungen zurück. Der Anzeigename und die Adresse werden nicht hier geändert, sondern in den Einstellungen.
Verschlüsselt sind die Antworten der fünf Wege; das kleine Bild (256 × 256, unter 128 KiB) liegt unverschlüsselt in der Tabelle, weil es an jedem Namen jedes Kontos stehen soll.
Was fehlt
- Kein fremdes Profil unter /profil. Es zeigt nur das eigene; das Profil eines Freundes mit seinen Erfolgen steht seit dem 19.10.2026 als Unteransicht unter
/friends, ein Klick auf einen fremden Namen anderswo führt noch nirgendwohin. - Keine Großansicht. Das Original liegt öffentlich in der Ablage, aber keine Stelle zeigt es; die Seite zeigt nur das Quadrat.
- Das Original zählt zum eigenen Speicher, auch nachdem es ersetzt wurde. Ein ersetztes Original wird privat und nicht gelöscht (N369); wer aufräumen will, tut es in den Dateien.
- Kein Drehen und kein Spiegeln im Zuschnitt; ein Foto, dessen Ausrichtung nur in den EXIF-Daten steht, übernimmt der Browser meist richtig, aber nicht jeder.
- Kein Zoom mit dem Mausrad und keine Zwei-Finger-Geste im Fenster; gezoomt wird am Regler oder mit Plus und Minus.
- Ein GIF verliert seine Bewegung im Quadrat; nur das Original bleibt bewegt.
- Keine Angaben über sich — kein Satz, keine Fächer, keine Verweise. Das Profil trägt, was Denotato ohnehin weiß.
- Andere Sitzungen warten bis zu fünf Minuten auf ein neues Bild; es gibt keinen Ruf über den Server.
- Beim Impersonieren zeigt die Seite das Zielkonto, aber Bild und Rangwahl sind gesperrt; einen Satz, der das sagt, gibt es nur an der Rangwahl.
- Ein fremder Rang ist bis zu fünf Minuten alt. Wählt jemand einen anderen gezeigten Rang, sehen ihn die anderen erst, wenn der Speicher nach
FRISCH_MSneu fragt; sofort nur das eigene Konto und die Verwaltung, die einen Rang vergibt. - Aufstufen führt noch zu keiner Kasse. Es gibt nur den Anbieter „Kasse geschlossen“; ein echter kommt als Adapter, wenn Christian das Zahlungskonto angelegt und USt-IdNr. und Gewerbe geklärt hat (C25, N354). Bis dahin setzt die Mitgliedschaft nur die Verwaltung unter Admin › Konten.