GET /xrpc/app.bsky.actor.searchActorsTypeahead
typeahead.waow.tech
1# typeahead
2
3community actor search for [atproto](https://atproto.com). aims to be a drop-in replacement for `app.bsky.actor.searchActorsTypeahead` — same endpoint path and query params, returns the full `profileViewBasic` surface minus `viewer` (`did`, `handle`, `displayName`, `avatar`, `associated`, `labels`, `createdAt`).
4
5**live:** https://typeahead.waow.tech
6
7```bash
8curl "https://typeahead.waow.tech/xrpc/app.bsky.actor.searchActorsTypeahead?q=nate&limit=10"
9```
10
11## stack
12
13```
14jetstream → ingester (zig, fly.io) → worker (cloudflare)
15 ↓
16 Turso (libSQL/FTS5)
17```
18
19- **ingester**: [zig](https://ziglang.org) on [fly.io](https://fly.io) — streams profiles, posts, likes, and follows via [jetstream](https://docs.bsky.app/blog/jetstream), batches to worker
20- **worker**: [cloudflare worker](https://workers.cloudflare.com) + [Turso](https://turso.tech) + KV + cache API — FTS5 prefix search, edge-cached (60s), rate-limited
21- **identity**: [slingshot](https://microcosm.blue) for on-demand handle resolution
22
23## dev
24
25```bash
26# worker
27npm install && npx wrangler dev
28
29# ingester
30cd ingester && zig build run
31```
32
33requires `TYPEAHEAD_URL` and `TYPEAHEAD_SECRET` env vars for the ingester.
34
35## deploy
36
37```bash
38npx wrangler deploy # worker to cloudflare
39cd ingester && fly deploy # ingester to fly.io
40```