Photographer website in Kassel, team project

A new website for a photography studio in Kassel: 16 pages, static, with its own Node server for delivery. A team project: 39 commits, 8 of them mine. My part sat on the side you do not see: getting a third-party chat widget in so that it does not load at all without consent.

Before and after

Fritz ist Frieda, Before and after
On the left the previous website, on the right the current one. Both captured at the same window width, with the cookie bar removed.

My part

  • ADON CRM chat widget embedded across all 15 pages, not as a direct script tag but through a consent loader: before consent it is not in the DOM at all
  • Took the third-party widget apart before letting it in: XHR with polling, Shadow DOM, no iframe, no WebSocket, talks only to its own endpoint
  • Added a new “Functional” cookie category and raised the consent version. A new processing purpose means asking again
  • Extended the CSP on the server: the widget host added to script-src and connect-src
  • Cookies set according to Planet49: analytics and marketing off by default, functional too
  • Added a section on the chat to the privacy statement
  • Above the fold: image frame set so the photo fills it; studio copy reworked

Verification

  • Before consent: no widget in the DOM, checked by selector, the script is simply absent
  • After accepting “Functional”: the widget is injected and builds its Shadow DOM interface
  • On a repeat visit with stored consent it loads by itself
  • No CSP violations in the console; the API connection is allowed, and neither iframe nor WebSocket is needed
  • The whole procedure sits in the repository as an integration journal, traceable, not merely claimed

Stack: HTML, CSS, JavaScript, Node.js (delivery and CSP), Docker

fritzistfrieda.de