Commit graph

31 commits

Author SHA1 Message Date
Maaxxs
3e237421c6 Redesign package tiles as a dark, credit-card-style scroll strip with hue-sweeping tiers
Package cards go back to a permanently dark stage (all price tiers, not
just the priciest), with each theme sweeping through its own colour family
across the tiers instead of just lightening/darkening. Adds an admin toggle
between the previous wrapping grid and a new horizontal scroll strip of
narrow, tall cards. Card content is restructured to match the client's
reference mockup: no icon chip, centered uppercase name with a short
divider, an empty middle area that lets the glowing road motif show
through, then the feature list and price stacked at the bottom.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-08 23:41:59 +02:00
Maaxxs
411ee8a241 Add selectable package card color themes and refine the feature list styling
Bullet lists on package cards now use accent-colored checkmarks instead of
plain browser dots. The card color system is now driven by a persistent
site setting (Admin > Einstellungen > Website > "Paket-Kachel-Design")
with three curated themes - Graphite Green, Deep Blue Luxury, and Warm
Bronze - all converging on the same dark "Onyx + Gold" treatment for the
priciest tier, matching the reference mockups.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-08 10:28:05 +02:00
Maaxxs
438131fad0 Move FAQ management into the admin panel and cover it plus the gallery in export/import
FAQ entries were previously hardcoded in the i18n dictionaries; they now live
in a new bilingual `faqs` table with full CRUD in the admin panel, a
reset-to-defaults action seeded with the current 6 questions, and the
homepage (incl. FAQPage JSON-LD) fetches them live per language. Export/
import was also extended to include FAQs and the full image gallery
(brands, projects, photos), which had been missing from that mechanism.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-07 19:25:06 +02:00
Maaxxs
8ee36fd3eb Keep the grain texture off content cards, only on page background/bands
The fixed full-viewport overlay painted grain over everything,
including cards, buttons, and the FAQ accordion that should stay
plain. Back to plain background-image on .page-texture plus a new
.grain-band class for the two structural full-width stripe sections
on the homepage - cards keep their own opaque background, which
naturally blocks it without any extra work.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-07 02:49:25 +02:00
Maaxxs
ec84b438ca PageSpeed/Lighthouse fixes: caching, images, touch targets, console noise
Based on a Lighthouse audit of the live site (95 performance / 91
accessibility / 96 best-practices / 100 SEO), addressing everything
except the flagged color-contrast issues (kept as-is, reversible
color changes need a separate decision):

- Cache-Control headers for hashed/immutable static assets via
  mod_headers (no mod_expires dependency, since that's not enabled
  everywhere) - ~1.1MB saved on repeat visits
- Converted the code-bundled homepage photos to WebP (skipped
  DB-managed/admin-uploaded images - those are content, not code) and
  added explicit width/height so the browser can reserve space before
  images load
- Bumped footer/contact-sidebar phone and email links to a 24px+
  touch target via padding
- /auth/me now returns 200 + {authenticated:false} instead of 401 for
  logged-out visitors - it's called on every public page load to
  check session state, so "not logged in" is the normal case, not an
  error; the 401 was showing up as a console error on literally every
  page view

Left unchanged: the lucide-react bundle splitting (a previous,
deliberate tradeoff - splitting per-icon created ~1600 tiny chunk
files that failed to upload on shared hosting) and video preload
(no concrete issue found in the audit).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-07 02:40:57 +02:00
Maaxxs
b5de375d7f Add Google Analytics integration with consent-gated loading
Adds a "Statistik" cookie category (alongside the existing external
media one), an admin-configurable Measurement ID field in Website
Settings, and a GoogleAnalytics component that only injects gtag.js
after the visitor has consented - mirrors the existing ExternalEmbed
pattern instead of loading tracking scripts unconditionally.

Also documents Google Analytics in the Datenschutzerklärung (new
section 8, remaining sections renumbered) since introducing a new
data processing purpose requires disclosure.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-07 01:32:44 +02:00
Maaxxs
e89e2aed34 Make the grain texture universally visible via a fixed overlay
Previously the grain lived on .page-texture's own background-image, so
any section with its own opaque background color (bg-neutral-50 bands)
painted right over it. Moved the grain to a fixed, full-viewport overlay
that sits on top of everything instead.

Also fixed a failed attempt at using mix-blend-mode: overlay for a
single theme-agnostic texture - that blend mode has almost no visible
effect on backgrounds this close to pure white/black, since its math
compresses toward the backdrop at the extremes. Back to plain alpha
transparency with separate light/dark speckle colors, moderate opacity.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-07 00:23:44 +02:00
Maaxxs
4a8fee0603 Remove language switcher from mobile menu, keep only the header one
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-06 22:16:20 +02:00
Maaxxs
1c4e3ad163 Remove flag icons from the mobile menu language dropdown, keep text-only
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-06 22:10:48 +02:00
Maaxxs
f33bfb85ea Revert mobile menu item dimming, dropdown simply overlays on top
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-06 22:07:36 +02:00
Maaxxs
4690c88357 Dim covered mobile menu items instead of shifting layout on language dropdown
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-06 22:03:29 +02:00
Maaxxs
7cdb601cfd Make mobile language dropdown push menu items instead of overlapping
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-06 21:56:04 +02:00
Maaxxs
e282a981a6 Add German/English language toggle for the storefront
Auto-detects the visitor's browser language on first visit, with a
manual dropdown switcher (flag icons) in the header and mobile menu.
Legal pages, the admin panel, and DB-driven content stay German-only.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-06 21:51:32 +02:00
Maaxxs
ca4d3a2079 Swap hero photo so the header needs no background trick at all
New hero (dual subwoofers + purple-lit amp panels) is dark enough
top-to-bottom that the transparent header's white text/icons read
cleanly without any pill or backing behind the logo - removed that
workaround entirely. The old hero photo moves into the "Einblicke"
gallery grid instead of being dropped.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-06 19:07:42 +02:00
Maaxxs
3b32d851a1 Make the logo's backing translucent instead of solid white over the hero
The logo has a transparent PNG background with a dark-gray wordmark,
so it needs a light backing to stay readable over the dark hero photo
- switched from solid white to a translucent frosted white (bg-white/50
+ backdrop-blur) so it reads darker/toned-down while keeping contrast.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-06 18:58:28 +02:00
Maaxxs
52bfd3791b Remove header contact bar, merge header with hero on the homepage
Drops the phone/WhatsApp/shop row that sat above the main navbar row
(still reachable via the fullscreen menu). On the homepage, the header
now starts fully transparent - merged with the hero image, icons in
white - and only becomes the opaque bar once the user scrolls past a
small threshold. Other pages keep the normal opaque header throughout,
since they don't have a hero to merge with.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-06 18:52:40 +02:00
Maaxxs
c5ea006f8d Replace dot grid with a subtle paper-grain texture, calm down the white
Swaps the dot grid for a fine SVG noise grain (evokes lightly crumpled
paper rather than a geometric grid), and darkens the base background
color in both themes so it's not a stark, glaring white/black anymore.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-06 18:12:57 +02:00
Maaxxs
0a1b7315f6 Add a subtle dot-grid texture to page backgrounds
Plain white/black backgrounds now have a faint brand-green dot grid
(24px spacing, very low opacity) instead of a flat fill, in both light
and dark mode. Applied site-wide via the public layout wrapper.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-06 18:08:05 +02:00
Maaxxs
1f57ba295f Increase mobile menu overlay background transparency further
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-06 18:00:38 +02:00
Maaxxs
48e6bd0712 Align close button height exactly with the hamburger icon, add transparency
Measured the hamburger icon's rendered vertical position at both
breakpoints and matched the close button's top offset to it precisely
(pixel-exact at 390px and 1280px viewports). Also adds alpha to the
overlay's background gradient so the blurred page content shows
through subtly instead of being fully opaque.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-06 17:58:25 +02:00
Maaxxs
17333f5988 Align the fullscreen menu's left edge with the hamburger icon
The menu content is now wrapped in the same max-w-6xl mx-auto
container the header uses, so its left inset matches the hamburger
icon's position exactly at every viewport width - previously they only
lined up on narrow screens, since the header's centered container adds
extra outer margin on wide viewports that the overlay wasn't accounting
for.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-06 17:54:05 +02:00
Maaxxs
b8af58d8d0 Fix broken menu fade-in and left-align the fullscreen menu
The single requestAnimationFrame used to trigger the fade-in was
unreliable - the browser could coalesce the hidden and visible states
into one paint, so items appeared instantly instead of fading/flying
in. Switched to a double-rAF, which reliably guarantees a paint of the
hidden state first. Also moves the menu content and close button to
the left side per feedback.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-06 17:48:34 +02:00
Maaxxs
3cc84c6c06 Use the same hamburger-triggered menu on desktop and mobile
The nav links no longer show inline on desktop - clicking the
hamburger icon now opens the same fullscreen overlay menu on every
screen size, instead of only on mobile.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-06 17:41:56 +02:00
Maaxxs
b3c1f68581 Enlarge logo, move nav links back to the left, animate mobile menu close
Nav links move back to the left side of the header (theme toggle back
to the right), logo is bigger, and the mobile fullscreen menu now
animates items back out in reverse order when closing instead of just
disappearing.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-06 17:38:20 +02:00
Maaxxs
e234a2435d Add photo gallery feature (brand -> project -> photos drill-down)
Mirrors the old site's Bildergalerie structure: a brand tile grid at
/galerie, project tiles within a brand, and a photo grid with a
lightbox for each project. Backed by new gallery_brands/gallery_projects/
gallery_photos tables and admin CRUD pages, gated by a new gallery.manage
permission.

Also fixes a real bug found while testing photo uploads: Apache's
mod_dir was redirecting POST /api/uploads to /api/uploads/ (a trailing
slash) because api/uploads/ exists as a real directory, silently
dropping the multipart body on every image upload across the whole
app. Fixed via DirectorySlash Off in .htaccess.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-06 17:04:46 +02:00
Maaxxs
b6909e756c Redesign navbar mobile menu and rework site color palette
Swaps navbar layout (theme toggle left, nav links right), replaces the
mobile dropdown with a fullscreen overlay whose items fly in top-to-bottom,
and renames the site-wide "slate" gray to "neutral" to remove a blue
undertone that clashed with the brand green. Also converts the flat
saturated-green YouTube and stats sections into dark backgrounds with
green used only as an accent, matching typical premium car-audio branding.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-06 16:21:48 +02:00
Maaxxs
95764039c7 Add admin-configurable website settings and VIN field to contact form
Adds a Website settings tab (hero image, phone, WhatsApp, email) that
feeds the navbar, footer and contact page via a new SiteSettingsContext,
redesigns the navbar with a bigger centered logo plus phone/WhatsApp/shop
links, and adds a VIN/chassis-number field to the contact form, admin
inbox and notification email.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-06 15:28:11 +02:00
Maaxxs
febe294129 Add admin panel shortcut icon to navbar when logged in
Neben dem Dark/Light-Umschalter erscheint jetzt fuer eingeloggte
Admin-Nutzer ein zusaetzliches Icon, das direkt zu /admin fuehrt -
sowohl Desktop- als auch mobile Navigation.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-05 16:42:35 +02:00
Maaxxs
060ea937e0 Fix footer legal links hidden behind floating CTA bar on homepage
Die fixierte "Bereit fuer deinen Sound-Umbau?"-Leiste auf der Startseite
ueberdeckte am Seitenende die letzte Footer-Zeile (Impressum/Datenschutz/
AGB-Links), da fixed-position Elemente unabhaengig vom Dokumentenfluss
ueber allem liegen. Footer reserviert jetzt auf der Startseite zusaetzlichen
unteren Abstand fuer die Leiste, auf allen anderen Seiten unveraendert.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-05 15:55:31 +02:00
Maaxxs
fe6b463135 Add first-time setup wizard (/setup)
Passwortgeschuetzter Assistent fuer die Ersteinrichtung auf einem neuen
Server: Datenbank-Zugangsdaten testen & speichern, Datenbankstruktur
anlegen, ersten Admin-Account erstellen. Sperrt sich danach dauerhaft
selbst, sobald ein Admin-Account existiert.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-05 14:06:12 +02:00
Maaxxs
f3ab7d0816 Initial commit: HifiPlanet Car-Hifi Shop (Frontend + Backend)
React/Vite Frontend (hifi-src) + PHP/MariaDB Backend (hifi/api) fuer
den Car-Hifi Umbau-Shop HifiPlanet in Amorbach, inkl. Admin-Panel,
2FA, Wartungsmodus, Cookie-Consent und rechtlichen Pflichtseiten.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-05 13:37:06 +02:00