<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Web Dev on Pauls Blog</title><link>https://prule.github.io/pauls-blog/tags/web-dev/</link><description>Recent content in Web Dev on Pauls Blog</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Thu, 30 Apr 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://prule.github.io/pauls-blog/tags/web-dev/index.xml" rel="self" type="application/rss+xml"/><item><title>Stop Serving PNG: Switch to WebP</title><link>https://prule.github.io/pauls-blog/post/coding/2026/webp/</link><pubDate>Thu, 30 Apr 2026 00:00:00 +0000</pubDate><guid>https://prule.github.io/pauls-blog/post/coding/2026/webp/</guid><description>&lt;h1 id="stop-serving-png-switch-to-webp-and-cut-your-image-sizes-by-80"&gt;Stop Serving PNG: Switch to WebP and Cut Your Image Sizes by 80%&lt;/h1&gt;
&lt;p&gt;WebP is the modern image format your website should already be using. Google&amp;rsquo;s &lt;code&gt;cwebp&lt;/code&gt; tool converts your existing PNG and JPEG files to WebP in seconds — and the results speak for themselves: a 1,434 × 1,522 PNG at 371 KB becomes a 74 KB WebP file. That&amp;rsquo;s an &lt;strong&gt;80% reduction&lt;/strong&gt; with no visible quality loss.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="the-bottom-line"&gt;The Bottom Line&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Use WebP for all web images.&lt;/strong&gt; Install &lt;code&gt;cwebp&lt;/code&gt;, run one command per image, and dramatically reduce page load times without sacrificing quality.&lt;/p&gt;</description></item><item><title>Leave planner 1.1.0</title><link>https://prule.github.io/pauls-blog/post/coding/2026/leave-planner-1_1_0/</link><pubDate>Mon, 02 Mar 2026 00:00:00 +0000</pubDate><guid>https://prule.github.io/pauls-blog/post/coding/2026/leave-planner-1_1_0/</guid><description>&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://prule.github.io/leave-planner/" target="_blank" rel="noopener"&gt;Leave Planner&lt;/a&gt;
 helps you track your leave balance and plan future holidays with ease.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1 id="announcing-leave-planner-v110-work-from-home-tracking--more"&gt;Announcing Leave Planner v1.1.0: Work From Home Tracking &amp;amp; More!&lt;/h1&gt;
&lt;p&gt;This update brings a feature to help you manage your work life better, along with some under-the-hood improvements.&lt;/p&gt;
&lt;h2 id="-work-from-home-wfh-tracking"&gt;🏠 Work From Home (WFH) Tracking&lt;/h2&gt;
&lt;p&gt;With the rise of hybrid work, keeping track of the days you work from home is more important than ever, especially for tax purposes. Leave Planner now allows you to easily log your WFH days.&lt;/p&gt;</description></item><item><title>Leave planner application</title><link>https://prule.github.io/pauls-blog/post/coding/2026/leave-planner/</link><pubDate>Wed, 07 Jan 2026 00:00:00 +0000</pubDate><guid>https://prule.github.io/pauls-blog/post/coding/2026/leave-planner/</guid><description>&lt;blockquote&gt;
&lt;p&gt;Ever wanted to know how much leave you&amp;rsquo;ll have in the future and easily visualise your balance over time? Sure, some leave systems have some kind of future leave calculator, but none that I&amp;rsquo;ve seen make it easy or intuitive.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Application available here, on github pages: &lt;a href="https://prule.github.io/leave-planner/" target="_blank" rel="noopener"&gt;https://prule.github.io/leave-planner/&lt;/a&gt;
&lt;/p&gt;
&lt;h2 id="the-spreadsheet-prototype"&gt;The spreadsheet prototype&lt;/h2&gt;
&lt;p&gt;To scratch my own itch, I started with a google sheet. The principle is simple: Enter your starting balance, and for each month fill in the estimated hours leave accrued. Add in your hours leave taken for the month&amp;hellip; and graph the total leave remaining.&lt;/p&gt;</description></item><item><title>YouTube channel aggregator experiment</title><link>https://prule.github.io/pauls-blog/post/coding/2026/youtube-channel-aggregator/</link><pubDate>Thu, 01 Jan 2026 00:00:00 +0000</pubDate><guid>https://prule.github.io/pauls-blog/post/coding/2026/youtube-channel-aggregator/</guid><description>&lt;p&gt;While trying to keep up with what&amp;rsquo;s happening in tennis and motorsport, I found myself wondering if the experience could be better. What if I could configure a list of channels, aggregate the videos, tag those videos by looking for keywords in their titles, and then have a convenient way to filter and navigate those.&lt;/p&gt;
&lt;p&gt;This provides me with a feed of relevant content which I can view oldest to newest. Watched videos are marked so they disappear from the feed, allowing me to pick up where I left off.&lt;/p&gt;</description></item><item><title>Introduction to JSON5</title><link>https://prule.github.io/pauls-blog/post/coding/2025/json5/</link><pubDate>Thu, 06 Mar 2025 00:00:00 +0000</pubDate><guid>https://prule.github.io/pauls-blog/post/coding/2025/json5/</guid><description>&lt;div class="paragraph"&gt;
&lt;p&gt;Json5 is a superset of JSON that allows for comments and trailing commas. It’s a popular choice for configuration files due to its readability and flexibility.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="paragraph"&gt;
&lt;p&gt;From the website:&lt;/p&gt;
&lt;/div&gt;
&lt;div class="quoteblock"&gt;
&lt;blockquote&gt;
&lt;div class="paragraph"&gt;
&lt;p&gt;Formally, the JSON5 Data Interchange Format is a superset of JSON (so valid JSON files will always be valid JSON5 files) that expands its syntax to include some productions from ECMAScript 5.1 (ES5). It’s also a subset of ES5, so valid JSON5 files will always be valid ES5.*&lt;/p&gt;
&lt;/div&gt;</description></item><item><title>Dependency upgrades with Renovate</title><link>https://prule.github.io/pauls-blog/post/coding/2025/renovate/</link><pubDate>Sun, 02 Feb 2025 00:00:00 +0000</pubDate><guid>https://prule.github.io/pauls-blog/post/coding/2025/renovate/</guid><description>&lt;div class="paragraph"&gt;
&lt;p&gt;In modern software development, managing dependencies is a critical yet often overlooked aspect of maintaining healthy codebases. Enter Renovate: an open-source tool that automates dependency updates, making your project maintenance both easier and more secure.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="sect1"&gt;
&lt;h2 id="_what_is_renovate"&gt;What is Renovate?&lt;/h2&gt;
&lt;div class="sectionbody"&gt;
&lt;div class="paragraph"&gt;
&lt;p&gt;Renovate is an automated dependency management tool that monitors your repository’s dependencies and automatically creates pull requests when updates become available. Think of it as your personal assistant that constantly checks for new versions of the libraries and packages your project uses.&lt;/p&gt;
&lt;/div&gt;</description></item><item><title>A Brief Introduction to AsciiDoc</title><link>https://prule.github.io/pauls-blog/post/coding/2024/asciidoc-example/</link><pubDate>Sun, 25 Aug 2024 00:00:00 +0000</pubDate><guid>https://prule.github.io/pauls-blog/post/coding/2024/asciidoc-example/</guid><description>&lt;div class="paragraph"&gt;
&lt;div class="notice info"&gt;
 &lt;div class="notice-title"&gt;Note&lt;/div&gt;
 &lt;div class="notice-content"&gt;
 The source code for this document is available at &lt;a href="https://github.com/prule/asciidoc-example" target="_blank" rel="noopener"&gt;github&lt;/a&gt;
.
Unfortunately though, GitHub does NOT support includes so you won&amp;rsquo;t see this document rendered properly. Instead, I&amp;rsquo;ve used the Intellij plugin to generate a PDF document which you can see here: &lt;a href="ReadMe.pdf"&gt;ReadMe.pdf&lt;/a&gt;
.
 &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;div class="paragraph"&gt;
&lt;p&gt;The source code for this document is available at &lt;a href="https://github.com/prule/asciidoc-example"&gt;github&lt;/a&gt;.
Unfortunately though, GitHub does NOT support includes so you won’t see this document rendered properly. Instead, I’ve used the Intellij plugin to generate a PDF document which you can see here: &lt;a href="ReadMe.pdf"&gt;ReadMe.pdf&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;</description></item></channel></rss>