WorkCase study
MediaVision is a technology and marketing partner for the pharmaceutical industry. I built their bilingual marketing site: a statically exported Next.js front-end fed by headless WordPress, with a delivery pipeline that rebuilds the site automatically on every content change. I delivered it end to end through an AI-assisted engineering process.
- Client
- Technology and marketing partner for the pharmaceutical industry
- Role
- Architecture, front-end, DevOps
- Year
- 2026
- Stack
- Next.js 16 · TypeScript · Tailwind 4 · GSAP · Headless WordPress · ACF · Polylang · Yoast · Contact Form 7 · GitHub Actions


The tokens this page’s header is built from: colours read from the client site’s stylesheets, the typeface and the button.
Logo
Typeface
Poppins
Headings · 500
Palette
- Background#0A0A0A
- Text#FFFFFF
- Accent#24D46D
- Muted*#A3A3A3
* I picked the muted grey myself, for a contrast of at least 4.5:1.
Button
MediaVision needed a bilingual (Polish and English) marketing site with product and service pages and a portfolio of past work. The client had to be able to edit the content without a developer, and the site had to be fast and well indexed by search engines.

I built the site on a headless architecture. WordPress serves as the admin panel: ACF field groups are defined in code as local JSON, Polylang pairs the Polish and English content, Yoast supplies SEO metadata and schema, and Contact Form 7 submissions come through the REST API.
The front-end runs on Next.js 16 with the App Router and is built with output: 'export' to produce static HTML. Every page ships with full Polish and English defaults in code, so it renders correctly even without any content from the CMS. A single routes.ts file is the source of truth for localised routes.
The code lives in a GitHub monorepo. The staging branch deploys to a staging environment and main to mediavision.pl. GitHub Actions builds the static export and transfers it with rsync over SSH to shared hosting, excluding .htaccess.
A small WordPress plugin fires a repository_dispatch event whenever an editor saves content, which triggers an automatic rebuild of staging and production. Robots and indexing settings are driven by an environment variable, so a single WordPress instance can safely feed both a noindexed staging site and an indexed production site.
I re-encoded the hero video from 22 MB to 4 MB on desktop and from 28 MB to 3 MB on mobile. Images moved to WebP with explicit loading, decoding and fetch-priority attributes, and the video’s poster frame is preloaded.
The sitemap is generated after the build. Hreflang, canonical tags and JSON-LD come from Yoast, and the canvas and video sections carry text that search engine crawlers can read. The root path redirects to /pl/ with a 301, and www redirects to the apex domain.
I ran the whole project as an AI-assisted engineering process with Claude Code: a brainstorm, a written design spec, an implementation plan, parallel subagents building separate pages from Figma frames, a pixel-level audit of every page against the Figma exports in a real browser, and a review loop.
The bilingual content models and translation scripts were generated and verified the same way. AI was not used here as autocomplete, but as part of a disciplined process: spec, plan, review.
Editors publish content on their own, without a developer, and every publish triggers a fresh static build. The site runs in two environments, staging and production, and the front-end itself is fully static, so any host can serve it.
In a Lighthouse measurement on 27 October 2026 the homepage scored 98 for performance on a phone and 99 on a desktop, and 100 for accessibility, best practices and SEO on both.
Phone
- Performance
- 98
- Accessibility
- 100
- Best practices
- 100
- SEO
- 100
Desktop
- Performance
- 99
- Accessibility
- 100
- Best practices
- 100
- SEO
- 100
A website, a store, or help untangling a process. Send me an e-mail or a message on LinkedIn and I’ll get back to you.