dreamstack/examples/todo.ds
enzotar a943d2e2e9 feat: peer mode relay + self-echo filtering for true bidirectional sync
- Added /peer/{name} route to relay: all clients are equal peers
- handle_peer: binary broadcast to all other peers, catchup for late joiners
- Simplified runtime: single /peer/ WS replaces dual source+receiver
- _peerId: random 8-char ID prevents self-echo from broadcast
- _pid in each diff JSON, filtered in _applyRemoteDiff
2026-02-25 21:37:17 -08:00

40 lines
1.1 KiB
Text

-- DreamStack Todo App
-- Showcases: push, len, for-in, string interpolation, array access, streaming
-- Stream to phone: dreamstack stream examples/todo.ds --relay ws://YOUR_IP:9100
let todos = ["Learn DreamStack", "Build something cool", "Ship it"]
let done = [0, 0, 0]
let input_text = ""
let next_id = 3
let filter_mode = "all"
-- Derived counts
let total = len(todos)
-- Stream: any device on the network can view / interact
stream todo on "ws://192.168.1.235:9100" { mode: signal }
view app =
column [
text "DreamStack Todos"
text "{total} items"
-- Add new todo
row [
input "" { bind: input_text, placeholder: "What needs to be done?" }
button "Add" { click: push(todos, input_text), click: push(done, 0) }
]
-- Todo list
for item, i in todos ->
row [
button (if done[i] then "✅" else "⬜") { click: done[i] = (if done[i] then 0 else 1) }
text (if done[i] then " ̶{item}̶" else item)
]
-- Controls
row [
text "{total} items"
button "Clear All" { click: todos = [], click: done = [] }
]
]