diff --git a/.cursor/rules/einkaufsliste.mdc b/.cursor/rules/einkaufsliste.mdc new file mode 100644 index 0000000..65b899a --- /dev/null +++ b/.cursor/rules/einkaufsliste.mdc @@ -0,0 +1,48 @@ +--- +description: Einkaufsliste Laravel – vollständige Produkt-/Tech-Vorgaben (Master: prompt_einkaufsliste.txt) +alwaysApply: true +--- + +# Einkaufsliste – Projektprompt (Kurzfassung) + +**Master:** `prompt_einkaufsliste.txt` im Repo – bei Konflikten dort nachführen. + +## URLs + +- Prod: `https://einkauf.pauker.at` · Lokal: `http://pauker/einkauf` + +## Plattform + +- Desktop + mobil responsive; **PWA/Offline** anstreben (Manifest + Service-Worker, Offline-Daten/Sync iterativ). + +## Auth + +- E-Mail + Passwort, Session merken; **Passwort nur gehasht**; **Passwort vergessen** per E-Mail-Link. + +## UX – Liste (Pflicht) + +- **Neuer Eintrag:** nur **Produktname**, **Enter** reicht (+ optional Button). +- **Offen:** **Erledigt = Checkbox** (Stil Microsoft To Do): ankreuzen → erledigt; Name per **Label** klickbar. +- **Erledigt:** Checkbox **abwählen** → wieder offen. +- **Kein** Zwang zu Geschäft/Menge/Preis/Foto zum Abhaken. + +## Bleistift-Panel (rechts) + +- **Ein** Icon pro Zeile: Stammdaten (**PATCH** `update`) + bei **offenen** Einträgen optional **„Erledigt mit Angaben“** (**PATCH** `toggle` mit Preis/Foto). Erledigte Einträge: nur Stammdaten bearbeiten. + +## Daten / Logik + +- Preise manuell (+ optional Foto); Historie mit Datum/Geschäft/Produkt; **Summen** pro Geschäft + gesamt. +- **OCR** aus Foto: nicht kurzfristig; **Online-Preise** automatisch: später, nur mit geklärter Quelle. + +## Stores + +- Mehrere Geschäfte (frei erweiterbar). + +## Code + +- UI Deutsch; Code `ae`/`oe`/`ue` wie im Projekt; Laravel; fokussierte Änderungen. + +## Implementierung (Anker) + +- `ShoppingListController`: `store`, `update`, `toggle`; Views mit Checkboxen; Partial **`item-pencil-panel`**. diff --git a/.gitignore b/.gitignore index a545aec..dcefeb5 100644 Binary files a/.gitignore and b/.gitignore differ diff --git a/package.json b/package.json index 2ea7e1d..9e02638 100644 --- a/package.json +++ b/package.json @@ -2,6 +2,9 @@ "$schema": "https://www.schemastore.org/package.json", "private": true, "type": "module", + "engines": { + "node": ">=20.19.0" + }, "scripts": { "build": "vite build", "dev": "vite" diff --git a/resources/views/auth/login.blade.php b/resources/views/auth/login.blade.php index 78b684f..27b8cbc 100644 --- a/resources/views/auth/login.blade.php +++ b/resources/views/auth/login.blade.php @@ -32,16 +32,26 @@ -
- @if (Route::has('password.request')) - - {{ __('Forgot your password?') }} - - @endif +
+
+ @if (Route::has('register')) + + {{ __('Register') }} + + @endif +
- - {{ __('Log in') }} - +
+ @if (Route::has('password.request')) + + {{ __('Forgot your password?') }} + + @endif + + + {{ __('Log in') }} + +
diff --git a/scripts/apache-einkauf-debian-setup.sh b/scripts/apache-einkauf-debian-setup.sh index 367b731..fc95cc3 100644 --- a/scripts/apache-einkauf-debian-setup.sh +++ b/scripts/apache-einkauf-debian-setup.sh @@ -102,6 +102,8 @@ echo " 1) TLS: sudo certbot --apache -d ${DOMAIN}" echo " (passt SSL-Zertifikat und leitet HTTP->HTTPS an; Pfade in sites-available werden ergaenzt)" echo " 2) App: cd ${APP_ROOT} && cp .env.example .env && php artisan key:generate" echo " Dann .env (APP_URL=https://${DOMAIN}, DB, MAIL) und:" +echo " Node.js >= 20.19 fuer Vite 7 (Debian-Paket oft zu alt). Beispiel NodeSource 20.x:" +echo " curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash - && sudo apt-get install -y nodejs" echo " composer install --no-dev && npm ci && npm run build && php artisan migrate --force && php artisan storage:link" echo " 3) Rechte: chown -R www-data:www-data ${APP_ROOT}/storage ${APP_ROOT}/bootstrap/cache" echo ""