<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>Jilles Soeters</title><description>A blog about software development, web technologies, and more.</description><link>https://jilles.me/</link><language>en-us</language><item><title>TanStack Start Server Functions: How They Work and When You Still Need REST</title><link>https://jilles.me/tanstack-start-server-functions-how-they-work/</link><guid isPermaLink="true">https://jilles.me/tanstack-start-server-functions-how-they-work/</guid><description>Looking for API routes in TanStack Start? You probably want server functions. This article explains how server functions work under the hood, the compiler splitting, SSR vs client RPC, and when a real REST endpoint still makes sense.</description><pubDate>Tue, 31 Mar 2026 00:00:00 GMT</pubDate><category>TanStack Start</category><category>React</category><category>Server Functions</category><category>RPC</category></item><item><title>Drizzle Migrations on Cloudflare D1: Generate SQL, Apply with Wrangler</title><link>https://jilles.me/drizzle-migrations-on-cloudflare-d1-generate-sql-apply-with-wrangler/</link><guid isPermaLink="true">https://jilles.me/drizzle-migrations-on-cloudflare-d1-generate-sql-apply-with-wrangler/</guid><description>Use drizzle-kit to generate SQL migrations and wrangler to apply them on Cloudflare D1. No credentials, no adapter. Just SQL files in version control.</description><pubDate>Sun, 29 Mar 2026 00:00:00 GMT</pubDate><category>Cloudflare</category><category>Cloudflare D1</category><category>Drizzle</category><category>Migrations</category><category>Cloudflare Workers</category></item><item><title>Open Graph Images in Astro: Build-Time vs Runtime</title><link>https://jilles.me/og-images-astro-build-vs-runtime/</link><guid isPermaLink="true">https://jilles.me/og-images-astro-build-vs-runtime/</guid><description>A deep dive into generating Open Graph images in Astro. In this article we are comparing build-time generation with runtime image APIs on Cloudflare Workers.</description><pubDate>Thu, 15 Jan 2026 00:00:00 GMT</pubDate><category>Astro</category><category>Cloudflare</category><category>Open Graph</category><category>OG Images</category></item><item><title>I Was Thinking in Databases. I Should Have Been Thinking in Networks: A Mental Model Shift for Cloudflare Storage</title><link>https://jilles.me/thinking-in-networks-cloudflare-storage/</link><guid isPermaLink="true">https://jilles.me/thinking-in-networks-cloudflare-storage/</guid><description>I spent far too long misunderstanding Cloudflare’s storage products. Not because the APIs are complex, but because I was thinking about them as traditional databases. In this article, I explain how KV, D1, Hyperdrive, Durable Objects, and R2 actually work when you view them as network-level primitives, not just storage layers.</description><pubDate>Fri, 09 Jan 2026 00:00:00 GMT</pubDate><category>Cloudflare</category><category>D1</category><category>KV</category><category>R2</category><category>Durable Objects</category><category>Hyperdrive</category></item><item><title>Cloudflare Workers &amp; SvelteKit: BetterAuth, Custom Domain, Google OAuth, OTP &amp; Email - Securing Your Application.</title><link>https://jilles.me/cloudflare-workers-sveltekit-betterauth-custom-domain-google-oauth-otp-email-securing-your-application/</link><guid isPermaLink="true">https://jilles.me/cloudflare-workers-sveltekit-betterauth-custom-domain-google-oauth-otp-email-securing-your-application/</guid><description>Make your SvelteKit edge application truly production-ready! Learn step-by-step how to configure custom domains, integrate secure authentication via BetterAuth (Google OAuth &amp; OTP), send emails reliably with Mailgun, and deploy Cloudflare Turnstile for enhanced security.</description><pubDate>Wed, 16 Apr 2025 13:56:37 GMT</pubDate><category>Cloudflare Workers</category><category>BetterAuth</category></item><item><title>Cloudflare Workers, SvelteKit, Drizzle, and D1: Up and Running.</title><link>https://jilles.me/cloudflare-workers-sveltekit-drizzle-and-d1-up-and-running/</link><guid isPermaLink="true">https://jilles.me/cloudflare-workers-sveltekit-drizzle-and-d1-up-and-running/</guid><description>Build blazing-fast, globally distributed SvelteKit applications for free! Learn step-by-step how to deploy SvelteKit on Cloudflare Workers, connect to a Cloudflare D1 database using Drizzle ORM, and leverage the power of serverless edge computing.</description><pubDate>Mon, 07 Apr 2025 14:57:29 GMT</pubDate><category>Svelte</category><category>SvelteKit</category><category>Cloudflare Workers</category><category>Cloudflare D1</category><category>Drizzle</category></item><item><title>Setting Up Django for Success</title><link>https://jilles.me/setting-up-django-for-success/</link><guid isPermaLink="true">https://jilles.me/setting-up-django-for-success/</guid><description>In this article, we are setting up a Django project from scratch. This will be a different approach than blindly using any &quot;starter template&quot; or even the famous</description><pubDate>Wed, 22 Jan 2025 04:42:44 GMT</pubDate></item><item><title>How to set up Tailwind 3 in Django with Vite and django-vite</title><link>https://jilles.me/how-to-set-up-tailwind-in-django-with-vite-and-django-vite/</link><guid isPermaLink="true">https://jilles.me/how-to-set-up-tailwind-in-django-with-vite-and-django-vite/</guid><description>In this article we are going to set up Vite for a Django application and use it to install and use Tailwind. You will be able to use this for any other npm pack</description><pubDate>Wed, 15 Jan 2025 23:02:36 GMT</pubDate></item><item><title>Expanding Your Knowledge With a &quot;Stuff I Didn&apos;t Know I Don&apos;t Know&quot; List</title><link>https://jilles.me/expanding-your-knowledge-with-a-stuff-i-didnt-know-i-dont-know-list/</link><guid isPermaLink="true">https://jilles.me/expanding-your-knowledge-with-a-stuff-i-didnt-know-i-dont-know-list/</guid><description>Recently I saw a reddit post of a software engineer &quot;feeling dumb&quot; because of all the things he saw that he did not know.

On this post I replied with a suggest</description><pubDate>Wed, 23 Oct 2024 03:33:49 GMT</pubDate></item><item><title>Setting up Spring JDBC and SQLite with Write-Ahead-Logging mode</title><link>https://jilles.me/setting-up-spring-jdbc-and-sqlite-with-write-ahead-logging-mode/</link><guid isPermaLink="true">https://jilles.me/setting-up-spring-jdbc-and-sqlite-with-write-ahead-logging-mode/</guid><description>When you create a new project using Spring Initializr, there is no straightforward way to set it up with SQLite. This is a shame as SQLite is a really good opti</description><pubDate>Mon, 14 Oct 2024 15:50:55 GMT</pubDate></item><item><title>Database Versioning and Migrations for Everyone using Flyway</title><link>https://jilles.me/database-versioning-and-migrations-for-everyone-using-flyway/</link><guid isPermaLink="true">https://jilles.me/database-versioning-and-migrations-for-everyone-using-flyway/</guid><description>The web world has seen an incredible evolution of technologies over the last decade. From pages rendered on the server, to dynamically on the client, to back on</description><pubDate>Fri, 27 Sep 2024 15:03:16 GMT</pubDate></item><item><title>Setting up Django 5.1 using Python 3.12 with pyenv and Poetry</title><link>https://jilles.me/setting-up-django-5-1-using-python-3-12-with-pyenv-and-poetry/</link><guid isPermaLink="true">https://jilles.me/setting-up-django-5-1-using-python-3-12-with-pyenv-and-poetry/</guid><description>Python dependency management has historically been fairly complex. There are various package managers like pip, pip3, pip-tools, conda and more. You will also n</description><pubDate>Tue, 13 Aug 2024 15:18:08 GMT</pubDate><category>Django</category><category>Getting Started</category></item><item><title>Is Productivity Hacking the Ultimate Procrastination Tool?</title><link>https://jilles.me/is-productivity-hacking-the-ultimate-procrastination-tool/</link><guid isPermaLink="true">https://jilles.me/is-productivity-hacking-the-ultimate-procrastination-tool/</guid><description>Exploring the paradox of productivity hacks: Are they boosting efficiency or just procrastination in disguise? This post covers how the constant search for new tools can distract from actual work.</description><pubDate>Wed, 24 Jan 2024 05:23:25 GMT</pubDate><category>Productivity</category></item><item><title>Understanding Binary Heaps (MinHeap and MaxHeap) in JavaScript</title><link>https://jilles.me/data-structures-binary-heaps-in-javascript-minheap-maxheap/</link><guid isPermaLink="true">https://jilles.me/data-structures-binary-heaps-in-javascript-minheap-maxheap/</guid><description>In this series we’re going to explore some must-know data structures as visually and engaging as possible. This post will hopefully help you to understand binary heaps - more specifically, MinHeap and MaxHeap.</description><pubDate>Mon, 23 Nov 2020 13:18:05 GMT</pubDate><category>JavaScript</category><category>Data Structures</category><category>Heap</category><category>MinHeap</category><category>MaxHeap</category></item><item><title>Exploring ForeignKey&apos;s on_delete Handlers in Django</title><link>https://jilles.me/django-foreignkeys-on_delete-handlers/</link><guid isPermaLink="true">https://jilles.me/django-foreignkeys-on_delete-handlers/</guid><description>Django models’ foreign keys require you to set an on_delete function. This is true for ForeignKey, OneToOne, and OneToMany fields. In this blog post, I will go into detail on what each method does and illustrate when to apply each one.</description><pubDate>Tue, 05 May 2020 01:01:42 GMT</pubDate><category>Django</category></item><item><title>Innovative Picture-in-Picture Techniques for the Modern Web</title><link>https://jilles.me/picture-in-picture/</link><guid isPermaLink="true">https://jilles.me/picture-in-picture/</guid><description>We live in a time where we all try and be as productive as possible. We watch videos at twice the speed, we have several (too many?) tabs open and always try an</description><pubDate>Fri, 14 Feb 2020 16:43:00 GMT</pubDate><category>Chrome</category><category>Modern Web</category><category>JavaScript</category></item><item><title>Creating Dynamic Facebook Comment Previews with Django</title><link>https://jilles.me/facebook-comment-craze-with-django/</link><guid isPermaLink="true">https://jilles.me/facebook-comment-craze-with-django/</guid><description>In my spare time I tend to check Facebook every now and then. With my family and most of my friends living in a different country than me it is a great way to s</description><pubDate>Thu, 09 Jan 2020 23:43:00 GMT</pubDate><category>Web Development</category><category>Python</category><category>Django</category></item><item><title>Underutilized Chrome Console APIs: A Guide for Developers</title><link>https://jilles.me/chrome-console-apis-youre-probably-not-using-yet/</link><guid isPermaLink="true">https://jilles.me/chrome-console-apis-youre-probably-not-using-yet/</guid><description>As a JavaScript developer I use the dev console a lot. Whenever I want to know the value of a variable or the return value of a function I use the famous consol</description><pubDate>Sun, 24 Nov 2019 10:11:00 GMT</pubDate><category>Chrome</category></item><item><title>Mastering React, Redux, and React-Redux for Frontend Development</title><link>https://jilles.me/react-redux-and-react-redux/</link><guid isPermaLink="true">https://jilles.me/react-redux-and-react-redux/</guid><description>React and Redux are great. Once you get the basics it&apos;s really easy to create very cool web apps. This is what I liked about Angular 1.x, you would read a small</description><pubDate>Sun, 06 Nov 2016 17:48:27 GMT</pubDate><category>React</category><category>Redux</category></item><item><title>Beginner&apos;s Guide to Web Development: Key Steps and Best Practices</title><link>https://jilles.me/how-to-get-started-with-web-development/</link><guid isPermaLink="true">https://jilles.me/how-to-get-started-with-web-development/</guid><description>Websites are awesome. You&apos;re probably using them all the time. As a matter of fact, you are using one right now! How cool would it be if you could create your o</description><pubDate>Fri, 12 Aug 2016 11:19:00 GMT</pubDate><category>Web Development</category><category>Beginner</category></item><item><title>Maximizing Efficiency with Webpack: Asynchronous Bundle Loading Techniques</title><link>https://jilles.me/webpack-async-bundle-loading/</link><guid isPermaLink="true">https://jilles.me/webpack-async-bundle-loading/</guid><description>Webpack is great. If bundle splitting and feature flags didn&apos;t convince you yet, then hopefully async bundle loading will!



What is async bundle loading?


As</description><pubDate>Tue, 14 Jun 2016 18:43:47 GMT</pubDate><category>JavaScript</category><category>Webpack</category></item><item><title>Enhancing Webpack: Strategies for Bundle Splitting and Implementing Feature Flags</title><link>https://jilles.me/webpack-bundle-splitting-and-feature-flags/</link><guid isPermaLink="true">https://jilles.me/webpack-bundle-splitting-and-feature-flags/</guid><description>One of the things that makes webpack so great is its built-in plugins and features. Today we will discuss using webpack-dev-server, splitting our bundles and en</description><pubDate>Sun, 24 Apr 2016 12:27:22 GMT</pubDate><category>Webpack</category><category>JavaScript</category></item><item><title>Simplifying Webpack: A User-Friendly Guide to Webpack Complexity</title><link>https://jilles.me/webpack-is-not-as-complicated-as-you-think/</link><guid isPermaLink="true">https://jilles.me/webpack-is-not-as-complicated-as-you-think/</guid><description>Everyone is using webpack today, and rightfully so. It is an amazing module bundler with many plugins that make it really powerful to use for production apps.

</description><pubDate>Mon, 18 Apr 2016 19:41:12 GMT</pubDate><category>JavaScript</category><category>Webpack</category></item><item><title>Angular 2 Series: Unlocking the Power of Pipes with ng-filter</title><link>https://jilles.me/ng-filter-in-angular2-pipes/</link><guid isPermaLink="true">https://jilles.me/ng-filter-in-angular2-pipes/</guid><description>Filters are a great way to manipulate and filter data in AngularJS, in Angular they got a new name: Pipes. Worry not! They&apos;re just as easy to implement and a to</description><pubDate>Tue, 19 Jan 2016 17:42:53 GMT</pubDate><category>JavaScript</category><category>Angular2</category></item><item><title>Angular 2 Series: Mastering Two-Way Data Binding with ng-model</title><link>https://jilles.me/ng-model-in-angular2-two-way-data-binding/</link><guid isPermaLink="true">https://jilles.me/ng-model-in-angular2-two-way-data-binding/</guid><description>One of the things that made me love Angular 1.x was how easy it is to use two-way data binding. Luckily it&apos;s also a breeze to use in Angular2!



What is two-wa</description><pubDate>Fri, 15 Jan 2016 07:53:41 GMT</pubDate><category>JavaScript</category><category>Angular2</category></item><item><title>Angular 2 Series: Interactive Web Pages with ng-click and ng-if</title><link>https://jilles.me/ng-click-and-ng-if-in-angular2/</link><guid isPermaLink="true">https://jilles.me/ng-click-and-ng-if-in-angular2/</guid><description>Following up on our series, we&apos;re going to dive into ng-click and ng-if next.



Creating the project


We&apos;re going to continue with the project from my previou</description><pubDate>Sun, 29 Nov 2015 16:07:36 GMT</pubDate><category>JavaScript</category><category>Angular2</category></item><item><title>Angular 2 Series: Dynamic Lists and Repetition with ng-repeat</title><link>https://jilles.me/ng-repeat-in-angular2-ng-for/</link><guid isPermaLink="true">https://jilles.me/ng-repeat-in-angular2-ng-for/</guid><description>After playing around with Angular2, I learned a lot of new cool stuff about the framework. In this series of posts I am going to show you how to do &quot;Angular 1.x</description><pubDate>Mon, 23 Nov 2015 06:22:22 GMT</pubDate><category>JavaScript</category><category>Angular2</category></item><item><title>Node.js Version Control: Streamlining with nvm</title><link>https://jilles.me/managing-node-versions-with-nvm/</link><guid isPermaLink="true">https://jilles.me/managing-node-versions-with-nvm/</guid><description>Working with NodeJS is a lot of fun, managing versions not so much. If you have ever done any serious Node development you have probably ran into some version p</description><pubDate>Sat, 14 Nov 2015 08:27:43 GMT</pubDate><category>JavaScript</category><category>Node</category></item><item><title>tmux Mastery: Enhancing Developer Productivity</title><link>https://jilles.me/tmux-for-developers/</link><guid isPermaLink="true">https://jilles.me/tmux-for-developers/</guid><description>tmux is great, as a web developer I use it all the time. At first I thought &quot;who needs a terminal multiplexer&quot; but after having used tmux for a while now, I can</description><pubDate>Fri, 16 Oct 2015 10:01:08 GMT</pubDate><category>Workflow</category></item><item><title>JavaScript Arrays: Advanced Methods for Modern Developers</title><link>https://jilles.me/awesome-javascript-array-methods/</link><guid isPermaLink="true">https://jilles.me/awesome-javascript-array-methods/</guid><description>If you work with JavaScript, you probably use arrays a lot. In this post I would like to introduce you to a few of my favourite array methods. For all the examp</description><pubDate>Mon, 28 Sep 2015 19:47:04 GMT</pubDate><category>JavaScript</category></item><item><title>Top 10 Mac Apps: Must-Haves for Developers</title><link>https://jilles.me/10-essential-mac-apps-for-developers/</link><guid isPermaLink="true">https://jilles.me/10-essential-mac-apps-for-developers/</guid><description>I work in an office as a JavaScript developer and am generally the go-to guy for any Mac / OSX problems people have. Whenever I do some pair programming I hear </description><pubDate>Tue, 25 Aug 2015 17:00:01 GMT</pubDate><category>Workflow</category></item><item><title>Exploring the Speech APIs in Chrome: A Developer&apos;s Overview</title><link>https://jilles.me/the-speech-apis/</link><guid isPermaLink="true">https://jilles.me/the-speech-apis/</guid><description>We live in an exciting time where we can speak to computers and they can speak back to us. This is not just limited to your iPhone or Android, these days it&apos;s a</description><pubDate>Mon, 17 Aug 2015 15:51:18 GMT</pubDate><category>Chrome</category><category>JavaScript</category><category>API</category></item><item><title>Badassify Your Terminal and Shell: Tips to Enhance Your Command Line Experience with oh-my-zsh</title><link>https://jilles.me/badassify-your-terminal-and-shell/</link><guid isPermaLink="true">https://jilles.me/badassify-your-terminal-and-shell/</guid><description>As a developer you probably spend a lot of time using the terminal. Whether you only use it a couple of times a day or day in day out, your terminal should feel</description><pubDate>Wed, 05 Nov 2014 20:52:14 GMT</pubDate><category>Terminal</category><category>Workflow</category></item><item><title>Getting Started with Gulp: A Beginner&apos;s Tutorial to Streamlined Development</title><link>https://jilles.me/introduction-to-gulp/</link><guid isPermaLink="true">https://jilles.me/introduction-to-gulp/</guid><description>Being productive is something that us developers value a lot. We try to automate everything so there&apos;s little repetitive work left to do. Unfortunately there ar</description><pubDate>Thu, 30 Oct 2014 13:34:40 GMT</pubDate><category>Gulp</category><category>JavaScript</category><category>Workflow</category></item><item><title>Express.js Series: Advanced Routing Techniques for Developers</title><link>https://jilles.me/express-routing-advanced-techniques/</link><guid isPermaLink="true">https://jilles.me/express-routing-advanced-techniques/</guid><description>There&apos;s a little more to Express routing than simple GET and POST handling. If you&apos;ve read my Express Routing - The Beginners Guide you&apos;ll know about the basic </description><pubDate>Tue, 28 Oct 2014 21:23:04 GMT</pubDate><category>Express.js</category><category>Node</category><category>JavaScript</category><category>Routing</category></item><item><title>Express.js Series: A Beginner&apos;s Guide to Routing Fundamentals</title><link>https://jilles.me/express-routing-the-beginners-guide/</link><guid isPermaLink="true">https://jilles.me/express-routing-the-beginners-guide/</guid><description>Getting started with Express is not the easiest thing to do, if you have read my previous post on Express&apos; app.js you will have a basic understanding of a defau</description><pubDate>Thu, 16 Oct 2014 22:49:16 GMT</pubDate><category>Express.js</category><category>Node</category><category>JavaScript</category><category>Routing</category></item><item><title>Express.js Series: Deep Dive into the app.js Configuration</title><link>https://jilles.me/getting-the-express-app-js/</link><guid isPermaLink="true">https://jilles.me/getting-the-express-app-js/</guid><description>If you&apos;re like me and you start with something new, you want to know what every little piece does and means. This was the first problem I had with Express comin</description><pubDate>Sun, 12 Oct 2014 16:53:46 GMT</pubDate><category>Express.js</category><category>Node</category><category>JavaScript</category></item></channel></rss>