finger for the ATProto ecosystem atplan.io
README.md

atplan #

A reimagining of the Unix .plan file tradition for the ATProto ecosystem.

🌐 atplan.io 📦 Lexicon: io.atplan.plan

What is this? #

In the early days of the internet, the finger protocol let you query what any user on a networked system was up to. Users maintained a .plan file — freeform text describing their current projects, status, or thoughts. It was proto-blogging before blogging existed.

atplan reimagines that tradition for ATProto — federated, user-owned, and linkable.

Publishing your .plan #

The easiest way to publish a plan is at atplan.io/edit. Sign in with your ATProto handle, fill in your plan, and save. No account, no setup, no self-hosting required. Your plan is stored as a record on your own PDS under the io.atplan.plan Lexicon.

To finger anyone's plan, visit atplan.io/finger/handle or use the form on the landing page.

Saving also mirrors your plan to a site.standard.document record, so standard.site-aware readers (Leaflet, Pckt, Offprint, Bluesky's link unfurl) can render it as an article. Since that record updates in place along with your .plan, a Bluesky post's card can go stale after you edit again — click create permalink on the edit screen to snapshot the current text as its own permanent, linkable post instead. Permalinked posts show up in a "past posts" list on your finger page.

Lexicon #

Records are stored under io.atplan.plan with the key self, meaning one plan per user, always updated in place.

Just want to publish your plan? Go to atplan.io/edit — no setup required. Sign in with your ATProto handle and start writing.

Components #

  • plan_read.py — CLI tool to finger any ATProto user by handle
  • app.py — Flask web app: public reader, man page landing, and ATProto OAuth editor
  • create_publication.py — one-time script to create atplan.io's site.standard.publication record

CLI Usage #

python3 plan_read.py handle.bsky.social

Web App Routes #

  • / — man page landing with live plan example
  • /finger/<handle> — finger any ATProto user by handle
  • /finger/<handle>/post/<rkey> — a permanent, standalone standard.site post
  • /edit — ATProto OAuth editor, open to any ATProto user
  • /embed/<handle> — embeddable iframe for any website
  • /client-metadata.json — OAuth client metadata
  • /lexicon/io.atplan.plan — Lexicon schema JSON
  • /.well-known/site.standard.publication — standard.site domain verification