feat: Kaufjourney-Optimierungen fuer Kund:innen (Shop, Produktseite, Warenkorb, Checkout)

Konkrete Reibungspunkte entlang der Kauf-Journey behoben:
- Shop-Suche als sichtbares, editierbares Feld im Filter-Formular statt nur
  in der kleinen Kopfzeilen-Suche — Suche/Kategorie/Sortierung/Verfuegbarkeit
  lassen sich jetzt in beide Richtungen kombinieren, ohne sich gegenseitig
  zurueckzusetzen; plus "Suche zuruecksetzen"-Link.
- Versandkosten- und Lieferzeit-Hinweis direkt auf der Produktdetailseite
  (bisher erst im Warenkorb/Checkout sichtbar).
- Produktgalerie per Touch-Wisch bedienbar, nicht nur ueber die
  Vorschau-Kacheln (mobile Kaufentscheidung).
- Immer sichtbare mobile Kaufleiste auf der Produktseite, damit der
  Warenkorb-Button auf langen Seiten (Bewertungen, verwandte Produkte) nicht
  wieder erst erscrollt werden muss.
- Live-Lagerbestand (Ausverkauft/Nur noch N) jetzt auch im Cart-Drawer und
  auf der Warenkorb-Seite sichtbar, nicht nur auf der Produktkarte — neuer
  Endpunkt /api/shop/cart-stock + useCartStock-Hook.
- Checkout- und Adressformulare: autoComplete/inputMode/type auf allen
  Feldern (given-name, tel, postal-code, ...) fuer Mobil-Autofill und
  passende Bildschirmtastaturen.
- Bestellpositionen in "Meine Bestellungen" und der Bestellverfolgung
  verlinken jetzt zur Produktseite (samt Bewertungs-Anker) — bisher war die
  Bewertungsfunktion nach dem Kauf nur durch manuelles Zurueeknavigieren
  auffindbar.

Neue Tests fuer die Lagerbestand-Hinweise im Warenkorb; tsc/vitest/build
bleiben gruen (142 Tests).
This commit is contained in:
Nick Szaunig committed 2026-09-05 18:02:38 +02:00
1 parent 54919d82ed
commit 0b2196460a
16 files changed
+445 -84

No files matched your search

+3
View File
@@ -1332,6 +1332,7 @@ export const de: Dictionary = {
productPage: {
reviewsLink: (count) => `${count} Bewertung${count === 1 ? "" : "en"}`,
noReviews: "Noch keine Bewertungen",
shippingHint: (price) => `Versand ab ${price} · Lieferzeit 2–4 Werktage`,
onlyLeftInStock: (count) => `Nur noch ${count} auf Lager`,
soldOut: "Ausverkauft",
currentlyUnavailable: "Aktuell nicht verfügbar — schau bald wieder vorbei.",
@@ -1399,6 +1400,8 @@ export const de: Dictionary = {
sortAvailability: "Verfügbarkeit",
apply: "Anwenden",
onlyAvailable: "Nur verfügbare",
searchInputLabel: "Im Sortiment suchen",
clearSearch: "Suche zurücksetzen",
searchResults: (query, count) => `Suchergebnisse für „${query}“ (${count})`,
noSearchResults: "Keine Treffer für deine Suche.",
noProducts: "Aktuell sind hier keine Produkte verfügbar. Schau bald wieder vorbei.",