2026-04-17 15:00:58 +02:00
|
|
|
{
|
|
|
|
|
"name": "kochwas",
|
2026-04-21 10:51:52 +02:00
|
|
|
"version": "1.3.0",
|
2026-04-17 15:00:58 +02:00
|
|
|
"private": true,
|
|
|
|
|
"type": "module",
|
|
|
|
|
"scripts": {
|
|
|
|
|
"dev": "vite dev",
|
|
|
|
|
"build": "vite build",
|
|
|
|
|
"preview": "vite preview",
|
|
|
|
|
"check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json",
|
|
|
|
|
"test": "vitest run",
|
|
|
|
|
"test:watch": "vitest",
|
|
|
|
|
"lint": "eslint .",
|
2026-04-18 16:12:40 +02:00
|
|
|
"format": "prettier --write .",
|
2026-04-18 17:01:39 +02:00
|
|
|
"render:icons": "node scripts/render-icons.mjs",
|
|
|
|
|
"test:e2e": "playwright test",
|
test(e2e): Playwright Smoketests gegen kochwas-dev (remote)
Automatisierte End-to-End-Tests gegen ein deployed Environment. Loest
die manuellen MCP-Playwright-Runs ab. 42 Tests in 9 Files:
- homepage: H1, Sektionen, Sort-Tabs, Console-Errors
- search: lokaler Treffer, Web-Fallback, Empty-State, Deep-Link
- profile: Switcher, Auswahl-Persistenz, Favoriten-Section, Guard-Dialog
- recipe-detail: Header, Portionen-Scaling (4->6), Favorit-Toggle,
Rating-Persistenz ueber Reload, Gekocht-Counter, Wunschliste-Toggle
- comments: eigenen erstellen+loeschen via UI, fremder hat kein Delete
- wishlist: Seite, Sort-Tabs, Badge-Sync, requireProfile-Custom-Message
- preview: Guard ohne ?url=, echte URL parst, unparsbare zeigt error-box
- admin: alle 4 Subrouten + /admin redirect
- api-errors: parsePositiveIntParam (4x Invalid id), validateBody (4x
Invalid body + issues), 404, Sanity /health /profiles /domains
Architektur:
- Separate playwright.remote.config.ts (getrennt von local preview)
- workers: 1 + afterEach API-Cleanup (rating, favorite, wishlist, comments)
- Hardcoded Recipe-ID 66 + Profile 1/2/3 — stabile Dev-DB-Seeds
- E2E_REMOTE_URL ueberschreibt die Ziel-URL
Ausfuehrung: npm run test:e2e:remote
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-19 12:14:04 +02:00
|
|
|
"test:e2e:ui": "playwright test --ui",
|
|
|
|
|
"test:e2e:remote": "playwright test --config=playwright.remote.config.ts"
|
2026-04-17 15:00:58 +02:00
|
|
|
},
|
|
|
|
|
"devDependencies": {
|
2026-04-18 17:01:39 +02:00
|
|
|
"@playwright/test": "^1.59.1",
|
2026-04-17 15:00:58 +02:00
|
|
|
"@sveltejs/adapter-node": "^5.2.0",
|
|
|
|
|
"@sveltejs/kit": "^2.8.0",
|
|
|
|
|
"@sveltejs/vite-plugin-svelte": "^4.0.0",
|
|
|
|
|
"@types/better-sqlite3": "^7.6.11",
|
|
|
|
|
"@types/node": "^22.9.0",
|
2026-04-18 16:17:11 +02:00
|
|
|
"jsdom": "^29.0.2",
|
2026-04-17 15:00:58 +02:00
|
|
|
"prettier": "^3.3.3",
|
|
|
|
|
"prettier-plugin-svelte": "^3.2.7",
|
2026-04-18 16:12:40 +02:00
|
|
|
"sharp": "^0.34.5",
|
2026-04-17 15:00:58 +02:00
|
|
|
"svelte": "^5.1.0",
|
|
|
|
|
"svelte-check": "^4.0.5",
|
|
|
|
|
"typescript": "^5.6.3",
|
|
|
|
|
"vite": "^5.4.10",
|
|
|
|
|
"vitest": "^2.1.4"
|
|
|
|
|
},
|
|
|
|
|
"dependencies": {
|
2026-04-21 10:37:12 +02:00
|
|
|
"@google/generative-ai": "^0.24.1",
|
2026-04-17 15:35:19 +02:00
|
|
|
"@types/archiver": "^7.0.0",
|
|
|
|
|
"@types/yauzl": "^2.10.3",
|
|
|
|
|
"archiver": "^7.0.1",
|
2026-04-17 15:00:58 +02:00
|
|
|
"better-sqlite3": "^11.5.0",
|
|
|
|
|
"linkedom": "^0.18.5",
|
feat(ui): Favoriten-Liste, Dismiss-from-Recent, Inline-Rename, Lucide-Icons
Homepage:
- Neue Sektion "Deine Favoriten" über "Zuletzt hinzugefügt" (alphabetisch
sortiert, lädt wenn Profil aktiv ist; versteckt sonst)
- Jede Karte in "Zuletzt hinzugefügt" hat jetzt oben-rechts ein X-Icon
zum Ausblenden. Das Rezept selbst bleibt in der DB — nur die
Anzeige in der Recent-Liste wird per recipe.hidden_from_recent = 1
unterdrückt. Section versteckt sich, wenn die Liste leer wird.
DB:
- Neue Migration 004_recipe_hidden_from_recent.sql (+Index)
- listFavoritesForProfile in search-local.ts (ORDER BY title NOCASE)
- setRecipeHiddenFromRecent in actions.ts
API:
- GET /api/recipes/favorites?profile_id=X
- PATCH /api/recipes/[id] akzeptiert jetzt title und/oder
hidden_from_recent (Zod-Schema mit refine)
Rezept-Detail:
- Titel ist jetzt inline editierbar: kleines Stift-Icon rechts neben
H1. Click öffnet Input, Enter speichert (PATCH), Escape bricht ab.
Kein location.reload() mehr.
- RecipeView bekommt neuen Snippet-Prop titleSlot für Title-Override.
- Neue Aktionsreihenfolge:
Zeile 1: Favorit | Wunschliste | Drucken
Zeile 2: Heute gekocht | Löschen
(Umbenennen ist jetzt am Titel statt in der Leiste.)
Icons (lucide-svelte, neues Dep):
- Emoji-Icons durch Lucide-SVGs ersetzt auf Startseite, Header,
Rezept-Detail, Wunschliste, Header-Dropdown:
🍽️→Heart/Utensils, ⚙️→Settings, 🥘→CookingPot, 🌐→Globe,
♥/♡→Heart(filled), 🖨→Printer, ✎→Pencil, 🗑→Trash2, ✓→Check,
🍳→ChefHat, X→X
- Header-Brand-Badge auf Mobile behält sein 🍳 (ist im ::after-Pseudo,
Lucide käme da nicht sauber rein).
- SearchLoader-Emojis bleiben — die sind Teil der Animations-Charme.
Tests: 99/99 grün (bestehend), Typecheck 0 Fehler.
2026-04-17 18:57:17 +02:00
|
|
|
"lucide-svelte": "^1.0.1",
|
2026-04-21 11:49:41 +02:00
|
|
|
"node-addon-api": "^8.7.0",
|
2026-04-17 15:35:19 +02:00
|
|
|
"yauzl": "^3.3.0",
|
2026-04-17 15:00:58 +02:00
|
|
|
"zod": "^3.23.8"
|
|
|
|
|
}
|
|
|
|
|
}
|