From Celery to Restate: Rethinking Async Tasks in Django

The Celery Question For years, when someone asked “How do I handle background tasks in Django?”, the answer was almost always “Use Celery”. And for good reason. Celery is mature, battle-tested, and has solved async task processing for countless Django applications. It has extensive documentation, a large ecosystem of plugins, and most Django developers have at least some experience with it. But Celery also brings complexity. You need a message broker like Redis or RabbitMQ. You need to manage worker processes. You need to implement your own progress tracking if tasks need to report status. You need to handle state persistence separately if your tasks need to remember things across restarts. As your application grows, this infrastructure overhead grows with it. ...

November 16, 2025 · 9 min · 1782 words · Joel Hanson

Adding Durable Execution to Flask Applications with Restate

The Challenge of Reliable Background Operations Building web applications with Flask is straightforward until you need to handle operations that can fail. Database operations timeout, external APIs become unavailable, and network connections drop. These failures are inevitable in production systems, yet handling them gracefully often requires significant engineering effort. Recently, I was trying to build a Todo application where users could create, update, and delete tasks. On the surface, this seems simple. But when you start thinking about production scenarios, questions emerge. What happens if the database connection fails mid-operation? How do you handle retries without duplicating operations? What if the server crashes while processing a delete request? ...

November 16, 2025 · 7 min · 1385 words · Joel Hanson

Introducing ContextLayer: Transform Any REST API into an MCP Server in Minutes

The Problem: Connecting AI Assistants to Your APIs As AI assistants like Claude and VS Code Copilot become more powerful, developers are discovering a critical bottleneck: these AI tools can’t directly interact with our existing REST APIs. After building Django DRF to MCP converters and Kafka MCP servers, I realized a fundamental challenge: Every API requires custom MCP server implementation. You shouldn’t need to write custom code for every API integration. You shouldn’t have to learn Model Context Protocol’s internals just to connect Claude to your weather API, GitHub API, or internal company APIs. ...

November 16, 2025 · 7 min · 1414 words · Joel Hanson

Convert Your Django DRF Project to MCP in 5 Minutes

The Problem: When APIs Meet AI Assistants A few weeks ago, I was experimenting with Model Context Protocol (MCP) for a Kafka integration project. The experience was eye-opening - being able to interact with complex systems through natural language felt like a glimpse into the future of development workflows. After successfully getting MCP working with Kafka, I started thinking about other systems I could connect. That’s when I looked at one of my old Django projects. ...

August 3, 2025 · 13 min · 2701 words · Joel Hanson