Sign in

Nick The Sick

@nickthesick.com
682 followers 450 following 1.3K posts

I write many codes @ blocknotejs.org Working on @bookhive.buzz and @teleportal.tools github.com/nperez0111 Read my blog at nickthesick.com Support me on Ko-Fi: ko-fi.com/nick_the_sick

PostsRepliesMedia
Nick The Sick @nickthesick.com · 13/09/2026
I bought @pikunikugame.bsky.social based on @43081j.com’s suggestion and I’m happy to report that it is a funny and fun to play game. I’m very excited for the second version coming out!
110
Nick The Sick @nickthesick.com · 24/08/2026
I like the coasts
A map showing places I’ve been to in the United States. Most of them being along the east and west coast given that I lived in California and Florida
000
Nick The Sick @nickthesick.com · 20/08/2026
The world we live in now is wild
opencode screenshot of an LLM saying

"I accidentally left a stray Turkish comment line at the top: "Önce fake clock'a geçiyoruz..." That was a mistake"
160
Nick The Sick @nickthesick.com · 18/08/2026
I've loved using hackerdaily.io as my Hacker News reader for the past few years. So, I made Hacker News that could be served over OPDS: hacker-news.nickthesick.com It serves the original article & it's HN comments section as an EPUB over OPDS, Website & RSS feeds
030
Nick The Sick @nickthesick.com · 18/08/2026
I bought the Xteink X3 ereader just now. I _need_ to know what the hype is about!
Screenshot of the X3 Xteink Pocket eReader, it is currently 61 EUR
040
Nick The Sick @nickthesick.com · 10/08/2026
I'm looking at how to get to @zurichjs.com & just out of curiosity wanted to see the difference between the trains I was looking at, compared to a flight. It costs more to go by train & takes 9h for a 1.5h flight 🙄 We've got our priorities straight huh?
A google flights listing showing that to go from Amsterdam to Zurich is 225 EUR by flying in 1h 25min, and is 252 EUR by taking a train in 8h 28m with a stop between
370
Nick The Sick @nickthesick.com · 16/07/2026
It made me mad to see this, I’m going to do something about it!
Screenshot showing @blocknote/core dependencies with one very large one
011
Nick The Sick @nickthesick.com · 07/07/2026
Token anxiety 😨
Screenshot showing Anthropic dashboard showing that the All models usage is 93% used and Fable is 95% used
120
Nick The Sick @nickthesick.com · 06/07/2026
This took quite a lot to get a hang of. I had to re-architect how bookhive runs to have multiple processes now. At least they can all share the same SQLite DB, if this doesn't hold up, then I will probably have to move to Postgres and maybe even multiple servers
A screenshot of Cloudflare dashboard for bookhive.buzz showing a huge drop in traffic while we were blocking all scraping, and when we re-enabled scraping the load came back. 75k reqs in a day
170
Nick The Sick @nickthesick.com · 01/06/2026
I wanted to try out using docs.imgproxy.net which is a self-hosted tool to resize images, and I was not disappointed by the savings I could get out of encoding things as webp and resizing them for BookHive!
Table showing the significant savings that introducing imgproxy made. With an average of 69% savings over the random sample images. Overall, being significantly smaller than the source images
120
Nick The Sick @nickthesick.com · 14/05/2026
Released this, very happy to see such a reduction in deps for BlockNote. Markdown parsing & serializing is annoying
Screenshot of NPMX showing that in the latest version 107 dependencies have been removed from `@blocknote/core`
020
Nick The Sick @nickthesick.com · 10/05/2026
It's crazy how many requests BookHive gets! Most of them are just scrapers...
Cloudflare dashboard showing that over 1 month BookHive gets 235k unique visitors, serving 478k requests, most are not cachedBookHive logs showing a similar story, but broken down by logged in vs. not logged in users. Showing that not logged in users represent more than 90% of requests made
110
Nick The Sick @nickthesick.com · 05/05/2026
Hm, I know that guy 🤔
A bump of postcss triggered by a fix that @43081j (James) made
000
Nick The Sick @nickthesick.com · 15/04/2026
Oh, it gets better!
What is an Atmosphere account?

An Atmosphere account is your personal identity on the Atmosphere. Think of it as a digital passport that you truly own, not locked to any single app or company.
Use it across multiple apps

Your Atmosphere account works with the Bluesky Social App and any other social apps built on the same network.

Just like you can use the same email address to sign into different websites, your Atmosphere account lets you sign into different social apps while keeping the same identity, connections, and content.

When you see options to log in with an Atmosphere account or "internet handle" on other apps, you can use your existing account nickthesick.com instead of creating a new one.
What makes it special

The key difference: your data isn't trapped in any one app. Unlike traditional social media accounts, where your data belongs to the platform, with an Atmosphere account you genuinely own your identity and data:

    You own your identity: Your username (handle) and permanent ID belong to you
    Your data is portable: Posts, follows, and content live in your personal data storage, not locked in an app's database
    You can move freely: Switch hosting providers without losing your followers, posts, or connections. This also lets you choose a provider in your country if it matters where your data is stored.
    Multiple apps, one identity: Use the same account across different apps built on the same network

This website: your account control center

The website you're on right now is your account management hub. Here you can:

    Update your email address and password
    Manage your personal data and security settings
    View and manage active sessions across devices (browsers where you're signed in)

This place is where you control the fundamental aspects of your Atmosphere identity, independently of any app-specific details like the profile you have on the Bluesky social app.

Your Atmosphere account is currently hosted by bluesky.nickthe…
070
Nick The Sick @nickthesick.com · 15/04/2026
Bluesky has spoken! It's official "Atmosphere account", now we can stop bike-shedding
Screenshot of the account admin interface of the official PDS distributed by Bluesky
1261
Nick The Sick @nickthesick.com · 13/04/2026
Thanks for showing me! But, I'm sorry, but this is not nearly enough to make a cohesive experience: I'll see about making some PRs to make this better, but as far as I see it, this is pretty hard coded at this point because of how tailwind works
A screenshot of a "customized" PDS environment, where the only thing different from the default sign in screen is that the word "sign in", and the sign in button are yellow now
100
Nick The Sick @nickthesick.com · 08/04/2026
For reference, I just turned on cloudflare caching on the site March 27 (in hope of caching images) and apparently I was getting 10k requests a day. Now, almost all requests are under 1s (P95+) and most are under 175ms (P75+)! It's crazy what some optimization work can do, worth it!
Graphs from Cloudflare showing that there were 250k requests from 26 Mar until now. As well as 113k unique visitors, 7.73% requests cached, 5GB data served, 368MB cachedscreenshot of the results of the query (duration>='3.37ms' and duration<'1s' and url_full!='http://bookhive:8080/metrics')

which shows that most requests yesterday were in the 400ms range and up to about 1000ms and today that has dropped to 200ms and around 750msa screenshot showing the P75 of today at 165ms, P99 785ms, P95 463ms, P50 135ms
030
Nick The Sick @nickthesick.com · 31/03/2026
We can catch them all! patak.donkey??
130
Nick The Sick @nickthesick.com · 11/03/2026
So excited for all the updates coming to @bookhive.buzz
A list of open pull requests to the bookhive repo
0101
Nick The Sick @nickthesick.com · 10/03/2026
I submitted my speaker profile for my #AtmosphereConf talk, see my profile at: atmosphereconf.org/profile/nick...
Screenshot of the profile page on the atmosphere conf website with the bio:


Nick is the lead engineer of the Open Source project https://www.blocknotejs.org/ a rich text editor that delivers a notion-like experience to your application.

In his free time, he builds other OSS software projects like @teleportal.tools & @bookhive.buzz

Nick's wife wanted an alternative to Goodreads, so Nick built BookHive in late 2024 as an experiment of what ATProto could do. But, it didn't stop there, his wife said she wouldn't use it unless there was an app for it, so he built an app too. Now, tons of people use BookHive to track their reading!

PS: the bee in the logo's name is barry
2163
Nick The Sick @nickthesick.com · 10/03/2026
What is interesting is that I notice with certain colors it is way easier than others. Gray is obvious. But two pinkish purples and I’m lost
0.0025 score on the delta E challenge
0100
Nick The Sick @nickthesick.com · 03/03/2026
Thanks @anthropic.com for including me in the OSS program! I'll put these to good use, making all open source software. It's crazy to think that all of my work & side projects nowadays are open source, what a time to be alive!
An acceptance email into the Claude Open Source Program
1270
Nick The Sick @nickthesick.com · 26/02/2026
Maybe I'm weird, but when I heard about ATProto and that I could self-host my social media, I immediately self-hosted my PDS, I've never been on a mushroom PDS 😌
Screenshot of PDSls showing I have only ever been on bluesky.nickthesick.com
170
Nick The Sick @nickthesick.com · 20/02/2026
So happy to be able to talk about @bookhive.buzz and the opportunity we have as developers to design in a way that enables user agency over their data.
Screenshot showing that @nickthesick.com is on the list of lightning talks
0182
Nick The Sick @nickthesick.com · 17/02/2026
What LLM subscriptions does everyone use? I'm a bit afraid of lock-in to a specific model or provider, given how fast the field moves. But maybe I'm over thinking a month by month subscription
sad pablo escobar meme that says "out of cursor credits"
121
Nick The Sick @nickthesick.com · 13/02/2026
I've been wanting to do this for a while, open protocol, open data! You can now see all of the books in the hive, all books that users have added to their library, and buzzes about books (no one seems to use it haha) My goal has always been data portability and transparency, so I'm happy!
Screenshot of a DB viewer showing rows of the hive_book table with multiple books. As well as partially showing the table schema
180
Nick The Sick @nickthesick.com · 09/02/2026
Yep, I'm going to call it a day now:
GitHub status page showing that the page cannot load
080
Nick The Sick @nickthesick.com · 31/01/2026
So many shoutouts to BlockNote, it’s really cool to get the recognition for the work we’ve been doing. Also completed the 1st presentation of 3 for #FOSDEM
A poor picture of Wieland from OpenProject shouting out BlockNote for their new docs product
060
Nick The Sick @nickthesick.com · 29/01/2026
@atprotocol.dev FYI, I cannot sign up for publications, presumably because I'm on a selfhosted PDS?
500 error on leafley
120
Nick The Sick @nickthesick.com · 28/01/2026
I made stickers for both of my side-projects: @bookhive.buzz the ATProto Goodreads alternative @teleportal.tools a Yjs sync server framework for collaborative editing documents in real time Will be at #FOSDEM doing 2 presentations for my day job at blocknote.org and 1 for @teleportal.tools
Stickers, one for Teleportal of Pepper the parrot. The other for Bookhive of Barry the bee.
1100
Nick The Sick @nickthesick.com · 20/01/2026
This, is Teleportal, a Y.js sync server: - Flexible storage (with different backends) - WebSockets & HTTP + SSE - JWT token signing - Encryption at rest And, that's just the beginning. There a bunch of other packages with utilities to build a sync server framework into your app!
import { serve } from "crossws/server";
import { createStorage } from "unstorage";
import memoryDriver from "unstorage/drivers/memory";

import { Server, checkPermissionWithTokenManager } from "teleportal/server";
import {
  createEncryptedDriver,
  UnstorageDocumentStorage,
} from "teleportal/storage";
import { createTokenManager } from "teleportal/token";
import { tokenAuthenticatedHTTPHandler } from "teleportal/http";
import { tokenAuthenticatedWebsocketHandler } from "teleportal/websocket-server";
import { importEncryptionKey } from "teleportal/encryption-key";

const tokenManager = createTokenManager({
  secret: "your-secret-key-here",
  expiresIn: 3600, // 1 hour
  issuer: "my-collaborative-app",
});

const server = new Server({
  storage: new UnstorageDocumentStorage(
    createStorage({
      driver: createEncryptedDriver(
        memoryDriver(),
        importEncryptionKey("s1RZEGnuBelCbov-WC6dvddacpT1pzGmhmeVHKr-1Zg"),
      ),
    }),
  ),
  checkPermission: checkPermissionWithTokenManager(tokenManager),
});

serve({
  websocket: tokenAuthenticatedWebsocketHandler({ server, tokenManager }),
  fetch: tokenAuthenticatedHTTPHandler({ server, tokenManager }),
});
2182
Nick The Sick @nickthesick.com · 14/01/2026
Here is a little demo of the file snapshots & devtools that I built for this project
100
Nick The Sick @nickthesick.com · 09/01/2026
Unfortunately, since I don't have their data source, and their stuff isn't open-source. I don't see a way to interoperate with their data without creating a book mapping (like a user having to map books don't automatically match the same title & author) Here is what each app stores to the PDS
Screenshot of the same book as recorded by bookhive & by popfeed, viewed in pdsls.
020
Nick The Sick @nickthesick.com · 28/12/2025
I don't know what took me so long to do a backup on @baileytownsend.dev's PDS Moover, but I finally got around to doing it. All backed up now! & of course a donation is in order for both PDS Moover and PDS Gatekeeper
A screenshot showing some backup stats for my @nickthesick.com accountA screenshot showing a donation to @baileytownsend.dev
2172
Nick The Sick @nickthesick.com · 28/12/2025
btw @loves.brussels, if you were to change the location of your oauth metadata document to `https://who.loves.brussels/oauth-client-metadata.json`, this would show just the hostname Minor thing, but I hope that helps!
An image of the login screen on my PDS showing the full-path of the metadata document
230
Nick The Sick @nickthesick.com · 28/12/2025
Tried out this tool by @loves.brussels, looks really cool! Definitely a nice summary to share around and prove that you ATProto
A screenshot of @nickthesick.com's summary page showing apps used like Bluesky, BookHive, and KipClip
120
Nick The Sick @nickthesick.com · 28/12/2025
I'm working on a new Y.js ↔️ ProseMirror binding, based on almost a year's worth of work that @kevinjahns.bsky.social has done. I'm so happy to see it all come together finally. I also will be addressing a number of bugs that have been around forever with the binding 😃 github.com/yjs/y-prosem...
161
Nick The Sick @nickthesick.com · 23/12/2025
Does cursor just decide to completely bug out for anyone else lately? I had to restart & lost work because of it already today
A window of Cursor, the VS Code fork, which is completely garbled in displaying the text editor content
000
Nick The Sick @nickthesick.com · 22/12/2025
Very excited to announce, I'll be in 3 talks at FOSDEM 2026! 2 that are related to my work at BlockNote & our recent collaboration with Kevin Jahns at Y.js The 3rd is an overview of my Y.js sync server framework: Teleportal openlocalfirst.org/schedules/#7... openlocalfirst.org/schedules/#1...
My talk: BlockNote, Prosemirror and Yjs 14: Versioning and Track Changes
Time: 12:00 - 12:30

devroom: Local First, sync engine & CRDTs
Sunday 1st Feb. 2026
room K3.201My talk: Teleportal: A real-time collaborative editing framework
Time: 13:55 - 14:00

devroom: Local First, sync engine & CRDTs
Sunday 1st Feb. 2026
room K3.201
062
Nick The Sick @nickthesick.com · 04/11/2025
Spent all morning editing the logo for my project Teleportal, a Y.js sync server. His name is Pepper, the parrot🦜
An SVG editor with a green parrot wearing sunglasses. The sunglasses are reminiscent of portals from the game Portal 2 because of their bright blue and bright orange colors.
180
Nick The Sick @nickthesick.com · 18/10/2025
Is it intentional that I can’t edit the title & description of one of my clips?
Screenshot showing that the title and description fields are greyed out and not editable on an iPhone
110
Nick The Sick @nickthesick.com · 18/10/2025
Hm, it imports cleanly for me:
A bookhive import showing 82 failed books, but finished the import successfully
100
Nick The Sick @nickthesick.com · 20/09/2025
If anyone is wondering why I haven’t been doing anything for @bookhive.buzz it’s because I bought a DJ set, this is basically my new personality now
A miniso fat chicken in front of a DJ set (DDJ-FLX4) while wearing Grado SR-80 headphones.
2101
Nick The Sick @nickthesick.com · 02/09/2025
I'm working on getting @teal.fm's piper application to be able to support imports of Spotify's export. This allows a backfill of all your listening history from Spotify into your PDS
3312
Nick The Sick @nickthesick.com · 27/08/2025
Done! This wasn't that bad to set up at all. Though, NPM makes you go to each package and type the org, repo and workflow name, so I had to do that literally 15 times. Then it was some minor tweaks to the workflow file, if you already set up attestations it is only removing your NPM creds. Clean!
A list of @blocknote packages which all have been published in the past 5 minutes by GitHub Actions via the new OIDC trusted publishing on NPM
000
Nick The Sick @nickthesick.com · 22/08/2025
But, I think I need to tell Apple that this is an ATProto app & I don't actually collect the data that they are referring to here (but it is part of the account). @tijs.org did you run into something similar here?
Guideline 4.8 - Design - Login Services

The app uses a third-party login service, but does not appear to offer as an equivalent login option another login service with all of the following features:

- The login option limits data collection to the user’s name and email address.
- The login option allows users to keep their email address private from all parties as part of setting up their account.
- The login option does not collect interactions with the app for advertising purposes without consent. 

Next Steps

Revise the app to offer as an equivalent login option another login service that meets all of the above requirements.

If the app already includes another login service that meets all of the above requirements, reply to App Review in App Store Connect, identify which login service meets all of the requirements, and explain why it meets all of the requirements.

Note that Sign in with Apple is a login service meets all the requirements specified in guideline 4.8.
221
Nick The Sick @nickthesick.com · 10/08/2025
Well, I think I have everything ready for the app store submission now
A screenshot of an app store submission to apple
010
Nick The Sick @nickthesick.com · 09/08/2025
Submitted a build to Apple for approval. Let's see when we can get this out on TestFlight...
A screenshot of an Apple App Store Connect ios build submission
140
Nick The Sick @nickthesick.com · 07/08/2025
Then it failed
Analysis failed screen
100
Nick The Sick @nickthesick.com · 07/08/2025
Hung at 100% for me
Screenshot of attempting to see the results for https://bookhive.buzz which got stuck at 100%
100