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
2026-11-04 16:58:55 -05:00
2026-11-04 16:58:55 -05:00

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 for atproto types and XRPC.

Local test

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

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
S
Description
No description provided
Readme
125 KiB
0 Stars 8 Watchers 0 Forks
Languages
Rust 96%
Shell 2.6%
Dockerfile 1.4%