pollz #
polls on AT Protocol. create polls, vote, see results in real time.
lexicons #
tech.waow.pollz.poll— a poll with question + optionstech.waow.pollz.vote— a vote on a poll
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)
- backend: zig 0.15, zqlite, zat (AT Protocol primitives)
- frontend: sveltekit + static adapter
- infra: fly.io (backend), cloudflare pages (frontend)
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.