polls on atproto pollz.waow.tech
atproto zig
Zig 73%
Svelte 20%
TypeScript 3%
JavaScript 2%
Dockerfile <1%
HTML <1%
Just <1%
CSS <1%

readme.md

pollz #

polls on AT Protocol. create polls, vote, see results in real time.

pollz.waow.tech

lexicons #

GOAT checks these schemas on every pull request and publishes changed schemas from main as com.atproto.lexicon.schema records. Tangled installs a commit-pinned experimental fork that packages GOAT as a Nix flake and adds support for proposed permissioned space lexicons. The publishing workflow uses the public waow.tech publishing identity and an ATPROTO_PASSWORD repository secret containing an app password for that account. The _lexicon.pollz.waow.tech TXT record delegates this lexicon authority to the same identity.

stack #

jetstream → backend (zig + sqlite + oauth) → frontend (sveltekit)
                          ↑
                  user's PDS (oauth)

develop #

# backend
cd backend && zig build -Doptimize=Debug && ./zig-out/bin/pollz

# frontend
cd frontend && pnpm dev

deploy #

just deploy            # both
just deploy-backend    # fly.io
just deploy-frontend   # cloudflare pages

backend freshness #

/health/freshness returns 200 only when both SQLite tables can be queried, the consumer is running and has connected, an event completed within five minutes, and the latest processed commit did not fail. Database lock acquisition is bounded to 200ms. A failed commit is not cleared by identity or account events. Other states return 503 with a read-only, uncached JSON report. /health remains the listener check.

Quiet polls and votes do not fail freshness: the filtered Jetstream subscription also delivers global identity/account events (verified against the live relay). Completion is recorded after handling, so a stuck database or profile lookup cannot keep the consumer green. This does not prove that the relay delivers every poll or vote; completeness needs independent reconciliation. No routing, restart, posting, or subscription policy changes are made by this check.