Spin up a self-hosted live polling site with Google sign-in for poll owners and link-only voting for guests.
Study a working four-layer anti-double-vote scheme (signed cookie, fingerprint, session token, hashed IP).
Use the BullMQ + Redis + Socket.io pattern as a template for any other realtime aggregation app.
Reuse the React Query + Zustand + Recharts dashboard layout for other admin tools.
Needs Postgres, Redis, and Google OAuth credentials configured before the first dev run.
Pulse is a polling website where one person creates a poll inside a dashboard and shares a public link, and the people who follow that link can vote without making an account. As votes come in, the poll owner sees the counts update live on charts, without needing to refresh the page. The README describes it as a realtime collaborative polling platform. The project is organized as one repository with two parts, a frontend and a backend. The frontend is built with React, Vite, Tailwind for styling, and a mix of libraries to handle data and forms, including React Query for fetching server data, Zustand for keeping local state, and Recharts for drawing the result charts. Logging in is done through Google, so users do not need a separate password. The backend is a Node.js server using Express, PostgreSQL as the main database, and Redis as a fast in-memory store. It uses Socket.io to push live updates to anyone watching a poll, and a job queue library called BullMQ to handle background work like aggregating vote counts. The README explains that anonymous voters are tracked through a four-layer system, combining a signed cookie, a device fingerprint, a server-side session token, and a hashed IP, so the same person is less likely to vote twice. Features listed include drag-and-drop ordering of poll options, slug-based public URLs, live presence counts of who is viewing a poll, and on-demand publishing of final results. There are also rate limits per endpoint and several caching tricks meant to keep the analytics page fast even under heavy load. The README provides a directory map, database tables, and a full API route summary under the /api/v1 prefix.
Generated 2026-05-22 · Model: sonnet-4-6 · Verify against the repo before relying on details.