feat: Phase 0 – Gerüst (FastAPI+SQLite, Multi-User-Login, React-App-Shell, Deploy)
Grundgerüst für Certain Finance: - Backend: FastAPI + SQLAlchemy + SQLite, Alembic-Migrationen (Batch-Mode), argon2-Passwort-Hashing, server-seitige Sitzungen im Cookie, Erst-Admin, Benutzerverwaltung mit Temporär-Passwort, Einstellungen je Benutzer. - Ein Prozess, ein Port: uvicorn liefert API (/api) und gebautes SPA aus, inkl. SPA-Deeplink-Fallback. - Frontend: React 18 + Vite + JSX, Design-Tokens (Light/Dark), i18n DE/EN, Inline-SVG-Icons (keine Emojis), Login, Passwort-ändern, Dashboard-Platzhalter, Benutzer- und Einstellungsseiten. - Deploy: nativer LXC-Installer + Update-Skript (systemd), env-Vorlage, Doku. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,85 @@
|
||||
{
|
||||
"common": {
|
||||
"save": "Save",
|
||||
"cancel": "Cancel",
|
||||
"delete": "Delete",
|
||||
"create": "Create",
|
||||
"edit": "Edit",
|
||||
"loading": "Loading…",
|
||||
"logout": "Log out",
|
||||
"admin": "Administrator",
|
||||
"user": "User",
|
||||
"close": "Close",
|
||||
"retry": "Try again",
|
||||
"actions": "Actions"
|
||||
},
|
||||
"nav": {
|
||||
"overview": "Overview",
|
||||
"accounts": "Accounts",
|
||||
"categories": "Categories",
|
||||
"transactions": "Transactions",
|
||||
"budget": "Budget",
|
||||
"import": "Import",
|
||||
"system": "System",
|
||||
"users": "Users",
|
||||
"settings": "Settings"
|
||||
},
|
||||
"login": {
|
||||
"subtitle": "Please sign in",
|
||||
"username": "Username",
|
||||
"password": "Password",
|
||||
"submit": "Sign in",
|
||||
"error": "Wrong username or password",
|
||||
"expired": "Your session has expired. Please sign in again."
|
||||
},
|
||||
"changepw": {
|
||||
"title": "Change password",
|
||||
"forcedHint": "Please set your own password before continuing.",
|
||||
"current": "Current password",
|
||||
"new": "New password",
|
||||
"repeat": "Repeat new password",
|
||||
"submit": "Save password",
|
||||
"mismatch": "The new passwords do not match.",
|
||||
"saved": "Password changed."
|
||||
},
|
||||
"users": {
|
||||
"title": "Users",
|
||||
"new": "New user",
|
||||
"username": "Username",
|
||||
"displayName": "Display name",
|
||||
"password": "Temporary password",
|
||||
"passwordHint": "The user will be asked to change it on first login.",
|
||||
"role": "Role",
|
||||
"status": "Status",
|
||||
"active": "Active",
|
||||
"inactive": "Disabled",
|
||||
"resetPassword": "Reset password",
|
||||
"deleteConfirm": "Really delete this user?",
|
||||
"created": "User created.",
|
||||
"you": "(you)"
|
||||
},
|
||||
"settings": {
|
||||
"title": "Settings",
|
||||
"baseCurrency": "Base currency",
|
||||
"baseCurrencyHint": "Currency for budget totals and dashboard aggregates.",
|
||||
"locale": "Language",
|
||||
"theme": "Appearance",
|
||||
"themeSystem": "Automatic (system)",
|
||||
"themeLight": "Light",
|
||||
"themeDark": "Dark",
|
||||
"budgetStartDay": "Budget month starts on",
|
||||
"budgetStartDayHint": "Day your budget month starts (e.g. the 25th).",
|
||||
"dateFormat": "Date format",
|
||||
"saved": "Saved.",
|
||||
"languageDe": "German",
|
||||
"languageEn": "English"
|
||||
},
|
||||
"dashboard": {
|
||||
"title": "Overview",
|
||||
"empty": "No cards yet. The dashboard will be built out in a later phase."
|
||||
},
|
||||
"server": {
|
||||
"unreachable": "Server unreachable.",
|
||||
"sessionKept": "Your session is still valid – once the server responds again, it will continue."
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user