Kshitij's Avatar

Kshitij

@haroldadmin.com.bsky.social

Software Engineer @letsdothis.com | @atproto-browser.dev

44 Followers  |  81 Following  |  18 Posts  |  Joined: 15.11.2024  |  2.0208

Latest posts by haroldadmin.com on Bluesky

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

Turning up the sampling to 100% makes this so fun to use

24.05.2025 09:36 โ€” ๐Ÿ‘ 5    ๐Ÿ” 0    ๐Ÿ’ฌ 0    ๐Ÿ“Œ 0
Screenshot of atproto-browser.dev profile in the app

Screenshot 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.

21.05.2025 23:38 โ€” ๐Ÿ‘ 2    ๐Ÿ” 1    ๐Ÿ’ฌ 0    ๐Ÿ“Œ 0
Preview
GitHub - haroldadmin/fastify-mcp: Run Model Context Protocol servers using Fastify Run Model Context Protocol servers using Fastify. Contribute to haroldadmin/fastify-mcp development by creating an account on GitHub.

I also wrote a plugin to help you run remote MCP servers over a Fastify app!
github.com/haroldadmin/...

20.04.2025 19:52 โ€” ๐Ÿ‘ 1    ๐Ÿ” 0    ๐Ÿ’ฌ 0    ๐Ÿ“Œ 0
A Brief Introduction to the Model Context Protocol A high level overview of the Model Context Protocol

Been meaning to write this one for a while now.
blog.haroldadmin.com/posts/brief-...

20.04.2025 19:51 โ€” ๐Ÿ‘ 0    ๐Ÿ” 0    ๐Ÿ’ฌ 1    ๐Ÿ“Œ 0
Backpressure in WebSockets using Web Streams The WebSocket API does not support backpressure. The Web Streams API does. Wouldn't it be great if we could use them together?

Wrote something about handling backpressure in Web Sockets using the Streams API.

blog.haroldadmin.com/posts/backpr...

12.12.2024 11:28 โ€” ๐Ÿ‘ 1    ๐Ÿ” 1    ๐Ÿ’ฌ 0    ๐Ÿ“Œ 0

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 ๐Ÿ˜Š

10.12.2024 13:34 โ€” ๐Ÿ‘ 1    ๐Ÿ” 0    ๐Ÿ’ฌ 1    ๐Ÿ“Œ 0
DID document support in ATProto Browser

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

09.12.2024 07:27 โ€” ๐Ÿ‘ 2    ๐Ÿ” 1    ๐Ÿ’ฌ 0    ๐Ÿ“Œ 0

The idea of the project is based on this, yep!

07.12.2024 19:41 โ€” ๐Ÿ‘ 1    ๐Ÿ” 0    ๐Ÿ’ฌ 0    ๐Ÿ“Œ 0
Preview
ATProto Browser Experimental browser for the Atmosphere

I've setup @atproto-browser.dev to post updates on development -- which is also the new domain for the app โœจ

www.atproto-browser.dev

07.12.2024 19:36 โ€” ๐Ÿ‘ 2    ๐Ÿ” 0    ๐Ÿ’ฌ 1    ๐Ÿ“Œ 0
Preview
GitHub - haroldadmin/atproto-browser: Browser for files stored on the ATProto network Browser for files stored on the ATProto network. Contribute to haroldadmin/atproto-browser development by creating an account on GitHub.

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/...

05.12.2024 23:11 โ€” ๐Ÿ‘ 2    ๐Ÿ” 0    ๐Ÿ’ฌ 0    ๐Ÿ“Œ 0

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?

05.12.2024 23:11 โ€” ๐Ÿ‘ 0    ๐Ÿ” 0    ๐Ÿ’ฌ 1    ๐Ÿ“Œ 0

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.

05.12.2024 23:11 โ€” ๐Ÿ‘ 1    ๐Ÿ” 0    ๐Ÿ’ฌ 1    ๐Ÿ“Œ 0

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.

05.12.2024 23:11 โ€” ๐Ÿ‘ 0    ๐Ÿ” 0    ๐Ÿ’ฌ 1    ๐Ÿ“Œ 0
Preview
Firesky Watch every Bluesky post in real-time โ€“ filter the firehose

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    ๐Ÿ“Œ 0
Video thumbnail

If 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

05.12.2024 22:47 โ€” ๐Ÿ‘ 3    ๐Ÿ” 1    ๐Ÿ’ฌ 2    ๐Ÿ“Œ 0

That is weird. Will investigate.

02.12.2024 09:15 โ€” ๐Ÿ‘ 1    ๐Ÿ” 0    ๐Ÿ’ฌ 1    ๐Ÿ“Œ 0
PDSls Browse AtProto repositories

Also shout out to pdsls.dev!

01.12.2024 23:08 โ€” ๐Ÿ‘ 2    ๐Ÿ” 0    ๐Ÿ’ฌ 0    ๐Ÿ“Œ 0

I 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.

01.12.2024 23:08 โ€” ๐Ÿ‘ 1    ๐Ÿ” 0    ๐Ÿ’ฌ 1    ๐Ÿ“Œ 0
ATProto Browser Experimental browser for the Atmosphere

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

01.12.2024 23:08 โ€” ๐Ÿ‘ 4    ๐Ÿ” 0    ๐Ÿ’ฌ 2    ๐Ÿ“Œ 0

@haroldadmin.com is following 20 prominent accounts