README.md

 1<!--
 2SPDX-FileCopyrightText: Amolith <amolith@secluded.site>
 3
 4SPDX-License-Identifier: CC0-1.0
 5-->
 6
 7# Sift
 8
 9Collaborative lists with real‑time voting and ranking. Create a room, share the link, add ideas, and sort them together with upvotes, downvotes, or vetoes.
10
11[![REUSE status](https://api.reuse.software/badge/git.secluded.site/sift)](https://api.reuse.software/info/git.secluded.site/sift)
12[![scratchanitch.dev badge](https://img.shields.io/badge/scratchanitch-dev-FFC4B5)](https://scratchanitch.dev)
13[![Made with Deno](https://img.shields.io/badge/Made%20with-Deno-black?logo=deno&logoColor=white)](https://deno.land/)
14[![SQLite](https://img.shields.io/badge/Database-SQLite-003B57?logo=sqlite&logoColor=white)](https://www.sqlite.org/)
15[![Liberapay donation status](https://img.shields.io/liberapay/receives/Amolith.svg?logo=liberapay)](https://liberapay.com/Amolith/)
16
17<center>
18
19![Sift screenshot: collaborative list with real-time votes](.readme-assets/screenshot.png)
20
21</center>
22
23## Why Sift?
24
25- Real‑time collaboration: everyone sees changes instantly
26- Simple ranking: upvote, downvote, or veto; items auto‑sort by score
27- Veto with care: vetoed items fall to the bottom and dim
28- Bulk input: paste many lines at once; quick brainstorms welcome
29- Keyboard‑friendly: j/k navigate • 1/2/3 vote • e edit • Del delete • ? help • Ctrl/Cmd+Z undo
30- Clean UI: light/dark themes, responsive, reduced‑motion friendly
31- Easy sharing: rooms are just links; optional room titles for context
32
33## Quick start
34
35Run the server (Deno required):
36
37```bash
38deno run \
39  --allow-net=:8294 \
40  --allow-read=./static/,./lists.db,$HOME/.cache/deno/plug \
41  --allow-write=./lists.db,$HOME/.cache/deno/plug \
42  --allow-env \
43  --allow-ffi \
44  server.ts
45```
46
47Then open <http://localhost:8294> in your browser.
48
49### CLI options
50
51- `--host <hostname>` — Bind to specific interface (default: `localhost`, use `0.0.0.0` for all interfaces)
52- `--port <port>` — Listen on specific port (default: `8294`)
53
54Example binding to all interfaces on port 3000:
55
56```bash
57deno run \
58  --allow-net=:3000 \
59  --allow-read=./static/,./lists.db,$HOME/.cache/deno/plug \
60  --allow-write=./lists.db,$HOME/.cache/deno/plug \
61  --allow-env \
62  --allow-ffi \
63  server.ts --host 0.0.0.0 --port 3000
64```
65
66Note: Update `--allow-net` permission to match your chosen port.
67
68## How it works (for users)
69
701. Create a room and share the link, or join an existing room by code
712. Add items one‑by‑one or paste multiple lines
723. Vote: 1 = up, 2 = down, 3 = veto; Enter also upvotes the selected item
734. Edit or delete items inline; reset votes when starting a new round
745. Optionally set a room title to keep context
75
76Tip: You can deep‑link into a room via `?room=CODE`.
77
78## Notes on privacy & safety
79
80- No accounts or authentication; rooms are protected only by knowing the ID
81- Treat rooms as shared spaces—don’t post sensitive information
82
83## License
84
85- Code: AGPL‑3.0‑or‑later → see [LICENSES/AGPL-3.0-or-later.txt](LICENSES/AGPL-3.0-or-later.txt)
86- Docs/assets: CC0‑1.0 → see [LICENSES/CC0-1.0.txt](LICENSES/CC0-1.0.txt)
87- This project follows [REUSE](https://reuse.software/) best practices