VOICESOFGHANA

Voices of Ghana · rapid-response civic action · est. 2021 (concept)

RAISE YOUR VOICE.

A national, non-partisan drive to get every eligible Ghanaian onto the 2026 voters’ register. No party. No noise. Just the count — and your name in it.

The current campaign · nº 06

COUNT EVERY
VOICE

Roughly one in five eligible adults never makes it onto the voters’ register — not from apathy, but from friction: a missing card, a moved house, a centre nobody could find, a queue nobody could stand in. Count Every Voice exists to remove that friction, street by street, before the window closes.

We are not telling anyone how to vote. We are making sure that, when the day comes, whether you vote is your decision — not a clerical accident. That is the whole campaign. It fits on a poster, and it should.

  • Check. Confirm your name and centre before deadline week — not during it.
  • Carry. Ghana Card in hand; help one neighbour replace a missing one.
  • Bring one person. If every registered voter registers one more, the gap closes in a single season.

Do something today · pick one

THREE WAYS
TO ACT

  1. SIGN

    Put your name on the pledge. It costs sixty seconds and it tells your district organiser one more person is checked, carded and counted. Numbers move officials; names move numbers.

    Add your name →
  2. SHOW UP

    Saturday registration walks run in all 16 regions through September. Two hours, your own neighbourhood, a clipboard and a route. You knock, you check, you point people to their centre.

    Volunteer for a walk →
  3. SPREAD

    Talk to three people this week — one at home, one at work, one you’d normally never ask. The poster kit below is type-only on purpose: print it anywhere, in any language, on any wall.

    See the poster wall →

Movement goals — where we’re headed, not where we are

THE 2026
TARGETS

50,000
pledges signed before the window closes
16 / 16
regions with an active volunteer cell
260+
Saturday registration walks completed
ONE
register that misses nobody who wanted in

Stated as targets for the 2026 drive — deliberately not claimed as achievements. A campaign that inflates its own numbers has already lost the argument for honest counting.

Concept archive · five drives, one voice

THE POSTER
WALL

Every campaign ships as pure typography — no photos, no faces, no heroes. Type prints cheap, translates fast, and belongs to whoever pastes it up. Illustrative campaigns for a fictional organisation.

Sixty seconds · sixteen regions · one register

ADD YOUR
NAME

Signing puts you on the campaign roll — walk invitations, deadline reminders, and nothing else. No party lists, no data resale, ever. (Concept form: submissions demonstrate the flow; no real campaign is collecting data.)

Design-thinking case study

PROCESS

The brief

Adapted from a public RFQ by a high-traffic advocacy organisation seeking a rapid-response campaign platform: launch a new national campaign in days, not weeks, with a clear action funnel and zero visual dependence on photography budgets.

Concept project — adapted from a public RFQ. Frontend only; the signature counter, countdown target, pledge figures and campaign archive are illustrative concept content, framed as goals — not real statistics. Not affiliated with any real organisation, party or electoral body.

The problem

Advocacy sites die two deaths: they either shout so hard they read as partisan noise, or they hedge so carefully they inspire nothing. The design problem was a voice that is urgent but responsible — a fire alarm you trust precisely because it never cries wolf.

Direction chosen — and rejected

Chosen: the protest-poster stack. One ink-cheap palette (black, white, alarm red), one shouting typeface, torn edges and stamps — the visual grammar of things pasted on walls in a hurry, executed with editorial discipline.

Rejected: a photo-led "faces of the movement" layout (needs a photography pipeline the RFQ couldn’t fund, and faces politicise); a dashboard-first data site (numbers without a demand persuade nobody); and a multi-page campaign CMS mock (the single poster-stack page ships faster, which is the rapid-response requirement).

Key decisions & trade-offs

Honesty over hype: every figure is labelled a goal or a concept number, because a counting campaign that fakes its count is self-refuting. Type-only posters trade visual variety for infinite reproducibility. Kinetic type slams once, then holds still — urgency on arrival, readability forever after. Intended impact is framed as design goals: a sub-minute path from landing to signed pledge, and a poster system any chapter can reprint from a text file.

How this was built · teaching artifact

GUIDE

Concept & direction

Poster energy from typography alone. Anton is the shout — a single compressed weight, all-caps, leading at 0.85; Inter (variable) is the responsible voice underneath. Three colours only: near-black #0C0B09, paper #F7F5F0, alarm red #E8341C. Red on black holds 4.9:1 contrast, so the alarm colour is also a legal text colour.

Toolchain

Fable 5 as designer-engineer, directed by Hannah Kwakye. Static hand-authored HTML/CSS/JS — no framework, no build step, no libraries. Two self-hosted woff2 files (~67 KB total), preloaded. All motion is CSS keyframes plus one IntersectionObserver; the whole page ships far under the 250 KB budget.

Everything is code-drawn

An environment constraint turned creative thesis: no rasters exist anywhere. The torn-edge dividers are hand-plotted SVG polylines (preserveAspectRatio="none" stretches one jagged path to any width). The rotating stamp is an SVG <textPath> on a circle. The poster wall is CSS composition — six 3:4 cards typeset individually, each with a ghost year numeral for paste-up depth. Even the favicon is an inline SVG data-URI.

Deploy

Netlify, CI-driven from the monorepo: sites/voices-of-ghana publishes as-is with immutable asset caching and standard security headers via netlify.toml. Forms are handled by Netlify Forms at the edge — the static page never talks to a server of its own.

The signature moment, reproducibly

The slam-in hero is three words, each in a wrapper that owns opacity and a .slam-inner that owns transform — so the settle rotation (−1.2°, 0.8°, −0.6°: the paste-up crookedness) survives the animation’s forwards fill. Keyframes run scale 2.2→0.94→1 with a hard step at 55% to fake impact; a 90 ms stagger makes it percussion, not chorus. Animations start only after document.fonts.ready resolves (a 700 ms timeout guards it), so Anton never slams in as a fallback font. Under prefers-reduced-motion every keyframe, the ticker and the stamp’s 26 s spin are disabled — the hero simply is, fully settled, no JS required.

Iteration log

  • Pass 1 — critique (3 widths). Hero read as centred and polite at desktop — moved to hard-left rag with the stamp overlapping the headline; the stamp in turn sat on the kicker's "(concept)" note at tablet and mobile, so the kicker now reserves the stamp's column; poster wall gained per-card rotations so the grid stopped looking like a component library; the campaign section carried a dead field of paper before the diagonal banner and was tightened.
  • Pass 2 — elevation. Deepened the hero twice: the red flash-bar wipe and oversized period on VOICE., then three paste-up strips (16 REGIONS / ONE REGISTER / YOUR NAME IN IT) slamming into the dead zone under the stamp; the action card's countdown digits got tabular slabs with a once-per-second tick, and the pledge bar animates to 24% on scroll; each archive poster gained a ghost year numeral so the middles read as printed paper, not empty divs.
  • Pass 3 — ship quality. Every anchor, both redirect stubs and the hub link tested; Netlify form submits with honeypot + inline success (and a ?success fallback); AA contrast audited — overlines on paper switched from red to ink, the red poster's caption lost its opacity fade; reduced-motion verified at all three widths — slams, ticker, marquee and stamp all settle fully static; zero console errors; copy proofread against the "urgent but responsible" register.