TR
Section 4 Blog · 4.1.4
5 min read

Removing the AI
made it better

Build note · One HTML file · 19 publications · No keys

In short§1

I built a single-file page to read the world’s tech publications in Turkish. It scans nineteen sources, translates the headlines, and when you click a story it puts the text in front of you in Turkish instead of sending you to the site. No server, no install, no API key.

Here is the interesting part: when I was forced to remove the key, the product didn’t get smaller. It got better.

Why build this§2

Tech journalism happens in English. Turkish tech media usually runs the same story a day later and shorter. I want to read the source, but scanning forty English headlines at the end of a long day is work in itself.

What I wanted was simple: the day’s picture, in Turkish, on one page. No sign-up, no notification prompt, no company in the middle.

The constraint that decided everything§3

The first version called an AI model. Write the daily summary, translate the headlines into proper Turkish. It worked, and it worked well.

Then I counted what the page actually required: I had to get an API key, load a balance, and keep that key in the browser. A chat subscription doesn’t help here — a web page can’t use one. The programmatic API is a separate product, billed per use.

I had filed this under “detail, deal with it later.” It wasn’t. The moment I removed the key I had to make every decision again — and what came out was better than what I had. I learned the same lesson building an assistant: “make it free” is not a feature, it’s an architectural decision.

The browser’s walls§4

A browser can’t simply fetch another site’s data. Not even a public RSS feed — it’s blocked by design. So the page routes the request through an intermediary, and if one doesn’t answer it tries the next. With three in the chain, all nineteen sources come through.

For translation I wanted DeepL first; the quality beats Google. I tried. It doesn’t work. DeepL refuses browser-origin requests on both its free API and its web endpoint. Even with a key it can’t be called from an HTML file — I’d need my own server in between, which would break the “no install” promise. Google’s open translation endpoint it is. It does better than I expected.

Reading the story without going to the site§5

Translating the headline wasn’t enough; I wanted to read the story. The page now fetches the full article, strips the menu, the ads and the “related stories” blocks, and translates it paragraph by paragraph. On the right it lists the important English words from that article with their Turkish meanings.

One small, maddening detail: formatting marks survive translation and leave residue like ## in the middle of sentences. I had to clean them at the source and recognise headings by their shape instead — a short line that doesn’t end in punctuation is probably a heading.

The best wrong turn§6

I clicked a WIRED story. What came back was clean, fluent Turkish:

Already a subscriber? Sign in. Read this story for free. To continue reading, sign up for the newsletter… See offers.

The page had mistaken the subscription screen for the article and translated it with great care. This is my favourite kind of bug: the system works perfectly, it just works on the wrong thing.

There were two ways to fix it. I could have looked for ways around the wall; I didn’t, that’s the publication’s call. Instead the page now recognises the subscription screen, refuses to translate it, shows the summary the RSS feed provides, and says plainly underneath: this publication reserves the story for subscribers, open the original to continue.

An honest gap serves the reader better than a fake fullness.

The glossary and the useless-word problem§7

The first version of the glossary was worthless. It gave me completely, without, testing, officially. Technically correct, practically pointless — I already know those.

So I added filters. Everyday words went. -ly adverbs went; most of them are transparent. Proper nouns went — if a word appears capitalised mid-sentence it’s Nvidia, and Nvidia doesn’t need translating.

The most useful filter was the last one: words whose Turkish looks like their English. performance → performans teaches nobody anything. What survived:

  • connector → bağlayıcı
  • incendiary → yangın çıkarıcı
  • instability → istikrarsızlık

A daily summary without AI§8

I assumed the daily summary would go when the key went. Then I asked the right question: how do I know a story matters?

The answer was in front of me. It matters if more than one publication ran it. The page now builds topic clusters from shared words in the headlines; if three outlets covered the same event, that story goes to the top of the list with the names of those outlets underneath.

On the first run the list collapsed into one site’s feed — WIRED had simply published a lot that day. I capped it at two stories per publication and the list balanced out.

What I realised afterwards is that this is more honest than a model’s guess at what mattered today. It isn’t a guess, it’s a measurement: of what the world’s newsrooms actually spent their day on.

What stayed with me§9

We fear that constraints will shrink the product. This time the opposite happened. Removing the key took away the convenience of “let me just ask the model” and forced me to look for a signal already sitting in the data. The signal I found turned out to be more defensible than the answer the model would have given.

So where is the AI in all this? It was next to me while I wrote the page — but the page doesn’t need it to run. Those are two different things, and telling them apart has been the most useful decision I’ve made lately.

Ubeyd Gencer · Istanbul, Türkiye Section 4 · Blog Reference manual · Revision 2026.08