Back to projects

Case study · Web App / Civic Tech

VoiceFor — Community Petitions

A petition platform for launching campaigns, gathering signatures, and tracking outcomes.

Next.jsTypeScriptReduxPostgreSQL

Demo login

Staff demo login when demo admin is seeded. Public browsing may work without login.

Production systems and real client data are not connected here.

Username
demo
Password
••••••••••••
Open login page →
VoiceFor — Community Petitions
Role
Full Stack Engineer — product features, state management, and public campaign UX
Timeframe
2025–2026

Overview

VoiceFor is a civic petition product: organizers create campaigns, supporters sign, and progress is visible. The engineering focus was a trustworthy public flow plus an organizer-facing side for managing campaign state.

Problem

  • Petition tools need both a persuasive public page and an ops view for organizers.
  • Signature collection must feel fast and credible on mobile.
  • Campaign lifecycle (draft → live → closed/victory) needs clear status handling.

Approach

  • Split UX into public campaign discovery/signing and authenticated organizer management.
  • Used typed client state (Redux) for multi-step campaign and signature flows.
  • Designed signature and share paths to minimize friction on phones.
  • Kept demo/deployment boundaries honest for portfolio showcasing.

Architecture

  • Next.js for SEO-friendly campaign pages and app routes.
  • Redux for predictable client state across multi-step interactions.
  • PostgreSQL-backed persistence model for campaigns, signatures, and users.
  • Public GitHub repo for code review during interviews.

Outcomes

  • A civic-tech case study with both product thinking and implementation detail.
  • Open-source link recruiters can inspect alongside the live UI preview.
  • Reusable campaign/status patterns for other community products.

Tradeoffs

  • Portfolio live demo prioritizes UI/flow; production auth/DB wiring is environment-specific.
  • Moderation/spam controls are part of a fuller production rollout beyond the preview.