URL: https://spranz.mymoodia.de/
Date of Audit: 19 March 2026
Platform: React SPA (webpack-bundled), i18next for i18n, RestBundle HTTP layer
Language: German (de)
Page Title: Spranz
Verdict
Not ready for production. The cart API is broken (HTTP 500), several CTAs have dead/malformed links, and the login form has UX and labelling issues. The visual design is professional and catalog browsing works, but critical functional gaps must be resolved first.
Top navigation bar with 11 product categories renders correctly and all category links work
Category pages load with proper pagination (e.g., “Seite 1 von 3”)
Product grid layout is consistent with 12 items per page
Breadcrumb navigation works on product detail pages
Search bar is present and positioned correctly in the header
Hero carousel/slider is present with promotional content
“Spranz Highlights / Aktionen” section displays 4 featured products with variant color indicators
Promotional banners (“Regenschirme Sparwoche bis zu 20%”, “Metmaxx neu im Sortiment”) are visible
“Produktwelt Spranz” section with links to category pages works
“Eating & Drinking by Spranz” and “Traveling by Spranz” content sections have proper descriptions and working links
Product images load correctly with thumbnail gallery
Product specifications table renders properly (weight, dimensions, material, origin country, customs tariff number)
Product description text is present
REACH information PDF link is provided
Product data sheet (Produktdatenblatt) PDF generation link works
High-resolution image download option is present
Delivery time estimates are shown
Variant color swatches are present
Payment method icons all display correctly (Apple Pay, Google Pay, Maestro, Mastercard, PayPal, Prepay, Visa)
Customer service phone number is a clickable tel: link
Opening hours are clearly stated
Shipping partners (UPS, DHL) logos display
“Sicher Einkaufen” (safe shopping) badge displays
Social media icons (Facebook, Instagram, X, YouTube) are present
Legal links (Kontakt, AGB, Impressum, Datenschutz) all point to valid pages
Link URL Status Nachhaltigkeit /page/nachhaltigkeitOK Rücksendung /page/ruecksendungOK Häufige Fragen (FAQ) /faqOK (sparse content) Über SPRANZ /page/about-usOK Karriere bei SPRANZ /job-offersOK Unsere Zahlungsarten /page/zahlungsartenOK Kontakt /contact/shopOK AGB /agbOK Impressum /impressumOK Datenschutz /datenschutzerklaerungOK
BUG-001: Login Page — Slow Async Load + Form Issues
Page: /login — Severity: HIGH
The login form loads asynchronously and takes ~5 seconds to appear after initial page load. During this time the page shows only the navigation and footer with no visible loading indicator, making it appear broken.
Once loaded, the login page contains two sections that work:
“Mein Kundenkonto” — Email, Password, “Passwort vergessen?” link, “Anmelden” button
“Registrierung” — Gender (Frau/Herr/Divers), Vorname, Nachname, E-Mail, Passwort, Passwort wiederholen
Issues found on the login page:
Slow render: No loading spinner or skeleton — page looks empty/broken for ~5s
Registration button mislabeled: The registration submit button says “Anmelden” (Login) instead of “Registrieren” (Register)
Missing autocomplete attributes: Browser console warns about missing autocomplete attributes on input fields
Typo in required fields note: Text says “Pflchtfelder” instead of “Pflichtfelder” (missing “i”)
Input fields lack visible labels: Fields use floating/placeholder labels but no persistent <label> tags for accessibility
BUG-002: Cart API Returns 500 Internal Server Error
Page: All pages (called on page load) — Severity: CRITICAL
Endpoint: GET /api/v1/cart/
Every page load triggers a request to /api/v1/cart/ which returns HTTP 500. This error appears in the console on every page visited.
Impact: Shopping cart functionality is completely broken. Users cannot add items, view cart, or proceed to checkout.
Failed to load resource: the server responded with a status of 500 ()
@ https://spranz.mymoodia.de/api/v1/cart/
BUG-003: 'Jetzt ausrüsten' Button Has Empty href
Page: Homepage — “Holen Sie sich ihre Profiausrüstung” section — Severity: CRITICAL
The CTA button “Jetzt ausrüsten” has href="", making it a dead link that reloads the current page.
BUG-004: 'ZUM SHOP' Link Has Malformed URL
Page: Homepage — free shipping banner — Severity: CRITICAL
The “ZUM SHOP” button links to /search&s=12&p=0 instead of /shop/search?s=12&p=0. The ? is replaced with &, making it an invalid route that returns a 404.
The following links are hardcoded to /not-found, displaying the 404 page:
Link Text Location Kataloge Footer > Informationen Messen / Ausstellungen Footer > Informationen Versand & Lieferung Footer > Service & Hilfe Pressekontakt Footer > Unternehmen Marken bei SPRANZ Footer > Unternehmen
On product detail pages (e.g., /shop/2310-00-001), the image manager API fails:
Failed to load resource: /api/v1/image-manager/?tenant-id=1
While the main product image loads, the gallery/manager endpoint fails, potentially hiding additional product images.
The font file Oswald-Regular.ttf fails to load on product detail pages:
Failed to load resource: /fonts/Oswald-Regular.ttf
Text renders in fallback font, inconsistent with design specifications.
The social media icons (Facebook, Instagram, X, YouTube) in the footer have cursor: pointer styling but are rendered as <img> elements, not wrapped in <a> tags with actual URLs. Clicking them does nothing.
The “Mehr zum Businesskonto” heading has cursor: pointer but no href. It appears to be a heading styled as a link but with no destination.
Product detail page titles remain “Spranz” instead of reflecting the product name (e.g., “Metmaxx® RainClassicEurope schwarz — Spranz”). Bad for SEO, browser tabs, and bookmarking.
ID Location Issue Fix TYPO-001 Homepage highlights, product 2310-00-004 "bau" instead of "blau"Fix product name to “blau” TYPO-002 Category nav + URL /shop/bbq-gourme missing the “t”Change slug to bbq-gourmet + 301 redirect TYPO-003 Homepage Eating & Drinking / Traveling sections Broken ? character where em-dash should be Replace with — TYPO-004 ”Einkaufen nach Kategorie” section "Alle produkte" lowercaseCapitalize to "Alle Produkte" TYPO-005 ”Metmaxx neu im Sortiment” banner URL has trailing space: /shop/writing?s=12&p=0 Trim whitespace
ID Location Issue CONTENT-001 Footer eMagazin section Description says “Garten und Landschaft” (garden/landscape) — placeholder text from a different brand. Spranz sells promotional products. CONTENT-002 Homepage hero carousel All 3 slides have identical text (“Blättern, stöbern… finden!”) and same CTA. Wasted carousel space. CONTENT-003 Footer customer service Phone tel: link is tel:49261984880 — should be tel:+49261984880 (missing + for international dialing) CONTENT-004 ”Einkaufen nach Kategorie” section Only shows one link “Alle produkte”. A section titled “shop by category” should display multiple category tiles.
Error Endpoint/Source Severity HTTP 500/api/v1/cart/CRITICAL — cart service down AbortError: signal is aborted without reasonRestBundle.ts:494HIGH — request cancellation issue
Error Endpoint/Source Severity HTTP 404/500/fonts/Oswald-Regular.ttfMEDIUM — font missing HTTP error/api/v1/image-manager/?tenant-id=1HIGH — image gallery broken Multiple AbortError RestBundle.ts (×6)MEDIUM — race condition in API calls
Element Status Notes Hero slider PARTIAL Works but 3 identical slides Product highlights OK 4 products, variant colors shown Category navigation OK 11 categories, all link correctly Search bar OK Present, placeholder text in German Promo banners PARTIAL ”ZUM SHOP” link broken (BUG-004) “Jetzt ausrüsten” CTA BROKEN Empty href (BUG-003) Exclusive brands carousel PARTIAL Some list items are empty (missing brand logos) Footer PARTIAL 5 broken links to /not-found
Element Status Notes Login form SLOW Renders after ~5s async load, no loading indicator Email + Password fields OK Present and functional ”Passwort vergessen?” link OK Links to /password-reset ”Anmelden” button OK Present Registration form PARTIAL All fields present, but submit button mislabeled as “Anmelden” Required fields note TYPO ”Pflchtfelder” → “Pflichtfelder” Autocomplete attributes MISSING Browser warns about missing autocomplete on inputs Navigation OK Categories render Footer OK Same as homepage
Element Status Notes Product image OK Main image loads Image gallery BROKEN image-manager API fails Product title OK ”Metmaxx® RainClassicEurope schwarz” Article number OK ”ART. NR. 2310-00-001” Specifications table OK All fields populated REACH PDF link OK Points to PDF Product data sheet OK API-generated PDF Add to cart BROKEN Cart API returns 500 Breadcrumbs OK Working correctly Page title WRONG Shows “Spranz” not product name
Element Status Notes Product grid OK 12 products per page Pagination OK Multi-page with page indicator Filters OK Price and product type filters present Product cards OK Image, name, art. nr., variant count
Element Status Notes Cart contents BROKEN No cart UI rendered, API 500
Element Status Notes FAQ content SPARSE Only 3 category cards, no actual Q&A
Automated browser tests were executed via Playwright on 19 March 2026. Below are the results per test scenario.
Step Result Navigate to /login Page loads, form takes ~5s to appear (no loading indicator) Fill email: test@example.com OK Fill password: wrongpassword123 OK Click “Anmelden” Form submits API call POST /api/v1/auth/token-auth → 401 Unauthorized (correct)UI feedback Generic toast: “Etwas ging schief, versuchen Sie es später noch einmal”
Finding: Poor error message for invalid credentials
The API correctly returns 401, but the UI shows a generic “something went wrong” instead of a specific “Invalid email or password” message. This is confusing — users won’t know if they mistyped their password or if the system is broken.
Step Result Click “Anmelden” with empty fields Client-side validation triggers Email field Shows “Dies ist ein Pflichtfeld” — PASS Password field Shows “Dies ist ein Pflichtfeld” — PASS API call None made (blocked by validation) — PASS
Step Result Click registration “Anmelden” with empty fields Client-side validation triggers Gender radio group Shows “Bitte Wert angeben” — PASS Vorname Shows “Dies ist ein Pflichtfeld” — PASS Nachname Shows “Dies ist ein Pflichtfeld” — PASS E-Mail-Adresse Shows “Dies ist ein Pflichtfeld” — PASS Passwort Shows “Dies ist ein Pflichtfeld” — PASS Passwort wiederholen Shows “Dies ist ein Pflichtfeld” — PASS
Step Result Fill all fields with valid data OK Password: Password123! OK Confirm password: DifferentPassword456! OK Click submit No password mismatch validation triggered API call None (blocked by gender radio not being selected)
Finding: No password mismatch validation
The registration form does not validate that “Passwort” and “Passwort wiederholen” match before submission. If the gender radio issue is resolved, mismatched passwords could be sent to the API. Client-side password match validation is missing.
Step Result Navigate to /password-reset Page loads (async, ~5s delay) Page title ”Passwort zurücksetzen” — PASS Email field present Yes, with label “E-Mail-Adresse *” — PASS Submit button ”Absenden” — PASS Description text ”Bitte geben Sie Ihre E-Mail-Adresse ein, um das Passwort zurückzusetzen**..**”
Finding: Double period in description
The text ends with ”..” (double period) instead of a single period.
Step Result Type “Regenschirm” in search bar OK Click search button Navigates to /shop/search?q=Regenschirm&context=catalog&s=12&no-variants=false Results displayed 9 umbrella products found — PASS Filters available Marke, Farbe, Herkunft, Material — PASS Pagination ”Seite 1 von 1” — PASS Sort functionality ”Sortieren nach: BELIEBTHEIT” present — PASS SEO content blocks 3 text sections rendered below results — PASS Console error on search Warning: A component is changing an uncontrolled input — React state management issue
Finding: React controlled/uncontrolled input warning
The search input triggers a React warning about changing from uncontrolled to controlled. This suggests the search input’s value is initially undefined and later set to a string. Fix by initializing the state with an empty string.
Component Initial Load After ~5s Header (logo, login, cart) Missing Renders Search bar Missing Renders Hero carousel Missing Renders (3 slides) Category tiles in “Einkaufen nach Kategorie” Missing Renders (11 categories + “Alle produkte”) Brand logos carousel Empty list items All 15 logos loaded Product highlights Visible Unchanged
Finding: Significant async loading delay across all pages
The entire header (logo, login link, cart, search) and several homepage sections load asynchronously with a ~5s delay. During this time, the page shows a partially rendered state that looks broken. This affects every page, not just the login page. A loading skeleton or spinner should be implemented site-wide.
Endpoint Method Status Notes /api/v1/cart/GET 500 Broken on every page load /api/v1/settings/b2bGET 200 OK /api/v1/settings/shop_configGET 200 OK /api/v1/auth/token-authPOST 401 Correct for invalid credentials /api/v1/image-manager/?tenant-id=1GET Error Fails on product/search pages https://m.stripe.com/6POST 200 Stripe integration active
Issue Severity Details Missing alt text on images HIGH Multiple <img> elements have no alt text (hero slider images, some brand logos, search button icon, hamburger menu icon) Empty list items MEDIUM In “Unsere Exklusivmarken” brand carousel, several <li> elements are completely empty Hamburger menu button has no label HIGH The mobile menu toggle button has no accessible name/aria-label Search button has no label MEDIUM The search submit button contains only an image with no alt text Color swatches lack visible text labels MEDIUM Product variant colors rely solely on color (fails WCAG 1.4.1) No skip-to-content link LOW No mechanism to skip navigation for keyboard users Heading hierarchy issues MEDIUM Multiple <h1> tags on homepage. Should have single <h1>
Issue Impact Details Generic page title HIGH All pages show “Spranz” as the <title> No meta description HIGH Pages should include <meta name="description"> per page Duplicate content in carousel LOW 3 identical text blocks in the hero slider URL slug typo (bbq-gourme) MEDIUM Misspelled URL hurts SEO for “BBQ Gourmet” searches Malformed URLs MEDIUM /search&s=12&p=0 and trailing spaces in URLsNo structured data MEDIUM Product pages should have JSON-LD Product schema for rich results No canonical tags MEDIUM Important for preventing duplicate content issues
Fix cart API — Resolve the HTTP 500 on /api/v1/cart/. This blocks the entire purchase flow
Fix “ZUM SHOP” URL — Change /search&s=12&p=0 to /shop/search?s=12&p=0
Fix empty “Jetzt ausrüsten” href — Add the correct destination URL
Add password mismatch validation — Registration form does not validate that password and confirm password match
Fix login error message — Show “Ungültige E-Mail oder Passwort” instead of generic “Etwas ging schief” when API returns 401
Fix site-wide async loading delay — Add loading spinner/skeleton while content loads (~5s delay affects header, search, login form, and multiple homepage sections)
Fix registration button label — Change “Anmelden” to “Registrieren” on the registration form
Fix “Pflchtfelder” typo — Should be “Pflichtfelder” on the login page
Fix double period on password reset page — “…zurückzusetzen..” should be single period
Add autocomplete attributes — Add autocomplete="email", autocomplete="current-password" etc. to login/registration inputs
Fix React controlled/uncontrolled input warning — Search input state should initialize as empty string, not undefined
Create or remove /not-found links — Build the 5 missing pages or remove them from footer
Fix image-manager API — Product gallery images should load on PDP
Deploy Oswald-Regular.ttf font — Upload the missing font file to /fonts/
Make social media icons actual links — Wrap in <a> tags with real URLs
Fix “Mehr zum Businesskonto” — Add a proper link destination
Fix product page <title> — Dynamically set to include the product name
Fix AbortError handling — Catch and suppress cancellation errors in RestBundle.ts
Fix typo "bau" → "blau" for article 2310-00-004
Fix BBQ URL slug bbq-gourme → bbq-gourmet (with 301 redirect)
Fix broken ? characters → replace with em-dashes (homepage descriptions AND search results SEO text)
Capitalize "Alle Produkte" in category section
Remove trailing space from Writing category link URL
Fix eMagazin description — replace “Garten und Landschaft” placeholder
Fix phone tel: link — add + prefix
Diversify hero carousel content
Add alt text to all images for accessibility
Add aria-labels to hamburger menu and search button
Fix heading hierarchy — single <h1> per page
Add structured data (JSON-LD) for products
Add proper meta descriptions per page
Populate FAQ page with actual questions and answers
Populate “Einkaufen nach Kategorie” with category tiles
Clean up empty brand logo list items in “Unsere Exklusivmarken”
Add skip-to-content link for keyboard navigation
QA audit performed on 19 March 2026 via automated browser testing (Playwright) and manual inspection.