{t("welcome.hero.title")}
{t("welcome.hero.subtitle")}
{t("welcome.hero.trust")}
import { useState } from "react"; import { useTranslation } from "react-i18next"; import { Filter, Inbox, ListVideo, Lock, PlayCircle, Tags, type LucideIcon, } from "lucide-react"; import { api } from "../lib/api"; import { HttpError } from "../lib/api"; import { setLanguage, type LangCode } from "../i18n"; import LanguageSwitcher from "./LanguageSwitcher"; const EMAIL_RE = /^[^@\s]+@[^@\s]+\.[^@\s]+$/; const PASSWORD_MIN = 10; type Mode = "signin" | "register" | "forgot" | "reset"; // Public landing + authentication. One scrollable page: a hero with the auth card (email+ // password, Google, explicit demo) over a short marketing pitch with feature cards. Shown // whenever the user isn't signed in (see App.tsx). The auth forms talk to /auth/* (see the // backend); errors are surfaced inline (the api calls use the quiet flag). export default function Welcome() { const { t, i18n } = useTranslation(); return (
{t("welcome.hero.subtitle")}
{t("welcome.hero.trust")}
{t(`welcome.features.${k}.body`)}
{done}