rewrite frontend in sveltekit, add oauth + jetstream to backend
backend:
- replace tap (node firehose consumer) with native jetstream client
- add full oauth flow (DPoP, PKCE, session management)
- add poll deletion endpoint (DELETE /api/polls/{uri})
- add DELETE to CORS allowed methods
- add voter handle resolution + profile caching
frontend:
- rewrite from vanilla vite/ts to sveltekit with static adapter
- fix vote switch detection (per-option count comparison, not totals)
- add inline vote feedback (voting.../voted/failed)
- add poll deletion (owner only, with confirmation)
- add VotersTooltip cache invalidation after voting
- add mobile tap support for voter tooltips
- link handles to bsky.app profiles
- add timestamp hover (full localized datetime)
- 44px min touch targets on option buttons
- add favicon (◉)
- defensive JSON parsing in api helper
cleanup:
- remove old vanilla frontend (src/, dist/, functions/, public/)
- remove tap/ (replaced by jetstream.zig)
- remove docs/ (outdated architecture docs)
- move lexicons to tech.waow.pollz namespace
- rewrite readme
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>