Vote Sosamala

A self-hostable, secure voting platform built for small public contests and Aurudu-style events.
Aurudu Release Home View
Aurudu Release Home View
Vote Sosamala is an open-source voting platform built for small events, beauty contests, and Aurudu competitions where voting needs to be fair and easy to self-host.

The problem

Small community and university contests often run voting through social media polls or Facebook reaction counts. These are easy to manipulate with bots and fake accounts, making the results unreliable.
I built Vote Sosamala to provide a lightweight, independent alternative where each participant can cast only one vote per category, without storing plain-text user details.

How it works

The app is built with Next.js and Supabase:
  • Google OAuth: Voters sign in with Google via Supabase Auth so no separate passwords or accounts are needed.
  • Category-based voting: Competitions can be split into categories, with each authenticated user allowed one vote per category.
  • Contestant pages: Each contestant gets a public page with shareable links and OpenGraph previews for social sharing.
  • Admin dashboard: An admin panel lets organizers review, approve, and manage contestants.
  • Real-time leaderboard: Vote counts update live as submissions come in.
Contestant Leaderboard Grid
Contestant Leaderboard Grid

Security model

  • Hashed emails: Voter emails are salted and hashed with SHA-256 before saving. No plain text emails are stored in the database.
  • Database constraints: One vote per category is enforced at the database level using a unique constraint on the category and hashed voter ID.
  • Protected vote flow: Votes are processed through Supabase RPC functions and server actions rather than direct client table inserts, with Row Level Security enabled.
  • Bot protection: API routes use Arcjet for rate limiting and bot detection to stop automated request spam.

Tech stack

  • Frontend: Next.js App Router, Tailwind CSS
  • Backend: Next.js server actions and API routes
  • Database and Auth: Supabase PostgreSQL with RLS, Supabase Storage
  • Security: Arcjet rate limiting and bot protection