Created With
LinkRing is built with a bunch of great open source tools and inspired by some cool projects in the ATProto ecosystem. Here's the full list.
The Stack
- Bun — JavaScript runtime. Fast, everything is included, and I have never had an issue.
- Hono — Lightweight web framework. Small, fast, works great with Bun.
- Open Props — CSS custom properties for consistent design tokens. It's what I start every site with now, makes it really easy to just have easy access to things like HSL colors.
- PostgreSQL — The database. Was going to use sqlite but wanted to deploy to Fly.io.
- postgres.js — PostgreSQL client for Node/Bun. Simple, fast, not an ORM.
ATProto
- ATProto — The protocol that makes all of this possible.
- @atproto/oauth-client-node — OAuth client for ATProto. Handles all the "DPoP" and "JWT" complexity.
- @atproto/api — API client for talking to PDSes.
- Jetstream — Simplified firehose for ATProto events. Powers the Explore page (because it queries the same network!)
Inspiration
These projects showed what's possible on ATProto and helped shape how LinkRing works:
- Linkat — The first (?) link-in-bio on ATProto. Proved the concept works.
- Leaflet — Long-form publishing on ATProto. Beautiful execution of storing content on your PDS. Even if it's funky blocks format.
- Frontpage — Link aggregator, like if Hacker News ran on ATProto. Cool use of custom lexicons.
- Smoke Signal — Events and RSVPs on ATProto. Another great example of non-social-media uses for the protocol.
Learning Resources
If you want to build your own ATProto app, these helped me:
- Beyond the Statusphere: OAuth TLDR — Bailey Townsend's guide to ATProto OAuth.
- ATProto OAuth Spec — The official spec.
- Lexicon Guide — How to design your data schemas.
- awesome-lexicons — Collection of third-party lexicons. Great for seeing what others have built.
- PDSLS — Browse any PDS. Invaluable for debugging.
Thanks to everyone who built these tools. Standing on the shoulders of giants, etc.