Work

2026

SADA: Political Electoral Registry Web App

DevFrontendBackend

A full-stack internal web application for managing the political-electoral registry of a party in San Antonio de Areco, Argentina, built on Next.js 14 with Google Sheets as the sole backend.

Technologies

  • Next.js 14 (App Router) React Server Components model with built-in API routes and full-stack single-deployment capability.
  • TypeScript 5 (strict mode) Enforced throughout with no `any`, full strict flags, and domain types derived from the schema.
  • Google Sheets API (googleapis) Sole backend, reading and writing via Service Account with a column-map abstraction to avoid hardcoded indices.
  • NextAuth v5 (beta) Google OAuth SSO with a custom sign-in callback validating users against the Usuarios sheet whitelist.
  • Zod + React Hook Form Schema-validated forms on client and server, with live duplicate-DNI detection and dependent dropdowns.
  • Tailwind CSS + shadcn/ui + Radix UI Component library and utility-first styling implementing the custom "Digital Manifesto" design system.
  • Recharts Powers the analytics dashboard charts: circuit breakdown, age ranges, gender donut, affiliation by year.
  • ExcelJS + @react-pdf/renderer Generates XLSX and PDF exports for registry, birthdays, addresses, member profiles, and analytics reports.
Screenshot of the SADA electoral registry dashboard.

Project Overview

SADA is a purpose-built internal CRUD web application for managing the political-electoral registry (padrón) of a political party in San Antonio de Areco, Buenos Aires province. It replaces manual spreadsheet workflows with a secure, multi-user dashboard that reads and writes directly to a Google Sheets backend, with no traditional database required. The system handles voter records across 34 data fields, supports political classification (MDF vs. OTRO), tracks party membership, and provides analytics, export tools, and a bulk address review workflow.

Objectives

  • Centralized Registry Management - Provide a single, access-controlled source of truth for voter and affiliate data replacing fragmented spreadsheet operations.
  • Political Classification - Surface and manage the key AFINIDAD field (MDF | OTRO) across all views to support internal campaign decisions.
  • Data Quality - Implement a structured address-review workflow (VALIDA / REVISION / ERROR) to clean and verify existing registry addresses.
  • Export & Reporting - Enable one-click exports of the full registry, birthday lists, address reports, individual member profiles, and analytics, in both XLSX and PDF formats.
  • Secure Multi-user Access - Authenticate users via Google SSO with a whitelist maintained in the same Google Sheet, tracking which internal contact contributed each record.

Project Workflow

  • Design System First - Visual identity was defined upfront using an editorial design language inspired by Argentine Peronist political graphics: bold typography (Space Grotesk + Inter), high-contrast primary blue (#0253cd), and a strict no-border rule using color layering and whitespace instead.
  • Schema Design - A 34-column Google Sheets schema (BASE tab) was designed and versioned (v2 → v2.1) with column-map abstraction in code to prevent index drift across migrations.
  • Next.js App Router Architecture - All protected routes live under a single authenticated layout. Server Components handle initial data fetching; URL Search Params persist filter state across navigation.
  • API Layer - REST-style route handlers manage the full CRUD lifecycle: list with filtering and pagination, create, full-record update, logical soft-delete (ESTADO → INACTIVO), and a dedicated address-correction endpoint that writes only specific columns without touching read-only fields.
  • Analytics Panel - A dedicated /analytics view aggregates totals and breakdowns by circuit, age range, gender, and affiliation year, reusing the same filtered dataset and powering PDF report generation.
  • Mobile Responsiveness - Iterative fixes addressed overflow, bottom navigation clipping, and layout breaks across the entire protected area.
  • Audit Logging - Edits are logged to a LOGS sheet with timestamp and user email, providing a traceable record of who changed what.

Results and Impact

  • Functional Internal Tool - The application was developed from zero to a feature-complete internal tool in a single day of intense iteration, reaching 39 commits covering CRUD, auth, analytics, exports, address review, and mobile fixes.
  • Data Integrity - The schema versioning approach and column-map abstraction eliminated index-drift bugs that would have silently corrupted records in a direct-index implementation.
  • Audit Trail - Every edit is attributable to a specific internal user, giving the party organization visibility into data provenance.
  • Export Flexibility - Staff can export any filtered view of the registry to XLSX or PDF without technical assistance, reducing operational bottlenecks.