ATProto’s OAuth flow is complex. Users authenticate with their personal data servers, not a central provider, and the multi-step dance to make that work is genuinely non-trivial. I kept reimplementing it for every new project, so I extracted the bones into a starter kit.

What You Get

A minimal, working foundation: OAuth authentication that works immediately, SQLite-backed session management, pre-built server routes for login/callback/logout, and user context that gives you DIDs and pre-configured API clients for authenticated requests. The frontend is vanilla HTML/JS so you can swap in whatever framework you want.

Why This Exists

Every ATProto project I build β€” Pollen, Friend Chat, Carte Postale β€” starts with the same 500 lines of auth infrastructure. This is that code, cleaned up and ready to clone. Skip the protocol plumbing, start building the thing you actually care about.