draw things doodl.waow.tech
draw atproto
0

Configure Feed

Select the types of activity you want to include in your feed.

57 1 0

Clone this repository

https://git.vm.fail/zzstoatzz.io/doodl https://git.vm.fail/did:plc:yinp3rq2f5iuexhaxizyoct5
ssh://git@knot1.tangled.sh:2222/zzstoatzz.io/doodl ssh://git@knot1.tangled.sh:2222/did:plc:yinp3rq2f5iuexhaxizyoct5

For self-hosted knots, clone URLs may differ based on your setup.


README.md

doodl#

draw something, save it as an image blob on your PDS, share it, and use drawings as the app's own iconography. the app itself is client-side — no app backend, no aggregator. an explore page reads everyone's drawings straight from their PDSes via your relay + slingshot, so it's a little stale by design.

Lives at https://doodl.waow.tech (static site on your PDS via wisp, custom domain on Cloudflare).

Collections:

  • tech.waow.doodl.drawing — every doodle is an image blob record
  • tech.waow.doodl.iconset — singleton self, mapping UI slots to drawing strongRefs
  • tech.waow.doodl.botConsent — optional singleton self; presence lets the doodl bot feature your drawings

how it works#

  • draw — minimal freehand canvas (pen, color, stroke size, undo, clear), exports PNG. stroke controls live in a bottom sheet so the mobile toolbar stays one row tall.
  • savecom.atproto.repo.uploadBlob → a tech.waow.doodl.drawing record referencing the blob
  • icons — settings writes a tech.waow.doodl.iconset/self record whose assignments point at drawing records; the app renders those slots with the chosen drawings. any slot in the registry can be drawn over, including nav, toolbar, settings, theme, and stroke controls.
  • icon sets — settings can preview someone else's whole iconset across the app. trying one on is local-only until you save it as your own.
  • auth — in-browser AT Protocol OAuth, minimal scopes atproto repo:tech.waow.doodl.drawing?action=create&action=delete repo:tech.waow.doodl.iconset?action=create&action=update repo:tech.waow.doodl.botConsent?action=create&action=update&action=delete blob:*/*
  • explore — UFOs /records?collection=tech.waow.doodl.drawing (CORS-enabled, firehose-indexed) for the records, then slingshot resolveMiniDoc per repo to build each blob's getBlob URL. (a raw relay's listReposByCollection has no CORS, so it can't be called from the browser.)
  • share/l/<did>/<rkey> preview pages are served by the Cloudflare Worker in worker/ so crawlers get per-drawing Open Graph image tags
  • bot — optional, opt-in, and deliberately small: bot/ runs the @doodl.waow.tech feature bot for consenting users.

dev#

bun install
bun run dev   # localhost uses the atproto loopback OAuth client (no hosted metadata)

deploy#

one-time: custom domain#

wispctl domain claim zzstoatzz.io --domain doodl.waow.tech   # prints DNS records
# set those records on the waow.tech Cloudflare zone, then:
wispctl domain add-site zzstoatzz.io --domain doodl.waow.tech --site doodl

each release#

bun run deploy   # writes oauth-client-metadata.json, builds, wispctl deploy --spa
bunx wrangler deploy --config worker/wrangler.jsonc   # share/preview worker
# optional: bunx wrangler deploy --config bot/wrangler.jsonc