Skip to content

9lynd/ranker

Repository files navigation

Ranker — Instant / "On-the-fly" Voting

A lightweight, on-the-fly voting app for creating quick polls and sharing them with friends. It's designed for instant votes (create a poll, share a short code, friends connect and vote). There is no user signup/dashboard—participants are ephemeral and identified by short IDs encoded into short-lived JWTs.

Keep it short: create a vote, send the URL to friends, everyone connects over WebSocket and votes in real time.

Key ideas

  • Fast, ephemeral polls
  • Poll state is stored in Redis (RedisJSON). Polls are small JSON documents with participants, nominations and rankings.
  • Real-time interactions use Socket.IO namespaces; HTTP endpoints are used to create polls and obtain tokens.

Tech stack

  • Node.js + TypeScript
  • NestJS (controllers, services, DI)
  • Socket.IO (real-time gateway)
  • ioredis + RedisJSON for poll storage
  • JWT for short-lived tokens (no signup)

Quick start (development)

  1. Install dependencies

    npm install
  2. Environment variables (example)

  • REDIS_HOST (e.g. localhost)
  • REDIS_PORT (e.g. 6379)
  • JWT_SECRET (signing secret)
  • POLL_DURATION (seconds, default ~3600)
  • CLIENT_PORT (for CORS in dev)
  1. Run in dev

    npm run start:dev

About

Make decisions via ranked voting 🗳️

Topics

Resources

Stars

Watchers

Forks

Contributors