Skip to content
All work
NODE_01 Live LIVE PRODUCTION

VoicesZA

Civic platform

A South African civic platform for recording experiences at public offices, gathering them into campaigns, and keeping them as a structured public record.

at voices.org.za
Live
to put an account on the record, for good
Free
automated tests
800+
The VoicesZA record in its dark theme before the first account: the headline, a line saying no account or name is needed to be first, and the button to add one.

// What it does

Accounts

Sign-up, sign-in, settings and notifications, so a person can follow what happens to what they wrote.

Phone verification

An author can confirm their phone number by SMS. It is optional, and a verified account is marked as such.

A structured record

Every account is tied to the specific office it concerns, so accounts about the same place can be read together.

Offices

A public register of offices, each with its own page and the accounts about it.

Campaigns

Accounts about the same thing can become a petition, a pledge or an open letter, with share cards and short links.

Search and filters

An explorer to search and filter the whole record.

Six languages, in progress

Menus and the front page in English, Afrikaans, isiZulu, isiXhosa, Setswana and Sepedi; the rest follows once first-language speakers have reviewed it.

Payments and donations

Built for when charging begins: Paddle for cards worldwide, Payfast for Instant EFT and SnapScan in rand, and donations.

Support and legal

Terms, privacy, refunds, delivery, support and contact pages, and moderation with separate roles.

In production

Live behind Cloudflare, monitored, and tested before every release.

Captured from the running app, not mocked up. Select one to see it full size.

  • The register: 61 public offices, national, provincial, local and Chapter 9, each with a permanent page that keeps its record.
  • Adding an account: no sign-up, no full name, and a reminder before you write that a date and a place can identify you.
  • How the record works, written out in full: what "verified" means and does not mean, how readers correct it, and how to take your own account down.
  • Pricing: putting an account on the record is free for good, and campaigns cost nothing until 31 March 2027.
  • The same form on a phone, where most accounts will be written.

1 / 5

The VoicesZA register of public offices: a search box, sphere and sort filters, and a table of offices such as the Auditor-General and the City of Cape Town with their counts of accounts, verifications and campaigns.
The register: 61 public offices, national, provincial, local and Chapter 9, each with a permanent page that keeps its record.
The VoicesZA form headed Tell us what happened: a choice of office, a one-line summary, and a highlighted warning that the account is public and should not name officials.
Adding an account: no sign-up, no full name, and a reminder before you write that a date and a place can identify you.
The VoicesZA page What happens to what you write, and why you can trust what you read, with its first section on writing an account and an In short panel of rules.
How the record works, written out in full: what "verified" means and does not mean, how readers correct it, and how to take your own account down.
The VoicesZA pricing page headed Everything is free right now, with a panel saying nothing is charged before 31 March 2027 and an explanation of why.
Pricing: putting an account on the record is free for good, and campaigns cost nothing until 31 March 2027.
The VoicesZA account form on a phone screen, with the office picker, the one-line summary and the privacy warning stacked down the page.
The same form on a phone, where most accounts will be written.

// The problem

Experiences at public offices are usually shared one at a time — in a call-centre queue or a social media post — and are hard to find again, compare or verify. There was no single place that keeps them as a structured record, tied to the office concerned, where accounts about the same thing can be read together.

// What was built

  • First-person accounts, each tied to the office responsible, with optional phone verification of the author.
  • Escalation: when enough accounts describe the same thing, they become a campaign — petition, pledge or open letter.
  • Moderation, office pages, and public statistics about the record.
  • Payments for campaigns later on: Paddle for international cards, Payfast for Instant EFT and SnapScan in rand.

// Engineering

  • Laravel and Livewire, rendered on the server, fast on cheap phones and slow connections.
  • Two payment providers behind one interface; the part that differs is the browser flow (an overlay against a signed redirect), not the server.
  • Over 800 automated tests, run before every release; production behind Cloudflare with error tracking and live monitoring.
  • SMS verification through a provider behind one service, so the check can be swapped without touching the pages that use it.
  • A language switch for six languages, with the translations drafted and waiting on first-language review, and share images generated per campaign.

Built with

Laravel Livewire Alpine.js Tailwind MySQL
Status
LIVE PRODUCTION
What it is
Civic platform
Public address
voices.org.za

// How it got here

  1. Apr 2026

    Started as its own repository.

  2. Aug 2026

    An accessibility sweep, design tokens across every page, and policies and rate limits on every action.

  3. Aug 2026

    Paddle takes international cards, as merchant of record.

  4. Sep 2026

    Production readiness, and live at voices.org.za behind Cloudflare.

  5. Sep 2026

    Payfast built beside Paddle, for Instant EFT and SnapScan in rand.

  6. Oct 2026

    A new mark, and share cards generated for every campaign.

  7. Nov 2026

    846 automated tests passing, with a browser suite auditing every page for accessibility.

// What comes next

  • Charging for campaigns starts on 31 March 2027, and only for campaigns. Sharing an account stays free for good.
  • Payfast goes live when charging does, so organisers without a card can pay in rand.

// Notes on VoicesZA

// Open for work

Want something like this, built to your own brief?

Fast, accessible, and built to last — no page builders, no template you'll outgrow in a year. Tell me what you need and the contact form goes straight to my inbox.