50dfca59e1
P1 Medien: eigener Admin-Bereich /admin/medien (Grid, Mehrfach-Upload, Drag&Drop, Alt-Text, URL kopieren, Loeschen). Upload konvertiert JPG/PNG via sharp zu WebP (Qualitaet 82, max 2000px), Original wird verworfen; WebP/SVG/GIF/AVIF unveraendert; Konvertierungsfehler -> Original behalten statt 500. media um alt/width/height erweitert. Wiederverwendbarer Medien-Picker (public/media-picker.js) ersetzt den URL-Prompt im Block-Editor, Produkt-Editor (Karte/Galerie/Varianten-Bild), Slides und Popups. JSON-Quelle /api/admin/media (session-gesichert). P2 Varianten: products.options_json + Tabelle product_variants. Produkt-Editor mit Options-Definition + Matrix-Generator (Preis-Override/Bestand/SKU/Bild/aktiv je Variante). PDP-Selektoren -> Variante; Cart/Checkout tragen sku+Options, Order-Item bekommt sku/variant, Variantenpreis serverseitig verifiziert. Produkte ohne Optionen unveraendert. P3 Litestream: Binary im Dockerfile, docker-entrypoint.sh (Restore+replicate nur bei LITESTREAM_REPLICA_URL, sonst reiner Node-Start), litestream.yml, Backup-Status unter Einstellungen, README + .env.example. P4 Analytics: Bestseller, Top-Suchbegriffe, Umsatz/Quelle, Umsatz-Zeitreihe, AOV, Wiederkaufrate, Lager-Warnungen. Neue Dep sharp. +19 Unit-Tests (49 gesamt gruen), Build + Smoke (P1-P4) gruen.
25 lines
674 B
JSON
25 lines
674 B
JSON
{
|
|
"name": "hd-commerce",
|
|
"type": "module",
|
|
"version": "2.4.0",
|
|
"private": true,
|
|
"description": "hd-commerce — neutrales SQLite-Commerce-Backend (Admin + API + Demo-Storefront)",
|
|
"scripts": {
|
|
"dev": "astro dev",
|
|
"build": "astro build",
|
|
"start": "node ./dist/server/entry.mjs",
|
|
"prebuild": "node ./scripts/sync-css.mjs",
|
|
"test": "node test/unit.mjs"
|
|
},
|
|
"dependencies": {
|
|
"@astrojs/node": "^9.1.3",
|
|
"@fontsource-variable/fraunces": "^5.1.0",
|
|
"@fontsource-variable/public-sans": "^5.1.0",
|
|
"astro": "^5.6.0",
|
|
"better-sqlite3": "^11.8.1",
|
|
"nodemailer": "^6.10.1",
|
|
"sharp": "^0.34.5",
|
|
"stripe": "^17.5.0"
|
|
}
|
|
}
|