interactive intro to open social at-me.zzstoatzz.io

Files
README.md

@me #

an accessible visualization of how your atproto identity connects to atproto apps.

at-me.zzstoatzz.io

what is this #

in decentralized social networks, you own your identity and your data lives in your personal data server. atproto applications create records in your repository using different lexicons (data schemas).

@me shows this visually: your identity at the center, surrounded by the atproto apps that have created data for you. click an app to see what record types it stores, then click a record type to view the actual data.

inspired by pds.ls.

running locally #

bun install
bun run dev

visit http://localhost:3030 to explore any atproto handle.

commands #

  • bun run dev - start dev server with hot reloading
  • bun run build - build for production (outputs to dist/)
  • bun run preview - preview production build locally

tech stack #

  • pure client-side javascript (no backend)
  • vite for development and building
  • direct atproto API calls (PDS, PLC directory, Bluesky AppView)
  • jetstream websocket for live firehose streaming
  • client-side MST (merkle search tree) visualization

record counts #

Counts come from one bounded PDS repository export, parsed in a browser Web Worker. There is no backend and no collection-pagination fallback. The complete repository tree is required; missing record bodies do not prevent counting its keys.

The browser stores derived counts, keys, and the CAR commit CID/revision. Cached counts appear immediately. After 15 minutes, a small getLatestCommit request checks for changes; an unchanged commit avoids another CAR download. Successful full exports are at least six hours apart. Refresh failures retain the snapshot and wait at least 15 minutes, honoring longer Retry-After values. Account errors invalidate totals; a changed PDS never reuses the old host's cache.

Cache Storage is capped at ten accounts / 32 MiB, with an 8 MiB entry limit. Unconfirmed snapshots expire after seven days. Web Locks deduplicate work across tabs; when unavailable, deduplication is limited to the current worker. Storage failures fall back to bounded in-memory caching. Live observations are not written back as verified repository snapshots.

To exercise caching against a local HTTP fixture, run bun tests/browser/count-cache-server.js alongside Vite, then open /tests/browser/count-cache.html and run the checks.