Caktus Blog

Insights and strategies from a team recognized at Python and Django conferences worldwide since 2009. The Caktus Blog is your space for practical how-to’s, real-world solutions, and expert advice on building better user experiences, strengthening quality assurance, solving deep and complex Python/Django problems, and managing projects that deliver impact. Whether you’re refining a UI or prepping for launch, join us to learn, level up, and lead with confidence.

2025


Don't Let Search Take You Down

Twice in the last few months we’ve had to deal with Django production site issues caused by inefficient search queries.

djangocon-cover.png

DjangoCon US 2025: A Celebration of Community, Code and 20 Years of Django

Group photo at DjangoCon US 2025

Celebrating 20 years of Django

DjangoCon US 2025 was a milestone year for the community, as we gathered in Chicago to celebrate 20 years of Django. Attendees from around the world came together to learn about the latest developments, share their work, and strengthen the bonds that make DjangoCon such a special event. Caktus was well-represented once again, with our team contributing as organizers, speakers, and active participants throughout the week.

cover.png

Learning LLM Basics with OpenAI

For some time now, we’ve been using tools like ChatGPT and CoPilot for day-to-day tasks, but mostly through the conversational AI chatbots they provide. We’ve used them for everything from drafting emails to providing type-ahead coding assistance. We haven’t, however, gone a step further and integrated them into a development project. Honestly, we weren’t sure where to start. Looking into the available options, you quickly run into a dozen new concepts, from vector stores to agents, and different SDKs that all seem to solve similar problems.

Migrating Amazon EKS Nodes to Amazon Linux 2023 (AL2023) from Amazon Linux 2 (AL2) Using CloudFormation and Troposphere

Introduction

In this post, we’ll explain how we extended our existing AWS CloudFormation infrastructure, built using Troposphere, to support the use of Amazon Linux 2023 (AL2023) for Amazon EKS (Elastic Kubernetes Service) nodes. This migration was necessary to ensure compatibility ahead of our planned upgrade to Kubernetes version 1.33.

cover.png

How to migrate from pip-tools to uv

At Caktus, many of our projects use pip-tools for dependency management. Following Tobias’ post How to Migrate your Python & Django Projects to uv, we were looking to migrate other projects to uv, but the path seemed less clear with existing pip-tools setups. Our requirements are often spread across multiple files, like this:

How to Deploy a Hugo Site to Cloudflare Pages With Github Actions

We recently moved this website from Django to a static website made using Hugo, and decided to use Cloudflare Pages to deploy it. Cloudflare Pages offers automatic deployments, meaning it can automatically build and deploy a website when changes are pushed to a GitHub branch. This is simple to set up and works well. However, we wanted to build and deploy using GitHub Actions instead, so that the build logs would be easily accessible on GitHub. Cloudflare’s wrangler-action makes it simple to set up a GitHub Actions workflow for this.

Why Open Source Makes Sense For Your Business Web Projects

What Is Open Source?

Open source software is publicly available code that anyone can use, modify, and improve. It’s the foundation of much of the modern internet and it’s trusted by global enterprises, startups, nonprofits, and government agencies alike.

cover-happy-20th-birthday-django.png

Happy 20th Birthday Django!

This Tuesday (tomorrow!), August 12th, we’re teaming up with TriPython to host an informal Django Birthday event at Boxyard RTP in Durham.

Handling Configuration and Server Snippets When Upgrading to ingress-nginx 1.12.0

As part of our ongoing Sustainability and Maintenance efforts, we are upgrading our Kubernetes clusters to version 1.32. Much like a major Django upgrade, this process requires us to update other key components to ensure they remain compatible. One of these is the ingress-nginx controller, which manages external access to the cluster.

Avoiding Timezone Traps: Correctly Extracting Date/Time Subfields in Django with PostgreSQL

Working with timezones can sometimes lead to confusing results, especially when combining Django's ORM, raw SQL for performance (like in PostgreSQL materialized views), and specific timezone requirements. I recently had an issue while aggregating traffic stop data by year, where all yearly calculations needed to reflect the 'America/New_York' (EST/EDT) timezone, even though our original data contained timestamp with time zone fields. We were using django-pgviews-redux to manage materialized views, and I mistakenly attempted to apply timezone logic to a date field that had no time or timezone information.