chore: initial project setup with backend, frontend, and infrastructure
Some checks failed
CI / backend (push) Failing after 31s
CI / frontend (push) Successful in 40s
CI / docker (push) Has been skipped

Add complete NexaPantry application structure including:
- Docker Compose configuration with PostgreSQL, Redis, FastAPI backend, worker, frontend and Caddy
- Environment configuration template with database, auth, and service settings
- GitHub Actions CI workflow for backend/frontend linting, testing, auditing and Docker builds
- AGPL-3.0 license and comprehensive README with setup, development, and security documentation
- Backend
This commit is contained in:
2026-06-04 10:26:38 +02:00
commit 3792ca55e7
74 changed files with 13417 additions and 0 deletions

View File

@@ -0,0 +1,139 @@
import type { Language } from '../types';
export const dictionaries: Record<Language, Record<string, string>> = {
de: {
setupTitle: 'NexaPantry einrichten',
setupSubtitle: 'Erstelle den ersten Instance Admin und sichere die Instanz ab.',
name: 'Name',
email: 'E-Mail',
password: 'Passwort',
language: 'Sprache',
theme: 'Theme',
publicUrl: 'Öffentliche Server-URL',
instanceName: 'Instanzname',
timezone: 'Zeitzone',
completeSetup: 'Setup abschließen',
login: 'Anmelden',
logout: 'Abmelden',
home: 'Home',
inventory: 'Bestand',
add: 'Hinzufügen',
shopping: 'Einkauf',
profile: 'Profil',
admin: 'Admin',
dashboard: 'Dashboard',
users: 'Benutzer',
homes: 'Homes',
mail: 'Mail',
security: 'Sicherheit',
notifications: 'Benachrichtigungen',
system: 'System',
logs: 'Logs',
backupRestore: 'Backup/Restore',
categories: 'Kategorien',
locations: 'Orte',
manualAdd: 'Manuell hinzufügen',
scanBarcode: 'Barcode scannen',
productName: 'Produktname',
barcode: 'Barcode',
brand: 'Marke',
category: 'Kategorie',
location: 'Lagerort',
quantity: 'Menge',
unit: 'Einheit',
expiresAt: 'Ablaufdatum',
minQuantity: 'Mindestbestand',
notes: 'Notizen',
save: 'Speichern',
cancel: 'Abbrechen',
ok: 'haltbar',
soon: 'läuft bald ab',
expired: 'abgelaufen',
addToShopping: 'Zur Einkaufsliste',
recipes: 'Rezepte',
onboardingTitle: 'Willkommen in NexaPantry',
onboardingDone: 'Tutorial abschließen',
skip: 'Überspringen',
createHome: 'Home erstellen',
joinHome: 'Home per Code beitreten',
joinCode: 'Join-Code',
smtpHost: 'SMTP Host',
smtpPort: 'SMTP Port',
smtpUser: 'SMTP User',
smtpPassword: 'SMTP Passwort',
senderAddress: 'Absender-Adresse',
senderName: 'Absender-Name',
testMail: 'Testmail senden',
light: 'Light',
dark: 'Dark',
systemTheme: 'System'
},
en: {
setupTitle: 'Set up NexaPantry',
setupSubtitle: 'Create the first instance admin and secure the server.',
name: 'Name',
email: 'E-mail',
password: 'Password',
language: 'Language',
theme: 'Theme',
publicUrl: 'Public server URL',
instanceName: 'Instance name',
timezone: 'Timezone',
completeSetup: 'Complete setup',
login: 'Sign in',
logout: 'Sign out',
home: 'Home',
inventory: 'Inventory',
add: 'Add',
shopping: 'Shopping',
profile: 'Profile',
admin: 'Admin',
dashboard: 'Dashboard',
users: 'Users',
homes: 'Homes',
mail: 'Mail',
security: 'Security',
notifications: 'Notifications',
system: 'System',
logs: 'Logs',
backupRestore: 'Backup/Restore',
categories: 'Categories',
locations: 'Locations',
manualAdd: 'Add manually',
scanBarcode: 'Scan barcode',
productName: 'Product name',
barcode: 'Barcode',
brand: 'Brand',
category: 'Category',
location: 'Location',
quantity: 'Quantity',
unit: 'Unit',
expiresAt: 'Expiry date',
minQuantity: 'Minimum stock',
notes: 'Notes',
save: 'Save',
cancel: 'Cancel',
ok: 'good',
soon: 'expires soon',
expired: 'expired',
addToShopping: 'Add to shopping',
recipes: 'Recipes',
onboardingTitle: 'Welcome to NexaPantry',
onboardingDone: 'Finish tutorial',
skip: 'Skip',
createHome: 'Create home',
joinHome: 'Join home by code',
joinCode: 'Join code',
smtpHost: 'SMTP host',
smtpPort: 'SMTP port',
smtpUser: 'SMTP user',
smtpPassword: 'SMTP password',
senderAddress: 'Sender address',
senderName: 'Sender name',
testMail: 'Send test mail',
light: 'Light',
dark: 'Dark',
systemTheme: 'System'
}
};