<?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/">
  <channel>
    <title>Posts on Gaëtan Grond</title>
    <link>https://gaetangrond.me/en/posts/</link>
    <description>Recent content in Posts on Gaëtan Grond</description>
    <image>
      <title>Gaëtan Grond</title>
      <url>https://gaetangrond.me/logo-2.png</url>
      <link>https://gaetangrond.me/logo-2.png</link>
    </image>
    <generator>Hugo -- 0.165.0</generator>
    <language>en-GB</language>
    <lastBuildDate>Tue, 08 Sep 2026 22:41:09 +0200</lastBuildDate>
    <atom:link href="https://gaetangrond.me/en/posts/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Django Best Practices: Lessons from 6 Years Building a Large-Scale SaaS</title>
      <link>https://gaetangrond.me/posts/django/16-tips-django/</link>
      <pubDate>Mon, 23 Feb 2026 00:00:00 +0000</pubDate>
      <guid>https://gaetangrond.me/posts/django/16-tips-django/</guid>
      <description>A pragmatic guide to Django architecture patterns, based on real-world experience building and scaling a large SaaS application over 6 years.</description>
    </item>
    <item>
      <title>My Self Hosting Journey</title>
      <link>https://gaetangrond.me/posts/dev/my-self-hosting-journey/</link>
      <pubDate>Thu, 03 Apr 2025 15:42:39 +0200</pubDate>
      <guid>https://gaetangrond.me/posts/dev/my-self-hosting-journey/</guid>
      <description>&lt;p&gt;For the past two years, I have been self-hosting most of my personal projects and daily tools on a small but powerful ThinkCentre M710 Tiny. Here’s my two-year feedback.&lt;/p&gt;
&lt;h2 id=&#34;why-did-i-start-self-hosting&#34;&gt;Why Did I Start Self-Hosting?&lt;/h2&gt;
&lt;p&gt;I could spend hours justifying my decision by arguing that we rely too much on big corporations that take our data for free. But, simply put, I wanted more control over my digital life, the ability to run only the services I truly need, and to avoid spending my entire budget on server costs.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Flutter the Dying Package Ecosystem</title>
      <link>https://gaetangrond.me/posts/flutter/flutter-the-dying-package-ecosystem/</link>
      <pubDate>Thu, 03 Apr 2025 15:41:13 +0200</pubDate>
      <guid>https://gaetangrond.me/posts/flutter/flutter-the-dying-package-ecosystem/</guid>
      <description>&lt;h2 id=&#34;flutter-has-a-package-problem&#34;&gt;Flutter Has a Package Problem&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/flutter/flutter/issues/162960?ref=blog.gaetangrond.me&#34;&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://blog.gaetangrond.me/content/images/2025/02/image-3.png&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s true that abandoned projects in open source software (OSS) are common. NPM is infamous for the number of abandoned packages, which is mainly due to the lack of internal utility libraries, where for instance Python internal libraries shine. However, maintaining a Flutter package is more challenging since you need to account for at least two platforms for mobile (iOS/Android), and increasingly, web and desktop applications if you are brave enough.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Django Packages I Have Used and Loved in 2024</title>
      <link>https://gaetangrond.me/posts/django/django-packages-i-have-used-and-loved-in-2024/</link>
      <pubDate>Fri, 03 Jan 2025 15:37:34 +0200</pubDate>
      <guid>https://gaetangrond.me/posts/django/django-packages-i-have-used-and-loved-in-2024/</guid>
      <description>&lt;p&gt;It has been almost 4 years since I launched my SaaS business in Django, while fancier Python frameworks have been released since then, Django still remains king of the Python web framework. Thanks to an ever-growing ecosystem of packages and their outstanding stability.&lt;/p&gt;
&lt;p&gt;Only the most useful and stable packages have made the cut, links to the official package source are included in the title itself.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Three Years of AI Assisted Programming : The Good, The Bad, and What&#39;s Next</title>
      <link>https://gaetangrond.me/posts/dev/three-years-of-ai-assisted-programming-the-good-the-bad-and-whats-next/</link>
      <pubDate>Fri, 22 Nov 2024 14:34:45 +0100</pubDate>
      <guid>https://gaetangrond.me/posts/dev/three-years-of-ai-assisted-programming-the-good-the-bad-and-whats-next/</guid>
      <description>&lt;p&gt;In 2021, I was one of the many beta testers of GitHub Copilot. Back then, AI programming tools weren’t widely used, Stack Overflow was still a go-to resource, and solving coding challenges relied mostly on pure brainpower. Fast forward to 2024, and programming has evolved into something entirely different. Let’s talk about it.&lt;/p&gt;</description>
    </item>
    <item>
      <title>8 Django Tips and Tricks Learned Over the Years</title>
      <link>https://gaetangrond.me/posts/django/8-django-tips-and-tricks-learned-over-the-years/</link>
      <pubDate>Tue, 12 Nov 2024 00:00:00 +0000</pubDate>
      <guid>https://gaetangrond.me/posts/django/8-django-tips-and-tricks-learned-over-the-years/</guid>
      <description>&lt;p&gt;After working with Django for more than 4 years both professionally and personally, I have learned a lot of tips and tricks that I wish I knew when I started. In this article I will share some of the most important ones that I have learned over the years.&lt;/p&gt;
&lt;p&gt;Since Django documentation is very good, I will not share many code snippets, but rather explain the concepts and provide links to the official documentation.
All of these tips and tricks came from my own experience, the Django documentation, and Two Scoops of Django book.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Why Session Hijacking Remains a Persistent Web Threat</title>
      <link>https://gaetangrond.me/posts/security/why-session-hijacking-remains-a-persistent-web-threat/</link>
      <pubDate>Mon, 14 Oct 2024 00:00:00 +0000</pubDate>
      <guid>https://gaetangrond.me/posts/security/why-session-hijacking-remains-a-persistent-web-threat/</guid>
      <description>&lt;p&gt;Web Security is a significant concern for me. Over the past few years, I’ve been learning about ethical hacking and the broader field of web and server security and one topic that has always intrigued me is session hijacking.&lt;/p&gt;
&lt;p&gt;While many security threats, such as weak passwords, SQL injections, and cross-site scripting (XSS), have been mitigated and are relatively easy to fix, session hijacking remains a persistent threat. Its ease of exploitation and potential damage make it a serious risk to web applications.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Protecting Data in Django Admin: Preventing Accidental Deletions</title>
      <link>https://gaetangrond.me/posts/django/protecting-data-in-django-admin-preventing-accidental-deletions/</link>
      <pubDate>Mon, 23 Sep 2024 10:20:23 +0200</pubDate>
      <guid>https://gaetangrond.me/posts/django/protecting-data-in-django-admin-preventing-accidental-deletions/</guid>
      <description>&lt;p&gt;The Django admin interface is one of the standout features that make Django such a powerful framework. It allows you to manage your data, customers, and models with ease. However, as with any tool that provides significant control over your application’s data, there’s a need to ensure that sensitive actions like deletions are handled carefully.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Storing List in Models with Django</title>
      <link>https://gaetangrond.me/posts/django/storing-list-in-models-with-django/</link>
      <pubDate>Wed, 04 Sep 2024 08:53:57 +0000</pubDate>
      <guid>https://gaetangrond.me/posts/django/storing-list-in-models-with-django/</guid>
      <description>Three ways to store a list in a Django model — ArrayField, JSONField and a related model — and how to pick the right one.</description>
    </item>
    <item>
      <title>Fluent Python - My Private Notes</title>
      <link>https://gaetangrond.me/posts/dev/fluent-python-private-notes/</link>
      <pubDate>Sun, 25 Aug 2024 14:15:49 +0200</pubDate>
      <guid>https://gaetangrond.me/posts/dev/fluent-python-private-notes/</guid>
      <description>&lt;p&gt;These are my personal notes from reading Fluent Python. They’re a bit scattered, but I’ve found them useful for understanding some of Python’s more advanced features, like decorators, generators, and defensive programming.&lt;/p&gt;
&lt;p&gt;I’m sharing them here in case they’re helpful to others working through similar topics or if you’re considering reading the book.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Why I Chose HTMX Over React and VueJS - A 6 Month Review</title>
      <link>https://gaetangrond.me/posts/dev/why-i-chose-htmx-over-react-and-vuejs/</link>
      <pubDate>Mon, 29 Jul 2024 06:45:06 +0200</pubDate>
      <guid>https://gaetangrond.me/posts/dev/why-i-chose-htmx-over-react-and-vuejs/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Mise à jour — juillet 2026.&lt;/strong&gt; Cet article date de 2024 et reflète ce que je pensais après six mois de HTMX. Deux ans plus tard, j&amp;rsquo;ai changé d&amp;rsquo;avis et je suis revenu en arrière. J&amp;rsquo;ai raconté pourquoi, en détail, dans &lt;a href=&#34;https://gaetangrond.me/posts/dev/htmx-et-django-l-erreur-de-parcours/&#34;&gt;HTMX et Django, l&amp;rsquo;erreur de parcours&lt;/a&gt;. Je laisse ce texte en ligne tel quel : le raisonnement de l&amp;rsquo;époque reste valable dans son contexte, c&amp;rsquo;est la conclusion qui a bougé.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Django Security Essentials a Comprehensive Overview</title>
      <link>https://gaetangrond.me/posts/django/django-security-essentials-a-comprehensive-overview/</link>
      <pubDate>Thu, 04 Apr 2024 17:46:42 +0100</pubDate>
      <guid>https://gaetangrond.me/posts/django/django-security-essentials-a-comprehensive-overview/</guid>
      <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;
&lt;p&gt;In this article, I will provide a comprehensive overview of the essential security practices and configurations that you should consider when developing a Django application.&lt;/p&gt;
&lt;p&gt;A good starting point to ensure that your application is secure and follows the latest security best practices and guidelines is to use the well-known &lt;a href=&#34;https://cookiecutter-django.readthedocs.io/en/latest/index.html&#34;&gt;cookiecutter-django&lt;/a&gt; template. This template provides a solid foundation for building secure Django applications by incorporating various security features and configurations out of the box.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to Add MFA to Django Allauth in Under 5mn</title>
      <link>https://gaetangrond.me/posts/django/how-to-add-mfa-to-django-allauth-in-under-5mn/</link>
      <pubDate>Wed, 13 Mar 2024 01:25:57 +0100</pubDate>
      <guid>https://gaetangrond.me/posts/django/how-to-add-mfa-to-django-allauth-in-under-5mn/</guid>
      <description>Add TOTP multi-factor authentication to a Django project with django-allauth, from installation to custom templates, in about five minutes.</description>
    </item>
    <item>
      <title>Reflections on the First Two Years as a Tech Founder</title>
      <link>https://gaetangrond.me/posts/dev/reflections-first-two-years-tech-founder/</link>
      <pubDate>Tue, 16 Jan 2024 14:00:38 +0100</pubDate>
      <guid>https://gaetangrond.me/posts/dev/reflections-first-two-years-tech-founder/</guid>
      <description>&lt;p&gt;Two years ago, on the 15th of January 2022, I decided to launch my startup with my &lt;a href=&#34;https://www.linkedin.com/in/caroline-juarez-069204136/&#34;&gt;co-founder&lt;/a&gt;, a SaaS service built for hospitality professionals to help them with their day-to-day tasks that I was building for the past year.&lt;/p&gt;
&lt;p&gt;In those two years, I have travelled to 7 different countries, built a website and two mobile apps from scratch and a lot more. Let&amp;rsquo;s take a look back at what I have learned.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The 3-2-1 Backup Rule: What It Actually Costs to Implement</title>
      <link>https://gaetangrond.me/posts/dev/demystifying-the-3-2-1-backup-strategy/</link>
      <pubDate>Mon, 13 Nov 2023 17:48:20 +0100</pubDate>
      <guid>https://gaetangrond.me/posts/dev/demystifying-the-3-2-1-backup-strategy/</guid>
      <description>The 3-2-1 backup rule explained without the marketing: what each copy really protects against, what it costs, and how I apply it to a production SaaS.</description>
    </item>
    <item>
      <title>Beware of Fake Vulnerabilities Reports and Fear Mongering Tactics</title>
      <link>https://gaetangrond.me/posts/security/beware-of-fake-vulnerabilities-reports-and-fear-mongering-tactics/</link>
      <pubDate>Sat, 14 Oct 2023 03:10:34 +0200</pubDate>
      <guid>https://gaetangrond.me/posts/security/beware-of-fake-vulnerabilities-reports-and-fear-mongering-tactics/</guid>
      <description>&lt;p&gt;A few days ago I started receiving &lt;strong&gt;concerning emails&lt;/strong&gt; directly to my work email address, the email was from a so-called bug bounty hunter that was claiming to have found a vulnerability in one of our products, the email was very generic and it was not clear what was the vulnerability, the only thing that was clear was that the person was asking for money to disclose the vulnerability.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Understanding IDOR Vulnerability in Django and how to fix it</title>
      <link>https://gaetangrond.me/posts/django/understanding-idor-vulnerability-in-django/</link>
      <pubDate>Tue, 15 Aug 2023 00:45:40 +0200</pubDate>
      <guid>https://gaetangrond.me/posts/django/understanding-idor-vulnerability-in-django/</guid>
      <description>&lt;p&gt;Django is by design very secure, most of the common vulnerabilities such as XSS, CSRF, SQL injection, clickjacking are fixed by the simple use of the framework, but there is one that is not fixed by default, and it is the &lt;strong&gt;Idor&lt;/strong&gt; vulnerability.&lt;/p&gt;
&lt;p&gt;In this article we will see what it is and how to fix it.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Create a Simple Maintenance Feature in Django</title>
      <link>https://gaetangrond.me/posts/django/create-a-simple-maintenance-feature-in-django/</link>
      <pubDate>Sat, 05 Aug 2023 13:10:40 +0200</pubDate>
      <guid>https://gaetangrond.me/posts/django/create-a-simple-maintenance-feature-in-django/</guid>
      <description>&lt;p&gt;When working with Django for my startup I performed on several occasions very complex migrations and maintenance tasks that required the site not to be accessible for a few minutes and sometimes even hours.&lt;/p&gt;
&lt;p&gt;Even if the end user is not able to access the site, our team of superusers and admins should be able to access the site and perform the maintenance tasks.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Secure Your Django Administration with 6 simple steps</title>
      <link>https://gaetangrond.me/posts/django/secure-your-django-administration/</link>
      <pubDate>Thu, 03 Aug 2023 07:00:00 +0000</pubDate>
      <guid>https://gaetangrond.me/posts/django/secure-your-django-administration/</guid>
      <description>&lt;p&gt;One of the most loved features of Django is the built-in administration interface. It allows for an easy way to manage your data and is highly customizable. However, it is also a very common target for attackers.&lt;/p&gt;
&lt;p&gt;In this article, we will look at some of the most common attacks against the Django administration interface and how to protect against them.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to Customize The CSRF Failure View in Django</title>
      <link>https://gaetangrond.me/posts/django/how-to-customize-csrf-failure-view-django/</link>
      <pubDate>Tue, 01 Aug 2023 13:02:50 +0200</pubDate>
      <guid>https://gaetangrond.me/posts/django/how-to-customize-csrf-failure-view-django/</guid>
      <description>&lt;p&gt;When working with Django and third party libraries, you may encounter a CSRF error on login or any other form submission. This is because Django requires a CSRF token to be sent with every form submission except GET requests or if the form has the &lt;code&gt;csrf_exempt&lt;/code&gt; decorator.&lt;/p&gt;
&lt;p&gt;During my work with Django, I have encountered this error many times, sometimes due to my own mistakes and sometimes due to third party libraries or user behavior.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Locking Down a Production Server in 5 Minutes with a Cloud Firewall</title>
      <link>https://gaetangrond.me/posts/security/secure-your-droplet-with-cloud-firewall/</link>
      <pubDate>Mon, 31 Jul 2023 23:32:32 +0200</pubDate>
      <guid>https://gaetangrond.me/posts/security/secure-your-droplet-with-cloud-firewall/</guid>
      <description>A short, practical walkthrough for closing every port you do not need on a public server, before someone else finds them.</description>
    </item>
  </channel>
</rss>
