Category: web

ExplainToMe: a reading buddy for when web pages get too dense

I’ve been reading a lot of LLM papers lately. Attention mechanisms, RLHF pipelines, mixture of experts, quantization techniques. The kind of stuff where one paragraph assumes you already know three other things, and each of those things has its own rabbit hole.

I kept hitting the same wall. I’d be halfway through a paper, run into a concept I didn’t fully get, and jump to a search engine. Open a few tabs. Read a blog post. Watch half a YouTube video. By the time I came back to the paper, I’d lost the thread. The context switch was killing my reading flow.

So I built ExplainToMe.

What it does

You paste a URL. The app loads the page in a viewer. You highlight any text you don’t understand, and an LLM explains it to you right there, in a side panel, while you keep the original content visible.

No tab switching. No copy-pasting into ChatGPT. No losing your place.

The key feature is explanation levels. You pick one of four:

  • ELI5: analogies and simple words, like you’re explaining it to a curious kid
  • Simple: plain language, no jargon, just the core idea
  • Detailed: proper terminology, nuances, the full picture
  • Expert: assumes you know the domain, gets into edge cases and caveats

This matters more than it sounds. Sometimes I know the general area but need a quick refresher. Simple is enough. Other times I’m staring at a transformer architecture diagram and I need the expert-level breakdown with all the math context. One size doesn’t fit all, and being able to choose the depth on the fly makes the whole thing actually useful.

The follow-up conversation

After the initial explanation, you can ask follow-up questions. The app keeps the full conversation history, so the LLM knows what it already told you. It’s like having a study buddy sitting next to you who read the same paper and has infinite patience.

This is the part that surprised me the most. The follow-ups are where the real learning happens. The first explanation gives you the shape of the idea. The follow-ups let you poke at the edges until it clicks.

Why not just use ChatGPT or Claude directly?

You could. I did, for months. But the workflow of selecting text, copying it, switching to a chat window, pasting it with “explain this,” reading the answer, then switching back to the paper… it adds up. It’s not about any single step being hard. It’s about the friction accumulating until you stop doing it.

ExplainToMe removes the friction. The content and the explanation live side by side. Your eyes stay in one place. Your reading flow stays intact.

On top of that, ExplainToMe gives extra context to the LLM about what you are reading, so the explanations are tailored and concise.

Try it

The app is live at explaintome.website. Paste a URL, pick your level, highlight something. That’s it.

Replacing irccloud with open web technologies

I’ve been a very happy irccloud user for the last 3 years, I think they offer a great service, but my passion for open web technologies and self-hosting solutions made this service the first candidate to be part of my revolution.

For me, the most important use cases for irccloud are to be always online, keep the logs of all channels I’m in and being notified when someone ping me or an interesting topic arises.

The search for self-hosting starts

With those as primary needs, I started searching for different open source projects but quickly I realised that hosting weechat is the best option for me:

  • It’s open source and well maintained.
  • Super extensible with several scripting languages.
  • Really well documented.
  • Has several opens source clients.

From those clients, I’m specially interested in the web ones, don’t need another app in my phone.

Glowing Bear is for me the best of the web clients:

  • Again well maintained and supported by the community.
  • Works well in desktop and mobile.
  • On the way to be a progressive web app, with manifest and serviceworker support!

What’s missing?

The only part missing in my setup is the ability to this combination of weechat + glowing-bear to use web push to perform notifications. Right now it uses normal desktop notifications to notify about private messages, but that’s not a push from the server running weechat. When we are not running glowing-bear we won’t know. And that part is important!

So what do we need to build? Spoiler alert, I already did, as a proof of concept, so I end up building the following:

  • A weechat plugin that uses web push when you receive a private message to send the notification to your browser.
  • Modify Glowing Bear to use web push and display notifications. Also reopen the client when user clicks on the notifcation.

A webpush Weechat plugin

Based on notifo plugin by Alex Poirot, modified the original python script to use webpush libraries and variables coming from the client.

You can find the weechat script in this github repo.

When you load the script via:
/python load webpush.py


You will be ask to provide a set of variables to make the script work. Some of those variables you will find them in the Glowing Bear client (scroll down for more details), other variables as the VAPID information needed for performing push can be generated by your own or via a curl request doing:
$bash> curl https://webpushproxy.progressiveweb.pw/generatevapid

While setting the variables needed you will see something like:

/set plugins.var.python.webpush.endpoint "https://updates.push.services.mozilla.com/wpush/v1/gAAAAABZC3AKX33Pwsof7y0Q2zppDCJliANyTZIe_UqkYPAKnFmz1dqO-j7YlBpFJOdqMFHwfnJ0gWHDB7bGH1EZ-7MhVHa6lflC82dffJGVXL_vv-5vpWL8AZ0g14ee_kRvWCFof1cA"

Variables settings for webpush plugin

Modifications to the Glowing Bear client

You can find all the modifications done to the client in this github fork (in the branch push_notifications).

Just two modifications. Once you accept to receive notifications from the glowing bear client, you will have in the settings screen the extra variables needed to configure the weechat plugin variables, see the image below:

push settings

The other modification happens directly in the file serviceworker.js where I only had to add the logic to process push notifications, open a new tab is there is no tab already open.

Demo

So I recorded a little video showing how you can receive the notifications even if your tab is closed, hope you enjoy (better to make the video bigger to check the text :O)