Joel Hanson
Software engineer with 8+ years on backend and distributed systems.
At IBM Event Streams I work on Kafka Connect, schema registry migrations,
and Kubernetes operators: delivery guarantees, reconnects, and the failure
modes that show up after deploy.
Projects

Apicurio Registry
V2→V3 · zero downtime · Event Streams v12.1 critical path
Schema registry migration and upstream MCP work for IBM Event Streams.

ContextLayer
Open-source MCP bridge · REST → tools in minutes
Transform any REST API into an MCP server — connectors that make …

Kafka MCP Server
Kafka ops as LLM tools · topics, consumers, produce
Expose Kafka cluster operations as LLM-accessible tools via the Model …

SSE Kafka Connector
Used in Event Streams demos · SSE → Kafka topics
Kafka Connect source that turns Server-Sent Events streams into Kafka …

Bijou
1–9 byte Longs on the wire · Bijou32/64/128 + zigzag
Variable-length integer encodings with drop-in Kafka serializers for …

Kafka Common Problems
Production playbooks · symptoms → diagnosis → fix
Operational playbooks for common Kafka production issues — symptoms, …

Memstream
Changefeed → Bedrock → MCP search · no separate vector DB
Turn CockroachDB writes into searchable agent memory — embeddings stay …

Kafka Connector Template
Production-ready Kafka Connect template with Testcontainers integration …

Django DRF → MCP
Turn an existing Django REST Framework project into MCP tools for AI …

Stream Wars
A real-time multiplayer tap battle that turns every click into a Kafka …

Markdown2Medium
Convert Hugo-friendly Markdown into Medium-ready posts with a live …

Where Is My Commit
SHA/PR → first tag · no server
Client-side GitHub tools for one question: when did this change ship?
Recent Writing
- Why curl 127.1 Is the Same as curl 127.0.0.1 [4 min] A walkthrough of why curl 127.1, 0x7F.1, 0x7F000001, 2130706433, and 0177.1 all resolve to 127.0.0.1, traced from arpa/inet.h into Apple/FreeBSD inet_aton().
- When One Kafka Partition Takes All the Heat [5 min] How to diagnose and fix Kafka hot partitions: per-partition lag checks, key design, salting or isolation for huge keys, and a Docker Compose demo to recreate the skew.
- I Built an MCP Travel Planner That Gives ChatGPT, Claude & Cursor Shared Context [5 min] How I built Wayfare, a travel bucket list and savings tracker with MCP and OAuth, so ChatGPT, Claude, and Cursor share the same trip context.
- The Connector That Kept Retrying and Never Said So [3 min] Why Kafka Connect errors.retry.timeout does not cover connector put() retries, and how mq.retry.timeout.ms on the IBM MQ Sink turns endless RetriableException loops into real task …
- From Prompt to Home Screen: Shipping Nursing Tracker with GitHub Pages [6 min] How a one-tap nursing timer for my wife grew into a shared feeding log, and how to ship a small AI-assisted web app for free with GitHub Pages.
Series
Kafka Common Problems
Operational playbooks for Kafka issues that show up in production — symptoms, diagnosis, and fixes.
Kafka Connect
From a KRaft cluster to custom connectors, tombstones, tests, and streaming into Kafka.
MCP
Expose Kafka, Django APIs, REST APIs, and travel context as tools for AI assistants via the Model Context Protocol.