#98 Supabase is my new favorite database

Since the early days of poketto.me, I’ve been dissatisfied with my persistence architecture. I started with Google Cloud SQL, but I quickly realized that it was too expensive for a small app. I switched to Firebase and had Claude do the replatforming, if you remember. However, when I introduced full-text search, I had to add BigQuery as a second database just for that because Firebase doesn’t have full-text indexing. The point is: It’s a lot of headaches for something that should be easy. ...

April 7, 2026

#96 Stopping the scrape: Why I switched to the Wikimedia API

I’ve noticed a welcome uptick in users saving Wikipedia articles to poketto.me recently. But until now, the app treated Wikipedia just like any other website: it scraped the raw HTML. Turns out, for Wikipedia, that is far from ideal: 🤯 Artifacts: The extracted content often included UI clutter like “Edit” buttons, navigation links, and “Citation missing” tags. 📋 Rendering issues: The standard HTML → Markdown → HTML conversion pipeline introduced plenty of ugly formatting glitches specific to wikis. ...

October 4, 2025

#95 Be careful when counting your whitespace

One of the great things about working on poketto.me is that I'm constantly learning about fascinating linguistic subtleties. For instance, while working on automatic content summaries and extracting key facts and figures, I came across an interesting issue with token counting in Chinese script. I had put a safeguard in place so that poketto.me would only attempt to summarize content longer than 100 words. This works well for German and English content, but when I tested the feature on an article published by Xinhua, a Chinese news agency, my code said the article had only about 12 words, which was obviously incorrect, so it didn't produce a summary. ...

October 3, 2025

#94 BigQuery’s SEARCH function only works with ASCII characters

Admittedly, it may not have been my brightest idea to use BigQuery as the search backend for poketto.me. But since Firebase doesn’t have built-in full-text search, I would have needed to add another tool to my stack anyway. I figured BigQuery would be easier than managing something external like Apache Lucene or Elasticsearch. Plus, BigQuery has a built-in SEARCH(...) function, so why not give it a try? As it turns out, SEARCH(...) is really more of a token-based text analyzer than a true search function: 1️⃣ It splits both the search term and the text into tokens (words). 2️⃣ It matches full tokens only. 3️⃣ It returns just TRUE or FALSE—no offsets, no match lengths. 🤯 And worst of all: It only works with ASCII. Yes. Like it’s 1979. ...

October 2, 2025

#92 Angular data binding with arrays: Yes, it can work!

Angular is awesome. And data binding, in particular, has been a game changer for developing modern web apps. Something changes somewhere and—magically—every part of your UI that needs to respond does so. However, I’ve always struggled with one corner case: What if you’re binding to an array, and the change that occurs is that something gets added or removed, and you need to respond to the change programmatically (not just in your HTML template)? ...

September 30, 2025

#91 How to fix the ominous Android Status Bar Issue

Remember Capacitor + Android Status Bar = 🤯? 🪲 This bug has haunted me for months—stalling the Android release of poketto.me and draining way too much mental energy. It’s one of those dreaded dev problems: no obvious solution, hard to debug, and endless rabbit holes. Eventually, I had to bite the bullet and dig in. Here’s what I found: 💣 Issue #1: The Capacitor status bar plugin only half-works. There’s a StatusBar.setOverlaysWebView(true/false) API, but on modern Android versions it doesn’t behave as advertised. Why? ...

September 29, 2025

#88 The memory consumption patterns of LangChain are… disturbing

As I said in No, you don’t have to learn LangChain, we shouldn’t get distracted by the artificial complexity introduced by our frameworks. LangChain is mostly a wrapper around the REST APIs of various LLM providers. Useful? Yes—switching between models becomes easy. But here’s a mystery I can’t explain. When I added Gemini as a fallback to DeepSeek (see yesterday’s post about DeepSeek refusing to touch Chinese politics), I thought it would be straightforward: ...

September 26, 2025

#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