feat(auth): welcome/landing page + email-password login UI (5b)
Replace the old Google-only login card with a public landing page (Welcome.tsx): hero + auth card (email+password Sign in / Create account / Forgot password, Continue with Google, explicit Try-the-demo) over a feature pitch (6 pain->solution cards) and demo-account screenshot slots (graceful placeholder until the images are dropped into frontend/public/welcome/). Auth forms wire to the 5a endpoints; errors show inline via a new req() quiet flag (no global modal for a wrong password). Handles ?verify, ?reset (set-new-password form), ?access banners. EN/HU/DE. Verified end-to-end on a fresh load: render, register->approve->password-login.
This commit is contained in:
parent
40a3f5c005
commit
3fd5950f4c
7 changed files with 602 additions and 124 deletions
73
frontend/src/i18n/locales/de/welcome.json
Normal file
73
frontend/src/i18n/locales/de/welcome.json
Normal file
|
|
@ -0,0 +1,73 @@
|
|||
{
|
||||
"hero": {
|
||||
"title": "Deine YouTube-Abos, so wie ein Feed funktionieren sollte.",
|
||||
"subtitle": "Siftlode sammelt jeden Upload der Kanäle, denen du folgst, in einem aufgeräumten, filterbaren Feed — kein Algorithmus entscheidet, was du siehst, und kein Shorts- oder Live-Lärm, außer du willst es.",
|
||||
"trust": "Selbst gehostet und privat. Melde dich per E-Mail an oder fahre mit Google fort."
|
||||
},
|
||||
"preview": {
|
||||
"feed": "Der Feed — filtern nach Kanal, Sprache, Thema, Länge und Datum.",
|
||||
"channels": "Kanal-Verwaltung",
|
||||
"playlists": "Wiedergabelisten"
|
||||
},
|
||||
"features": {
|
||||
"heading": "Warum Siftlode",
|
||||
"readable": {
|
||||
"title": "Deine Abos, endlich lesbar",
|
||||
"body": "Sortiere und filtere nach Kanal, Sprache, Thema, Länge oder Datum — und blende Kanäle aus, ohne sie zu deabonnieren. Du entscheidest, was erscheint, nicht ein Algorithmus."
|
||||
},
|
||||
"neverMiss": {
|
||||
"title": "Verpasse keinen Upload",
|
||||
"body": "Jedes Video jedes Kanals, dem du folgst, landet in einem Feed. Shorts und Livestreams sind standardmäßig ausgeblendet — so sind es nur die Videos, für die du gekommen bist."
|
||||
},
|
||||
"playlists": {
|
||||
"title": "Playlists, die in beide Richtungen synchronisieren",
|
||||
"body": "Erstelle Playlists lokal und halte sie mit YouTube synchron — Änderungen fließen in beide Richtungen."
|
||||
},
|
||||
"player": {
|
||||
"title": "Schau in der App, mach da weiter, wo du aufgehört hast",
|
||||
"body": "Ein In-App-Player setzt jedes Video dort fort, wo du gestoppt hast — kein Empfehlungs-Strudel, der dich ablenkt."
|
||||
},
|
||||
"channels": {
|
||||
"title": "Eine echte Kanal-Verwaltung",
|
||||
"body": "Priorisiere die Kanäle, die dir wichtig sind, tagge sie nach deiner Art und filtere den Feed nach deinen eigenen Tags."
|
||||
},
|
||||
"private": {
|
||||
"title": "Selbst gehostet, privat, mehrsprachig",
|
||||
"body": "Betreibe es selbst — deine Daten bleiben deine. Mehrbenutzerfähig, mit der Oberfläche auf Englisch, Ungarisch und Deutsch."
|
||||
}
|
||||
},
|
||||
"auth": {
|
||||
"signinTitle": "Anmelden",
|
||||
"createTitle": "Konto erstellen",
|
||||
"forgotTitle": "Passwort zurücksetzen",
|
||||
"resetTitle": "Neues Passwort festlegen",
|
||||
"email": "E-Mail",
|
||||
"password": "Passwort",
|
||||
"newPassword": "Neues Passwort (min. {{min}} Zeichen)",
|
||||
"invalidEmail": "Gib eine gültige E-Mail-Adresse ein.",
|
||||
"weakPassword": "Das Passwort muss mindestens {{min}} Zeichen lang sein.",
|
||||
"genericError": "Etwas ist schiefgelaufen. Bitte versuche es erneut.",
|
||||
"working": "Einen Moment…",
|
||||
"signinButton": "Anmelden",
|
||||
"createButton": "Konto erstellen",
|
||||
"forgotButton": "Reset-Link senden",
|
||||
"resetButton": "Passwort festlegen",
|
||||
"createLink": "Konto erstellen",
|
||||
"forgotLink": "Passwort vergessen?",
|
||||
"backToSignin": "Zurück zur Anmeldung",
|
||||
"or": "oder",
|
||||
"google": "Mit Google fortfahren",
|
||||
"tryDemo": "Demo ausprobieren",
|
||||
"demoHint": "Gib eine E-Mail ein, die für das Demo-Konto freigeschaltet ist.",
|
||||
"demoEmail": "Demo-E-Mail",
|
||||
"demoEnter": "Eintreten",
|
||||
"demoDenied": "Diese E-Mail ist nicht für die Demo freigeschaltet. Bitte den Admin, sie hinzuzufügen.",
|
||||
"registerDone": "Fast geschafft — prüfe deine E-Mails auf den Bestätigungslink. Nach der Bestätigung gibt ein Admin dein Konto frei, bevor du dich anmelden kannst.",
|
||||
"forgotDone": "Falls zu dieser E-Mail ein Konto gehört, haben wir einen Reset-Link gesendet. Prüfe dein Postfach.",
|
||||
"resetDone": "Dein Passwort wurde festgelegt — du kannst dich jetzt anmelden.",
|
||||
"verifyOk": "E-Mail bestätigt. Sobald ein Admin dein Konto freigibt, kannst du dich anmelden.",
|
||||
"verifyInvalid": "Dieser Bestätigungslink ist ungültig oder abgelaufen.",
|
||||
"accessRequested": "Danke — wir haben deine Anfrage erfasst. Ein Admin wird sie prüfen.",
|
||||
"accessDenied": "Dieses Konto ist für diese Instanz noch nicht freigegeben — registriere dich unten oder bitte den Admin um Zugang."
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue