···8899## how it works
10101111-1. **tap** subscribes to the ATProto firehose, filtering for `pub.leaflet.document` and `pub.leaflet.publication` records
1212-2. **backend** indexes documents into SQLite FTS5 via [Turso](https://turso.tech), serves search API
1313-3. **site** is a static frontend hosted on Cloudflare Pages
1111+1. **tap** syncs leaflet content from the network
1212+2. **backend** indexes content into SQLite FTS5 via [Turso](https://turso.tech), serves search API
1313+3. **site** static frontend on Cloudflare Pages
14141515## api
1616···25252626## stack
27272828-- ~450 LOC of [Zig](https://ziglang.org) for the backend
2929-- [Tap](https://github.com/bluesky-social/indigo/tree/main/cmd/tap) for ATProto sync
2828+- [Zig](https://ziglang.org) backend
2929+- [Tap](https://github.com/bluesky-social/indigo/tree/main/cmd/tap) for sync
3030- [Turso](https://turso.tech) for SQLite + FTS5
3131- [Fly.io](https://fly.io) for hosting
3232-- [Cloudflare Pages](https://pages.cloudflare.com) for the frontend
3232+- [Cloudflare Pages](https://pages.cloudflare.com) for frontend