3 Commits

Author SHA1 Message Date
mivanchenko c3e520aabb Rate-limit public bookings per contact; add direct owner contact endpoint
Test backoffice (smb-crm) / test (push) Successful in 1m43s
Public booking API now rejects a 6th active booking from the same
customer_contact within 24h (429), stopping one contact from filling
every slot on every resource, while owner-entered manual bookings stay
unaffected.

Add POST /api/contact: client sites can reach their own owner's inbox
directly (via their existing login email) for general inquiries,
separate from the agency's leads/Telegram pipeline (n8n/lead-intake.json),
which stays reserved for actual prospects contacting the agency itself.
Paris Barber Shop's contact form and Rückruf widget now point here; the
Rückruf floating widget itself has been removed from the site.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-12 04:47:06 +02:00
mivanchenko bcb2672d9f Add Paris Barber Shop logo to nav, footer, and favicon
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-12 03:53:29 +02:00
mivanchenko d66511156a Track paris-barbershop client stack + mailcow-admin playbook in git
Both existed only on the live server / untracked locally until now.
Includes the open/closed status fix: the Filiale status badge was
hardcoded as "Geöffnet · schließt um 20:00" regardless of actual time
(caught showing "open" at 3am) -- now computed against the shop's own
Europe/Berlin clock and real weekly hours.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-12 03:11:10 +02:00