bdon.org

First ATProto bot: every map

I made my first ATProto bot: bsky.app/profile/latest.allmaps.org.

Inspired by Every Color and Every Lot-style bots, it finds a recent historical map from latest.allmaps.org, composites the warped map with present-day OpenStreetMap features, and posts the image to the Bluesky network.

Some recent discoveries by the Allmaps Latest bot:

ATProto

ATProto is not Bluesky, but Bluesky leans heavily into it as part of their marketing. ATProto is the most contradictory and exciting part of Bluesky so far:

  • It enables other microblogging networks to compete directly with Bluesky using ATProto, albeit without Bluesky’s brand goodwill or proprietary feeds.

  • it differentiates Bluesky from being simply a clone of Twitter from 2019, which is a product interesting to me, but not a product interesting to venture capitalists.

  • It is stupidly simple to write a bot. Automating Twitter accounts required multiple auth and approval hoops to jump through; posting 1-megabyte blobs to the Bluesky PDS is so easy that I expect it to be locked down soon.

...
import { BskyAgent } from '@atproto/api';
await agent.login({
  identifier: BSKY_USERNAME,
  password: BSKY_PASSWORD,
});
const uploadResponse = await agent.uploadBlob(image, {
  encoding: 'image/jpeg',
});
...

Allmaps

Allmaps is a set of tools for working with georeferenced maps in the IIIF specification.

Georeferencing is a fancy term for warping a paper map to match the geography of the present-day real world, so you can composite the image on a “slippy map”.

The Allmaps project has adopted Protomaps for some base layers of the present-day map. This is part of Allmap’s value proposition as a open source toolkit and not a centralized platform. Source IIIF images are hosted at institutions like the University of Chicago Libraries or the National Library of Scotland, and the Allmaps tools consume those images directly via the IIIF protocol.

Each institution must be able to run the entire Allmaps stack themselves. It would be prohibitively expensive and inflexible to require, say, a Google Maps API key for every Allmaps deployment, so a single PMTiles archive is the simplest alternative.

The Allmaps Latest bot runs on Cloudflare Workers and uses kanahiro/chiitiler (itself a frontend to MapLibre Native) to composite the map from Allmaps APIs + Protomaps basemap .pmtiles build.

protocol : platform
pmtiles  : protomaps
iiif     : allmaps
atproto  : bluesky