Caktus Blog
2026

Self-Hosting ODK Central on DigitalOcean with Kubernetes and PostgreSQL
ODK Central is a powerful open-source platform for creating and managing digital forms for data collection. While ODK offers cloud-hosted solutions, many organizations require self-hosted deployments for data sovereignty, custom integrations, or compliance requirements.

Open Source Comes From People
I recently attended my first PG Data 2026 conference where keynote speaker Robert Haas delivered a talk that has stayed with me. His keynote focused on the people behind PostgreSQL, the growing challenges of sustaining open-source communities, and the urgent need to cultivate new contributors through mentorship and community engagement. While his remarks centered on PostgreSQL, they sparked broader reflections for me about the future of open source and communities like Django.

Supporting Django's Next Chapter
The path to hiring an Executive Director gained real momentum at DjangoCon US 2024, when Jacob Kaplan-Moss shared a vision for what dedicated resources could mean for the future of Django. In his blog post If We Had $1,000,000, he invited companies and supporters to help get the initiative off the ground. The response from the community was inspiring, and we’re proud to see that vision become reality.

Easily Stream LLM Responses with Django-Bolt and PydanticAI
I like how easy it is to create an async streaming endpoint with django-bolt and PydanticAI from scratch. With only a few commands you can set it up.

All Things AI Conference: Team Insights
A few of my colleagues attended the 2026 All things open AI Conference in Durham. I found myself with a major case of FOMO, so I thought I would pick Colin, honorary Cakti Peter and Gerald’s brain.

DjangoCon 2025 The Attendee's Experience
This post is the second in a three-part series reflecting on DjangoCon US 2025. In this post, I’m reflecting on experiencing DjangoCon 2025 from the audience while serving as conference chair.
2025

PydanticAI Agents Intro
In previous posts, we explored function calling and how it enables models to interact with external tools. However, manually defining schemas and managing the request/response loop can get tedious as an application grows. Agent frameworks can help here.

LLM Basics: Ollama Function Calling
In our previous post, we introduced function calling and learned how to do it with OpenAI’s LLMs.
In this post, we’ll call the same cactify_name function from that post using Meta’s
Llama 3.2 model, installed locally using Ollama. The techniques in this post should also work
with other Ollama models that support function-calling.

LLM Basics: OpenAI Function Calling
In our previous post, we explored how to send text to an LLM and receive a text response in return. That is useful for chatbots, but often we need to integrate LLMs with other systems. We may want the model to query a database, call an external API, or perform calculations.

Behind the Curtain as a Conference Chair
This post is the first in a three-part series reflecting on DjangoCon US 2025 — In this post, I’m taking you behind the scenes of DjangoCon US 2025 to share what it taught me about leadership, community, and the power of holding space for others.