slack status without the slack status.zzstoatzz.io/
quickslice
at main 74 lines 1.6 kB view raw view rendered
1# status 2 3slack status without the slack. built on [quickslice](https://github.com/bigmoves/quickslice). 4 5**live:** https://status.zzstoatzz.io 6 7## architecture 8 9- **backend**: [quickslice](https://github.com/bigmoves/quickslice) on fly.io - handles oauth, graphql api, jetstream ingestion 10- **frontend**: static site on cloudflare pages - vanilla js spa 11 12## deployment 13 14### backend (fly.io) 15 16builds quickslice from source at v0.17.3 tag. 17 18```bash 19fly deploy 20``` 21 22required secrets: 23```bash 24fly secrets set SECRET_KEY_BASE="$(openssl rand -base64 64 | tr -d '\n')" 25fly secrets set OAUTH_SIGNING_KEY="$(goat key generate -t p256 | tail -1)" 26``` 27 28### frontend (cloudflare pages) 29 30```bash 31cd site 32npx wrangler pages deploy . --project-name=quickslice-status 33``` 34 35## oauth client registration 36 37register an oauth client in the quickslice admin ui at `https://zzstoatzz-quickslice-status.fly.dev/` 38 39redirect uri: `https://status.zzstoatzz.io/` 40 41## lexicons 42 43### io.zzstoatzz.status.record 44 45user status records with emoji, optional text, and optional expiration. 46 47```json 48{ 49 "emoji": "🔥", 50 "text": "shipping code", 51 "createdAt": "2025-12-13T12:00:00Z" 52} 53``` 54 55### io.zzstoatzz.status.preferences 56 57user preferences for display settings. 58 59```json 60{ 61 "accentColor": "#4a9eff", 62 "theme": "dark" 63} 64``` 65 66## local development 67 68serve the frontend locally: 69```bash 70cd site 71python -m http.server 8000 72``` 73 74for oauth to work locally, register a separate oauth client with `http://localhost:8000/callback` as the redirect uri and update `CONFIG.clientId` in `app.js`.