slack status without the slack
status.zzstoatzz.io/
quickslice
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`.