Definitely Nextra, as Iโm already deep into the Next.js ecosystem. Site looks great, has built in search with Pagefind, great internationalisation support too.
26.05.2025 10:24 โ ๐ 1 ๐ 0 ๐ฌ 0 ๐ 0@haroldadmin.com.bsky.social
Software Engineer @letsdothis.com | @atproto-browser.dev
Definitely Nextra, as Iโm already deep into the Next.js ecosystem. Site looks great, has built in search with Pagefind, great internationalisation support too.
26.05.2025 10:24 โ ๐ 1 ๐ 0 ๐ฌ 0 ๐ 0Turning up the sampling to 100% makes this so fun to use
24.05.2025 09:36 โ ๐ 5 ๐ 0 ๐ฌ 0 ๐ 0Screenshot of atproto-browser.dev profile in the app
Just shipped: Syntax highlighting for records!
We've integrated Shiki for server-side syntax highlighting on the records page. When looking at the raw JSON data for a record, you should now get beautiful, semantically highlighted text.
I also wrote a plugin to help you run remote MCP servers over a Fastify app!
github.com/haroldadmin/...
Been meaning to write this one for a while now.
blog.haroldadmin.com/posts/brief-...
Wrote something about handling backpressure in Web Sockets using the Streams API.
blog.haroldadmin.com/posts/backpr...
Interesting idea!
The feed is built on top of Jetstream which does not support filtering on regexes. However, it shouldnโt be too hard to support this client side.
Iโll see what I can do ๐
DID document support in ATProto Browser
Just shipped: Ability to view DID documents alongside a user's collections.
This was a sorely missing feature from ATProto Browser so far. You can now see a nicely formatted DID document for the user in that app, as well as the raw JSON version.
www.atproto-browser.dev
The idea of the project is based on this, yep!
07.12.2024 19:41 โ ๐ 1 ๐ 0 ๐ฌ 0 ๐ 0I've setup @atproto-browser.dev to post updates on development -- which is also the new domain for the app โจ
www.atproto-browser.dev
I might add support for specifying a custom sampling rate in the future, as well as increasing the number of posts buffered in memory.
In the meantime, feel free to look around the code on Github
github.com/haroldadmin/...
At the end of the pipeline is a Writable Stream, which is just fake wrapper around something that a React component can subscribe to.
The Feed component takes care of buffering the latest posts in memory, and discards the rest. GC is great, isn't it?
The pipeline roughly looks like this: Web Socket -> Readable Stream -> Transforms -> Writable Stream.
This lets me use the built-in backpressure support in web streams, but I also sample incoming updates to keep things running smoothly.
Jetstream's Web Socket API emits hundreds of updates every second -- enough to overwhelm the browser if not managed carefully. Unfortunately, there is no standard way to solve backpressure in Web Sockets on the browser.
The feed solves this by using a Web Streams layer.
While this might look similar to Firesky.tv, the technical implementation is very different. ATProto Browser uses a fully client-side feed built on top of Bluesky's Jetstream project - no polling required! More details in ๐งต
05.12.2024 23:11 โ ๐ 0 ๐ 0 ๐ฌ 1 ๐ 0If you like a live scrolling list of Bluesky posts from around the world, here is something for you.
I've just shipped an update to my open source ATProto Browser that shows a live feed of Bluesky posts from the firehose.
Try it and let me know what you think!
atproto-browser.haroldadmin.com
That is weird. Will investigate.
02.12.2024 09:15 โ ๐ 1 ๐ 0 ๐ฌ 1 ๐ 0Also shout out to pdsls.dev!
01.12.2024 23:08 โ ๐ 2 ๐ 0 ๐ฌ 0 ๐ 0I know, i know, this is yet another atproto browser. I built it as a way to learn more about the protocol itself, and it was quite a fun exercise.
The source code for OG atproto browser was very useful when I couldn't figure something out on my own.
ATProto is fascinating, and I built a tool to explore the data stored on it. Give it a go and let me know what you think!
atproto-browser.haroldadmin.com