Skip to content
voteMe.livevoteMe.livevoteMe.live home
EventsPricingBlogHelp
Sign inHost an event
voteMe.livevoteMe.livevoteMe.live home

Voting, ticketing, and awards nominations β€” built for African events, starting in Ghana. Transparent results, signed QR tickets, and USSD for every voter.

  • Twitter / X
  • Instagram
  • Facebook
  • TikTok
  • YouTube

Product

  • Events
  • Voting
  • Ticketing
  • Awards
  • Studio
  • Pricing

Organizers

  • For organizers
  • How it works
  • USSD guide
  • Verify a ticket
  • Sign up
  • Sign in

Resources

  • Blog
  • Help center
  • Contact
  • Status
  • Changelog
  • System notifications

Legal

  • Terms of service
  • Privacy policy
  • Refund policy
  • Acceptable use
Β© 2026 voteMe.live β€” All rights reserved.TermsPrivacyRefunds
Version 1.0

voteMe.live is operated out of Ghana and processes payments through Paystack. We never share voter details with organizers beyond what the event's registration settings authorize. Tickets are signed with a rotatable HMAC key so a compromised scanner cannot forge entries. Read more in our privacy policy and how it works.

How it works

One platform, three moving parts: voting, ticketing, and nominations.

This page is the short technical version of what happens behind the scenes when you run an event on voteMe. Three feature domains in order β€” voting modes, ticketing infrastructure, and nomination dedupe β€” then the payments and scheduling plumbing that ties everything together.

Host an eventSee pricing
  1. Home
  2. How it works
Voting

Three modes. One chosen at event creation β€” it cannot change mid-event.

Every event on voteMe runs exactly one voting mode. The authentication model is different for each, which is why the choice is permanent.

Paid voting

Award-style

Voters buy votes with MoMo or a card. The default for awards shows, pageants, and any contest where the organiser monetises the campaign.

You set the price per vote in GHS. Voters can buy as many votes as they want β€” unlimited per supporter, with instant Paystack confirmation each time.

Every paid vote produces a PDF receipt with the Paystack reference, event name, contestant, and amount. Revenue splits at the charge: 90 % lands in your Paystack subaccount, 10 % to the platform. Paystack processing fees are absorbed entirely by the platform β€” your payout is clean.

USSD is fully supported: voters dial the event short code, enter the contestant's 4-letter code, choose a vote count, and pay from MoMo β€” no smartphone, no data bundle. The vote lands on the live leaderboard at the same moment an online vote would.

The contestant's 4-letter USSD short code is generated server-side the moment the contestant is saved. There is no manual input field β€” you cannot type or customise it. This ensures uniqueness and prevents collision across events.

Voting FAQ

USSD

The half of Ghana without smartphones still votes.

Paid voting events and ticket sales on voteMe get a USSD channel automatically. Voters and buyers transact via MoMo from any handset β€” no app, no internet, no data bundle.

USSD is available for two flows only: paid voting and ticket purchase. Election-style and hot voting are not supported over USSD β€” the access-code verification model and anonymous voting model do not map cleanly to a USSD menu. The online path handles those modes fully.

The menu is deliberately shallow. A paid vote finishes in five screens or fewer. A ticket purchase finishes in five screens. Both flows trigger a standard MoMo PIN prompt β€” the same network prompt voters already know from every other MoMo transaction. The vote or ticket lands on the live leaderboard the instant the charge confirms.

Screen 1 of 5 Β· Welcome
voteMe *920*221#
voteMe.live
Welcome to our USSD access panel
1. Vote for contestant
2. Buy a ticket
Enter selection: 1_

Welcome

Voter dials the event USSD short code from any handset. No internet, no smartphone, no data bundle required.

1 / 5 screens

Ticketing

Signed tickets, gated properly.

voteMe ticketing is designed around one hard assumption: a QR that someone photographed off your phone cannot be used a second time. Every other piece of the system follows from that.
Signed payload

HMAC-SHA256 signatures, with rotatable keys.

The QR on a voteMe ticket is a base64url-encoded JSON payload β€” ticket id, event id, signing version, holder email hash, issued-at β€” concatenated with an HMAC-SHA256 signature.

Signature verification runs in the gate scanner before it touches the server. A tampered QR fails client-side and never produces a network call. A valid signature proceeds to server-side validation: status (issued / used / void / refunded / transferred), event timing, and a status transition to used inside a Firestore transaction so two scanners at two gates cannot both claim the same ticket simultaneously.

The signing version on the event's ticketing settings is the rotation primitive. Bump the version and all newly-issued tickets sign with the new key; outstanding tickets remain valid because the validator checks every known version. Rotate without invalidating sold tickets β€” something most ticketing systems cannot do without a migration.

The scanner

A PWA that installs on any staff phone.

Staff open a URL in their phone's browser, tap Install, and the scanner lives on their home screen. Fullscreen camera, haptic and sound feedback, offline queueing, manual 6-digit short-code fallback.

Successful scans flip the ticket status in a Firestore transaction and write an immutable TicketScan audit row. Failed scans also write a row with the result code β€” valid, already_used, void, invalid, wrong_event, not_started, ended, refunded β€” so attendance analytics are grounded in every attempted scan, not just successful ones.

When network drops mid-event, scans queue in IndexedDB with a tentative valid verdict. When the device regains connectivity, the queue flushes and audit rows land on the server. Any offline scan that turns out to be a duplicate is flagged in the audit feed for organizer review.

Ticketing FAQ

Nominations

Public nominations that deduplicate on the way in.

The reconciliation view is the headline feature of voteMe awards. Nominations are deduped at submission time and again in the dashboard, so you never face the 'Kwame Asante Jnr / Kwame A. / @kwameasante' problem alone.
Dedupe

Phone-number hard match, name and social soft match.

Every nomination is checked for an exact E.164 phone match (hard) and a fuzzy name plus exact TikTok plus exact Instagram match (soft) the moment it's submitted.

The public nomination page calls /api/nominations/dedupe-check with the normalized phone and category before the submit completes. The endpoint returns { exists: boolean } β€” never any nominator PII. If exists is true, the form shows a soft warning; the nominator can still submit if they genuinely believe the nominee is a different person.

TikTok handle is prioritised over Instagram in UI ordering, because Ghanaian awards nominees are more consistent about their TikTok handle than their Instagram handle. Both are soft signals β€” they surface amber badges, not blocks.

Promote

One click from NominationGroup to Contestant.

A promoted group becomes a full Contestant document with the canonical identity, a server-generated 4-letter short code, and the category assignment. Ready to be voted on.

You can run up to three rounds. Advancing a round carries forward only promoted contestants and archives the previous round's results to a read-only tab. Paid nominations carry a fixed 5% platform fee β€” you keep 95%. Free nominations cost nothing.

Every merge, split, rejection, and promotion writes to the audit log with the organizer identity and timestamp. When a losing candidate asks for an audit, you have the full record.

USSD for nominations

Nominators on basic phones are not excluded.

A nomination USSD flow is not part of v1, but the nomination form is a mobile-first web page designed to work on 2G connections and low-end Android devices with no JavaScript fallback issues.

The form progressively enhances β€” it submits with a standard HTML form post if JavaScript is unavailable, and the dedupe check runs server-side on submission rather than client-side in that case. This means any browser, any connection speed, any device can submit a nomination from the event URL.

Nominations FAQ

Payments

Paystack everywhere, with automatic split settlement.

Every paid action β€” a vote, a ticket, a nomination fee β€” runs through a single Paystack subaccount provisioned per event.

One subaccount, reused across voting, ticketing, and nominations. Paystack splits the payment at the charge: 90% of vote revenue to your subaccount on paid voting; 95% on ticketing and paid nominations. Paystack's own processing fee comes out of our share β€” your payout is always clean, no Paystack line item to subtract.

All Paystack subaccounts created for paid events are set to manual payout β€” no scheduled automatic payouts. You control when money moves. Withdrawals are OTP-gated: we email a 6-digit code, you enter it, and the request enters the finance-admin approval queue. Approval triggers the Paystack transfer. Every transaction, successful or not, writes a row to the unified Transaction ledger so your finance dashboard always matches your bank statement.

The plumbing

  • Paystack-securedSplit payments, no card data ever touches us.
  • HMAC-signed ticketsRotatable keys so a leaked code cannot be reused.
  • USSD for every voterReach voters without internet via USSD code *920*221#
  • No hard deletesEvery action is logged. Nothing vanishes quietly.
In one sentence

voteMe runs voting, ticketing, and nominations on one event document β€” with Paystack split payments, HMAC-signed QR tickets, phone-based nomination dedupe, and USSD for paid voters and ticket buyers.

Next

Know enough? Start your event.

The creation wizard walks through event type, voting setup, ticketing configuration, nominations, and Paystack subaccount provisioning in under ten minutes.

Host an eventRead pricing details
How it works Β· voteMe.live Β· voteMe.live