<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
  <title>Algavi — Articles</title>
  <subtitle>Notes from practice on software development, architecture and AI automation.</subtitle>
  <link href="https://algavi.cz/en/feed.xml" rel="self"/>
  <link href="https://algavi.cz/en/articles/"/>
  <id>https://algavi.cz/en/articles/</id>
  <updated>2026-10-23T00:00:00.000Z</updated>
  <author>
    <name>Aleš Algavi</name>
  </author>
  <entry>
    <title>PHP2Shell: two critical holes in PHP that can&#39;t wait</title>
    <link href="https://algavi.cz/en/articles/php2shell-critical-php-flaws/"/>
    <id>https://algavi.cz/en/articles/php2shell-critical-php-flaws/</id>
    <published>2026-10-23T00:00:00.000Z</published>
    <updated>2026-10-23T00:00:00.000Z</updated>
    <summary>On October 20, PHP announced an emergency security release for the next day. It fixed two bugs that let an attacker run their own code on a server without logging in. What they are, why they happened and what to do.</summary>
    <content type="html">&lt;p&gt;PHP fixes usually ship quietly. This time the PHP team &lt;a href=&quot;https://www.php.net/archive/2026.php#2026-10-20-1&quot;&gt;warned in advance on October 20&lt;/a&gt; that it would release a fix for two critical vulnerabilities rated &lt;strong&gt;CVSS 9.2 out of 10&lt;/strong&gt; the next day, and earlier if details leaked. They did leak, and attackers were trying them before the fix was out.&lt;/p&gt;
&lt;p&gt;The bugs got the nickname &lt;strong&gt;PHP2Shell&lt;/strong&gt;. They let an attacker run code on the server without a password, with the site&#39;s privileges: its files, the database password and write access wherever PHP can write. That covers practically every PHP site, whether it runs WordPress, Laravel, Nette or custom code. Apache with &lt;code&gt;mod_php&lt;/code&gt; is the most exposed, because the attack lands before the application runs.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Fixed versions:&lt;/strong&gt; 8.5.12, 8.4.27, 8.3.36 and 8.2.35. PHP 7.4 to 8.1 only have source patches, and older versions get nothing.&lt;/p&gt;
&lt;h2&gt;How it works&lt;/h2&gt;
&lt;p&gt;Both are &lt;em&gt;use-after-free&lt;/em&gt; bugs: PHP uses memory it has already freed, which may by then hold the attacker&#39;s data.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;CVE-2026-109618&lt;/strong&gt; is like a cook who drops everything and leaves when the counter runs out of space. The cleaner then tidies up according to a note the cook only half wrote. PHP does something similar when it runs out of memory: it jumps out of the current work immediately, and cleanup trusts half-initialized data.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;CVE-2026-109619&lt;/strong&gt; is like a hotel where the room isn&#39;t fully reset between guests. A PHP server reuses the same processes for visitor after visitor. When a request is interrupted unexpectedly, a &amp;quot;note&amp;quot; pointing to memory that now belongs to someone else stays in the process, and the next request follows it.&lt;/p&gt;
&lt;h2&gt;Why it happened&lt;/h2&gt;
&lt;p&gt;PHP was built on the rule that everything is thrown away at the end of a request and the next one starts clean. For performance, though, processes are reused, and the rule breaks as soon as something somewhere isn&#39;t reset. Add the shortcut of &amp;quot;bail out immediately on out-of-memory&amp;quot;, which assumes every place in the code is ready for it. And PHP is written in C, which doesn&#39;t check whether memory still belongs to you. So the bug comes from three old decisions meeting in situations nobody routinely tests.&lt;/p&gt;
&lt;h2&gt;In practice&lt;/h2&gt;
&lt;p&gt;According to Amazon, the first exploitation attempt came on &lt;strong&gt;October 17&lt;/strong&gt;, four days before the fix. Right after the release hundreds of &amp;quot;exploits&amp;quot; appeared on GitHub, mostly fake. Security firms still caught real attempts, including one trying to plant a &lt;em&gt;webshell&lt;/em&gt;, a script an attacker uses to control the server.&lt;/p&gt;
&lt;p&gt;A typical victim looks unremarkable: a small e-shop on a cheap VPS, PHP last updated over the summer. An automated scanner breaks in after a few attempts, reads the database password and injects a card-skimming script into checkout. The site doesn&#39;t need a single bug in its own code.&lt;/p&gt;
&lt;p&gt;This isn&#39;t overcautious. &lt;strong&gt;CVE-2024-4577&lt;/strong&gt; from June 2024 was being used by ransomware less than two days after disclosure.&lt;/p&gt;
&lt;h2&gt;What to do&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Update PHP&lt;/strong&gt; and &lt;strong&gt;restart all its processes&lt;/strong&gt; (PHP-FPM, Apache). Debian and Ubuntu often backport fixes into an older version, so a lower &lt;code&gt;php -v&lt;/code&gt; number doesn&#39;t necessarily mean you&#39;re vulnerable. Check your distribution&#39;s security tracker.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;In Docker&lt;/strong&gt;, rebuild the image with a freshly pulled base (&lt;code&gt;docker compose build --pull&lt;/code&gt;). &lt;code&gt;up -d&lt;/code&gt; alone isn&#39;t enough. Then check the version inside the container.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;On shared hosting&lt;/strong&gt;, ask your provider whether they&#39;ve updated.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;If you can&#39;t update right away&lt;/strong&gt;, the temporary measures in the &lt;a href=&quot;https://www.php.net/archive/2026.php#2026-10-21-5&quot;&gt;official advisory&lt;/a&gt; help, such as turning off &lt;code&gt;session.upload_progress&lt;/code&gt;. They don&#39;t fully close the hole, though.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Check the server.&lt;/strong&gt; If it ran a vulnerable version, look for new files in the web root, new cron jobs and crashing PHP processes.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;A website&#39;s security rests not only on its own code but on the environment it runs in. That&#39;s why it pays to have deployment set up so a fix takes a single command.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Sources:&lt;/strong&gt; &lt;a href=&quot;https://www.php.net/archive/2026.php#2026-10-20-1&quot;&gt;php.net – advance notice&lt;/a&gt; · &lt;a href=&quot;https://www.php.net/archive/2026.php#2026-10-21-5&quot;&gt;php.net – releases&lt;/a&gt; · &lt;a href=&quot;https://www.root.cz/zpravicky/pripravte-se-na-kritickou-aktualizaci-php/&quot;&gt;Root.cz&lt;/a&gt; · &lt;a href=&quot;https://github.com/php/php-src/security/advisories/GHSA-w8hw-w9fx-j79w&quot;&gt;GHSA-w8hw-w9fx-j79w&lt;/a&gt; · &lt;a href=&quot;https://github.com/php/php-src/security/advisories/GHSA-6wmf-4rv5-p3rp&quot;&gt;GHSA-6wmf-4rv5-p3rp&lt;/a&gt; · &lt;a href=&quot;https://censys.com/advisory/cve-2026-109618-cve-2026-109619/&quot;&gt;Censys&lt;/a&gt;&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>A bakery, WhatsApp and AI: how I automated orders for fresh bread</title>
    <link href="https://algavi.cz/en/articles/bakery-whatsapp-ai/"/>
    <id>https://algavi.cz/en/articles/bakery-whatsapp-ai/</id>
    <published>2026-10-19T00:00:00.000Z</published>
    <updated>2026-10-19T00:00:00.000Z</updated>
    <summary>A small bakery, dozens of customers and the same daily round of WhatsApp messages. How it turned into a system that collects orders on its own and uses AI only where rigid logic fails.</summary>
    <content type="html">&lt;p&gt;Say &amp;quot;order automation&amp;quot; and most people picture an online shop or processing large enquiries from email. But what do you do with a product that is too small for an online shop and too perishable for paperwork? Fresh sourdough bread, for example.&lt;/p&gt;
&lt;h2&gt;How it all started&lt;/h2&gt;
&lt;p&gt;I have been working with Michal Konečný as his personal technical adviser for some time now. Recently he described a problem that other producers with a narrower range of products may recognise too.&lt;/p&gt;
&lt;p&gt;He has two kinds of customers: regular and occasional. The regular ones run themselves. The occasional ones, though, mean the same round every day: offer what will be available on which day and how much, wait for a reply, and write down whether the customer confirmed, changed or cancelled. Over WhatsApp or on the phone.&lt;/p&gt;
&lt;p&gt;Every new customer added a bit more work. The time spent checking grew linearly with their number, at exactly the moment Michal should have been baking.&lt;/p&gt;
&lt;h2&gt;Why vibe coding was not enough&lt;/h2&gt;
&lt;p&gt;Michal had already tried to simplify part of the process with AI agents himself. It half worked, and orders got lost in the gaps. You cannot build a fully debugged automated system by vibe coding. Or you can, but at the cost of the vibe coder&#39;s mental health. :D&lt;/p&gt;
&lt;h2&gt;The solution: an admin panel + WhatsApp&lt;/h2&gt;
&lt;p&gt;I designed an admin panel connected to &lt;a href=&quot;https://slovackychleba.cz/&quot;&gt;his website&lt;/a&gt;, where Michal sets up his customers and their parameters. The rest runs on its own:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;In the morning, the system sends the occasional customers an offer through the WhatsApp Business API.&lt;/li&gt;
&lt;li&gt;With one button, the customer &lt;strong&gt;confirms&lt;/strong&gt; the order or chooses &lt;strong&gt;Change&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;The result is written into the system and the bakery knows exactly how much of what to bake. No phone calls and no copying things by hand.&lt;/li&gt;
&lt;/ol&gt;
&lt;figure class=&quot;post-figure is-narrow&quot;&gt;
  &lt;img src=&quot;/img/clanky/pekarna-whatsapp-zprava.png&quot; width=&quot;293&quot; height=&quot;461&quot; loading=&quot;lazy&quot; alt=&quot;Sample WhatsApp message in Czech: a proposed order for Tuesday 13 October (3× Klasik, 2× Cibule), asking the customer to confirm it by 18:00 today using the button below, or choose Change to edit it. Below the message are the buttons Confirm and Change.&quot;&gt;
  &lt;figcaption&gt;A sample template of the morning message with a proposed order (in Czech).&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h2&gt;But people are not buttons&lt;/h2&gt;
&lt;p&gt;In an ideal world, that would be enough. In the real world, a customer says: &amp;quot;Today I want two more loaves and no rolls.&amp;quot; That is why there is a &lt;strong&gt;Change&lt;/strong&gt; button.&lt;/p&gt;
&lt;p&gt;The customer simply writes what they need. And here is the catch: everyone writes differently. Some use abbreviations, some make typos, some write a whole paragraph. Expecting customers to follow an exact format is a utopia.&lt;/p&gt;
&lt;p&gt;This is where AI comes in:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;If the system recognises the message by its format, it processes it straight away.&lt;/li&gt;
&lt;li&gt;If not, it sends the text through an API to a language model, which extracts a predicted order from it.&lt;/li&gt;
&lt;li&gt;The system sends that back to the customer on WhatsApp for confirmation.&lt;/li&gt;
&lt;li&gt;The customer confirms or corrects it, and the loop repeats until the order is right. 🔄&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;So the AI never decides on its own. It only translates human language into structured data, and the customer always has the final say.&lt;/p&gt;
&lt;figure class=&quot;post-figure&quot;&gt;
  &lt;a href=&quot;/img/clanky/pekarna-zivotni-cyklus-objednavky.svg&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;
    &lt;img src=&quot;/img/clanky/pekarna-zivotni-cyklus-objednavky.svg&quot; width=&quot;2640&quot; height=&quot;1560&quot; loading=&quot;lazy&quot; alt=&quot;Diagram of the order life cycle (labels in Czech): Michal sets up customers in the admin panel. For a regular customer the order is created automatically from their settings. An occasional customer gets a morning offer on WhatsApp and can confirm it, cancel it or describe a change in free text. When the system does not recognise the message format, a language model extracts a predicted order, which goes back to WhatsApp for review; if it is wrong, the customer corrects it and the loop repeats. The confirmed order is written into the system and becomes the baking plan.&quot;&gt;
  &lt;/a&gt;
  &lt;figcaption&gt;The order life cycle from the morning offer to the baking plan (labels in Czech). Click to open the diagram at full size.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h2&gt;The result&lt;/h2&gt;
&lt;p&gt;Michal no longer spends his mornings calling around and copying orders. Customers order where they already are, on WhatsApp. And every day the bakery knows exactly how much to bake.&lt;/p&gt;
&lt;p&gt;Automation does not have to mean a big online shop. Sometimes all it takes is a well-designed process, one communication channel and AI used exactly where rigid logic fails.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Will software engineers disappear? Take a look at an old drafting room</title>
    <link href="https://algavi.cz/en/articles/will-software-engineers-disappear/"/>
    <id>https://algavi.cz/en/articles/will-software-engineers-disappear/</id>
    <published>2026-09-15T00:00:00.000Z</published>
    <updated>2026-09-15T00:00:00.000Z</updated>
    <summary>Technical drawings used to be produced by entire halls full of people. Today a fraction of them does the same work, and yet the profession has not vanished. Why I think software engineers face a transformation rather than an ending.</summary>
    <content type="html">&lt;p&gt;Almost every week I read that AI will soon replace programmers. Sometimes from people who sell AI, sometimes from people who are afraid of it. Whenever I think about it, one old photograph keeps coming back to me.&lt;/p&gt;
&lt;figure class=&quot;post-figure&quot;&gt;
  &lt;img src=&quot;/img/clanky/rysovna.jpg&quot; width=&quot;554&quot; height=&quot;554&quot; loading=&quot;lazy&quot; alt=&quot;A large mid-20th-century drafting room: dozens of men in white shirts bent over rows of drafting tables, drawing technical drawings by hand.&quot;&gt;
  &lt;figcaption&gt;A drafting room in the mid-20th century. Every line was drawn by hand, and a single project needed a whole hall of people.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h2&gt;The drafting room disappeared, the drafter stayed&lt;/h2&gt;
&lt;p&gt;Before CAD, every technical drawing was made by hand. Every line, every dimension, every correction. When the brief changed, the drawing was redrawn. That is why car makers and aircraft plants had entire halls full of drafting tables.&lt;/p&gt;
&lt;p&gt;In the 1980s and 1990s, computers and CAD arrived. Work that used to need a hall is now handled by a few people at their screens. And yet the profession did not disappear. In 2025 the US Bureau of Labor Statistics (BLS) still counts about 180,000 drafters and expects roughly the same number in 2035. As the reason why their numbers are not growing, it names CAD and BIM: they raise productivity and let engineers and architects do much of the work themselves.&lt;/p&gt;
&lt;p&gt;So the drafter did not die out. The job changed. Instead of drawing lines, drafters model, check and coordinate. And more drawings are produced than ever, just by fewer hands.&lt;/p&gt;
&lt;h2&gt;What people in the field say&lt;/h2&gt;
&lt;p&gt;Opinions differ a lot, so here are just a few voices I find important.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Dario Amodei&lt;/strong&gt; (Anthropic) said in Davos in January 2026 that within six to twelve months AI models could do &amp;quot;most, maybe all&amp;quot; of what software engineers do today. He also mentioned that some of his engineers no longer write code themselves, they only edit what the model produces. At the same time he admitted he is not sure how fast it will happen.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Grady Booch&lt;/strong&gt;, one of the fathers of UML and now IBM&#39;s Chief Scientist for Software Engineering, sees it the opposite way in a February 2026 episode of The Pragmatic Engineer podcast. In his view, a &amp;quot;third golden age of software engineering&amp;quot; is beginning. Programmers feared for their jobs when compilers and higher-level languages arrived too, and AI is just another layer of abstraction. His summary: your tools are changing, but your problems are not.&lt;/p&gt;
&lt;p&gt;And the data? In 2025 the BLS counts more than 1.7 million software developers and expects their number to grow by 10% by 2035. A Stanford study (Brynjolfsson et al., 2025) so far mainly sees one thing: in the occupations most exposed to AI, developers among them, employment of people aged 22 to 25 fell by about 13%, while for more experienced colleagues in the same occupations it held steady or kept growing.&lt;/p&gt;
&lt;h2&gt;What I think&lt;/h2&gt;
&lt;p&gt;AI writes a large part of my code today. But what it writes, I first had to think through, explain, check, and then take responsibility for. Just like with the &lt;a href=&quot;/en/articles/bakery-whatsapp-ai/&quot;&gt;bakery taking orders over WhatsApp&lt;/a&gt;: the AI translates, a human decides.&lt;/p&gt;
&lt;p&gt;What I think is disappearing is turning a clear brief into code. Forms, CRUD, repeated patterns. Exactly the things juniors used to learn on. And that is the uncomfortable part: if the work people started on disappears, where will future seniors come from? Drafters had to solve this too. The way into the field changed, it did not close.&lt;/p&gt;
&lt;p&gt;Everything around it, on the other hand, is gaining value. Understanding what the client really needs. Designing a system that lasts. Spotting when the AI generated nonsense that only looks good. Security, testing, operations. And communicating with people who do not want to know anything about software.&lt;/p&gt;
&lt;p&gt;On top of that, when software gets cheaper, more of it gets made. A small bakery could not have afforded a custom system before; today it is an ordinary project. There will be more and more projects like that, and someone has to design and build them so that they work.&lt;/p&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;The drawing board disappeared. The drafter stayed, just doing different work, with fewer of them per drawing. I think software will go a similar way. A programmer who only turns briefs into code really is in trouble. An engineer who understands the problem, the system and the people it all revolves around will still be needed. Maybe even more than today.&lt;/p&gt;
&lt;h2&gt;Sources&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.bls.gov/ooh/architecture-and-engineering/drafters.htm&quot;&gt;BLS: Drafters (Occupational Outlook Handbook)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.bls.gov/ooh/computer-and-information-technology/software-developers.htm&quot;&gt;BLS: Software Developers, Quality Assurance Analysts, and Testers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.entrepreneur.com/business-news/ai-ceo-says-software-engineers-could-be-replaced-in-months/502087&quot;&gt;Entrepreneur: Anthropic CEO Says AI Could Replace Software Engineers in 6 to 12 Months&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://newsletter.pragmaticengineer.com/p/the-third-golden-age-of-software&quot;&gt;The Pragmatic Engineer: The third golden age of software engineering – thanks to AI, with Grady Booch&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://digitaleconomy.stanford.edu/publications/canaries-in-the-coal-mine&quot;&gt;Stanford Digital Economy Lab: Canaries in the Coal Mine? Six Facts about the Recent Employment Effects of AI&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content>
  </entry>
  <entry>
    <title>A year at SMS finance, the arrival of Stelar Holding and four days of AI</title>
    <link href="https://algavi.cz/en/articles/year-at-sms-finance/"/>
    <id>https://algavi.cz/en/articles/year-at-sms-finance/</id>
    <published>2026-07-08T00:00:00.000Z</published>
    <updated>2026-07-08T00:00:00.000Z</updated>
    <summary>The past month was so packed that I never got round to writing updates. Here is one big summary of three milestones.</summary>
    <content type="html">&lt;p&gt;The past month was so packed with events that I never got round to writing regular updates. So it turned into one big summary that I want to share. Three major milestones are behind me.&lt;/p&gt;
&lt;h2&gt;1. A year with SMS finance, a.s.&lt;/h2&gt;
&lt;p&gt;It is exactly a year since we started developing and modernising the company&#39;s internal systems. My balance after twelve months is more than positive.&lt;/p&gt;
&lt;p&gt;Not only in IT do you come across all kinds of approaches, from projects where ego mattered more than results, or where the basic prerequisites for leading people were simply missing, to genuinely healthy environments. That is why I appreciate the current setup all the more. There is excellent organisation here and leadership built on the abilities of people who really have what their roles require.&lt;/p&gt;
&lt;h2&gt;2. The arrival of Stelar Holding, a.s. and a new era&lt;/h2&gt;
&lt;p&gt;The big turning point came at the conference marking the company&#39;s 25th anniversary, where the launch of Stelar Holding, a.s. was announced. At the same time, SMS finance, a.s. became fully part of the new holding as &lt;strong&gt;Stelar Advisory a.s.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;For our IT team this was initially a big unknown and, honestly, a bit of a scare, mainly because of the ties to the EAG group and its strong technical team. But the reality of implementation is often different from the first presentation. Instead of a threat, this change opened the door to new ways of looking at our work, to new technologies and to interesting challenges.&lt;/p&gt;
&lt;h2&gt;3. An intensive four-day AI workshop&lt;/h2&gt;
&lt;p&gt;It was all rounded off by a team AI workshop. Each of us presented our own methods and showed how we actually use AI tools in everyday work. We brought the team&#39;s know-how to a common level and created an internal playbook.&lt;/p&gt;
&lt;p&gt;At the end we met representatives of the EAG group. They shared their practical experience from implementing AI, which is a valuable source of inspiration for us and will help us steer our further development in the right direction.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Spring wardrobe change: Apartmány Luka and SVUMSP get a new coat</title>
    <link href="https://algavi.cz/en/articles/new-coat-luka-svumsp/"/>
    <id>https://algavi.cz/en/articles/new-coat-luka-svumsp/</id>
    <published>2026-05-14T00:00:00.000Z</published>
    <updated>2026-05-14T00:00:00.000Z</updated>
    <summary>Spring is the perfect time to air out the closet. So I aired out two websites that had worn the same coat from the same template for years. Holiday apartments in Buchlovice and an artists&#39; association from Uherský Brod finally look the way they deserve.</summary>
    <content type="html">&lt;p&gt;Websites are a bit like clothes. When you buy them, they fit. Then a few years go by, you change, fashion changes, and one day you realise you are still wearing a jacket you outgrew long ago. It works, nobody complains, but you would rather not show it off.&lt;/p&gt;
&lt;p&gt;That was exactly the case with two websites I have a personal connection to. Both were once built from free HTML5 UP templates, both worked, and both asked for a new coat this spring.&lt;/p&gt;
&lt;h2&gt;Apartmány Luka: from one apartment to three&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://apartmanybuchlovice.cz/&quot;&gt;Apartmány Luka&lt;/a&gt; are in Buchlovice, South Moravia, a short walk from the chateau, Buchlov Castle and the vineyards. A place people visit for cycling, wine and quiet.&lt;/p&gt;
&lt;p&gt;The old website did not quite match that. It greeted you with a dark screen, a heading and a little circle, with everything else hidden below. It described a single apartment, even though three are available today. And a look at the source code revealed comments like &amp;quot;This is Massively&amp;quot;, a greeting from the original template. A coat with the shop tag still attached, so to speak.&lt;/p&gt;
&lt;p&gt;The new website is built around what guests actually want to know:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Where is it and how do I get there.&lt;/strong&gt; The &amp;quot;Navigate to us&amp;quot; button sits right at the top and there is a map at the bottom.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;How do I book.&lt;/strong&gt; Bookings are phone-only, so the phone number is always in sight, one tap away on a mobile.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Which apartment to choose.&lt;/strong&gt; Luka 1, 2 and 3 each have their own tab with capacity, price and a photo gallery you can browse full screen.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;How much and when can I arrive.&lt;/strong&gt; Prices and check-in and check-out times sit together in one section, no digging through paragraphs.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;What to do nearby.&lt;/strong&gt; The chateau, Buchlov, Smraďavka, Kovozoo, Živá voda, Luhačovice spa, cycle paths. Here the surroundings matter as much as the bed.&lt;/li&gt;
&lt;/ul&gt;
&lt;figure class=&quot;post-figure&quot;&gt;
  &lt;a href=&quot;https://apartmanybuchlovice.cz/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;
    &lt;img src=&quot;/img/clanky/novy-kabat-apartmany-luka.jpg&quot; width=&quot;1200&quot; height=&quot;750&quot; loading=&quot;lazy&quot; alt=&quot;Home page of the new Apartmány Luka website: a large photo of grapes on the vine, the title Apartmány LUKA, a Navigate to us button at the top, a menu and a phone number. At the bottom an orange card saying Call us to arrange your stay, and cards showing 3 apartments available and check-in 14–18.&quot;&gt;
  &lt;/a&gt;
  &lt;figcaption&gt;The new coat of Apartmány Luka. Grapes instead of a dark screen and the phone always at hand.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Technically it is deliberately simple: a single static page, no content management system, no plugins that need updating every month. The hero photo loads according to the screen size, so a phone does not download a huge image meant for a monitor. The site is fast, has nothing to break and the owner does not have to look after it. For accommodation with a handful of apartments, that is exactly what you want.&lt;/p&gt;
&lt;h2&gt;SVUMSP: artists deserve a gallery, not a notice board&lt;/h2&gt;
&lt;p&gt;SVUMSP is the &lt;strong&gt;Association of Visual Artists of the Moravian-Slovak Borderland&lt;/strong&gt;. It has been around since 1990, is based in Uherský Brod, and over the years more than 150 professional and amateur artists have been part of it. People who spend their whole lives thinking about how things look.&lt;/p&gt;
&lt;p&gt;Which is why it was a little ironic that their website looked like a neatly kept notice board. I built the old version myself years ago, also on an HTML5 UP template, and it served well for its time. But times moved on. The site felt plain, the artworks had no room to shine, and the texts on the home page could only be changed through me.&lt;/p&gt;
&lt;p&gt;I built the new website around three things:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;People.&lt;/strong&gt; The home page opens with a group photo of the members. The association is not an institution, it is a group of people, and that should be visible straight away. Every artist has their own card with a portrait and portfolio, and the Artists section can be filtered.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Art.&lt;/strong&gt; The gallery got the space it needed; photos open in a large preview and can be browsed. Everything is carried by a calm, warm palette and the classic serif typeface Playfair Display, which suits visual art better than strict technical fonts.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Independence.&lt;/strong&gt; The association now manages most things on its own. Articles, almanacs, artists, their photos and the texts on the home page, section by section. Nobody has to wait until I have time.&lt;/p&gt;
&lt;figure class=&quot;post-figure&quot;&gt;
  &lt;a href=&quot;https://www.svumsp.cz/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;
    &lt;img src=&quot;/img/clanky/novy-kabat-svumsp.jpg&quot; width=&quot;1200&quot; height=&quot;642&quot; loading=&quot;lazy&quot; alt=&quot;Home page of the new SVUMSP website: a menu at the top, a large heading with the association&#39;s full name on a dark background, a short text about the association with Discover more and Our artists buttons, and below a group photo of the members outdoors by a stone wall.&quot;&gt;
  &lt;/a&gt;
  &lt;figcaption&gt;SVUMSP, renewed. People first, then the art, then the history.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Under the hood it is still the proven PHP framework Nette, but everything around it got a proper clean-up.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>The Ostrava TechMeetup was an absolute success</title>
    <link href="https://algavi.cz/en/articles/ostrava-techmeetup/"/>
    <id>https://algavi.cz/en/articles/ostrava-techmeetup/</id>
    <published>2025-11-07T00:00:00.000Z</published>
    <updated>2025-11-07T00:00:00.000Z</updated>
    <summary>Excellent organisation, a varied programme and one talk worth highlighting. A few impressions from Ostrava.</summary>
    <content type="html">&lt;p&gt;The Ostrava TechMeetup was an absolute success. The organisation was excellent, and the programme offered both technically rich and informal, inspiring talks. Exactly the kind of mix that keeps you engaged without wearing you out.&lt;/p&gt;
&lt;h2&gt;The talk worth highlighting&lt;/h2&gt;
&lt;p&gt;I&#39;d especially like to highlight the presentation by &lt;strong&gt;Michaël Pilaeten&lt;/strong&gt;. It was highly energetic and insightful. It provided a valuable perspective on product and output quality as such, not just the quality of the code or whether the tests pass, but what the person using the product actually gets in the end.&lt;/p&gt;
&lt;p&gt;That is a perspective many people often overlook. In development it is easy to focus on the technical side and on our own work, and much less on how the result is perceived by the person it is meant for.&lt;/p&gt;
&lt;h2&gt;Takeaway&lt;/h2&gt;
&lt;p&gt;Thanks to the organisers and the speakers. If you get the chance to attend the Ostrava TechMeetup, I recommend it.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Incognito mode: who it hides you from, and who it doesn&#39;t</title>
    <link href="https://algavi.cz/en/articles/incognito-mode-is-not-anonymous/"/>
    <id>https://algavi.cz/en/articles/incognito-mode-is-not-anonymous/</id>
    <published>2025-08-14T00:00:00.000Z</published>
    <updated>2025-08-14T00:00:00.000Z</updated>
    <summary>Close an incognito window and your history, cookies and form data are gone. But only from your own computer. The website you visited, your internet provider and the company network see your steps exactly as they always do. The key points, in short.</summary>
    <content type="html">&lt;figure class=&quot;post-figure&quot;&gt;
  &lt;img src=&quot;/img/clanky/anonymni-rezim-mr-incognito.jpg&quot; width=&quot;700&quot; height=&quot;387&quot; alt=&quot;Two-panel comic. The Chrome logo asks a small figure: “Which website would you like to see?” The figure: “I don&#39;t want you to know.” Chrome puts on a hand puppet in a hat and dark glasses: “What about telling Mr. Incognito?” The figure, happily: “Okay!”&quot;&gt;
  &lt;figcaption&gt;A comic that explains incognito mode better than its welcome screen does. Mr. Incognito is still the same browser.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Plenty of people open an incognito window and feel invisible. That gap between expectation and reality led to a 5 billion dollar class action against Google in 2020. Browsers have described the mode more precisely on their welcome screens ever since. Hardly anyone reads it, so here is the short version.&lt;/p&gt;
&lt;h2&gt;What an incognito window really does&lt;/h2&gt;
&lt;p&gt;It behaves as if you had launched the browser for the first time on a new computer. Once you close every incognito window, it deletes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Browsing and search history.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cookies and site data.&lt;/strong&gt; They work normally while the window is open; closing it logs you out of every account.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Form data&lt;/strong&gt;, passwords and addresses for autofill.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The cache.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Permissions&lt;/strong&gt; for the microphone or camera that you granted a site during the session.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;One exception: &lt;strong&gt;downloaded files stay&lt;/strong&gt; on the computer. If nobody else should see them, you have to delete them yourself.&lt;/p&gt;
&lt;p&gt;It also works the other way round. Once the window is closed, nobody can recover that session&#39;s history from the browser. Not even you.&lt;/p&gt;
&lt;h2&gt;Who still sees you&lt;/h2&gt;
&lt;p&gt;The browser cleans up after itself, but the connection itself runs exactly as usual. Incognito mode doesn&#39;t encrypt your traffic and doesn&#39;t hide your IP address. So you are still visible to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;The website you visit.&lt;/strong&gt; It knows your IP address, and with it your rough location. As soon as you log in, it knows exactly who you are and links the whole visit to you.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Your internet provider.&lt;/strong&gt; It sees the domains you connect to, when, and how much data flows.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Your employer or school.&lt;/strong&gt; On a company network, traffic goes through their servers, proxies and DNS. The admin can watch it in real time, and a work laptop may have monitoring software built right in.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ad networks.&lt;/strong&gt; Without a tracker blocker they recognise you even without cookies, by your browser fingerprint: screen resolution, fonts, operating system, hardware.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;When it&#39;s useful&lt;/h2&gt;
&lt;p&gt;Despite all that, it&#39;s a handy tool. Just for different things than people think:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Someone else&#39;s or a shared computer.&lt;/strong&gt; You leave no passwords or history behind.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Gifts.&lt;/strong&gt; No telltale ads show up on the family computer.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Two accounts on one service at once.&lt;/strong&gt; The second account without logging out of the first.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Testing a website.&lt;/strong&gt; A clean state with no cache and no saved login. I use this daily.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sensitive searches.&lt;/strong&gt; Nothing lands in the history or the address bar suggestions.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;When you want more&lt;/h2&gt;
&lt;p&gt;If what you do should stay hidden from your provider or the network admin too, an incognito window isn&#39;t enough:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;A VPN&lt;/strong&gt; encrypts your traffic and replaces your IP address with its server&#39;s. Your provider no longer sees where you go, and websites only see the VPN.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;A browser or extension that blocks trackers.&lt;/strong&gt; Brave blocks them out of the box; in Firefox and Chrome add uBlock Origin or Privacy Badger.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;An up-to-date system and antivirus.&lt;/strong&gt; No incognito mode protects you from a keylogger or spyware.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Browsers are meanwhile working on the next step: IP address masking, blocking device fingerprints and encrypting DNS queries (DNS over HTTPS), so nobody on the local network sees which domains you load.&lt;/p&gt;
&lt;p&gt;An incognito window is a good broom for the traces on your computer. Nothing more, nothing less. Real privacy rests on habits, not on one item in a menu.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>CarBase: an information system for used car dealerships that I built on my own</title>
    <link href="https://algavi.cz/en/articles/carbase-car-dealership-system/"/>
    <id>https://algavi.cz/en/articles/carbase-car-dealership-system/</id>
    <published>2025-07-21T00:00:00.000Z</published>
    <updated>2025-07-21T00:00:00.000Z</updated>
    <summary>It started with one dealership and a binder full of contracts. It ended with four customers and a system that handles vehicles, clients, contracts and receipts in a few clicks. All of this back when AI was still in its infancy.</summary>
    <content type="html">&lt;p&gt;Mention a used car dealership and most people picture a lot full of cars and a salesperson in an office. Few people see how much paperwork hides behind every single car. A purchase contract, a brokerage agreement, a power of attorney, income and expense receipts, a windscreen label, the vehicle history. All of it again, by hand, for every car.&lt;/p&gt;
&lt;h2&gt;How it all started&lt;/h2&gt;
&lt;p&gt;CarBase began as a commission for one specific dealership. The owner had a clear problem: the paperwork around cars lived half in spreadsheets and half in a drawer, and contracts were written over and over from Word templates. Every typo in a licence plate or VIN then spread across several documents.&lt;/p&gt;
&lt;p&gt;The goal was simple: one place for the car, its owner, photos, contracts and receipts, and documents that get generated instead of retyped.&lt;/p&gt;
&lt;h2&gt;What CarBase does&lt;/h2&gt;
&lt;h3&gt;Vehicle records&lt;/h3&gt;
&lt;p&gt;Every car has its own card with everything a dealer needs: specification, VIN, licence plate, year of manufacture, MOT validity, mileage, engine power and displacement, fuel, gearbox, body type, number of owners, purchase and sale price, and equipment. Manufacturers, models, fuel types, body types and equipment are lists the dealership manages itself in the settings.&lt;/p&gt;
&lt;p&gt;A car moves through the states &lt;strong&gt;accepted → advertised → sold&lt;/strong&gt;, or &lt;strong&gt;returned&lt;/strong&gt;, and every change is written to the vehicle history. You can always trace what happened to a car and when. Vehicles can be filtered and searched quickly.&lt;/p&gt;
&lt;h3&gt;Photos and files&lt;/h3&gt;
&lt;p&gt;Photos and documents are uploaded to each car. One photo is set as the main one, the others can be deleted. Deleted files don&#39;t disappear immediately; the system can show them and plans for cleaning them up. The home page shows a chart of used storage, so it&#39;s clear how much space the photos take.&lt;/p&gt;
&lt;h3&gt;Clients&lt;/h3&gt;
&lt;p&gt;Records of clients, both sellers and buyers, linked to vehicles and contracts. For companies, loading details by company ID straight from the Czech ARES business register was in the pipeline.&lt;/p&gt;
&lt;h3&gt;Contracts and receipts in one click&lt;/h3&gt;
&lt;p&gt;This was the main added value. From the car and client data, the system generates PDFs:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;a &lt;strong&gt;brokerage agreement&lt;/strong&gt;,&lt;/li&gt;
&lt;li&gt;a &lt;strong&gt;purchase contract&lt;/strong&gt; that follows the brokerage agreement, so documents come in a logical order,&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;income and expense receipts&lt;/strong&gt; with prices taken from the vehicle card,&lt;/li&gt;
&lt;li&gt;an &lt;strong&gt;issue slip&lt;/strong&gt; when the car is handed over,&lt;/li&gt;
&lt;li&gt;a &lt;strong&gt;windscreen label&lt;/strong&gt; with the vehicle&#39;s specs.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Contracts and cars have their own &lt;strong&gt;number series&lt;/strong&gt;, so document numbers follow on and never collide. For anything non-standard there is a custom document with a text editor where the dealership can write whatever else it needs.&lt;/p&gt;
&lt;h3&gt;Home page overview&lt;/h3&gt;
&lt;p&gt;After logging in you see how many cars were sold, how many were returned, how many are advertised and how many are waiting to be advertised. Below that is the history of recent changes to cars and the lists of purchase contracts and brokerage agreements.&lt;/p&gt;
&lt;h2&gt;Under the hood&lt;/h2&gt;
&lt;p&gt;CarBase is a web application built on the PHP framework &lt;strong&gt;Nette&lt;/strong&gt; with a MySQL database and Latte templates. PDFs are generated with mPDF from HTML templates; the frontend runs jQuery, Naja for AJAX redraws without reloading the whole page, Chart.js for charts and Froala as the text editor. A basic GraphQL API was also prepared for future integrations.&lt;/p&gt;
&lt;p&gt;Nothing exotic, but a stable stack that is easy to deploy and easy to maintain.&lt;/p&gt;
&lt;h2&gt;From one dealership to four&lt;/h2&gt;
&lt;p&gt;At first the system ran only at the dealership it was built for. Over time it turned out others were dealing with the same problems, and CarBase made it to &lt;strong&gt;four customers&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;All of this was built back when AI was still in its infancy. No agents, no generating half an application from a single prompt. Every form, every PDF template, every bit of document-chaining logic was written by hand. Analysis, database design, backend, frontend, contract templates, deployment and support. For one person it was quite a grind.&lt;/p&gt;
&lt;h2&gt;Why it stopped at four&lt;/h2&gt;
&lt;p&gt;Unfortunately, the conditions at my old job back then didn&#39;t allow me to give the project the attention it deserved. There was no room left for further development, sales or new customers, so the number stopped at four and the system wasn&#39;t developed any further.&lt;/p&gt;
&lt;p&gt;Looking back, I see it as a valuable experience. CarBase showed me what a product looks like from the first meeting with a client to running at several customers, and how important it is to have not just ideas for a product&#39;s growth, but also the time and conditions for it. With today&#39;s AI tools, a similar system could be built much faster. The essential part, understanding how a dealership really works and turning that into a process, stays the same.&lt;/p&gt;
</content>
  </entry>
</feed>
