Files
atproto-cosocial-labeler/README.md
T
govandClaude Opus 5.5 b4ac30c010 feat: add setup did command to publish labeler identity
`cargo run --bin setup -- did` adds #atproto_label and #atproto_labeler to the
DID document via the PDS-signed PLC flow, prompting for the main password and
the emailed code. Splits setup into declare/did modules.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-06 15:18:00 -05:00

39 lines
1.5 KiB
Markdown

# Canadian Cities Labeler
An atproto labeler that puts a Canadian city badge on accounts that ask for one over Bluesky DMs.
1. Subscribe to `@cities.pds.cosocial.ca` (the Subscribe button on its profile).
2. Follow it.
3. DM it your city, e.g. `Halifax` or `Richmond, BC`. Send `remove` to clear it.
The labeler polls its DMs, matches the city against `data/cities.json`, and signs an account
label (e.g. `halifax-ns`), negating any previous one. Labels are stored in SQLite and served over
`com.atproto.label.subscribeLabels` and `queryLabels`.
Built on [jacquard](https://tangled.org/nonbinary.computer/jacquard) for atproto types and XRPC.
## Local test
```sh
cp .env.example .env # set LABELER_APP_PASSWORD
cargo run --bin keygen # paste SIGNING_KEY_HEX into .env
cargo run # :4100
```
`rust-toolchain.toml` pins the Rust version; rustup installs it on first build.
The labeler account must allow DMs from everyone (Settings → Privacy and security → Chat).
DM it from a test account, then check
`curl 'localhost:4100/xrpc/com.atproto.label.queryLabels?uriPatterns=<did>'`.
Labels won't appear in the Bluesky app until the labeler is deployed publicly and its DID
document has the `#atproto_label` key and `#atproto_labeler` service.
## First time setup
```sh
cargo run --bin setup -- declare # label definitions; gives the account a Subscribe button
cargo run --bin setup -- did # run after deploying; requires labeler account's main password + emailed code
```