Information architecture · UX · Next.js
The website of a candidate in a by-election to the Wręczyca Wielka municipal council. In 7 weeks I designed and built a site that leads from the programme to action: signing a petition, volunteering or saving the election date.
- 7weeks from the first commit to the end of the campaign
- 4forms with an e-mail and the election date as .ics
- −95%off the hero background source file
Context
One village, every vote
The by-election in district no. 3 covered only the residents of Wręczyca Mała. The site had to introduce the candidate and her programme, but above all turn a visit into a concrete action.
- by-election day
- 29.03.2026
- district no. 3 — Wręczyca Mała
- 1 village
- statutory spending cap for the whole committee
- 1514,56 zł
- from the first commit to the end of the campaign
- 7 wks
Signing a petition
Three local issues, a counter and an action plan.
Volunteering
A banner, leaflets, a donation or graphics to share.
The date in a calendar
An e-mail and an .ics file with reminders.
My part
- information architecture and paths
- UX of the forms and flows
- build: Next.js, Payload CMS, Prisma
- e-mails, analytics, SEO, accessibility
From the campaign
- visual identity and colours
- photos and graphics
- the programme and petition texts
Home page
The home page as a funnel
Each section answers a resident's next question and leads further down — from who the candidate is to where and when to vote.

The candidate. Her name, ballot position and two ways on: the plan or helping out.
Screenshots from the campaign period
Programme
Problem → solution
I presented the six pillars of the candidate's programme as tiles. Each opened a modal in two parts — the diagnosis and the proposals — instead of a long document to scroll.
Illustrative diagramIn the mock-up the programme's text is drawn as lines — the scene shows the layout, not the proposals.
Mój Kontrakt z Mieszkańcami
Below the pillars — a pledge to report every 6 months, so the programme can be held to account later.
- Availability
- A report every 6 months
- Transparency
See another problem? Report it.
The form stores the report and e-mails the campaign team.
Petitions
Petitions with an action plan
Three local petitions — for a playground, for rebuilding the platforms at Wręczyca station and for benches — share one template. Signing is the easiest step, and the timeline shows what happens next.
- FromResidents
- CoordinatorAleksandra Złotosz
- ToPKP PLK S.A.
Petition to rebuild the platforms at Wręczyca station
128of 200 signatures
8 days leftPlan to resolve the issue
- Collecting signaturesUntil 200 signatures
- Sending our appeal to PKP PLK S.A.Waiting for a reply
- Vote for Aleksandra in the local election29 March 2026
- We did it!The line runs more often again

The signing button always at hand
On desktop the signing form stays in view next to the text. On a phone, once the counter scrolls away, a “Sign” button pins to the bottom of the screen.
- 1Who, with whom, to whom Sender, coordinator and recipient right at the top.
- 2Counter and countdown A 200-signature goal and the days left.
- 3Election day on the timeline A highlighted step — in two petitions the plan carries on to the issue being resolved.
Screenshots from the campaign period
Signing
Signing on a phone, distraction-free
The “Sign” button leads to a separate screen: no menu, the cursor already in the first field. After signing — a thank-you page with sharing and an e-mail with the election date.
- 1No menuJust a back arrow and the petition's title.
- 2Cursor in the first fieldType straight away, no tapping needed.
- 3Postcode pre-filled42-130 — the municipality's code, filled in.
- 4“Select all”Three consents in one tap.
- 5Thanks and .icsSharing (Web Share API, Facebook, link) and an e-mail with the election date.
The site's interface is in Polish.


Reminder
Election reminder
Near the bottom of every main page there is the polling station and an “Add the election date to your calendar” button. The header button opens the same modal.
- E-mail firstThe address is stored and the resident gets an e-mail with an .ics file.
- Then the calendarGoogle Calendar in one click, or an .ics file for Apple Calendar and Outlook.
- Two remindersThe .ics file carries two reminders: 24 hours and 2 hours before election day.
The site's interface is in Polish.
Getting involved
Three ways to help
The “Get involved” page brings together three ways to help: volunteering, donations with the electoral code rules, and graphics to share on social media.
Wsparcie finansowe
Ważne zasady wpłat:
- Wpłat mogą dokonywać jedynie obywatele RP mający stałe miejsce zamieszkania w Polsce.
- Należy dokonać przelewu wyłącznie z osobistego konta bankowego.
- Limit wydatków dla całego komitetu w tych wyborach wynosi 1514,56 zł.
Odbiorca
KWW Razem dla Wręczycy
Tytuł przelewu (WAŻNE)
Darowizna na fundusz wyborczy
Numer konta
The account number is hidden in this presentation.
- Plakat pionowy
- Post 1
- Post 2
- Relacja
- Tło profilu
Online ambassador
Five ready-made graphics — a story poster, Facebook posts, an Instagram version and a cover photo — downloadable in one click.

Behind the scenes
The part nobody sees
Each of the four forms takes the same path: validation, a rate limit, storage, e-mails and an analytics event. Send a request and see where it stops.
- Formsignature, volunteer, report, reminder
- Rate limit5 per minute per IP address
- Zodfield validation, no HTML tags
- Prisma · Postgresstorage; one signature per e-mail
- Resendthank-you with .ics and a team notice
- PostHoga browser event and app errors
6 React Email templates
- Thanks for signingresident
- Welcome aboardresident
- Thanks for the reportresident
- Election reminderresident
- New volunteerteam
- New reportteam
PostHog events
- hero_cta_clicked
- petition_signed
- volunteer_signup
- bank_account_copied
Payload CMS
News posts run on Payload CMS embedded in the same Next.js app — no separate server.
- Lexical editor
- Polish field labels
- images in Vercel Blob
Quality
Accessibility, performance, discoverability
Things a resident won't notice — until they're missing: text that zooms, fast loading on a rural connection and answers in search.
Hero background
5243 KB → 277 KB
Target: WCAG 2.1 AA
- labels on every field
- aria-expanded in the menu and FAQ
- improved contrast
- accessibility statement (self-assessment)
Where and when do we vote?
Structured data
To make it easier for search engines and AI assistants to answer questions about the election — plus a sitemap and an llms.txt file.
- Person
- Event
- FAQPage
- Organization
- BreadcrumbList
- Article
- llms.txt
Security headers
Content-Security-PolicyStrict-Transport-Security · preloadX-Frame-Options: DENYCross-Origin-Opener-Policy
The site's interface is in Polish.
Gallery
The whole site
Screenshots from the campaign period, desktop and phone. Click to zoom.
Summary
From the programme to action
Seven weeks, one person building it, and a site that offers the resident a next step everywhere — a signature, help or a date in the calendar.
- Role
- Information architecture, UX, build
- Stack
- Next.js 16 · Payload CMS 3 · Prisma · Resend · PostHog
- Identity
- the KWW „Razem dla Wręczycy” campaign
- Time
- 7 weeks, 175 commits
