Clone

git clone git@git.secluded.site:sift.git

README

Sift

Collaborative lists with real‑time voting and ranking. Create a room, share the link, add ideas, and sort them together with upvotes, downvotes, or vetoes.

REUSE status scratchanitch.dev badge Made with Deno SQLite Code: AGPL-3.0-or-later Docs/assets: CC0-1.0

Sift screenshot: collaborative list with real-time votes

Why Sift?

  • Real‑time collaboration: everyone sees changes instantly
  • Simple ranking: upvote, downvote, or veto; items auto‑sort by score
  • Veto with care: vetoed items fall to the bottom and dim
  • Bulk input: paste many lines at once; quick brainstorms welcome
  • Keyboard‑friendly: j/k navigate • 1/2/3 vote • e edit • Del delete • ? help • Ctrl/Cmd+Z undo
  • Clean UI: light/dark themes, responsive, reduced‑motion friendly
  • Easy sharing: rooms are just links; optional room titles for context

Quick start

Run the server (Deno required):

deno run \
  --allow-net=:8294 \
  --allow-read=./static/,./lists.db,$HOME/.cache/deno/plug \
  --allow-write=./lists.db,$HOME/.cache/deno/plug \
  --allow-env \
  --allow-ffi \
  server.ts

Then open http://localhost:8294 in your browser.

CLI options

  • --host <hostname> — Bind to specific interface (default: localhost, use 0.0.0.0 for all interfaces)
  • --port <port> — Listen on specific port (default: 8294)

Example binding to all interfaces on port 3000:

deno run \
  --allow-net=:3000 \
  --allow-read=./static/,./lists.db,$HOME/.cache/deno/plug \
  --allow-write=./lists.db,$HOME/.cache/deno/plug \
  --allow-env \
  --allow-ffi \
  server.ts --host 0.0.0.0 --port 3000

Note: Update --allow-net permission to match your chosen port.

How it works (for users)

  1. Create a room and share the link, or join an existing room by code
  2. Add items one‑by‑one or paste multiple lines
  3. Vote: 1 = up, 2 = down, 3 = veto; Enter also upvotes the selected item
  4. Edit or delete items inline; reset votes when starting a new round
  5. Optionally set a room title to keep context

Tip: You can deep‑link into a room via ?room=CODE.

Notes on privacy & safety

  • No accounts or authentication; rooms are protected only by knowing the ID
  • Treat rooms as shared spaces—don’t post sensitive information

License