<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
  <title>Noted — Dan Doupovec</title>
  <link href="https://doupovec.com/notes/" />
  <link rel="self" href="https://doupovec.com/notes/feed.xml" />
  <id>https://doupovec.com/notes/</id>
  <updated>2026-10-26T12:00:00+01:00</updated>
  <author><name>Dan Doupovec</name><uri>https://doupovec.com/</uri></author>
  <entry>
    <title>Writing code is passé. But it was never about that.</title>
    <link href="https://doupovec.com/notes/sweb/" />
    <id>https://doupovec.com/notes/sweb/</id>
    <published>2026-10-26T12:00:00+01:00</published>
    <updated>2026-10-26T12:00:00+01:00</updated>
    <summary>AI writes the code for me now. Whether it should be written at all is still on me.</summary>
    <content type="html">&lt;p&gt;I already hated it in primary school. And still, with my phone under the desk, I hand-wrote an HTML and JS page in a text editor, just for myself, on the only free hosting I could find: sweb.cz.&lt;/p&gt;
&lt;p&gt;Seznam shut sweb down. What is left is a line in a list of defunct domains and a copy in the National Library, which they will only show you in the reading room.&lt;/p&gt;
&lt;p&gt;The code was terrible. But those days spent on it made me stop and ask whether it was worth doing at all. And that is exactly what a lot of people and projects are missing today, with everything sped up this much.&lt;/p&gt;
&lt;p&gt;Now I hear from everyone that anybody from marketing will replace a programmer, you only need to know how to prompt. But that same person from marketing would object if you told them their job is just writing text. Development is the same. You have to think a few levels ahead, and above all you have to enjoy it, or you won’t last.&lt;/p&gt;
&lt;p&gt;Today you can click that website together in ten minutes. But ten minutes is not enough to realize whether you even want it yourself, let alone whether anyone else does.&lt;/p&gt;
&lt;p&gt;AI writes the code for me now. Whether it should be written at all is still on me.&lt;/p&gt;</content>
  </entry>
  <entry>
    <title>An AI search engine won’t recommend you for who you are. It recommends the page that answers the question.</title>
    <link href="https://doupovec.com/notes/ai-search/" />
    <id>https://doupovec.com/notes/ai-search/</id>
    <published>2026-10-08T12:00:00+01:00</published>
    <updated>2026-10-08T12:00:00+01:00</updated>
    <summary>I asked ChatGPT, Perplexity, Google AI Mode, Gemini and Claude twenty ordinary questions. ChatGPT cited us in 15 of 20, Perplexity in 16, Google in 13.</summary>
    <content type="html">&lt;p&gt;Over the past few weeks the Jev model came out, OpenAI answered with its own Decisions API, and then came Dots, Muse from Meta and Grok Bot. Models that are supposed to decide for you, and agents that are supposed to automate half your life. And like everyone else, I immediately started thinking about where to cram it into our product. I spent a few evenings on it, and the vast majority of it did not survive in production.&lt;/p&gt;
&lt;p&gt;So I flipped the question. Not what AI will do for us, but what it tells people about us. I asked ChatGPT, Perplexity, Google AI Mode, Gemini and Claude twenty ordinary questions. Where to play basketball in Tábor, where there is a free tennis court in Prague, which app shows freely accessible venues. No history, each one in a new chat.&lt;/p&gt;
&lt;p&gt;ChatGPT cited us in 15 of 20, Perplexity in 16, Google in 13. For tennis in Prague, the whole answer from both ChatGPT and Google rested on us alone, including the fact that there are 17 courts. In Ivančice, Perplexity listed exactly our counts, 6 workout spots, 4 tables, 2 pump tracks, and sent people to Sportera.cz.&lt;/p&gt;
&lt;p&gt;And then volleyball in Hradec Králové. Five engines, zero mentions of us. Not because they didn’t know us. Two questions earlier, four of them had recommended us by name. We simply have no volleyball court on the map there.&lt;/p&gt;
&lt;p&gt;An AI search engine won’t recommend you for who you are. It recommends the page that answers the question. In classic Google you can be seventh and a person will still catch sight of you. In an AI answer there is no seventh place. Either you are the source the answer was built from, or you can’t be seen. Claude showed it best. It was the only one that did not cite us once, and when I asked what Sportera is, it pieced the answer together from a six-month-old interview for VUT and the headline of my LinkedIn profile. It knows me, not our pages.&lt;/p&gt;
&lt;p&gt;So agents are great for some things, but we have another boring task: filling in the white spots on the map. Each of them is a question AI won’t recommend us for yet.&lt;/p&gt;
&lt;p&gt;Do you also test whether AI recommends you?&lt;/p&gt;
&lt;p&gt;PS: test it in incognito mode. A logged-in account slips in your own history and location, and the result looks different.&lt;/p&gt;</content>
  </entry>
  <entry>
    <title>Our profanity filter thought Pospíchalova was a swear word.</title>
    <link href="https://doupovec.com/notes/pospichalova/" />
    <id>https://doupovec.com/notes/pospichalova/</id>
    <published>2026-09-29T12:00:00+01:00</published>
    <updated>2026-09-29T12:00:00+01:00</updated>
    <summary>8 blocks, and 0 of those texts were profane. The fix was small, and the new filter reports zero false alarms.</summary>
    <content type="html">&lt;p&gt;Every text people add to the map goes through a profanity check. Over the weekend I ran it across the whole catalogue for the first time. 8 blocks, and 0 of those texts were profane. Picassova, Negrelliho, and for instance “retardér u vjezdu na hřiště” (a speed bump at the entrance to a court).&lt;/p&gt;
&lt;p&gt;The filter looked for short terms anywhere inside a word, and Czech street names contain them surprisingly often. The fix was small, and the new filter reports zero false alarms.&lt;/p&gt;
&lt;p&gt;Only then did it hit me that in all that time nobody had complained. A person whose own street name gets rejected by a form usually doesn’t write to support. They just close it.&lt;/p&gt;
&lt;p&gt;Do you block hard right in the form, or do you prefer to validate later, in post-moderation?&lt;/p&gt;</content>
  </entry>
  <entry>
    <title>For six months our map thought Bad Schandau was Žandov. True, just a different Žandov.</title>
    <link href="https://doupovec.com/notes/zandov/" />
    <id>https://doupovec.com/notes/zandov/</id>
    <published>2026-09-07T12:00:00+01:00</published>
    <updated>2026-09-07T12:00:00+01:00</updated>
    <summary>A venue came in from Germany and landed in our Czech stats. The fix was one line.</summary>
    <content type="html">&lt;p&gt;We split the venues on the map by town. I pull the town names from an API with a Czech parameter, because otherwise we would sometimes get Prague instead of Praha and so on.&lt;/p&gt;
&lt;p&gt;Here it backfired. Bad Schandau lies across the border, in Czech it is called Žandov, and the API knows that. But Žandov is also a town in the Česká Lípa district. So a venue came in from Germany, passed as Žandov and landed in our Czech stats. Nobody noticed, Žandov is a normal Czech name.&lt;/p&gt;
&lt;p&gt;It is not the last one. Mnichov, Komárno, Sklené. They exist here and across the border, and you can’t tell them apart by name. The fix was one line, the parameter is now picked by country.&lt;/p&gt;
&lt;p&gt;A question for those who took a product across the border: what broke for you first?&lt;/p&gt;</content>
  </entry>
  <entry>
    <title>Maybe it is only cool to me, but the state has photographed the whole country at 12.5 centimetres per pixel.</title>
    <link href="https://doupovec.com/notes/ortofoto/" />
    <id>https://doupovec.com/notes/ortofoto/</id>
    <published>2026-08-25T12:00:00+01:00</published>
    <updated>2026-08-25T12:00:00+01:00</updated>
    <summary>Free, no API key, CC BY 4.0. It was made so rapeseed subsidies couldn’t be faked.</summary>
    <content type="html">&lt;p&gt;Free, no API key, CC BY 4.0 licence.&lt;/p&gt;
&lt;p&gt;ČÚZK Ortofoto. I deployed it as the satellite layer of our map and it has been running for half a year without a problem. Now I also use it as the fallback image for venues where we have no photo. Instead of a placeholder you can at least roughly see what the place really looks like.&lt;/p&gt;
&lt;p&gt;PS: It was not made for the public. It was made so rapeseed subsidies couldn’t be faked. They update it every two years.&lt;/p&gt;</content>
  </entry>
  <entry>
    <title>Three months ago I knew nothing about SEO. Today Google indexes 1,240 of our pages, and almost half of them were not written by a person.</title>
    <link href="https://doupovec.com/notes/seo/" />
    <id>https://doupovec.com/notes/seo/</id>
    <published>2026-08-17T12:00:00+01:00</published>
    <updated>2026-08-17T12:00:00+01:00</updated>
    <summary>The generated hub pages get indexed better than the hand-filled venue details. It only took reading our own data and four boring things.</summary>
    <content type="html">&lt;p&gt;Of the 1,429 addresses in the sitemap, 597 are generated hub pages, 585 combinations of city and sport and 12 national overviews. They build themselves from the data: all venues in Brno, basketball in Prague, skateparks in the Czech Republic. The rest is the real core, the detail pages of individual venues, and there are 825 of those. 87% of everything is in the index, in May it was around 550 pages.&lt;/p&gt;
&lt;p&gt;Interestingly, the generated hub pages get indexed better than the hand-filled venue details. Of the pages Google crawled and did not index, 282 are individual venues and only 5 are city pages. The average position across the whole site is 8.7. On the queries we really care about we are in the top five: “basketbalové hřiště Brno” averages 3.1, “workout hřiště Brno” 3.8.&lt;/p&gt;
&lt;p&gt;And it only took reading our own data and four boring things. Fix the declension, so the page doesn’t say “hřiště v Brno” (the wrong case ending). Put a paragraph that claims something above the list of links. Add the nicknames people really call the places. And let the attributes from people standing at the venue flow straight into the pages.&lt;/p&gt;
&lt;p&gt;In a small team you don’t pick your role. In May I did SEO, in between came moving the database to Supabase, and now I am on mobile, the APK started on a physical Android for the first time. I will let this run and move on.&lt;/p&gt;
&lt;p&gt;A question for those who have been doing this longer: generated hub pages over your own data clearly work, but where do you think the line is, beyond which it is just noise to Google?&lt;/p&gt;</content>
  </entry>
  <entry>
    <title>Two months ago I stood on a stage in Prague in front of people from 100+ countries and talked about sport at a time when we are all glued to screens.</title>
    <link href="https://doupovec.com/notes/tafisa/" />
    <id>https://doupovec.com/notes/tafisa/</id>
    <published>2026-08-05T12:00:00+01:00</published>
    <updated>2026-08-05T12:00:00+01:00</updated>
    <summary>Our problem is not a Czech problem. The phone is not the enemy. Nothing replaces the offline experience.</summary>
    <content type="html">&lt;p&gt;I still think about it, and three things I am taking away:&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;Our problem is not a Czech problem. After the session, Dr Saraf Aboobacker described exactly the same situation in India that we see in Brno: the venues exist, but nobody knows about them. Half the world is dealing with the same thing.&lt;/li&gt;
  &lt;li&gt;The phone is not the enemy. Our whole section was called “Navigating the Age of Screens”, and the best projects there did one thing: they did not use the app to keep you in it, but to get you outside. That is exactly what Sportera Team is about.&lt;/li&gt;
  &lt;li&gt;Nothing replaces the offline experience. We can have the best technology, but the feeling when you score and high-five a teammate on a real court simply cannot be digitized. And that is a good thing.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Two years ago we were three guys who wanted to play basketball and had nowhere to do it. Now we talk about it at a world congress. Sometimes I have to remind myself of that.&lt;/p&gt;
&lt;p&gt;Thank you, Martin Chlumsky, for opening the door for us.&lt;/p&gt;
&lt;p&gt;If you were at TAFISA too, get in touch. I would be glad to follow up.&lt;/p&gt;</content>
  </entry>
</feed>
