#87 DeepSeek really won’t touch anything related to Chinese politics

For most use cases in poketto.me, I’m pretty happy with #DeepSeek: it’s cheap, reliable, and the output quality matches any other LLM I’ve tried. But there’s one big caveat: anything related to Chinese politics can trigger an immediate refusal. Example: Right after the launch of poketto.me, a user tried saving an article about the September 3rd Beijing meeting between Xi Jinping, Vladimir Putin, Kim Jong Un, et al. ( https://orf.at/stories/3404330/) ...

September 25, 2025

#84 You can customize the text selection menu in your Android app

As I mentioned in In-place DOM manipulation: Thorny as ever, text selection in browsers can get tricky fast. For poketto.me, the challenge was even bigger: the web app runs inside a hosted WebView in an Android app. Mobile text selection already behaves differently from desktop, and the embedding scenario didn’t make things easier. After wrestling with a few awkward bugs, though, I found an elegant solution. On the web, when a user finishes selecting text, poketto.me immediately converts the selection into a highlight (default color). On Android, however, a tiny system context menu pops up with entries like Copy, Select All, Web Search, etc. At first this got in the way—but it turns out you can customize this menu on a per-activity basis! ...

September 22, 2025

#83 The Gemini API for Video Understanding is surprisingly good

As I mentioned in Gemini’s URL Context feature is 90% hype, 10% value, I was pretty disappointed with Gemini’s “URL Context” feature. But “Video Understanding”? That one actually works like a charm. How it works: 👉 Provide a YouTube video link 👉 Ask Gemini questions about the video 👉 Get a structured response back For poketto.me, this unlocks a really neat feature: users can save any YouTube video in the app and either watch it later or read a textual description of the video. ...

September 21, 2025

#82 Gemini’s “URL Context” feature is 90% hype, 10% value

I’ll admit—I was pretty excited when Google announced that the Gemini API would support a new “URL Context” tool. The idea: you could “ask” Gemini about the content of a specific web page, with Google handling all the heavy lifting. The documentation even shows a neat example: send Gemini two recipe URLs and prompt it to compare ingredients and cooking times. If it worked, this would’ve been a game-changer for poketto.me: ...

September 20, 2025

#80 There is no cloud (it’s just somebody else’s computer)

…and ultimately, that “someone” is going to send you a real invoice for actual money. In my case, I’m running poketto.me almost entirely on Google Cloud. While it’s not terribly expensive right now, it is a cost I had to factor into my pricing strategy. But here’s the good news: Google offers various programs to support early-stage startups! Check out https://cloud.google.com/startup?hl=en for details. Today, I’m happy to share that poketto.me made it into the “START” tier of that program, which means: no Google Cloud bills in my mailbox for the foreseeable future! ...

September 18, 2025

#77 In-place DOM manipulation: Thorny as ever 🥀

The “highlights” feature in the poketto.me reader looks deceptively simple: select a text range, and it gets highlighted in yellow. Clicking a highlight opens a small context menu to change its color or delete it. But the implementation? Much thornier than you’d think. Why? 1️⃣ Browser selections are relative to visible text, not the underlying DOM tree of the rendered HTML. 2️⃣ A selection is defined by the text plus its start offset (characters before the selection) and end offset. 3️⃣ To do anything useful with a selection (beyond copying text to the clipboard), you have to map it back to its position in the DOM tree. 4️⃣ That “mapping” is, to some extent, impossible to get perfectly right. A selection can span multiple nodes, start and end at different levels of depth, and include irrelevant nodes. ...

September 15, 2025

#76 Posthog also works well for feature flagging

Since adopting Posthog for user analytics at poketto.me, I’ve grown pretty fond of the tool. Beyond the basics and advanced insights, I’m now also using it for feature flagging. Fine-grained control (and easy rollback) of new features or major changes is becoming increasingly important as the poketto.me user base grows. Why? 🤕 In a B2C app, you can’t count on users to complain when something breaks—they’ll just leave. Especially for early-stage products, every irritated user is a missed opportunity. ...

September 14, 2025

#74 Firefox extensions (mostly) work on Firefox on Android as well

A poketto.me Firefox user recently pointed out that Firefox on Android also supports browser extensions– but that the poketto.me extension didn’t appear on Mozilla’s Add-Ons page there. Turns out: Any modern browser extension built on the standard APIs (Chrome, Firefox, Edge) can also run in Firefox on Android. But when publishing, you have to explicitly test and target Android. Technically, the extension “just works”—as long as you’re not doing anything exotic with the APIs. But aesthetically, there’s one big caveat. ...

September 12, 2025

#73 trafilatura’s image extraction is a bit too cautious for my taste

A poketto.me user recently filed a curious bug: They had saved a page that clearly contained images — but in the reader view, no images showed up. I expected some quirky HTML. But when I checked, the <img> tags looked perfectly normal (see Exhibit A). Yet, after passing the HTML through trafilatura (which I use to convert HTML to Markdown), the images had simply vanished. 🔎 The culprit? Trafilatura is very cautious with images. It only accepts <img src=...> URLs that end with a known extension (.jpg, .png, .gif, …). The site in question served images from URLs without extensions — so trafilatura just ignored them. ...

September 11, 2025

#72 Product analytics is more than DAU and WAU

Recently, I wrote about adopting Posthog for poketto.me. At first, I thought I’d use it for the basics: 📆 Daily & weekly active users (DAU/WAU) 📎 Core events (URLs saved, links shared, etc.) 🚨 Error tracking and alerting But then I realized: analytics can do much more. In fact, Posthog replaced one of my home-grown tools — my “podcast heuristic accuracy guestimator.” Let me explain. When a user adds content to their podcast feed, poketto.me has to gauge three things: ...

September 10, 2025