Vagabov Agency
Bad Ems election campaign – homepage with the candidate's portrait on an Apple Studio Display mockup

2026 – Campaign website for a mayoral candidate

Bad Ems election campaign

Service

Campaign website: concept, design & development

Client

Markus Bodo Wieseler, mayoral candidate in Bad Ems

Date

September 2026

Technology

Next.js 15 (Static Export) · Tailwind CSS v4 · Motion · Netlify Forms

Candidacy announced. Website live. Same day.

Markus Bodo Wieseler is an entrepreneur from Bad Ems who has sat on the town council for 13 years – and since September 2026 he has been running for mayor. We had built his personal landing page in 2025; for the campaign he needed something different: a site that gets people involved and stays up to date every week until election day.

The calendar set the brief. The press release announcing the candidacy was due out on Monday – and the website had to be up at the same moment. The briefing arrived on Saturday afternoon: portrait photos, CV, logo. On Monday morning the first version went online, followed by eleven deploys of fine-tuning by the evening.

We build the website – the candidate does the politics. The result is a one-page campaign site that carries on without an agency: events, testimonials, plans, news and the election date live in simple text files that Markus Bodo Wieseler maintains himself.

  • Concept & structure of a campaign website
  • Design system: navy, sunshine yellow, Archivo
  • Next.js 15 with static export, Tailwind CSS v4, Motion
  • Countdown to election day & postal voting guide
  • Video section (YouTube embed with local fallback)
  • “Your idea” form via Netlify Forms with spam protection
  • Get-involved modules: poster, flyer, invitation via a pre-written email
  • Events with calendar export (ICS, Google Calendar, map)
  • Before/after slider: Bad Ems in 1898 and today
  • QR code generator for posters and flyers
  • Content editable via JSON – no code, with a guide in German
  • Legal notice (Impressum), privacy policy & image credits

Live in 43 hours

Saturday, 16:54: photos and CV arrive via WhatsApp. Monday, 11:53: first deploy. That was possible because the concept came before the code – eleven sections, each with one job: inform, persuade, get people involved, lead them to the vote. Whatever was still missing (events, testimonials, a confirmed election date) got an honest placeholder instead of an empty space.

Built for campaigning, not for show

Every section sets something in motion. Get involved means one click opens a ready-written email for a poster, flyer or invitation. Events go into your calendar with one click, route included. Your idea is a real form that arrives in the Netlify dashboard – with the promise that every message is read personally. And the QR code in the footer is print-ready for posters.

Maintained without an agency

Everything that changes during the campaign lives in five JSON files: events, testimonials, plans, news, election date. Past events disappear automatically, an unconfirmed election date shows a “provisional” note, and empty sections hide themselves along with their menu item. The README explains every step in German – no need to call a developer.

Motion in moderation

Thirteen animation components – from the countdown whose digits slide upward to the before/after slider between the Kurhaus of 1898 and today – are custom builds on top of Motion, with no external UI packages. All of them respect the system setting for reduced motion; the site stays a static export with 3.5 MB of images for the entire site.

A closer look

Bad Ems election campaign – hero section with the slogan “Aus altem Glanz zur neuen Stärke” on a MacBook
Bad Ems election campaign – the “Ihre Idee für Bad Ems” (your idea for Bad Ems) form on a MacBook Pro
Bad Ems election campaign – homepage on a foldable smartphone held in a hand
Bad Ems election campaign – mobile homepage on an iPhone in front of a blue perforated metal wall