Umami never received data: the client-side path (browser beacon to
/stats/api/send) has been dead in production. Pageviews are now
classified and recorded entirely on the server in the request proxy;
no tracking script ships to the browser anymore.
- Pure domain decision (decidePageview) filters real page views from
assets, infrastructure paths, prefetches and bot user agents
- Pure payload builder maps facts onto the Umami send contract as an
unnamed event, with the client identity travelling in headers
- proxy.ts wires request facts into the domain and fires the send
without delaying the response; configured via UMAMI_WEBSITE_ID and
UMAMI_API_ENDPOINT
- Removes the dead client analytics stack (components, adapters,
/stats proxy route) and its layout mount
The site now presents one freelance developer on one page: hero, introduction,
four typical cases (developer for a product, make an app reliable, automate a
process, a website) with what you get, how it runs and what it costs, a
process automation section, technology and project fit, how I work, two live
references, questions and contact.
- Hero and closing headline are drawn from running binary digits.
- Each case explains its four steps with an animated drawing; the automation
section shows example workflows with work travelling between systems; a
pipeline run shows what a test catches before a release.
- Contact is one email address, kept in parts and assembled in the browser so
it never appears in the page source (src/domain/email.ts, spec first).
- Imprint and privacy pages added.
- The old site (blog, case studies, contact form, fixed-price pages, video
rendering and related scripts) is removed. Its URLs redirect to the homepage.
- The deploy smoke test checks the legal pages and the redirects instead of
the removed case study.
- Dev scripts use docker compose v2.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Added Sentry/GlitchTip relay route handler
- Configured Sentry for client (with tunnel), server, and edge runtimes
- Refactored GlitchTip adapter to use official @sentry/nextjs SDK
- Fixed ComparisonRow type issues and Analytics Suspense bailout
- Integrated Sentry instrumentation into the boot sequence
- Refined hero sections for About, Blog, Websites, and Case Studies for a bespoke industrial entry point.
- Redesigned Marker component using layered SVG paths for an organic, hand-drawn highlighter effect.
- Restored technical precision in ArchitectureVisualizer with refined line thickness.
- Streamlined contact page by removing generic headers and prioritizing the configurator/gateway.
- Updated technical references to reflect self-hosted Gitea infrastructure.
- Cleaned up unused imports and addressed linting warnings across modified pages.
- fix: prevent code components from growing width during animation
- feat: enforce 100% width on browser frames (CodeWindow)
- feat: remove "Zurück" links project-wide from PageHeader
- feat: enable imgproxy face detection support for about page avatar
- Added imgproxy service to docker-compose.dev.yml with URL mapping
- Implemented robust Base64 encoding for imgproxy source URLs
- Synchronized NEXT_PUBLIC_IMGPROXY_URL and NEXT_PUBLIC_BASE_URL
- Refactored About page to use existing marc-mintel.png asset
- Created shared IconList component and unified list styles project-wide
- Fixed vertical alignment issues in IconList items
- Updated dev script with aggressive port 3000 and lock file cleanup