# Projects · Kamil Oczkowski

> Selected work from E.ON Next, Maglabs and Intent.ly, and what I build at home. Most recent first.

## Work

### Next.js and Vercel, across every brand

2026 · e.on next

Led the migration of all customer-facing sites to Next.js on Vercel, backed by the design-token system and a shared Storybook. Now bringing Vercel costs down with on-demand ISR, time-based revalidation and faster merge-request previews that stay inside Contentful's API limits. CDN and pipeline caching have cut AWS costs by 40%. The sites serve over two million customers.

- Before the move, the Next.js app was statically exported to S3: every content change meant a rebuild and a redeploy, simple third-party data needed its own proxy API, and preview builds hammered the CMS.
- Evaluated Vercel, Amplify and SST (OpenNext) against SLA, on-demand ISR and streaming, and presented the findings to leadership.
- The migration plan put the S3 app and Vercel behind one CloudFront distribution, so the move happened with no downtime and a backwards-compatible trial phase that confirmed the cost estimate.
- The deployment process runs on merge-request previews, with a protection bypass for internal reviewers without Vercel seats and build and deploy logs visible from GitLab.
- Content updates now go live with no wait, previews no longer hit the CMS until a page is opened, and the operational cost matched AWS.

Tags: next.js, vercel, contentful, isr, cloudfront

### Auth0, company-wide

2026 · e.on next

The group signed with Auth0 for every European business, and I was put in charge of planning the move of the UK customer base, around two million customers, from the customer platform's own login to Auth0, with account data staying where it was. Drove the rollout with another staff engineer: designed the process, got the teams ready for it, branded the login screens for each brand, and added observability across the first projects to adopt it.

- A proxy migration rather than a one-off import of the credentials database: customers trickle into Auth0 as they log in or reset a password, each app moves at its own pace, and the legacy login is switched off last.
- Three phases: proxy, then trickle, then decommission. Customers are moving over without interruption or downtime.
- Authentication is fully observable on New Relic dashboards that combine our own events with the events Auth0 streams.
- Every project was prepared for the switch, including those on different Auth0 SDKs, and stakeholders across teams were kept aligned along the way. The result is one security standard for all applications.

Tags: auth0, new-relic, observability

### Design-token system

2023 → 2026 · e.on next

Started as a proof of concept I led as a senior engineer, now in use across high-traffic pages and behind every customer-facing site. Tokens are managed in Tokens Studio, built with Style Dictionary, and ship with a Storybook maintained for designers and developers together.

Tags: style-dictionary, tokens-studio, storybook, react

### Delivery pipeline: an hour to minutes

2023 → 2026 · e.on next

Rebuilt the deployment and feature pipelines, cutting runtime from around an hour to 12 minutes, and to 7 in some repositories. Added a rollback mechanism that reverts or freezes deployments within minutes when observability alerts fire. Then removed the release ceremony altogether: e2e-tested features merge straight to main behind feature flags, taking time to delivery from days to hours, with tooling that helps the QA team write and prove test cases faster.

- The starting point was an hour-long pipeline and a two-hour path to production, with third-party dependencies that could fail the whole run and block even emergency fixes.
- The trade-off was deliberate. A release ceremony and a develop branch were safe but slow, so both went, replaced by merge-request pipelines that fail fast: smoke and critical-path end-to-end tests on every merge request, a scheduled full end-to-end run against production, and a one-step rollback and deployment freeze.
- Runtime came down through unit-test sharding, right-sized runners, caching for builds, the UI library, dependencies and GraphQL introspection, and job dependencies rearranged so later stages start early.
- Third-party outages no longer block a deploy, and the QA team trusts releases more because the end-to-end tests catch problems first.

Tags: gitlab-ci, playwright, feature-flags, new-relic

### Accessible navigation on Contentful

2022 → 2023 · e.on next

Rebuilt the navigation system on Contentful and made it fully accessible, with the standard enforced through ESLint and Axe. Led a major dashboard rewrite in the same period.

Tags: contentful, accessibility, axe, eslint

### Digital asset management platform

2021 → 2022 · maglabs

A digital asset management platform that brands such as Universal, Morrisons and Heinz used to manage their brand assets. My main project was the upload tool. Alongside it, developed the approval and comment workflow, refactored the legacy codebase to improve performance and fix bugs, then rebuilt the front end from scratch for the product release.

- Uploads are multipart and recover from a failed transfer rather than starting again.
- Many files can be uploaded and assigned to one project in a single go.
- Media assets up to 20 GB are handled.

### Client tags: tree shaking and bundle splitting

2019 → 2021 · intent.ly

Developed client triggers and proofs of concept, and introduced Webpack tree shaking and bundle splitting for the client tags. Refactored backend PHP and built widgets for the internal analytics dashboard.

Tags: webpack, javascript, php

## Personal

### Home automation platform

2025 → now · home

Home Assistant OS in a VM on the Proxmox host, designed, built and run on my own since early 2025. A Zigbee sensor network talks over MQTT, the cameras feed Frigate with a Hailo-8 doing detection on-device, a small Python fetcher pulls half-hourly smart-meter data, and every change lands in a decision log. Claude Code runs inside the server and operates it through a backup, config-check and reload routine, with the hard rules written into the project's instruction file.

103 automations · 2,361 entities across 178 devices · 29 zigbee devices · 19,000 words of documentation · statistics since february 2025

- Gemini checks a camera snapshot before a notification goes out, which cut the false alerts caused by passing foliage and wildlife.
- Courier logos are a detection class of their own, so a branded van on the street or a driver at the door produces a "driver at the door" message, and a tracking number pasted into the dashboard arms the watch once the parcel is out for delivery.
- One speaker, three lanes: queued announcements wait for the speaker to be idle, priority ones interrupt, safety ones bypass everything, and anything that arrives out of hours is parked and replayed on the first arrival home.
- Tuned from data rather than guesses. An automation that cut the garden lights on seated guests was redesigned after recorder forensics showed the cameras miss a still person most of the time, and the replacement was replayed against ten days of recorded door events before it shipped.
- The smart-meter feed lands in late half-hourly batches, so the fetcher reports the most recent complete day with exact tariff-band costs, and upstream sensors that proved wrong are quarantined rather than displayed.
- A home-grown subsystem was swapped for an off-the-shelf integration behind a compatibility layer with two-way sync, so the fourteen automations that depended on it kept working through the cutover and the old logic stayed documented as the rollback.
- Nightly health sweeps catch dead sensors, detection drift and a stalled Zigbee bridge, and a Monday digest lists batteries, updates and stale devices. Every automation carries its rationale and change history in its own description, because the editor strips YAML comments.

Tags: home-assistant, zigbee, mqtt, frigate, hailo-8, python, gemini, claude-code

### Home server on a rack

2025 → now · home

A network rack built at home in November 2025: a UDM Pro doing routing and switching, Cat6 runs I pulled through the house myself, and a server on Proxmox hosting the VMs and LXC containers everything else lives in.

Tags: proxmox, udm-pro, lxc, linux

### Home renovation

2022 → now · home

A house renovation under way since September 2022, with the hands-on parts done myself: the demolition, partition walls with sound insulation, water-based underfloor heating, and the cabling, armoured Cat 8 plus fibre out to the garage.

Tags: underfloor-heating, sound-insulation, cat-8, fibre
