This service tests the validity of an RSS 2.0 feed, checking to see that it follows the rules of the RSS specification. For advice from the RSS Advisory Board on how to implement RSS and handle issues such as enclosures and HTML encoding, read the RSS Best Practices Profile. This checker is also a validator of Atom and RSS 1.0 feeds.
Use this tester regularly to ensure that your RSS feed continues to work well in the wide audience of RSS readers, podcast clients and other software that supports the format.
This is a valid RSS feed.
This feed is valid, but interoperability with the widest range of feed readers could be improved by implementing the following recommendations.
<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/"><channel><title>Valticus</title><link>https://valticus.pro/</link><description>Expert insights on programming, technology, and software development. Discover practical code examples, development tools, and in-depth technical tutorials.Valticus</description><generator>Hugo 0.162.1 -- gohugo.io</generator><language>en-us</language><managingEditor>valticus81@gmail.com (Val Paliy)</managingEditor><webMaster>valticus81@gmail.com (Val Paliy)</webMaster><lastBuildDate>Tue, 08 Sep 2026 09:17:31 +0000</lastBuildDate><image><url>https://valticus.pro/images/logo.webp</url><title>Valticus</title><link>https://valticus.pro/</link></image><atom:link href="https://valticus.pro/index.xml" rel="self" type="application/rss+xml"/><item><title>Shinrin-Yoku: What Forest Bathing Can Teach Us About Digital Wellbeing</title><link>https://valticus.pro/posts/shinrin-yoku-what-forest-bathing-can-teach-us-about-digital-wellbeing/</link><pubDate>Mon, 07 Sep 2026 00:00:00 +0000</pubDate><guid isPermaLink="true">https://valticus.pro/posts/shinrin-yoku-what-forest-bathing-can-teach-us-about-digital-wellbeing/</guid><description>The Japanese practice of forest bathing is not about exercise — it is about attention. And the lessons it offers apply directly to how we build, use, and think about technology.</description><category>Technology</category><category>Lifestyle</category><content:encoded><h2 id="the-walk-that-changed-nothing">The Walk That Changed Nothing</h2><p>In 1982, the Japanese Ministry of Agriculture, Forestry, and Fisheries coined aterm that would quietly reshape how an entire culture thinks about health:<strong>shinrin-yoku</strong> (森林浴). The literal translation is &ldquo;forest bath.&rdquo; Not a hike.Not exercise. Not a nature walk with a fitness tracker counting your steps. Abath — something you soak in, something that surrounds you, something you do notactively pursue but passively receive.</p><p>The practice is deceptively simple. You walk slowly through a forest. You stopfrequently. You breathe. You listen. You look at the way light filters throughthe canopy. You notice the texture of bark, the smell of damp earth, the soundof water moving over stones. There is no destination. There is no goal. There isno metric.</p><figure><div class="progressive-image"><img class="progressive-image__img"src="https://valticus.pro/images/shinrin-yoku-what-forest-bathing-can-teach-us-about-digital-wellbeing_hu_bde8de6fa7cb4334.webp"alt="Shinrin-Yoku: What Forest Bathing Can Teach Us About Digital Wellbeing."width="800"height="436"></div><figcaption><p class="figure__caption">Shinrin-Yoku: What Forest Bathing Can Teach Us About Digital Wellbeing.</p></figcaption></figure><h2 id="what-shinrin-yoku-actually-is">What Shinrin-Yoku Actually Is</h2><p>Dr. Qing Li, one of the world&rsquo;s foremost researchers on forest medicine, hasspent decades studying what happens to the human body during shinrin-yoku. Hisfindings are precise: exposure to forests reduces cortisol concentrations by12.4 percent, lowers pulse rate, reduces blood pressure, and increases theactivity of natural killer cells — a key part of the immune system.</p><p>But Li is careful to distinguish shinrin-yoku from exercise. The health benefitsare not primarily physical. They are <strong>biochemical</strong>. Trees release organiccompounds called phytoncides — essentially, the essential oils that protect themfrom insects and decay. When we breathe these compounds, our bodies respond. Theimmune system activates. The nervous system shifts from sympathetic(fight-or-flight) to parasympathetic (rest-and-digest).</p><p>This is not metaphor. It is measurable biology. But the measurement misses thepoint.</p><p>The point, as the Japanese understood it, is <strong>attention</strong>. Shinrin-yoku ispractice in attending to the world without trying to extract value from it. Youdo not go to the forest to get something. You go to be in the forest. The healthbenefits are a side effect of a deeper shift: the decision to stop producing,consuming, optimizing, and instead simply <strong>be present</strong>.</p><h2 id="the-productivity-trap-in-wellness">The Productivity Trap in Wellness</h2><p>Here is where shinrin-yoku becomes uncomfortable for anyone who works withtechnology — which is to say, for anyone who reads this blog.</p><p>We have turned wellness into another productivity metric. Meditation apps trackyour streak. Fitness watches quantify your recovery. Sleep trackers rank yourrest. Even nature has been captured: there are apps that remind you to gooutside, apps that gamify forest walks, apps that reward you with badges forbreathing fresh air.</p><p>This is the same logic that produced the modern web&rsquo;s abundance problem. Wecannot leave anything alone. We cannot let a walk be a walk. We must measure it,optimize it, share it, track it. The moment we add a sensor to an experience, wechange the experience. We shift our attention from the thing itself to the dataabout the thing.</p><p>Shinrin-yoku resists this. The entire practice is built on the principle that<strong>the experience is the point, not the measurement of the experience</strong>. You donot need a heart rate monitor to know that you feel calmer after sitting under atree. You do not need a cortisol test to know that the smell of cedar makes youfeel better. You already know. Your body knows. The data just confirms whatattention already revealed.</p><h2 id="what-this-has-to-do-with-the-web">What This Has to Do With the Web</h2><p>In<a href="https://valticus.pro/posts/hodo-hodo-the-japanese-philosophy-that-could-fix-web-design/">Hodo-Hodo: The Japanese Philosophy That Could Fix Web Design</a>,I wrote about Taku Satoh&rsquo;s concept of &ldquo;just enough&rdquo; — the idea that designshould provide exactly what is needed and no more. Hodo-hodo is about<strong>restraint in service of the user</strong>. It is design that trusts the person on theother side.</p><p>Shinrin-yoku extends this idea from design into <strong>living</strong>. If hodo-hodo asks&ldquo;Is this enough?&rdquo; about a button or a layout, shinrin-yoku asks the samequestion about our entire relationship with technology. Not &ldquo;How can I usetechnology more?&rdquo; but &ldquo;Is this enough? Is this the right amount? Should I stophere?&rdquo;</p><p>The connection is not accidental. Both concepts come from a Japaneseunderstanding of the world that does not separate the human from theenvironment. In Western thought, we tend to see nature as a resource to bemanaged or a backdrop for human activity. In the Japanese tradition — influencedby Shinto, Buddhism, and centuries of living in dense forests on a volcanicisland — the boundary between person and world is more fluid. You do not go intothe forest. You become part of it. The forest bathes you.</p><p>The web, similarly, is not a tool we use. It is an environment we inhabit. Wespend eight, ten, twelve hours a day inside it. It shapes how we think, what wepay attention to, how we relate to other people. To treat it as a neutral tool —something we pick up and put down at will — is to misunderstand its power.</p><h2 id="the-attention-economy-is-a-clear-cut-forest">The Attention Economy Is a Clear-Cut Forest</h2><p>If shinrin-yoku is about attending to the world, the attention economy is aboutextracting from it. Every app, every notification, every infinite scroll feed isdesigned to capture a specific resource: your attention. Not your money — yourattention. Money follows attention, which is why the extraction is soaggressive.</p><p>The parallel to actual forests is instructive. In the twentieth century, Japanrapidly industrialized and clear-cut vast areas of forest. The economic gainswere immediate. The ecological costs were deferred — soil erosion, flooding,loss of biodiversity, the quiet disappearance of species that had existed formillennia.</p><p>The attention economy is doing the same thing to human consciousness. We areclear-cutting our capacity for sustained attention, deep thought, anduninterrupted reflection. The economic gains are immediate — engagement metricsgo up, ad revenue increases, user sessions lengthen. The costs are deferred:anxiety, depression, the inability to read a long article without checkingTwitter, the creeping sense that something important is always happeningsomewhere else.</p><p>Shinrin-yoku was Japan&rsquo;s response to ecological devastation. It was adeliberate, government-sponsored attempt to reconnect people with the foreststhey had destroyed — not to extract more from them, but to <strong>remember what itfelt like to be inside them</strong>. The health benefits were real, but the deeperpurpose was cultural: to rebuild a relationship with the natural world thatindustrialization had severed.</p><p>We need something similar for the digital world. Not a rejection of technology —that is neither possible nor desirable. But a deliberate practice of <strong>steppingoutside the extraction cycle</strong> and remembering what it feels like to payattention to something that is not asking for your attention.</p><h2 id="what-forest-bathing-looks-like-offline">What Forest Bathing Looks Like Offline</h2><p>The physical practice of shinrin-yoku has specific characteristics thatdistinguish it from a casual walk:</p><p><strong>Slow movement.</strong> The recommended pace is about one kilometer per hour — farslower than a typical walking pace. The slowness is the point. It forces you tonotice things you would otherwise pass without seeing.</p><p><strong>All senses engaged.</strong> Shinrin-yoku emphasizes not just sight but sound (birdcalls, water, wind), smell (earth, pine, decay), touch (bark, moss, stone), andeven taste (the clean air itself). The multi-sensory engagement pulls attentionaway from abstract thought and into the physical present.</p><p><strong>No destination.</strong> There is no trail to complete, no summit to reach, no loopto close. You walk until you decide to stop. You stop until you decide to walkagain. The absence of a goal removes the subtle pressure to be productive.</p><p><strong>Frequent pauses.</strong> Practitioners are encouraged to stop often — to sit on alog, to stand under a canopy, to lean against a tree. These pauses are notbreaks between the real activity. They <strong>are</strong> the activity. The sitting is thepoint.</p><p><strong>No photography.</strong> This is not an official rule, but many practitioners observeit. The moment you raise a camera, you shift from experiencing the forest tocapturing it. You begin composing instead of observing. The image becomes moreimportant than the moment.</p><h2 id="what-forest-bathing-looks-like-online">What Forest Bathing Looks Like Online</h2><p>If we translate these principles into our digital lives, we get something likethis:</p><p><strong>Slow consumption.</strong> Instead of scrolling through a feed at the speed of yourthumb, read one article completely. Finish it. Sit with it. Think about itbefore moving to the next thing. The slowness is not a limitation — it is thecondition for depth.</p><p><strong>Full attention.</strong> Instead of half-reading an article while checkingnotifications, give the article your complete attention. Close the tabs that arenot relevant. Silence the phone. Not forever — for the duration of the reading.Treat the act of reading as something worth your full presence.</p><p><strong>No metrics.</strong> Do not check how many views your blog post received today. Donot refresh your analytics dashboard. Do not count your followers. The numbersare real, but they are not the point. The point is the writing, the thinking,the act of putting something into the world that did not exist before.</p><p><strong>Frequent pauses.</strong> Step away from the screen. Not to check your phone inanother room — that is just relocating the extraction. Step away to do nothing.To stare at a wall. To look out a window. To let your mind wander without input.These pauses are not breaks between the real work of being online. They <strong>are</strong>the real work.</p><p><strong>No documentation.</strong> Not every experience needs to be shared. Not every thoughtneeds to become a tweet. Not every meal needs a photo. Some things are worthkeeping for yourself. The moment you share an experience, you partiallysurrender it to other people&rsquo;s attention — and their attention is shaped by thesame extractive systems you are trying to step outside of.</p><h2 id="the-deeper-lesson">The Deeper Lesson</h2><p>Shinrin-yoku teaches that health is not something you achieve through effort. Itis something that happens when you stop interfering with it. The forest does notheal you. It creates the conditions in which your body can heal itself. Yourrole is to show up, be present, and get out of the way.</p><p>The same is true for our mental health in a digital world. We do not need moreproductivity hacks, more screen time trackers, more apps that tell us when toput our phones down. We need the willingness to <strong>do nothing</strong> — to sit in aroom without input, to walk outside without a device, to let a few hours passwithout documenting, sharing, or optimizing them.</p><p>This is hard. It is hard precisely because the systems we have built aredesigned to make it hard. Every notification, every red badge, every &ldquo;You mightalso like&rdquo; is a micro-interruption that pulls you back into the extractioncycle. The forest does not send you push notifications. The trees do notalgorithmically suggest other trees you might enjoy. The river does not trackyour engagement metrics.</p><p>Nature&rsquo;s indifference to your attention is, paradoxically, what makes ithealing. It asks nothing of you. It does not need you to click, scroll, like,share, or subscribe. It simply exists, and invites you to exist alongside it.</p><h2 id="a-practice-not-a-solution">A Practice, Not a Solution</h2><p>I want to be careful not to turn shinrin-yoku into another life hack. TheJapanese did not develop it as a quick fix for stress. They developed it as a<strong>practice</strong> — something you do regularly, over a lifetime, without expectingdramatic results. The benefits accumulate slowly, invisibly, in ways that arefelt rather than measured.</p><p>The same approach applies to our relationship with technology. You will notsolve your screen time problem with a single digital detox weekend. You will notreclaim your attention by deleting one app. What you can do is build small,regular practices of stepping outside the extraction cycle:</p><ul><li>Walk without your phone once a week. Not to get somewhere. Just to walk.</li><li>Read one long article a day without switching tabs.</li><li>Spend one evening a week without any screens. Not as punishment. Asexperimentation.</li><li>Sit in a room for fifteen minutes without doing anything. No phone, no book,no music. Just sitting.</li></ul><p>None of these will transform your life. That is not the point. The point is torebuild, slowly, the capacity for attention that the attention economy haseroded. The point is to remember what it feels like to be present — to yourself,to your environment, to the quiet, unremarkable act of being alive.</p><p>The forest does not need you to be productive. Neither does the rest of yourlife.</p></content:encoded><dc:creator>Val Paliy</dc:creator></item><item><title>Hugo Deep Dive: Customizing and Extending the CMS</title><link>https://valticus.pro/posts/hugo-deep-dive-customizing-and-extending-the-cms/</link><pubDate>Thu, 03 Sep 2026 00:00:00 +0000</pubDate><guid isPermaLink="true">https://valticus.pro/posts/hugo-deep-dive-customizing-and-extending-the-cms/</guid><description>An advanced technical guide to customizing and extending Hugo static site generator with real-world examples: shortcodes, custom output formats, and image processing.</description><category>Web Development</category><category>Technology</category><content:encoded><p>Hugo is often marketed as the &ldquo;world&rsquo;s fastest framework for building websites,&rdquo;but speed is only half the story. The real power of Hugo lies in itsflexibility. While many developers use it as a simple blog engine, it isactually a robust, data-driven content platform that can handle complexdocumentation, enterprise portfolios, and even <strong>headless CMS architectures</strong>.</p><p>In this deep dive, we’ll move beyond the basics of &ldquo;hugo new site&rdquo; and explorehow to extend the engine to suit sophisticated requirements. If you haven&rsquo;t yet,check out my<a href="https://valticus.pro/posts/introducing-olivero-hugo-theme/">Introducing Olivero Hugo Theme</a> for apractical example of how these concepts come together in a production-readytheme.</p><figure><div class="progressive-image"><img class="progressive-image__img"src="https://valticus.pro/images/hugo-deep-dive-customizing-and-extending-the-cms_hu_ebee8dfd179dc776.webp"alt="Hugo Deep Dive: Customizing and Extending the CMS."width="800"height="436"></div><figcaption><p class="figure__caption">Hugo Deep Dive: Customizing and Extending the CMS.</p></figcaption></figure><h2 id="hugo-feature-matrix-from-simple-to-advanced">Hugo Feature Matrix: From Simple to Advanced</h2><table><thead><tr><th style="text-align: left">Feature Level</th><th style="text-align: left">Capability</th><th style="text-align: left">Use Case</th></tr></thead><tbody><tr><td style="text-align: left"><strong>Basic</strong></td><td style="text-align: left">Markdown to HTML</td><td style="text-align: left">Personal blogs, simple landing pages</td></tr><tr><td style="text-align: left"><strong>Intermediate</strong></td><td style="text-align: left"><strong>Shortcodes</strong> &amp; <strong>Partials</strong></td><td style="text-align: left">Reusable UI components, embeds</td></tr><tr><td style="text-align: left"><strong>Advanced</strong></td><td style="text-align: left"><strong>Custom Output Formats</strong></td><td style="text-align: left">JSON APIs, Atom feeds, CSV exports</td></tr><tr><td style="text-align: left"><strong>Expert</strong></td><td style="text-align: left"><strong>Hugo Modules</strong> &amp; <strong>Go Pipes</strong></td><td style="text-align: left">Theme inheritance, complex asset pipelines</td></tr></tbody></table><h2 id="1-custom-shortcodes-beyond-markdown">1. Custom Shortcodes: Beyond Markdown</h2><p>Shortcodes are Hugo&rsquo;s way of allowing you to embed complex HTML inside yourMarkdown files without cluttering your content with raw HTML tags.</p><h3 id="the-notice-component">The &ldquo;Notice&rdquo; Component</h3><p>Instead of using blockquotes for warnings, create a dedicated shortcode in<code>layouts/shortcodes/notice.html</code>:</p><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-html" ><span class="line"><span class="cl">{{- $type := .Get &#34;type&#34; | default &#34;info&#34; -}} {{- $title := .Get &#34;title&#34; |</span></span><span class="line"><span class="cl">default (upper $type) -}}</span></span><span class="line"><span class="cl"><span class="p">&lt;</span><span class="nt">div</span> <span class="na">class</span><span class="o">=</span><span class="s">&#34;notice notice-{{ $type }}&#34;</span> <span class="na">role</span><span class="o">=</span><span class="s">&#34;alert&#34;</span><span class="p">&gt;</span></span></span><span class="line"><span class="cl"> <span class="p">&lt;</span><span class="nt">div</span> <span class="na">class</span><span class="o">=</span><span class="s">&#34;notice-header&#34;</span><span class="p">&gt;</span></span></span><span class="line"><span class="cl"> <span class="p">&lt;</span><span class="nt">span</span> <span class="na">class</span><span class="o">=</span><span class="s">&#34;notice-icon&#34;</span></span></span><span class="line"><span class="cl"> <span class="p">&gt;</span>{{ if eq $type &#34;warning&#34; }}⚠️{{ else }}ℹ️{{ end }}<span class="p">&lt;/</span><span class="nt">span</span></span></span><span class="line"><span class="cl"> <span class="p">&gt;</span></span></span><span class="line"><span class="cl"> <span class="p">&lt;</span><span class="nt">strong</span> <span class="na">class</span><span class="o">=</span><span class="s">&#34;notice-title&#34;</span><span class="p">&gt;</span>{{ $title }}<span class="p">&lt;/</span><span class="nt">strong</span><span class="p">&gt;</span></span></span><span class="line"><span class="cl"> <span class="p">&lt;/</span><span class="nt">div</span><span class="p">&gt;</span></span></span><span class="line"><span class="cl"> <span class="p">&lt;</span><span class="nt">div</span> <span class="na">class</span><span class="o">=</span><span class="s">&#34;notice-content&#34;</span><span class="p">&gt;</span>{{ .Inner | markdownify }}<span class="p">&lt;/</span><span class="nt">div</span><span class="p">&gt;</span></span></span><span class="line"><span class="cl"><span class="p">&lt;/</span><span class="nt">div</span><span class="p">&gt;</span></span></span></code></pre></div><p><strong>Usage in Markdown:</strong></p><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-markdown" ><span class="line"><span class="cl">{{&lt; notice type=&#34;warning&#34; title=&#34;Critical Update&#34; &gt;}} Always backup your</span></span><span class="line"><span class="cl"><span class="sb">`config.toml`</span> before updating Hugo versions. {{&lt; /notice &gt;}}</span></span></code></pre></div><blockquote><h3 id="-pro-tip-shortcode-performance">💡 Pro Tip: Shortcode Performance</h3><p>Use <code>{{&lt; shortcode &gt;}}</code> (with brackets) for content that Hugo shouldprocess as Markdown, and <code>{{% shortcode %}}</code> (with percent signs) only ifyou need the inner content to be fully rendered before the shortcode logicexecutes. For 90% of cases, the bracket syntax is faster and safer.</p></blockquote><h2 id="2-advanced-image-processing">2. Advanced Image Processing</h2><p>One of Hugo&rsquo;s killer features is its ability to process images on the fly. Youdon&rsquo;t need a separate build step to generate thumbnails or <strong>WebP</strong> versions.</p><h3 id="the-responsive-image-partial">The Responsive Image Partial</h3><p><code>layouts/partials/responsive-image.html</code>:</p><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-html" ><span class="line"><span class="cl">{{ $img := .Resources.GetMatch .src }} {{ if $img }} {{ $small := $img.Resize</span></span><span class="line"><span class="cl">&#34;400x webp&#34; }} {{ $medium := $img.Resize &#34;800x webp&#34; }} {{ $large := $img.Resize</span></span><span class="line"><span class="cl">&#34;1200x webp&#34; }}</span></span><span class="line"><span class="cl"><span class="p">&lt;</span><span class="nt">picture</span><span class="p">&gt;</span></span></span><span class="line"><span class="cl"> <span class="p">&lt;</span><span class="nt">source</span></span></span><span class="line"><span class="cl"> <span class="na">srcset</span><span class="o">=</span><span class="s">&#34;{{ $small.RelPermalink }} 400w, {{ $medium.RelPermalink }} 800w, {{ $large.RelPermalink }} 1200w&#34;</span></span></span><span class="line"><span class="cl"> <span class="na">type</span><span class="o">=</span><span class="s">&#34;image/webp&#34;</span></span></span><span class="line"><span class="cl"> <span class="p">/&gt;</span></span></span><span class="line"><span class="cl"> <span class="p">&lt;</span><span class="nt">img</span> <span class="na">src</span><span class="o">=</span><span class="s">&#34;{{ $img.RelPermalink }}&#34;</span> <span class="na">alt</span><span class="o">=</span><span class="s">&#34;{{ .alt }}&#34;</span> <span class="na">loading</span><span class="o">=</span><span class="s">&#34;lazy&#34;</span> <span class="p">/&gt;</span></span></span><span class="line"><span class="cl"><span class="p">&lt;/</span><span class="nt">picture</span><span class="p">&gt;</span></span></span><span class="line"><span class="cl">{{ end }}</span></span></code></pre></div><p>This ensures that your users never download a 5MB hero image when a 200KB WebPwould suffice.</p><h2 id="3-custom-output-formats-hugo-as-an-api">3. Custom Output Formats: Hugo as an API</h2><p>Hugo can output more than just HTML. By defining custom output formats, you cangenerate a <strong>JSON search index</strong>, a CSV of your products, or even a <code>.txt</code> filefor robots.</p><h3 id="generating-a-json-search-index">Generating a JSON Search Index</h3><p>In <code>hugo.toml</code>:</p><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-toml" ><span class="line"><span class="cl"><span class="p">[</span><span class="nx">outputs</span><span class="p">]</span></span></span><span class="line"><span class="cl"> <span class="nx">home</span> <span class="p">=</span> <span class="p">[</span><span class="s2">&#34;HTML&#34;</span><span class="p">,</span> <span class="s2">&#34;JSON&#34;</span><span class="p">,</span> <span class="s2">&#34;RSS&#34;</span><span class="p">]</span></span></span></code></pre></div><p>Then create <code>layouts/index.json</code>:</p><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-json" ><span class="line"><span class="cl"><span class="p">{</span><span class="err">{-</span> <span class="err">$pages</span> <span class="err">:=</span> <span class="err">where</span> <span class="err">.Site.RegularPages</span> <span class="nt">&#34;Type&#34;</span> <span class="s2">&#34;posts&#34;</span> <span class="err">-</span><span class="p">}</span><span class="err">}</span></span></span><span class="line"><span class="cl"><span class="p">[</span></span></span><span class="line"><span class="cl"> <span class="p">{</span><span class="err">{-</span> <span class="err">range</span> <span class="err">$index,</span> <span class="err">$page</span> <span class="err">:=</span> <span class="err">$pages</span> <span class="err">-</span><span class="p">}</span><span class="err">}</span></span></span><span class="line"><span class="cl"> <span class="p">{</span><span class="err">{-</span> <span class="err">if</span> <span class="err">$index</span> <span class="p">}</span><span class="err">}</span><span class="p">,{</span><span class="err">{</span> <span class="err">end</span> <span class="err">-</span><span class="p">}</span><span class="err">}</span></span></span><span class="line"><span class="cl"> <span class="p">{</span></span></span><span class="line"><span class="cl"> <span class="nt">&#34;title&#34;</span><span class="p">:</span> <span class="p">{</span><span class="err">{</span> <span class="err">$page.Title</span> <span class="err">|</span> <span class="err">jsonify</span> <span class="p">}},</span></span></span><span class="line"><span class="cl"> <span class="s2">&#34;excerpt&#34;</span><span class="err">:</span> <span class="p">{</span><span class="err">{</span> <span class="err">$page.Summary</span> <span class="err">|</span> <span class="err">plainify</span> <span class="err">|</span> <span class="err">jsonify</span> <span class="p">}</span><span class="err">}</span><span class="p">,</span></span></span><span class="line"><span class="cl"> <span class="s2">&#34;url&#34;</span><span class="err">:</span> <span class="p">{</span><span class="err">{</span> <span class="err">$page.Permalink</span> <span class="err">|</span> <span class="err">jsonify</span> <span class="p">}</span><span class="err">}</span><span class="p">,</span></span></span><span class="line"><span class="cl"> <span class="s2">&#34;tags&#34;</span><span class="err">:</span> <span class="p">{</span><span class="err">{</span> <span class="err">$page.Params.tags</span> <span class="err">|</span> <span class="err">jsonify</span> <span class="p">}</span><span class="err">}</span></span></span><span class="line"><span class="cl"> <span class="err">}</span></span></span><span class="line"><span class="cl"> <span class="p">{</span><span class="err">{-</span> <span class="err">end</span> <span class="err">-</span><span class="p">}</span><span class="err">}</span></span></span><span class="line"><span class="cl"><span class="p">]</span></span></span></code></pre></div><p>This file will be generated at <code>/index.json</code>, providing a perfect endpoint forclient-side search libraries like <strong>Fuse.js</strong>.</p><h2 id="4-hugo-modules-the-modern-way-to-manage-dependencies">4. Hugo Modules: The Modern Way to Manage Dependencies</h2><p>Forget git submodules. <strong>Hugo Modules</strong> leverage <strong>Go&rsquo;s module system</strong> tomanage themes and components.</p><h3 id="initialization">Initialization</h3><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" ><span class="line"><span class="cl">hugo mod init github.com/yourusername/my-awesome-site</span></span></code></pre></div><h3 id="importing-a-theme">Importing a Theme</h3><p>In <code>hugo.toml</code>:</p><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-toml" ><span class="line"><span class="cl"><span class="p">[</span><span class="nx">module</span><span class="p">]</span></span></span><span class="line"><span class="cl"> <span class="p">[[</span><span class="nx">module</span><span class="p">.</span><span class="nx">imports</span><span class="p">]]</span></span></span><span class="line"><span class="cl"> <span class="nx">path</span> <span class="p">=</span> <span class="s2">&#34;github.com/ValPaliy/olivero-hugo&#34;</span></span></span></code></pre></div><p>Running <code>hugo mod get -u</code> will automatically fetch and update your dependencies,keeping your repository clean and your deployment pipeline predictable.</p><h2 id="5-taxonomies-and-data-driven-content">5. Taxonomies and Data-Driven Content</h2><p>Hugo isn&rsquo;t limited to &ldquo;Tags&rdquo; and &ldquo;Categories.&rdquo; You can define custom<strong>taxonomies</strong> like &ldquo;Series,&rdquo; &ldquo;Authors,&rdquo; or &ldquo;Difficulty Level.&rdquo;</p><h3 id="custom-taxonomy-definition">Custom Taxonomy Definition</h3><p>In <code>hugo.toml</code>:</p><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-toml" ><span class="line"><span class="cl"><span class="p">[</span><span class="nx">taxonomies</span><span class="p">]</span></span></span><span class="line"><span class="cl"> <span class="nx">tag</span> <span class="p">=</span> <span class="s2">&#34;tags&#34;</span></span></span><span class="line"><span class="cl"> <span class="nx">category</span> <span class="p">=</span> <span class="s2">&#34;categories&#34;</span></span></span><span class="line"><span class="cl"> <span class="nx">series</span> <span class="p">=</span> <span class="s2">&#34;series&#34;</span></span></span><span class="line"><span class="cl"> <span class="nx">author</span> <span class="p">=</span> <span class="s2">&#34;authors&#34;</span></span></span></code></pre></div><p>You can then iterate over these in your templates to create complex navigationstructures:</p><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-html" ><span class="line"><span class="cl">{{ range .Site.Taxonomies.series }}</span></span><span class="line"><span class="cl"><span class="p">&lt;</span><span class="nt">h3</span><span class="p">&gt;</span>Series: {{ .Page.Title }}<span class="p">&lt;/</span><span class="nt">h3</span><span class="p">&gt;</span></span></span><span class="line"><span class="cl"><span class="p">&lt;</span><span class="nt">ul</span><span class="p">&gt;</span></span></span><span class="line"><span class="cl"> {{ range .Pages }}</span></span><span class="line"><span class="cl"> <span class="p">&lt;</span><span class="nt">li</span><span class="p">&gt;&lt;</span><span class="nt">a</span> <span class="na">href</span><span class="o">=</span><span class="s">&#34;{{ .Permalink }}&#34;</span><span class="p">&gt;</span>{{ .Title }}<span class="p">&lt;/</span><span class="nt">a</span><span class="p">&gt;&lt;/</span><span class="nt">li</span><span class="p">&gt;</span></span></span><span class="line"><span class="cl"> {{ end }}</span></span><span class="line"><span class="cl"><span class="p">&lt;/</span><span class="nt">ul</span><span class="p">&gt;</span></span></span><span class="line"><span class="cl">{{ end }}</span></span></code></pre></div><h2 id="6-performance-optimization-with-partial-caching">6. Performance Optimization with Partial Caching</h2><p>If you have a complex partial (like a navigation menu that iterates over everypage), it can slow down your build time as your site grows.</p><h3 id="the-partialcached-function">The <code>partialCached</code> Function</h3><p>Instead of:</p><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-html" ><span class="line"><span class="cl">{{ partial &#34;header.html&#34; . }}</span></span></code></pre></div><p>Use:</p><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-html" ><span class="line"><span class="cl">{{ partialCached &#34;header.html&#34; . }}</span></span></code></pre></div><p>Hugo will render the partial once and reuse the output for the rest of thebuild. If the partial depends on the current page context, you can provide a&ldquo;key&rdquo;:</p><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-html" ><span class="line"><span class="cl">{{ partialCached &#34;sidebar.html&#34; . .Section }}</span></span></code></pre></div><h2 id="the-unsexy-truth-about-hugo">The Unsexy Truth about Hugo</h2><p>While Hugo is powerful, it has a steep learning curve. The &ldquo;<strong>Go Template</strong>&rdquo;syntax can be unforgiving, and the documentation, while comprehensive, is dense.</p><blockquote><h3 id="-common-pitfall-over-engineering">🚩 Common Pitfall: Over-Engineering</h3><p>Just because Hugo can process images, generate JSON, and manage complex modulehierarchies doesn&rsquo;t mean you <em>should</em> do all of that for a personal blog.Start with the simplest possible implementation and only extend when themanual work becomes a bottleneck.</p></blockquote><h2 id="conclusion">Conclusion</h2><p>Hugo is the ultimate tool for developers who value performance and control. Bymastering shortcodes, image processing, and custom output formats, you transformHugo from a simple &ldquo;generator&rdquo; into a sophisticated &ldquo;<strong>content engine</strong>.&rdquo;</p><p>The key to a successful Hugo project is a clean architecture. Keep your logic inpartials, your assets in the assets folder, and your content in clean, semanticMarkdown. When you respect Hugo&rsquo;s conventions, it rewards you with build timesthat feel like magic and a site that is virtually unhackable.</p><p><strong>What&rsquo;s next?</strong> Try converting one of your static components into a HugoShortcode today. You&rsquo;ll be surprised at how much cleaner your Markdown filesbecome.</p></content:encoded><dc:creator>Val Paliy</dc:creator></item><item><title>Best Static Site Generators Compared: Hugo, Jekyll, and Next.js</title><link>https://valticus.pro/posts/best-static-site-generators-compared-hugo-jekyll-nextjs/</link><pubDate>Mon, 31 Aug 2026 00:00:00 +0000</pubDate><guid isPermaLink="true">https://valticus.pro/posts/best-static-site-generators-compared-hugo-jekyll-nextjs/</guid><description>An in-depth comparison of three popular static site generators, evaluating performance, ease of use, flexibility, and ideal use cases for each tool.</description><category>Web Development</category><content:encoded><h2 id="the-static-site-renaissance">The Static Site Renaissance</h2><p>In 2026, the &ldquo;Static Site&rdquo; label is almost a misnomer. What started as simpletools for generating HTML from Markdown has evolved into a sophisticatedecosystem known as the <strong>JAMstack</strong> (JavaScript, APIs, and Markup). <strong>StaticSite Generators (SSGs)</strong> now power everything from massive documentation portalsfor companies like Google and Microsoft to high-performance e-commercefrontends.</p><p>The choice of an SSG is no longer just about which language you prefer; it’sabout where your project sits on the <strong>Content vs. Application spectrum</strong>. Areyou building a content-heavy blog, or a dynamic web app that happens to havesome static pages? Let&rsquo;s dive into the three heavyweights of the industry.</p><figure><div class="progressive-image"><img class="progressive-image__img"src="https://valticus.pro/images/best-static-site-generators-compared-hugo-jekyll-nextjs_hu_72eb343bad86a3d7.webp"alt="Best Static Site Generators Compared: Hugo, Jekyll, and Next.js."width="800"height="436"></div><figcaption><p class="figure__caption">Best Static Site Generators Compared: Hugo, Jekyll, and Next.js.</p></figcaption></figure><h2 id="hugo-the-speed-demon">Hugo: The Speed Demon</h2><p><strong>Hugo</strong> is often called the &ldquo;world&rsquo;s fastest framework for building websites.&rdquo;Written in <strong>Go</strong>, it is a single binary that delivers on its promise ofnear-instantaneous builds.</p><h3 id="why-it-wins">Why It Wins</h3><p>For large-scale sites, Hugo is the undisputed king. If you have 5,000 pages ofdocumentation, Jekyll might take 10 minutes to build, while Hugo will finish inunder two seconds. This feedback loop is addictive for developers.</p><p><strong>Pro Tip: Hugo Pipes</strong> One of Hugo&rsquo;s most underrated features is <strong>HugoPipes</strong>. It handles <strong>Sass compilation</strong>, <strong>JS bundling</strong> (via <strong>ESBuild</strong>), and<strong>image processing</strong> (resizing, <strong>WebP conversion</strong>) natively. You don&rsquo;t needWebpack or Gulp; Hugo does it all in-memory during the build.</p><h3 id="the-trade-off">The Trade-off</h3><p>The learning curve for <strong>Go Templating</strong> can be steep. Unlike JSX or Liquid, Gotemplates use a dot-notation context (<code>{{ .Title }}</code>) that can be confusing forbeginners.</p><p><strong>Code Snippet: Listing Posts in Hugo</strong></p><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-html" ><span class="line"><span class="cl">{{ range .Pages }}</span></span><span class="line"><span class="cl"><span class="p">&lt;</span><span class="nt">article</span><span class="p">&gt;</span></span></span><span class="line"><span class="cl"> <span class="p">&lt;</span><span class="nt">h2</span><span class="p">&gt;&lt;</span><span class="nt">a</span> <span class="na">href</span><span class="o">=</span><span class="s">&#34;{{ .Permalink }}&#34;</span><span class="p">&gt;</span>{{ .Title }}<span class="p">&lt;/</span><span class="nt">a</span><span class="p">&gt;&lt;/</span><span class="nt">h2</span><span class="p">&gt;</span></span></span><span class="line"><span class="cl"> <span class="p">&lt;</span><span class="nt">time</span><span class="p">&gt;</span>{{ .Date.Format &#34;Jan 2, 2006&#34; }}<span class="p">&lt;/</span><span class="nt">time</span><span class="p">&gt;</span></span></span><span class="line"><span class="cl"><span class="p">&lt;/</span><span class="nt">article</span><span class="p">&gt;</span></span></span><span class="line"><span class="cl">{{ end }}</span></span></code></pre></div><h2 id="jekyll-the-simple-classic">Jekyll: The Simple Classic</h2><p><strong>Jekyll</strong> is the &ldquo;grandparent&rdquo; of the SSG world. It’s written in <strong>Ruby</strong> andgained massive popularity as the engine behind <strong>GitHub Pages</strong>.</p><h3 id="why-it-wins-1">Why It Wins</h3><p>Jekyll’s greatest strength is its ubiquity and simplicity. The <strong>Liquidtemplating engine</strong> is incredibly intuitive — if you can write HTML, you canwrite Liquid. Because it&rsquo;s natively supported by GitHub, you can host a Jekyllsite for free without even setting up a <strong>CI/CD pipeline</strong>.</p><h3 id="the-ruby-problem">The &ldquo;Ruby&rdquo; Problem</h3><p>Jekyll&rsquo;s biggest weakness is its dependency on the Ruby ecosystem. If you&rsquo;veever spent three hours trying to fix a <code>gem install</code> error or a <code>bundle exec</code>conflict, you know the pain. For many modern developers, managing a Rubyenvironment just to build a blog feels like overkill.</p><p><strong>Common Pitfall: The &ldquo;Dependency Hell&rdquo;</strong> Always use a <code>Gemfile</code> and<code>bundle install</code> to lock your versions. Never rely on the system-wide Ruby gems,or your build will inevitably break when you switch machines or update your OS.</p><h2 id="nextjs-static-export-the-hybrid">Next.js (Static Export): The Hybrid</h2><p><strong>Next.js</strong> is primarily a <strong>React framework</strong>, but its <code>output: 'export'</code> modeallows it to function as a powerful SSG.</p><h3 id="why-it-wins-2">Why It Wins</h3><p>If you are building a site that needs complex state management, interactivedashboards, or a &ldquo;pure&rdquo; React ecosystem, Next.js is the choice. You get the fullpower of React hooks, components, and libraries. It also offers <strong>ISR(Incremental Static Regeneration)</strong>, which allows you to update static contentafter you&rsquo;ve deployed, without a full rebuild.</p><h3 id="the-overhead-problem">The &ldquo;Overhead&rdquo; Problem</h3><p>Next.js sites are &ldquo;heavier&rdquo; by default. Even a simple static page will ship afew hundred KB of JavaScript to &ldquo;hydrate&rdquo; the React application. For a simpleblog, this is often unnecessary and can hurt your <strong>Core Web Vitals</strong>.</p><p><strong>Code Snippet: Listing Posts in Next.js</strong></p><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-jsx" ><span class="line"><span class="cl"><span class="kr">export</span> <span class="k">default</span> <span class="kd">function</span> <span class="nx">Blog</span><span class="p">({</span> <span class="nx">posts</span> <span class="p">})</span> <span class="p">{</span></span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="p">(</span></span></span><span class="line"><span class="cl"> <span class="p">&lt;</span><span class="nt">div</span><span class="p">&gt;</span></span></span><span class="line"><span class="cl"> <span class="p">{</span><span class="nx">posts</span><span class="p">.</span><span class="nx">map</span><span class="p">((</span><span class="nx">post</span><span class="p">)</span> <span class="p">=&gt;</span> <span class="p">(</span></span></span><span class="line"><span class="cl"> <span class="p">&lt;</span><span class="nt">article</span> <span class="na">key</span><span class="o">=</span><span class="p">{</span><span class="nx">post</span><span class="p">.</span><span class="nx">slug</span><span class="p">}&gt;</span></span></span><span class="line"><span class="cl"> <span class="p">&lt;</span><span class="nt">h2</span><span class="p">&gt;</span></span></span><span class="line"><span class="cl"> <span class="p">&lt;</span><span class="nt">Link</span> <span class="na">href</span><span class="o">=</span><span class="p">{</span><span class="sb">`/posts/</span><span class="si">${</span><span class="nx">post</span><span class="p">.</span><span class="nx">slug</span><span class="si">}</span><span class="sb">`</span><span class="p">}&gt;{</span><span class="nx">post</span><span class="p">.</span><span class="nx">title</span><span class="p">}&lt;/</span><span class="nt">Link</span><span class="p">&gt;</span></span></span><span class="line"><span class="cl"> <span class="p">&lt;/</span><span class="nt">h2</span><span class="p">&gt;</span></span></span><span class="line"><span class="cl"> <span class="p">&lt;</span><span class="nt">time</span><span class="p">&gt;{</span><span class="k">new</span> <span class="nb">Date</span><span class="p">(</span><span class="nx">post</span><span class="p">.</span><span class="nx">date</span><span class="p">).</span><span class="nx">toLocaleDateString</span><span class="p">()}&lt;/</span><span class="nt">time</span><span class="p">&gt;</span></span></span><span class="line"><span class="cl"> <span class="p">&lt;/</span><span class="nt">article</span><span class="p">&gt;</span></span></span><span class="line"><span class="cl"> <span class="p">))}</span></span></span><span class="line"><span class="cl"> <span class="p">&lt;/</span><span class="nt">div</span><span class="p">&gt;</span></span></span><span class="line"><span class="cl"> <span class="p">);</span></span></span><span class="line"><span class="cl"><span class="p">}</span></span></span></code></pre></div><h2 id="technical-comparison-matrix">Technical Comparison Matrix</h2><div class="table-wrapper"><table><thead><tr><th>Feature</th><th>Hugo</th><th>Jekyll</th><th>Next.js (Static)</th></tr></thead><tbody><tr><td><strong>Primary Language</strong></td><td>Go</td><td>Ruby</td><td>JavaScript (React)</td></tr><tr><td><strong>Templating</strong></td><td>Go Templates</td><td>Liquid</td><td>JSX</td></tr><tr><td><strong>Build Speed (1k pages)</strong></td><td>~1s</td><td>~300s</td><td>~45s</td></tr><tr><td><strong>Asset Pipeline</strong></td><td>Built-in (Pipes)</td><td>Plugins (Jekyll Assets)</td><td>External (Webpack/Turbopack)</td></tr><tr><td><strong>Client-Side JS</strong></td><td>Zero (Optional)</td><td>Zero (Optional)</td><td>Required (Hydration)</td></tr><tr><td><strong>Data Sources</strong></td><td>Markdown, JSON, YAML</td><td>Markdown, YAML</td><td>APIs, Markdown, CMS</td></tr></tbody></table></div><h2 id="the-wildcard-why-im-watching-astro">The Wildcard: Why I&rsquo;m Watching Astro</h2><p>I would be remiss if I didn&rsquo;t mention <strong>Astro</strong>. In 2026, Astro has become the&ldquo;sweet spot&rdquo; for many. It uses an <strong>Islands Architecture</strong>, which allows you touse React/Vue/Svelte components but renders them to static HTML at build time,stripping away the JS unless it&rsquo;s needed for interactivity. If you&rsquo;re strugglingto choose between Hugo&rsquo;s speed and Next.js&rsquo;s component model, Astro is likelyyour answer.</p><h2 id="deployment-and-cicd">Deployment and CI/CD</h2><p>Regardless of the tool, the deployment strategy for static sites has converged.</p><ol><li><strong>Netlify</strong>/<strong>Vercel</strong>: The gold standard. Git-based deployments, global CDN,and automatic SSL.</li><li><strong>Cloudflare Pages</strong>: Faster edge network and excellent free tier.</li><li><strong>GitHub Pages</strong>: Best for Jekyll or simple documentation.</li></ol><p>For a deeper look at how to deploy these efficiently, see my guide on How toDeploy on Netlify.</p><h2 id="security-the-unfair-advantage">Security: The Unfair Advantage</h2><p>The primary reason I advocate for SSGs over WordPress or other database-drivenCMSs is security.</p><ul><li><strong>No Database</strong>: No <strong>SQL injection attacks</strong>.</li><li><strong>No Server-Side Runtime</strong>: No PHP or Node.js vulnerabilities on the liveserver.</li><li><strong>Read-Only</strong>: The server is just serving flat files. There is nothing to&ldquo;hack.&rdquo;</li></ul><h2 id="conclusion-which-one-should-you-choose">Conclusion: Which One Should You Choose?</h2><p>The &ldquo;best&rdquo; static site generator is the one that aligns with your project goals:</p><ul><li><strong>Choose Hugo</strong> if you are a content-first developer who values speed andsimplicity. It’s what I used for this site, and you can see the results in myIntroducing Olivero Hugo Theme showcase.</li><li><strong>Choose Jekyll</strong> if you want the path of least resistance for a smallGitHub-hosted project and love the Ruby/Liquid syntax.</li><li><strong>Choose Next.js</strong> if you are building a complex web application where thecontent is just one part of the interactive experience.</li></ul><p>If you&rsquo;re feeling adventurous and want to build a high-performance site withoutthe weight of React, stay tuned for my upcoming tutorial on building aminimalist portfolio.</p><p>The web is moving toward &ldquo;Static First.&rdquo; Whatever tool you choose, you&rsquo;re makingthe right architectural decision for performance, security, and scalability.</p></content:encoded><dc:creator>Val Paliy</dc:creator></item><item><title>Learn Hugo With Build Websites With Hugo</title><link>https://valticus.pro/posts/learn-hugo-with-build-websites-with-hugo/</link><pubDate>Thu, 30 Jul 2026 00:00:00 +0000</pubDate><guid isPermaLink="true">https://valticus.pro/posts/learn-hugo-with-build-websites-with-hugo/</guid><description>A practical review of Build Websites With Hugo by Brian P. Hogan. See how this concise book teaches Hugo through real project-based learning.</description><category>Web Development</category><category>Technology</category><content:encoded><p>I have been building sites with Hugo for years. I wrote my own theme, tuned mybuild pipeline, and deployed more static sites than I can count. But I rarelysee a resource that captures the <em>why</em> behind Hugo as well as the <em>how</em>. BrianP. Hogan&rsquo;s <strong>Build Websites With Hugo</strong> does exactly that.</p><p>Published by Pragmatic Bookshelf in 2020, this 154-page book is not a referencemanual. It is a guided tour through building a real portfolio site from scratch.You install Hugo, create a theme, add projects and a blog, wire up data sources,and deploy the final result — all while learning Hugo&rsquo;s mental model.</p><figure><div class="progressive-image"><img class="progressive-image__img"src="https://valticus.pro/images/learn-hugo-with-build-websites-with-hugo_hu_59396f202ad04ddf.webp"alt="Build Websites With Hugo by Brian P. Hogan book cover."width="800"height="436"></div><figcaption><p class="figure__caption">Build Websites With Hugo by Brian P. Hogan.</p></figcaption></figure><h2 id="what-makes-this-book-different">What Makes This Book Different</h2><p>Most Hugo tutorials throw config snippets at you and call it a day. Hogan takesthe opposite approach. Every chapter builds on the last. You start with a blankdirectory, run <code>hugo new site</code>, and by the end you have a live site with a blog,RSS feed, JSON endpoint, search, and a deployment pipeline.</p><p>The book is split into eight chapters plus an appendix on migration:</p><ol><li><strong>Kicking the Tires</strong> — Installing Hugo, scaffolding a site, creating contentwith archetypes, and understanding the output structure.</li><li><strong>Building a Basic Theme</strong> — Generating a theme, using <code>baseof.html</code> andpartials, and styling with CSS. This chapter alone is worth the price.</li><li><strong>Adding Content Sections</strong> — Creating a projects section with customarchetypes, list layouts, and section-specific templates.</li><li><strong>Working with Data</strong> — Pulling data from front matter, local files, andremote JSON sources. Rendering RSS and custom JSON output.</li><li><strong>Adding a Blog</strong> — Taxonomies, pagination, Disqus comments, and relatedcontent. Everything you need for a production blog.</li><li><strong>Adding Search to Your Site</strong> — Building a client-side search index usingHugo&rsquo;s JSON output and wiring it up with JavaScript.</li><li><strong>Managing Assets with Pipes</strong> — Hugo Pipes for CSS/JS bundling, imageprocessing, and integrating Webpack and npm.</li><li><strong>Deploying</strong> — Netlify, cloud storage (S3), and traditional web servers.</li></ol><p>The structure mirrors how you would actually build a site. You never learn afeature in isolation — you learn it because your site needs it.</p><h2 id="the-theme-chapter-is-the-highlight">The Theme Chapter Is the Highlight</h2><p>Chapter 2 alone justifies the book. Hogan walks through creating a theme by hand— no cloning someone else&rsquo;s repo, no fighting with a pre-built monster. Youcreate <code>layouts/_default/baseof.html</code>, extract partials for <code>head</code>, <code>header</code>,and <code>footer</code>, and see exactly how Hugo assembles pages.</p><p>This is the chapter that made Hugo click for me when I first started. Thebaseof/block/partial model is Hugo&rsquo;s superpower, but most tutorials gloss overit. Hogan lingers on it, and it pays off for every chapter that follows.</p><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-html" ><span class="line"><span class="cl">{{- partial &#34;head.html&#34; . -}} {{- partial &#34;header.html&#34; . -}} {{- block &#34;main&#34; .</span></span><span class="line"><span class="cl">}}{{ end }} {{- partial &#34;footer.html&#34; . -}}</span></span></code></pre></div><p>Four lines that define the architecture of an entire site.</p><h2 id="data-driven-content-without-the-backend">Data-Driven Content Without the Backend</h2><p>Chapter 4 is where the book punches above its weight. Hogan shows how to pulldata from:</p><ul><li><strong>Front matter</strong> — per-page metadata rendered in templates</li><li><strong>Site config</strong> — global params accessed via <code>.Site.Params</code></li><li><strong>Local data files</strong> — YAML/TOML/JSON in the <code>data/</code> directory</li><li><strong>Remote APIs</strong> — fetching JSON at build time with <code>getJSON</code></li></ul><p>Then he flips it around and renders your content <em>as</em> JSON, creating an API fromyour static site. This is the pattern I use for this blog&rsquo;s search index, and itis refreshing to see it explained so clearly.</p><h2 id="who-should-read-this-book">Who Should Read This Book</h2><p>This book is for developers who know HTML and CSS and want to build contentsites without the overhead of a database or JavaScript framework. You do notneed to know Go (Hugo&rsquo;s templating language is its own thing), but you should becomfortable with a terminal and a text editor.</p><p>If you are already a Hugo power user, you might find the first few chaptersslow. But the later material — custom output formats, Hugo Pipes, Webpackintegration, and the migration appendix — has enough depth to make it worth theread.</p><h2 id="what-is-missing">What Is Missing</h2><p>The book was published in 2020, and Hugo has evolved since then. Hugo Modules(which replaced much of the theme copy-paste workflow) are not covered. Theimage processing chapter uses the older <code>.Resize</code> and <code>.Fill</code> methods ratherthan the newer <code>.Process</code> filter pipeline. And the deployment chapter leansheavily on Netlify, which is fine, but other options like Cloudflare Pages orself-hosted servers get less attention.</p><p>These are minor issues. The core concepts — templates, partials, contentsections, data, and deployment — are unchanged and form the foundation of everyHugo site built today.</p><h2 id="final-verdict">Final Verdict</h2><p>Build Websites With Hugo is the best introductory book on Hugo I have read. Itis concise (154 pages), practical (you build a real site), and well-paced (eachchapter is a natural next step). Hogan writes the way good technical authors do:he explains the concept, shows the code, and gets out of your way.</p><p>If you are learning Hugo, start here. Skip the YouTube marathon and thecopy-pasted config gists. Spend a weekend with this book and build something youown.</p><hr><p><em>Build Websites With Hugo by Brian P. Hogan. Pragmatic Bookshelf, 2020. 154pages. ISBN 978-1-68050-726-3. Available at<a href="https://pragprog.com/titles/bhhugo/build-websites-with-hugo/">pragprog.com</a>.</em></p></content:encoded><dc:creator>Val Paliy</dc:creator></item><item><title>Hodo-Hodo: The Japanese Philosophy That Could Fix Web Design</title><link>https://valticus.pro/posts/hodo-hodo-the-japanese-philosophy-that-could-fix-web-design/</link><pubDate>Mon, 27 Jul 2026 00:00:00 +0000</pubDate><guid isPermaLink="true">https://valticus.pro/posts/hodo-hodo-the-japanese-philosophy-that-could-fix-web-design/</guid><description>How the ancient Japanese concept of 'just enough' challenges modern web design excess — from bloated frameworks to infinite scroll — and offers a quieter, more human alternative.</description><category>Web Development</category><category>Design</category><content:encoded><h2 id="the-book-that-changed-how-i-see-websites">The Book That Changed How I See Websites</h2><p>I have recently read <em>Just Enough Design</em> by Taku Satoh, a slim but powerfulbook published by Chronicle Books. Satoh is one of Japan&rsquo;s most respected livingdesigners — he has shaped everything from packaging for major brands to museumexhibits — and in this book he distills decades of work into a single idea:<strong>hodo-hodo</strong> (ほどほど).</p><p>The word is ancient Japanese. It means &ldquo;just enough,&rdquo; &ldquo;moderation,&rdquo; or &ldquo;theright amount.&rdquo; When Satoh applies it to his work, it becomes a designphilosophy: deliberately holding back, leaving room for the person on the otherside to engage with an object according to their own sensibility.</p><figure><div class="progressive-image"><img class="progressive-image__img"src="https://valticus.pro/images/hodo-hodo-the-japanese-philosophy-that-could-fix-web-design_hu_f68595844c37b46e.webp"alt="Hodo-Hodo: The Japanese Philosophy That Could Fix Web Design."width="800"height="436"></div><figcaption><p class="figure__caption">Hodo-Hodo: The Japanese Philosophy That Could Fix Web Design.</p></figcaption></figure><p>Reading it, I kept thinking about the web. Not abstractly — I kept thinkingabout specific buttons, specific modals, specific JavaScript bundles that Iencounter every day. Hodo-hodo is not minimalism for its own sake. It is<strong>restraint as respect</strong>. And the modern web has almost none of it.</p><h2 id="what-hodo-hodo-actually-means">What Hodo-Hodo Actually Means</h2><p>Satoh does not advocate for austerity. He is not telling designers to stripeverything away until only a single black link on a white background remains.That is a Western misreading of Japanese simplicity.</p><p>Hodo-hodo means that a design should provide <strong>exactly what is needed</strong> and nomore. Not less — not a stripped-down, frustrating experience — but not more,either. The extra is not just unnecessary; it is disrespectful. It assumes theuser cannot figure things out on their own. It assumes they need to be managed,guided, nudged, and entertained at every step.</p><p>The concept connects to other Japanese aesthetic ideas: <strong>ma</strong> (the meaningfuluse of negative space), <strong>wabi-sabi</strong> (beauty in imperfection), and <strong>shibui</strong>(unobtrusive beauty). But hodo-hodo is specifically about <strong>restraint in serviceof the other person</strong>. It is design that says: I trust you.</p><h2 id="the-webs-abundance-problem">The Web&rsquo;s Abundance Problem</h2><p>Modern web design has an abundance problem. Not an abundance of content — anabundance of <strong>stuff that does not need to be there</strong>.</p><p>Consider what a visitor encounters on a typical website in 2026:</p><ul><li>A <strong>cookie consent banner</strong> (even on sites that use no tracking)</li><li>A <strong>newsletter popup</strong> after 30 seconds</li><li>A <strong>notification permission prompt</strong> from the browser</li><li>An <strong>install app</strong> banner</li><li>A <strong>&ldquo;Sign up for free&rdquo;</strong> modal with an X that is intentionally hard to find</li><li>A <strong>chat widget</strong> that slides in from the corner</li><li>An <strong>accessibility overlay</strong> that actually makes the site less accessible</li><li>A <strong>&ldquo;Back to top&rdquo;</strong> button that appears before you have scrolled past thefirst paragraph</li></ul><p>None of these exist because the designer thought: &ldquo;This will make the user&rsquo;sexperience better.&rdquo; They exist because someone decided the user needed to be<strong>captured</strong>, <strong>converted</strong>, or <strong>retained</strong>. The user&rsquo;s actual task — readingan article, finding a phone number, understanding a product — is secondary tothe business goal of keeping them engaged.</p><p>This is the opposite of hodo-hodo. It is <strong>more-more</strong> design. More features,more prompts, more distractions, more &ldquo;value-adds&rdquo; that add nothing of value.</p><h2 id="the-framework-trap">The Framework Trap</h2><p>The abundance problem is not limited to marketing patterns. It is baked into thetools themselves.</p><p>When a developer starts a new project in 2026, the default is to reach for aframework. Need a personal site? Next.js. A blog? Astro or Gatsby. A landingpage? Probably still React, because that is what the developer knows.</p><p>Each of these frameworks ships with a runtime. Hydration logic. State managementconventions. Build tooling. Configuration files. The developer spends hourssetting up the machinery before writing a single line of meaningful content.</p><p>Satoh would call this <strong>design that serves the designer, not the user</strong>. Theframework makes the developer&rsquo;s life easier (or more familiar), but the userreceives a page that is heavier, slower, and more complex than it needs to be. Ablog post does not need a JavaScript runtime. A contact form does not need avirtual DOM. A portfolio does not need server-side rendering.</p><p>The hodo-hodo approach would be to ask: <strong>What is the minimum technology thatserves this content well?</strong> For most websites, the answer is HTML, a smallamount of CSS, and vanilla JavaScript for the few interactions that genuinelyrequire it. Everything else is excess.</p><h2 id="what-hodo-hodo-looks-like-on-the-web">What Hodo-Hodo Looks Like on the Web</h2><p>It is easier to describe what hodo-hodo is not than what it is. So let me try todescribe what it looks like when a website gets it right.</p><h3 id="system-fonts-not-font-cdns">System Fonts, Not Font CDNs</h3><p>A hodo-hodo site uses the system font stack. Not because custom fonts are wrong,but because loading a 400KB font file to render a heading in a slightlydifferent serif is a trade-off that rarely benefits the user. The system font isinstant. It is already there. It respects the user&rsquo;s existing environment.</p><p>If a custom font is genuinely necessary for the brand — a newspaper, a designstudio — it should be subset, self-hosted, and loaded with a proper<code>font-display</code> strategy. Not shoved through a Google Fonts CDN with sevenweights and three styles.</p><h3 id="dark-mode-as-a-quiet-option">Dark Mode as a Quiet Option</h3><p>A hodo-hodo dark mode toggle does not announce itself. It does not slide in fromthe side with an animation. It sits in the header, a small button that respectsthe user&rsquo;s system preference by default and allows manual override whenrequested. The transition is immediate — no flashing, no animation, no drama.</p><h3 id="content-that-breathes">Content That Breathes</h3><p>Whitespace is not wasted space. A hodo-hodo layout gives content room. The linelength stays between 60 and 80 characters. Paragraphs are separated by generousmargins. Headings have breathing room above and below. The page does not feelcrowded, even when it is dense with information.</p><p>This is <strong>ma</strong> — the Japanese concept of negative space as a design elementitself. The space between things is not absence; it is presence. It is whatallows the content to be read, understood, and remembered.</p><h3 id="interactions-that-disappear">Interactions That Disappear</h3><p>A hodo-hodo interaction is one you do not notice. The copy button on a codeblock appears on hover and disappears after use. The search bar opens with akeyboard shortcut and closes with Escape. The mobile menu toggles withoutanimation, without a backdrop overlay that dims the entire page.</p><p>The goal is not &ldquo;no interaction.&rdquo; It is <strong>interaction that does not callattention to itself</strong>. The user performs a task and moves on. They do not admirethe animation. They do not think about the UI. They think about what they cameto do.</p><h3 id="no-dark-patterns">No Dark Patterns</h3><p>A hodo-hodo site does not trick the user. The &ldquo;unsubscribe&rdquo; link is as prominentas the &ldquo;subscribe&rdquo; link. The close button on a modal is in the expected locationand is the expected size. The privacy policy is written in plain language, notin legal jargon designed to obscure.</p><p>Satoh&rsquo;s point is that restraint is a form of respect. When you manipulate theuser — when you make the &ldquo;No thanks&rdquo; button gray and small while the &ldquo;Sign up&rdquo;button is blue and large — you are telling the user that you do not trust themto make the right choice. You are designing for yourself, not for them.</p><h2 id="the-paradox-of-the-hodo-hodo-website">The Paradox of the Hodo-Hodo Website</h2><p>Here is the uncomfortable truth: achieving hodo-hodo on the web often requires<strong>more</strong> engineering, not less.</p><p>A clean, fast, accessible website is harder to build than a bloated one. It iseasier to add a React dependency than to write semantic HTML. It is easier toinstall a cookie consent library than to ensure your analytics respects privacyby design. It is easier to add a chat widget than to write a clear, findablecontact page.</p><p>The simplicity the user sees is the result of disciplined engineering behind thescenes. This is exactly Satoh&rsquo;s point. Hodo-hodo is not laziness. It is notcutting corners. It is <strong>knowing where to stop</strong> — and that requires a depth ofunderstanding that casual excess does not.</p><p>A developer who adds seven npm dependencies to build a button has not thoughtenough about the button. A designer who adds a particle animation background hasnot thought enough about what the page is for. Hodo-hodo demands that you think<strong>before</strong> you build, not after.</p><h2 id="a-practical-checklist">A Practical Checklist</h2><p>You do not need to adopt a Japanese philosophy to build a better website. But ifhodo-hodo resonates, here are some concrete questions to ask before shippingyour next project:</p><ol><li><p><strong>Does this feature serve the user or the business?</strong> If it serves thebusiness at the user&rsquo;s expense, remove it.</p></li><li><p><strong>Can this be done without JavaScript?</strong> If the interaction works without JS,do not add JS. If JS is necessary, use the smallest possible amount.</p></li><li><p><strong>Is this the right amount?</strong> Not &ldquo;can we add more?&rdquo; but &ldquo;is this enough?&rdquo;The answer is usually yes.</p></li><li><p><strong>Does this respect the user&rsquo;s attention?</strong> Every element on the pagecompetes for attention. Be deliberate about what you put in front of them.</p></li><li><p><strong>Would this make sense to someone who has never seen a website before?</strong> Ifthe design requires explanation, it is too clever.</p></li><li><p><strong>Can I remove this without the user noticing?</strong> If yes, it should not bethere.</p></li><li><p><strong>Am I designing for the user or for my portfolio?</strong> Be honest.</p></li></ol><h2 id="closing-thought">Closing Thought</h2><p>Satoh writes that hodo-hodo is not about achieving a specific aesthetic. It isnot about making things look minimal. It is about a <strong>relationship</strong> — betweenthe designer and the user, between the object and the person who uses it.</p><p>The web has forgotten this. We design for metrics, for engagement, forconversion rates. We A/B test button colors and measure time-on-page and call it&ldquo;user experience.&rdquo; But the user did not come to have an experience. They came toread an article, or find a recipe, or check a bus schedule. Everything we addbetween them and their task is a failure of hodo-hodo.</p><p>The quietest website is not always the best website. But the website thatprovides <strong>exactly what the user needs</strong> — and nothing more — is the one theywill trust. And trust, in the end, is worth more than any conversion rate.</p><p>I will leave you with Satoh&rsquo;s simplest insight, translated from the Japanese:<strong>&ldquo;Just enough is not less. It is precisely enough.&rdquo;</strong></p></content:encoded><dc:creator>Val Paliy</dc:creator></item><item><title>What I'd Learn If Starting Today: A No-Nonsense Dev Career Roadmap</title><link>https://valticus.pro/posts/what-id-learn-if-starting-today-dev-career-advice/</link><pubDate>Thu, 16 Jul 2026 00:00:00 +0000</pubDate><guid isPermaLink="true">https://valticus.pro/posts/what-id-learn-if-starting-today-dev-career-advice/</guid><description>A comprehensive guide on how to start a career in web development in 2026, focusing on fundamentals, the right stack, and avoiding the 'framework trap' based on 20+ years of experience.</description><category>Career</category><content:encoded><h2 id="the-hindsight-of-two-decades">The Hindsight of Two Decades</h2><p>Twenty years in web development. Hundreds of projects. Dozens of technologieslearned, mastered, and eventually discarded. If I could step into a time machineand talk to my younger self on day one, my advice wouldn&rsquo;t be about the latest&ldquo;hot&rdquo; framework or a specific library. It would be about <strong>compound interest inknowledge</strong>.</p><p>The industry is noisier than ever. Every week, there&rsquo;s a new &ldquo;game-changing&rdquo;tool that promises to make you 10x more productive. But here’s the cold truth:the most successful developers I know aren&rsquo;t the ones who know the mostframeworks; they are the ones who understand the <strong>fundamentals</strong> so deeply thatthey can pick up any framework in a weekend.</p><figure><div class="progressive-image"><img class="progressive-image__img"src="https://valticus.pro/images/what-id-learn-if-starting-today-dev-career-advice_hu_119a4b1857525206.webp"alt="What I&#39;d Learn If Starting Today: A No-Nonsense Dev Career Roadmap."width="800"height="436"></div><figcaption><p class="figure__caption">What I&#39;d Learn If Starting Today: A No-Nonsense Dev Career Roadmap.</p></figcaption></figure><p>If I were starting today, this is exactly how I would navigate the path fromabsolute beginner to senior engineer.</p><h2 id="phase-1-learn-the-platform-not-the-abstractions">Phase 1: Learn the Platform, Not the Abstractions</h2><p>The biggest mistake I see juniors make today is the &ldquo;Framework Trap.&rdquo; They learn<strong>React</strong> before they understand <strong>JavaScript</strong>. They learn <strong>Tailwind</strong> beforethey understand <strong>CSS</strong>. They learn <strong>Next.js</strong> before they understand how abasic <strong>HTTP request</strong> works.</p><p>When you learn an abstraction first, you are building your career on sand. Whenthat framework inevitably falls out of favor, your skills go with it.</p><h3 id="the-fundamental-learning-stack">The Fundamental Learning Stack</h3><p>Before you even think about installing a package manager, you must master thesefive pillars:</p><ol><li><strong>Semantic HTML</strong>: Understand the <strong>document object model (DOM)</strong>,<strong>accessibility</strong> (ARIA roles), and why using a <code>&lt;button&gt;</code> is better than a<code>&lt;div&gt;</code> with an <code>onclick</code> handler.</li><li><strong>Modern CSS</strong>: Forget libraries for a moment. Master the <strong>Box Model</strong>,<strong>Flexbox</strong>, <strong>CSS Grid</strong>, and <strong>Custom Properties (CSS Variables)</strong>. If youcan&rsquo;t build a responsive layout with pure CSS, you aren&rsquo;t ready for<strong>Tailwind</strong>.</li><li><strong>Core JavaScript (ES6+)</strong>: You need to understand closures, prototypes,<strong>asynchronous programming</strong> (<code>async/await</code>), and functional programmingconcepts. Learn how the browser actually executes your code.</li><li><strong>Browser APIs</strong>: Spend time with the <strong>Fetch API</strong>, <strong>localStorage</strong>,<strong>Intersection Observer</strong>, and <strong>Web Workers</strong>. These are the tools thebrowser gives you for free.</li><li><strong>HTTP &amp; Networking</strong>: Understand status codes, headers, CORS, and thedifference between <strong>REST</strong> and <strong>GraphQL</strong>. Knowing <em>how</em> data moves acrossthe wire is more important than the library you use to fetch it.</li></ol><blockquote><p><strong>Common Pitfall: Tutorial Hell</strong> Many beginners fall into the trap ofwatching 50-hour courses and following along line-by-line. This gives you afalse sense of competence. You aren&rsquo;t learning to code; you&rsquo;re learning totranscribe. Break the cycle by building something unique every time you finisha module.</p></blockquote><h2 id="phase-2-the-first-project-architecture">Phase 2: The &ldquo;First Project&rdquo; Architecture</h2><p>Once you have the basics, don&rsquo;t build another Todo list. Build something thatsolves a real problem. If I were starting today, my first &ldquo;serious&rdquo; projectwould be a <strong>Personal Knowledge Base</strong> or a <strong>Custom CMS</strong>.</p><p><strong>Why?</strong> Because it forces you to handle:</p><ul><li><strong>Data Persistence</strong>: Connecting to a database (SQL or NoSQL).</li><li><strong>Authentication</strong>: Implementing secure login and sessions.</li><li><strong>CRUD Operations</strong>: Create, Read, Update, Delete.</li><li><strong>State Management</strong>: Managing complex data on the frontend.</li><li><strong>Deployment</strong>: Getting your code into the real world.</li></ul><h2 id="phase-3-version-control--collaboration">Phase 3: Version Control &amp; Collaboration</h2><p>I avoided <strong>Git</strong> for too long in my early years, thinking it was only forteams. That was a massive mistake. <strong>Git</strong> isn&rsquo;t just a backup tool; it&rsquo;s a<strong>time machine</strong> and a <strong>collaboration engine</strong>.</p><p>If you want to be a professional, you must be comfortable with the <strong>terminal</strong>.Learn how to:</p><ul><li>Branch, merge, and handle merge conflicts.</li><li>Write meaningful commit messages (e.g.,<a href="https://www.conventionalcommits.org/">Conventional Commits</a>).</li><li>Perform code reviews on GitHub/GitLab.</li><li>Use <code>git rebase</code> to keep your history clean.</li></ul><h2 id="phase-4-integrating-ai-the-2026-reality">Phase 4: Integrating AI (The 2026 Reality)</h2><p>We cannot talk about starting a dev career today without mentioning <strong>AI</strong>. In2026, <strong>AI</strong> is no longer a luxury; it&rsquo;s a standard part of the workflow.However, it is a double-edged sword.</p><p>As I&rsquo;ve written about previously, the goal is to use <strong>AI</strong> as a <strong>copilot</strong>,not the captain. If you use <strong>AI</strong> to write code you don&rsquo;t understand, youaren&rsquo;t a developer; you&rsquo;re a prompt engineer with a looming technical debtcrisis.</p><blockquote><p><strong>Pro Tip: The 15-Minute Rule</strong> When you hit a bug, spend exactly 15 minutestrying to solve it yourself by reading the docs and debugging. If you&rsquo;re stillstuck, use <strong>AI</strong> to explain the concept, not just give you the fix. Thisensures you&rsquo;re still growing your &ldquo;mental muscle.&rdquo;</p></blockquote><h2 id="the-career-roadmap-from-junior-to-lead">The Career Roadmap: From Junior to Lead</h2><p>Success in this industry isn&rsquo;t just about code. It&rsquo;s about how yourresponsibilities shift as you grow.</p><table><thead><tr><th style="text-align: left">Level</th><th style="text-align: left">Primary Focus</th><th style="text-align: left">Key Skill to Master</th><th style="text-align: left">Output</th></tr></thead><tbody><tr><td style="text-align: left"><strong>Junior</strong></td><td style="text-align: left">Syntax &amp; Implementation</td><td style="text-align: left">Reading Documentation</td><td style="text-align: left">Working code that follows instructions.</td></tr><tr><td style="text-align: left"><strong>Mid-Level</strong></td><td style="text-align: left">Architecture &amp; Patterns</td><td style="text-align: left">Testing &amp; Maintainability</td><td style="text-align: left">Scalable features with minimal bugs.</td></tr><tr><td style="text-align: left"><strong>Senior</strong></td><td style="text-align: left">Problem Solving &amp; Systems</td><td style="text-align: left">Communication &amp; Mentorship</td><td style="text-align: left">Technical direction and team productivity.</td></tr><tr><td style="text-align: left"><strong>Lead</strong></td><td style="text-align: left">Business Value &amp; Strategy</td><td style="text-align: left">Decision Making</td><td style="text-align: left">High-impact architectural and organizational changes.</td></tr></tbody></table><h2 id="the-business-of-code">The Business of Code</h2><p>This is the lesson that took me a decade to truly internalize: <strong>Code is aliability, not an asset.</strong></p><p>Companies don&rsquo;t pay you to write code; they pay you to solve problems. Sometimesthe best solution to a problem is <em>not</em> writing code at all. Understanding thebusiness context of your work — how it makes money, how it saves time, or how itreduces risk — will make you ten times more valuable than the best &ldquo;pure&rdquo; coder.</p><h2 id="soft-skills-the-secret-weapon">Soft Skills: The &ldquo;Secret&rdquo; Weapon</h2><p>Technical skills get you the interview. <strong>Soft Skills</strong> get you the job and thepromotion. In a world where <strong>AI</strong> can write a boilerplate <strong>React</strong> componentin seconds, your ability to <strong>communicate</strong>, <strong>empathize</strong>, and <strong>negotiate</strong> isyour moat.</p><ul><li><strong>Writing</strong>: Can you explain a complex bug in a Jira ticket? Can you write aclear README?</li><li><strong>Public Speaking</strong>: Can you demo your work to stakeholders?</li><li><strong>Empathy</strong>: Can you understand why a designer is frustrated with yourimplementation?</li><li><strong>Reliability</strong>: Do you do what you say you&rsquo;re going to do?</li></ul><h2 id="dont-chase-trends">Don&rsquo;t Chase Trends</h2><p>I&rsquo;ve watched jQuery, Backbone, Angular, and countless others rise and fall. Ifyou chase every trend, you will burn out.</p><p>Instead, adopt the <strong>80/20 Rule for Learning</strong>:</p><ul><li>Spend <strong>80%</strong> of your time mastering established, &ldquo;boring&rdquo; technologies(<strong>SQL</strong>, <strong>Bash</strong>, <strong>vanilla JS</strong>, <strong>CSS</strong>, <strong>Docker</strong>).</li><li>Spend <strong>20%</strong> of your time playing with the new shiny stuff (new frameworks,<strong>AI</strong> agents, etc.).</li></ul><h2 id="the-advice-i-wish-id-followed">The Advice I Wish I&rsquo;d Followed</h2><ol><li><strong>Write about what you learn</strong>: Teaching is the highest form of learning.Start a blog on day one.</li><li><strong>Contribute to Open Source</strong>: Don&rsquo;t start with code. Start withdocumentation or fixing typos. It teaches you how professional repositoriesare managed.</li><li><strong>Take care of your health</strong>: This is a sedentary job. If you don&rsquo;t scheduletime for movement, your back and wrists will remind you in ten years.</li><li><strong>Save your &ldquo;F-you&rdquo; money</strong>: Freelancing and tech jobs can be volatile.Having a financial buffer gives you the freedom to say &ldquo;no&rdquo; to toxicprojects.</li></ol><h2 id="conclusion">Conclusion</h2><p>If you&rsquo;re starting today, the mountain might look insurmountable. The stack istaller, the competition is global, and the tools are more complex. But thereward for those who focus on the <strong>fundamentals</strong> remains higher than ever.</p><p>The specific technologies will change — they always do. But the ability tolearn, solve problems, and communicate effectively will serve you for decades.Stop looking for the perfect tutorial and start building something that breaks.That’s where the real learning happens.</p><p>The best time to start was twenty years ago. The second best time is now. <strong>Getto work.</strong></p></content:encoded><dc:creator>Val Paliy</dc:creator></item><item><title>Quora: The Knowledge-Sharing Platform That Still Matters</title><link>https://valticus.pro/posts/quora-the-knowledge-sharing-platform/</link><pubDate>Tue, 14 Jul 2026 00:00:00 +0000</pubDate><guid isPermaLink="true">https://valticus.pro/posts/quora-the-knowledge-sharing-platform/</guid><description>Discover why Quora remains a valuable resource for knowledge sharing, how to leverage it for learning and growth, and why it's still relevant in 2026.</description><category>Technology</category><content:encoded><p>In an era dominated by short-form video and algorithmic feeds, Quora stands as abeacon for those who crave in-depth knowledge and thoughtful discussion. Foundedin 2009 by former Facebook employees Adam D&rsquo;Angelo and Charlie Cheever, Quorahas evolved into one of the internet&rsquo;s most comprehensive Q&amp;A platforms.</p><h2 id="what-makes-quora-special">What Makes Quora Special?</h2><p>Quora&rsquo;s strength lies in its commitment to quality answers. Unlike social mediaplatforms optimized for engagement, Quora prioritizes expertise and depth. Userscan ask questions on virtually any topic — from programming and science tophilosophy and personal development — and receive answers from knowledgeablecontributors, including verified experts and industry professionals.</p><p>The platform&rsquo;s upvote system ensures that the most helpful answers rise to thetop, creating a self-curated knowledge base that grows richer over time. Fordevelopers and tech enthusiasts, Quora offers invaluable insights into careeradvice, coding challenges, and industry trends.</p><h2 id="quora-for-learning-and-growth">Quora for Learning and Growth</h2><p>One of Quora&rsquo;s most underappreciated features is its potential for continuouslearning. By following topics aligned with your interests, you create apersonalized feed of high-quality content. Whether you&rsquo;re exploring newprogramming languages, understanding system design patterns, or diving intobusiness strategy, Quora provides diverse perspectives that textbooks simplycan&rsquo;t match.</p><p>The platform also allows you to build a presence by sharing your expertise. Ifyou have deep knowledge in a particular area, answering questions on Quora canestablish you as a thought leader while helping others.</p><h2 id="my-quora-journey">My Quora Journey</h2><p>I&rsquo;ve found Quora to be an excellent space for sharing thoughts on technology,development practices, and the broader tech landscape. You can follow mycontributions and explore the topics I cover on my<a href="https://valticus.quora.com/">Quora blog</a>.</p><h2 id="why-quora-still-matters-in-2026">Why Quora Still Matters in 2026</h2><p>Despite the rise of AI-generated answers and social media alternatives, Quoraremains relevant because it fosters genuine human expertise. The platform&rsquo;sevolution — including Quora+ and Spaces — has added new dimensions to contentcreation and community building while maintaining its core mission of sharingknowledge.</p><p>For anyone serious about learning, growing their expertise, or connecting withlike-minded professionals, Quora deserves a place in your digital toolkit.</p></content:encoded><dc:creator>Val Paliy</dc:creator></item><item><title>Minimalist Development Workflow: My Experience and Insights</title><link>https://valticus.pro/posts/minimalist-development-workflow-my-experience-and-insights/</link><pubDate>Mon, 13 Jul 2026 00:00:00 +0000</pubDate><guid isPermaLink="true">https://valticus.pro/posts/minimalist-development-workflow-my-experience-and-insights/</guid><description>A personal account of adopting a minimalist approach to development workflows, exploring the benefits, challenges, and practical strategies for reducing complexity without sacrificing productivity.</description><category>Web Development</category><content:encoded><p>After twenty years in web development, I&rsquo;ve realized that the most dangerousthing in our industry isn&rsquo;t a security vulnerability or a system outage — it&rsquo;s<strong>creeping complexity</strong>. We are conditioned to believe that a more sophisticatedsetup equals a more professional output. We stack layers of abstraction until wecan no longer see the foundation of our own applications.</p><p>I spent the first decade of my career as a &ldquo;maximalist.&rdquo; I wanted the flashiestIDE, the most complex build pipelines, and the latest alpha-version frameworks.But eventually, the weight of that tooling became a burden. I was spending 40%of my time fighting my environment rather than shipping code.</p><figure><div class="progressive-image"><img class="progressive-image__img"src="https://valticus.pro/images/minimalist-development-workflow-my-experience-and-insights_hu_44c6f909c36cf879.webp"alt="Minimalist Development Workflow: My Experience and Insights."width="800"height="436"></div><figcaption><p class="figure__caption">Minimalist Development Workflow: My Experience and Insights.</p></figcaption></figure><p>Now? I pride myself on how little I need to get the job done. This is my journeytoward a <strong>Minimalist Development Workflow</strong>.</p><h2 id="the-breaking-point-complexity-debt">The Breaking Point: Complexity Debt</h2><p>The realization hit me during a routine update. A simple project with a dozenpages required a <code>npm install</code> that downloaded 800MB of dependencies andtriggered three different security warnings in libraries I didn&rsquo;t even know Iwas using.</p><p>My &ldquo;productivity&rdquo; had become a facade. I was paying <strong>Complexity Debt</strong> everysingle day:</p><ul><li><strong>Build Times</strong>: Waiting 60 seconds for a &ldquo;hot reload&rdquo; of a CSS change.</li><li><strong>Onboarding</strong>: Taking two days to explain the environment to a new developer.</li><li><strong>Maintenance</strong>: Spending weekends fixing breaking changes in a framework thatI didn&rsquo;t really need.</li></ul><p>I decided to burn it down and start from the fundamentals.</p><h2 id="the-boring-technology-philosophy">The &ldquo;Boring Technology&rdquo; Philosophy</h2><p>I adopted the &ldquo;<strong>Boring Technology</strong>&rdquo; mindset. Boring technology is reliable.Its edge cases are known. It doesn&rsquo;t change its API every six months. For aminimalist workflow, boring is beautiful.</p><h3 id="what-i-kept-the-essentials">What I Kept (The Essentials)</h3><ol><li><strong>The Editor</strong>: VS Code, but stripped to the bone. No &ldquo;AI Autocomplete&rdquo; thatguesses wrong 40% of the time. No 15-extension &ldquo;Pack for React Developers.&rdquo;Just a good mono font, a fast terminal, and built-in Git support.</li><li><strong>The Stack</strong>: Whenever possible, I return to the &ldquo;Holy Trinity&rdquo;: <strong>SemanticHTML</strong>, <strong>Modern CSS</strong>, and <strong>Vanilla JavaScript</strong>.</li><li><strong>The Static Engine</strong>: I use <strong>Hugo</strong> for almost everything. It&rsquo;s a singlebinary, it&rsquo;s written in <strong>Go</strong>, and it builds 5,000 pages in under a second.No <code>node_modules</code> required for the core engine.</li></ol><h2 id="replacing-complex-tools-with-simple-scripts">Replacing Complex Tools with Simple Scripts</h2><p>The biggest win in my minimalist transition was replacing &ldquo;Task Runners&rdquo; (Gulp,Grunt, and even complex npm scripts) with a tool that has been around since1976: <strong>The Makefile</strong>.</p><p>A <code>Makefile</code> is transparent, fast, and doesn&rsquo;t require a runtime. It serves asthe &ldquo;source of truth&rdquo; for how to build and deploy your project.</p><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-makefile" ><span class="line"><span class="cl"><span class="c"># Minimalist Development Workflow Makefile</span></span></span><span class="line"><span class="cl"><span class="nf">.PHONY</span><span class="o">:</span> <span class="n">help</span> <span class="n">dev</span> <span class="n">build</span> <span class="n">deploy</span> <span class="n">clean</span></span></span><span class="line"><span class="cl"></span></span><span class="line"><span class="cl"><span class="nf">help</span><span class="o">:</span> <span class="c">## Show this help message</span></span></span><span class="line"><span class="cl"> @grep -E <span class="s1">&#39;^[a-zA-Z_-]+:.*?## .*$$&#39;</span> <span class="k">$(</span>MAKEFILE_LIST<span class="k">)</span> <span class="p">|</span> sort <span class="p">|</span> awk <span class="s1">&#39;BEGIN {FS = &#34;:.*?## &#34;}; {printf &#34;\033[36m%-15s\033[0m %s\n&#34;, $$1, $$2}&#39;</span></span></span><span class="line"><span class="cl"></span></span><span class="line"><span class="cl"><span class="nf">dev</span><span class="o">:</span> <span class="c">## Start Hugo development server</span></span></span><span class="line"><span class="cl"> hugo server -D -E -F --minify</span></span><span class="line"><span class="cl"></span></span><span class="line"><span class="cl"><span class="nf">build</span><span class="o">:</span> <span class="c">## Build the production site</span></span></span><span class="line"><span class="cl"> rm -rf public</span></span><span class="line"><span class="cl"> hugo --gc --minify</span></span><span class="line"><span class="cl"></span></span><span class="line"><span class="cl"><span class="nf">deploy</span><span class="o">:</span> <span class="n">build</span> <span class="c">## Deploy to production via Netlify</span></span></span><span class="line"><span class="cl"> npx netlify-cli deploy --prod --dir<span class="o">=</span>public</span></span><span class="line"><span class="cl"></span></span><span class="line"><span class="cl"><span class="nf">clean</span><span class="o">:</span> <span class="c">## Remove build artifacts</span></span></span><span class="line"><span class="cl"> rm -rf public resources</span></span></code></pre></div><p>By using this, I don&rsquo;t need to remember 20 different CLI flags. I just type<code>make dev</code> or <code>make deploy</code>. It&rsquo;s portable, version-controlled, and requireszero configuration on a new machine.</p><h2 id="what-i-dropped-and-why">What I Dropped (And Why)</h2><h3 id="1-the-big-three-frameworks">1. The &ldquo;Big Three&rdquo; Frameworks</h3><p>Unless I&rsquo;m building a highly dynamic, state-heavy dashboard, I don&rsquo;t use React,Vue, or Angular. Most websites are content, and content doesn&rsquo;t need a <strong>virtualDOM</strong>. It needs a fast server and a browser.</p><h3 id="2-utility-first-css-frameworks">2. Utility-First CSS Frameworks</h3><p>While I appreciate the speed of Tailwind, I&rsquo;ve returned to <strong>Vanilla CSS withCustom Properties</strong>. Modern CSS (<strong>Grid</strong>, <strong>Flexbox</strong>, <strong>Containers</strong>) has madeframeworks largely redundant for those who actually know the language.</p><h3 id="3-heavy-ides">3. &ldquo;Heavy&rdquo; IDES</h3><p>I moved away from heavy, RAM-hungry IDEs. If I can&rsquo;t run my developmentenvironment on a 5-year-old laptop without the fans spinning up, my workflow istoo heavy. This ties back to my philosophy on digital minimalism for developers,where I discuss the mental impact of digital clutter.</p><blockquote><h3 id="-common-pitfall-not-invented-here-nih">🚩 Common Pitfall: &ldquo;Not Invented Here&rdquo; (NIH)</h3><p>Minimalists often fall into the trap of wanting to build everything fromscratch. This can lead to its own kind of complexity. The goal isn&rsquo;t to writeyour own database; it&rsquo;s to avoid installing a database when a JSON file willdo.</p></blockquote><h2 id="the-minimalist-project-checklist">The Minimalist Project Checklist</h2><p>Before starting a new project, I run it through this &ldquo;Pruning Filter&rdquo;:</p><ul><li><input disabled="" type="checkbox"> <strong>Can this be static?</strong> If yes, no server-side code.</li><li><input disabled="" type="checkbox"> <strong>Does it need JS?</strong> If the interaction can be done with HTML/CSS (like atoggle menu), skip the JS.</li><li><input disabled="" type="checkbox"> <strong>Single Binary Rule</strong>: Can I build this using only tools that are singlebinaries (like Hugo, Go, or Rust tools)?</li><li><input disabled="" type="checkbox"> <strong>Zero-Config Onboarding</strong>: Can a developer clone this and run it with onecommand (e.g., <code>make dev</code>)?</li><li><input disabled="" type="checkbox"> <strong>No-Build CSS</strong>: Can I use standard CSS files without a pre-processor?</li></ul><h2 id="the-benefits-of-less">The Benefits of Less</h2><h3 id="instant-context-re-entry">Instant Context Re-entry</h3><p>When I return to a project after six months, I don&rsquo;t have to spend an hourupdating dependencies or remembering how the &ldquo;Magic Build Tool&rdquo; works. The codeis just code.</p><h3 id="faster-feedback-loops">Faster Feedback Loops</h3><p>My build time is usually under 500ms. This instant feedback allows me to enter a<strong>Flow State</strong> that is impossible when you&rsquo;re constantly waiting for atranspiler to finish.</p><h3 id="improved-security">Improved Security</h3><p>Every dependency you <em>don&rsquo;t</em> install is a <strong>supply-chain attack</strong> that <em>can&rsquo;t</em>happen to you. Minimalism is the ultimate security architecture.</p><h2 id="conclusion">Conclusion</h2><p>A minimalist workflow isn&rsquo;t about being a Luddite or hating progress. It&rsquo;s about<strong>respecting your own time</strong>. It&rsquo;s about choosing tools that serve you, ratherthan tools that require you to serve them.</p><p>By stripping away the noise, you reveal the signal. You&rsquo;ll find that you writebetter code, understand your systems deeper, and — most importantly — you&rsquo;llspend more time solving real problems and less time tweaking your configurationfiles.</p><p><strong>Take a look at your current project. What is the one dependency you couldremove today and still deliver the same value? Try it.</strong></p></content:encoded><dc:creator>Val Paliy</dc:creator></item><item><title>Why Frameworks Are Overused (And How to Avoid It)</title><link>https://valticus.pro/posts/why-frameworks-are-overused-and-how-to-avoid-it/</link><pubDate>Thu, 09 Jul 2026 00:00:00 +0000</pubDate><guid isPermaLink="true">https://valticus.pro/posts/why-frameworks-are-overused-and-how-to-avoid-it/</guid><description>A critical look at the 'Framework-First' mentality in modern web development. Learn when to reach for a library and when to stick to the fundamentals for better performance and maintainability.</description><category>Web Development</category><content:encoded><h2 id="the-framework-first-fallacy">The Framework-First Fallacy</h2><p>In the landscape of 2026, the default response to almost any web developmentproject is to start with a framework. Need a personal landing page? Reach forNext.js. Building a simple data dashboard? Boot up a React template. Creating adocumentation site? Gatsby or Nuxt is the presumed choice.</p><p>We have reached a point where many developers — especially those who entered theindustry in the last five years — literally cannot build a website without firstinstalling a framework. This isn&rsquo;t just a shift in preference; it&rsquo;s a<strong>Framework-First Fallacy</strong> that prioritizes the developer&rsquo;s comfort over theuser&rsquo;s experience and the project&rsquo;s long-term health.</p><figure><div class="progressive-image"><img class="progressive-image__img"src="https://valticus.pro/images/why-frameworks-are-overused-and-how-to-avoid-it_hu_eae461301fe9faf6.webp"alt="Why Frameworks Are Overused (And How to Avoid It)."width="800"height="436"></div><figcaption><p class="figure__caption">Why Frameworks Are Overused (And How to Avoid It).</p></figcaption></figure><h2 id="the-hidden-costs-of-abstraction">The Hidden Costs of Abstraction</h2><p>While frameworks promise speed and consistency, they come with a significant&ldquo;<strong>Abstraction Tax</strong>&rdquo; that is rarely discussed in the hype-filled world of techsocial media and YouTube tutorials.</p><h3 id="1-the-bundle-size-reality-check">1. The Bundle Size Reality Check</h3><p>Let&rsquo;s look at the math for a &ldquo;simple&rdquo; interactive site in 2026. If you use amodern meta-framework, your baseline might look like this:</p><ul><li><strong>Framework Core (React/Vue/Angular):</strong> ~45KB – 130KB <strong>gzipped</strong></li><li><strong>Hydration Logic:</strong> ~20KB – 50KB</li><li><strong>Routing &amp; State Management:</strong> ~30KB</li><li><strong>UI Component Library (Radix, HeadlessUI, etc.):</strong> ~40KB</li><li><strong>Your Actual Business Logic:</strong> ~15KB</li></ul><p>In this scenario, you are shipping nearly 300KB of JavaScript to the user justto deliver 15KB of unique functionality. On a high-speed fiber connection, thismight feel negligible. But on a spotty 4G connection or an entry-level mobiledevice, that 300KB represents a multi-second delay in <strong>Time to Interactive(TTI)</strong>. We are essentially forcing the user to download and execute a massiveengine just to move a few pixels.</p><h3 id="2-the-learning-curve-trap">2. The Learning Curve Trap</h3><p>Frameworks don&rsquo;t just require you to learn JavaScript; they require you to learna dialect of it. You aren&rsquo;t just learning how to manipulate the DOM; you&rsquo;relearning about &ldquo;<strong>Hooks</strong>,&rdquo; &ldquo;<strong>Signals</strong>,&rdquo; &ldquo;<strong>Observables</strong>,&rdquo; or &ldquo;<strong>VirtualDOM</strong> reconciliation.&rdquo;</p><p>By the time a developer masters the specific idioms of Framework A, Framework Bhas been released with a &ldquo;revolutionary&rdquo; new paradigm that makes Framework Alook antiquated. This creates a cycle of <strong>Perpetual Relearning</strong> that stealstime away from mastering the fundamental technologies (HTML, CSS, <strong>BrowserAPIs</strong>) that have remained stable for decades.</p><h3 id="3-dependency-hell-and-maintenance-rot">3. Dependency Hell and Maintenance Rot</h3><p>Modern framework projects don&rsquo;t just have dependencies; they have ecosystems. Asimple <code>npm install</code> today can result in 2,000+ folders in your<strong><code>node_modules</code></strong>.</p><p>This creates a massive surface area for:</p><ul><li><strong>Security Vulnerabilities</strong>: Every transitive dependency is a potential entrypoint.</li><li><strong>Breaking Changes</strong>: A minor update in a sub-dependency can break your entirebuild pipeline.</li><li><strong>Maintenance Rot</strong>: Try opening a framework project from three years ago andrunning it. The odds of it &ldquo;just working&rdquo; are near zero.</li></ul><h2 id="the-framework-necessity-test">The Framework Necessity Test</h2><p>Before you run <code>npx create-...</code>, put your project through this checklist. If youcan&rsquo;t check at least three boxes, you probably don&rsquo;t need a framework.</p><ul><li><input disabled="" type="checkbox"> Does the application have highly dynamic, synchronized state acrossmultiple UI components?</li><li><input disabled="" type="checkbox"> Is the project being built by a team of 10+ developers who need strictarchitectural guardrails?</li><li><input disabled="" type="checkbox"> Does the UI require complex, real-time updates (e.g., a collaborativeeditor or a high-frequency trading dashboard)?</li><li><input disabled="" type="checkbox"> Are you building a &ldquo;<strong>Single Page Application</strong>&rdquo; (<strong>SPA</strong>) wherenavigation must happen without full page reloads for a specific UX reason?</li><li><input disabled="" type="checkbox"> Do you need to leverage a specific, massive ecosystem of pre-builtcomponents that would take months to build from scratch?</li></ul><h2 id="comparison-vanilla-vs-framework-the-modal-example">Comparison: Vanilla vs. Framework (The Modal Example)</h2><p>To illustrate the point, let&rsquo;s look at how we might build a simple modal.</p><p><strong>The &ldquo;Modern Framework&rdquo; Way:</strong> You import a Modal component, a Portal, a Statehook, and probably an animation library. You write 50 lines of code, but you&rsquo;veadded 4 dependencies and 80KB to your bundle.</p><p><strong>The &ldquo;Platform&rdquo; Way (Vanilla JS):</strong></p><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-javascript" ><span class="line"><span class="cl"><span class="c1">// A modal in 2026 using the native &lt;dialog&gt; element</span></span></span><span class="line"><span class="cl"><span class="kr">const</span> <span class="nx">modal</span> <span class="o">=</span> <span class="nb">document</span><span class="p">.</span><span class="nx">querySelector</span><span class="p">(</span><span class="s2">&#34;#myModal&#34;</span><span class="p">);</span></span></span><span class="line"><span class="cl"><span class="kr">const</span> <span class="nx">openBtn</span> <span class="o">=</span> <span class="nb">document</span><span class="p">.</span><span class="nx">querySelector</span><span class="p">(</span><span class="s2">&#34;#openModal&#34;</span><span class="p">);</span></span></span><span class="line"><span class="cl"><span class="kr">const</span> <span class="nx">closeBtn</span> <span class="o">=</span> <span class="nb">document</span><span class="p">.</span><span class="nx">querySelector</span><span class="p">(</span><span class="s2">&#34;#closeModal&#34;</span><span class="p">);</span></span></span><span class="line"><span class="cl"></span></span><span class="line"><span class="cl"><span class="nx">openBtn</span><span class="p">.</span><span class="nx">addEventListener</span><span class="p">(</span><span class="s2">&#34;click&#34;</span><span class="p">,</span> <span class="p">()</span> <span class="p">=&gt;</span> <span class="nx">modal</span><span class="p">.</span><span class="nx">showModal</span><span class="p">());</span></span></span><span class="line"><span class="cl"><span class="nx">closeBtn</span><span class="p">.</span><span class="nx">addEventListener</span><span class="p">(</span><span class="s2">&#34;click&#34;</span><span class="p">,</span> <span class="p">()</span> <span class="p">=&gt;</span> <span class="nx">modal</span><span class="p">.</span><span class="nx">close</span><span class="p">());</span></span></span><span class="line"><span class="cl"></span></span><span class="line"><span class="cl"><span class="c1">// Simple, performant, and requires ZERO dependencies.</span></span></span></code></pre></div><p>By using the<a href="https://developer.mozilla.org/en-US/docs/Web/HTML/Element/dialog">native <strong><code>&lt;dialog&gt;</code> element</strong></a>,you get accessibility (focus trapping, ESC key to close) for free, with zerobundle size impact.</p><h2 id="the-progressive-enhancement-approach">The Progressive Enhancement Approach</h2><p>The alternative to &ldquo;Framework-First&rdquo; is <strong>Progressive Enhancement</strong>. It&rsquo;s aphilosophy that has guided the web since its inception, yet it feelsrevolutionary in the current climate.</p><ol><li><strong>Content First (HTML):</strong> Start with the <strong>semantic structure</strong>. Does thesite work if JavaScript is disabled? It should.</li><li><strong>Presentation (CSS):</strong> Layer on the design. Modern CSS (Grid, <strong>ContainerQueries</strong>, Layers) can handle 90% of the layouts that used to requireJS-heavy libraries.</li><li><strong>Enhancement (JS):</strong> Add interactivity. Use <strong>Vanilla JS</strong> for simplethings. If a specific section of the page (like a complex filter or ashopping cart) needs heavy state management, use a &ldquo;<strong>micro-framework</strong>&rdquo; like<strong>Alpine.js</strong> or Petite-Vue only for that specific area.</li></ol><p>We need to stop treating frameworks as the foundation and start treating them asthe <em>accessory</em>.</p><h2 id="when-frameworks-actually-make-sense">When Frameworks Actually Make Sense</h2><p>Lest I be accused of being a luddite: frameworks <em>do</em> have a place. If you arebuilding <strong>Spotify</strong>, <strong>Figma</strong>, or <strong>Discord</strong>, a framework isn&rsquo;t just helpful— it&rsquo;s essential. These are applications where the state is so complex and theinteractions so dense that managing them with <strong>Vanilla JS</strong> would be anexercise in masochism.</p><p>The problem isn&rsquo;t that frameworks exist; it&rsquo;s that we use them for<strong>everything</strong>. We are using a sledgehammer to hang a picture frame.</p><blockquote><p><strong>Pro Tip: The 80/20 Rule of Tooling</strong> 80% of the web consists ofcontent-heavy sites (blogs, portfolios, documentation, marketing pages). 20%consists of complex &ldquo;App-like&rdquo; experiences. If you are in the 80%, you shouldprioritize <strong>Static Site Generators</strong> (like <strong>Hugo</strong>) and <strong>Vanilla JS</strong>. Savethe heavy frameworks for the remaining 20%.</p></blockquote><h2 id="the-sustainability-argument">The Sustainability Argument</h2><p>There is also a human and environmental cost to framework churn.</p><ul><li><strong>Mental Health:</strong> The pressure to stay &ldquo;current&rdquo; with every framework updatecontributes significantly to developer burnout.</li><li><strong>Environmental Impact:</strong> Shipping megabytes of unnecessary JS across theglobe every second consumes massive amounts of energy. A &ldquo;light&rdquo; web is agreener web.</li><li><strong>Accessibility:</strong> Framework-heavy sites often fail the &ldquo;low-end device&rdquo; test,effectively gatekeeping information from users who can&rsquo;t afford the latestiPhone.</li></ul><h2 id="conclusion">Conclusion</h2><p>The next time you start a project, I challenge you to <strong>not</strong> install aframework. Try to see how far you can get with just HTML, CSS, and a sprinkle of<strong>Vanilla JavaScript</strong>. You&rsquo;ll likely find that not only is it possible, but theresulting site is faster, easier to maintain, and more satisfying to build.</p><p>Learn the platform before you learn the abstraction. The framework you learntoday will be gone in five years, but the <strong>browser APIs</strong> you learn today willserve you for the rest of your career.</p><hr><p><em>As I argued in my comparison of static sites versus WordPress, I&rsquo;ve broken downwhy simple is often better for your next project&rsquo;s architecture.</em></p></content:encoded><dc:creator>Val Paliy</dc:creator></item><item><title>AI for Developers: A Practical Guide to Getting Started</title><link>https://valticus.pro/posts/ai-for-developers-a-practical-guide-to-getting-started/</link><pubDate>Mon, 06 Jul 2026 00:00:00 +0000</pubDate><guid isPermaLink="true">https://valticus.pro/posts/ai-for-developers-a-practical-guide-to-getting-started/</guid><description>A hands-on guide to integrating AI tools and services into your development workflow, from code assistance to automated testing and intelligent debugging.</description><category>Web Development</category><content:encoded><h2 id="ai-has-entered-the-building">AI Has Entered the Building</h2><p>In 2026, the question is no longer &ldquo;Will AI change software development?&rdquo; but&ldquo;How effectively are you using it?&rdquo; AI tools have moved from experimentalnovelties to indispensable force multipliers. However, the sheer volume of tools— <strong>LLMs</strong>, <strong>IDE extensions</strong>, <strong>CLI wrappers</strong>, and <strong>autonomous agents</strong> —has created a paradox of choice.</p><p>This guide isn&rsquo;t about the hype. It’s a pragmatic look at the current AI stackfor developers, how to build a workflow that actually saves time, and where the&ldquo;hidden costs&rdquo; of AI adoption lie.</p><figure><div class="progressive-image"><img class="progressive-image__img"src="https://valticus.pro/images/ai-for-developers-a-practical-guide-to-getting-started_hu_cc39ef3715a93792.webp"alt="AI for Developers: A Practical Guide to Getting Started."width="800"height="436"></div><figcaption><p class="figure__caption">AI for Developers: A Practical Guide to Getting Started.</p></figcaption></figure><h2 id="the-developers-ai-stack">The Developer&rsquo;s AI Stack</h2><p>To get started, you need to understand the three layers of the modern AIdeveloper stack: <strong>Models</strong>, <strong>Interfaces</strong>, and <strong>Context</strong>.</p><h3 id="1-the-models-the-brains">1. The Models (The Brains)</h3><p>Not all LLMs are created equal. Some excel at creative writing, while others arefine-tuned for the rigid syntax of code.</p><table><thead><tr><th>Model</th><th>Strengths</th><th>Best For</th></tr></thead><tbody><tr><td><strong>Claude 3.5 Sonnet</strong></td><td>Exceptional reasoning, follows complex instructions</td><td>Complex refactoring, architectural advice</td></tr><tr><td><strong>GPT-4o</strong></td><td>Fast, great at boilerplate and common patterns</td><td>Day-to-day coding, unit tests</td></tr><tr><td><strong>DeepSeek Coder</strong></td><td>Open-weights, highly specialized for code</td><td>Self-hosting, privacy-conscious tasks</td></tr><tr><td><strong>Llama 3 (70B+)</strong></td><td>Versatile, great general knowledge</td><td>Documentation, explaining concepts</td></tr></tbody></table><h3 id="2-the-interfaces-the-hands">2. The Interfaces (The Hands)</h3><p>How you interact with these models determines your friction level.</p><ul><li><strong>AI-Native Editors (e.g., Cursor)</strong>: These are forks of VS Code that have AIbaked into the core. They can &ldquo;see&rdquo; your entire codebase, not just the fileyou&rsquo;re working on.</li><li><strong>Extensions (e.g., GitHub Copilot, Codeium)</strong>: Plugins for your existingeditor. Great for autocomplete but often lack the deep context of nativeeditors.</li><li><strong>CLI Tools (e.g., Aider, Gemini CLI)</strong>: For those who live in the terminal.These can perform multi-file edits and git commits directly from a prompt.</li></ul><h3 id="3-the-context-the-memory">3. The Context (The Memory)</h3><p>The secret sauce of AI productivity is <strong>RAG (Retrieval-Augmented Generation)</strong>.The more context you provide — your project structure, documentation, and codingstandards — the more accurate the AI becomes.</p><h2 id="prompt-engineering-the-new-syntax">Prompt Engineering: The New Syntax</h2><p>Writing a prompt is like writing a specification. If your spec is vague, theimplementation will be buggy.</p><p><strong>Common Pitfall: The &ldquo;One-Liner&rdquo; Prompt</strong> Don&rsquo;t just ask: <em>&ldquo;Write a React logincomponent.&rdquo;</em> You&rsquo;ll get a generic, inaccessible component that uses librariesyou don&rsquo;t want.</p><p><strong>The &ldquo;Pro&rdquo; Prompt Pattern:</strong> Use the <strong>Role-Context-Task-Constraint</strong>framework:</p><ul><li><strong>Role</strong>: &ldquo;You are a senior React developer specializing in accessibility.&rdquo;</li><li><strong>Context</strong>: &ldquo;We are using <strong>Tailwind CSS</strong> and <strong>React Hook Form</strong>.&rdquo;</li><li><strong>Task</strong>: &ldquo;Create a login form with email and password fields.&rdquo;</li><li><strong>Constraints</strong>: &ldquo;Must be WCAG 2.1 AA compliant, use semantic HTML, andinclude client-side validation.&rdquo;</li></ul><p><strong>Pro Tip: Local LLMs for Privacy</strong> If you&rsquo;re working on sensitive orproprietary code, use <strong>Ollama</strong> or <strong>LM Studio</strong>. You can run models likeDeepSeek Coder or Llama 3 entirely offline on your local machine (assuming youhave a decent GPU or Apple Silicon M-series chip). This ensures your code neverleaves your network.</p><h2 id="ai-native-vs-ai-augmented-workflows">AI-Native vs. AI-Augmented Workflows</h2><h3 id="the-augmented-workflow-reactive">The Augmented Workflow (Reactive)</h3><p>You write code, and the AI suggests the next 10 lines. This is great forboilerplate, but it can lead to &ldquo;autopilot coding&rdquo; where you accept suggestionswithout fully understanding them.</p><h3 id="the-ai-native-workflow-proactive">The AI-Native Workflow (Proactive)</h3><p>You describe the feature or the bug to the AI. The AI scans your files, proposesa multi-file change, and you <strong>review</strong> and <strong>test</strong> the output. This shiftsyour role from &ldquo;Typewriter&rdquo; to &ldquo;Editor.&rdquo;</p><h3 id="example-refactoring-technical-debt">Example: Refactoring Technical Debt</h3><p>AI is surprisingly good at &ldquo;un-spaghettifying&rdquo; code. <em>Prompt:</em> &ldquo;Analyze this500-line function. Identify three ways to break it into smaller, testablemodules following the <strong>Single Responsibility Principle</strong>. Provide therefactored code and unit tests for each new module.&rdquo;</p><h2 id="the-junior-developer-trap">The &ldquo;Junior Developer&rdquo; Trap</h2><p>There is a significant danger for developers starting their careers today:over-reliance. If you use AI to solve every problem before you understand theunderlying concepts, you&rsquo;re building your career on a foundation of sand.</p><p>AI often hallucinates or provides outdated solutions. For instance, in my&ldquo;Accessibility Is Still Broken&rdquo; post, I discuss how automated tools (includingAI) often fail to understand the nuance of focus management and screen readercontext.</p><h2 id="security-privacy-and-intellectual-property">Security, Privacy, and Intellectual Property</h2><p>Before you paste your company&rsquo;s API secrets into a web chat, remember:</p><ul><li><strong>Data Leakage</strong>: Most consumer-grade AI tools use your inputs to train futuremodels unless you opt-out or use Enterprise versions.</li><li><strong>Vulnerabilities</strong>: AI can (and does) suggest code with known security flaws.Always run a <strong>SAST (Static Application Security Testing)</strong> tool like <strong>Snyk</strong>or <strong>SonarQube</strong> on AI-generated code.</li><li><strong>Licensing</strong>: The legal landscape around AI-generated code is still evolving.Ensure your company&rsquo;s policy allows for AI usage and understand that you areultimately responsible for the code you commit.</li></ul><h2 id="realistic-productivity-gains">Realistic Productivity Gains</h2><p>Don&rsquo;t believe the &ldquo;10x developer&rdquo; marketing. Here’s what you can actuallyexpect:</p><ul><li><strong>Boilerplate</strong>: 80% time reduction (<strong>CRUD</strong>, <strong>DTOs</strong>, Unit tests).</li><li><strong>Learning New Tech</strong>: 50% faster (explaining syntax, generating hello-worldexamples).</li><li><strong>Debugging</strong>: 30% faster (summarizing logs, identifying common errors).</li><li><strong>Architecture</strong>: 10% gain (mostly as a sounding board).</li></ul><h2 id="conclusion">Conclusion</h2><p>AI for developers isn&rsquo;t about replacing the act of thinking; it&rsquo;s about removingthe friction of execution. The goal is to spend less time fighting with syntaxand more time solving business problems.</p><p>Start by picking an AI-native editor like <strong>Cursor</strong>, learn the art of themulti-file prompt, and always — <strong>always</strong> — remain the final authority on thecode you ship. The best developers in 2026 aren&rsquo;t the ones who type the fastest;they&rsquo;re the ones who can most effectively orchestrate the AI tools at theirdisposal.</p></content:encoded><dc:creator>Val Paliy</dc:creator></item></channel></rss>If you would like to create a banner that links to this page (i.e. this validation result), do the following:
Download the "valid RSS" banner.
Upload the image to your own server. (This step is important. Please do not link directly to the image on this server.)
Add this HTML to your page (change the image src attribute if necessary):
If you would like to create a text link instead, here is the URL you can use:
http://www.rssboard.org/rss-validator/check.cgi?url=https%3A//valticus.pro/index.xml