OpenAPI Generator: read typescript-fetch error responses
Catch ResponseError, read the HTTP status and JSON body, and handle network failures in an OpenAPI Generator typescript-fetch client, with a Django Ninja example.
Hand crafted thoughts and ideas made for human consumption.
Start hereHow I design systemsA practical guide to designing distributed systems by breaking them down into functional areas: architecture, communication, ingress, events, databases, caching, testing, and instrumentation.December 31, 2025 · 13 min readCatch ResponseError, read the HTTP status and JSON body, and handle network failures in an OpenAPI Generator typescript-fetch client, with a Django Ninja example.
Working with agents has brought me back to some engineering fundamentals. As implementation gets cheaper, there is more room to sweat the details. The trick is remembering how to ask good questions.
English is a pretty expressive language. That comes with a lot of upsides, but it also comes with the notable downside that talking about things with understanding becomes more difficult when two parties don't understand each other's working definitions. This is a log of mine.
Codeberg's members voted to ban projects mostly written by AI. They did not explain how anyone is supposed to prove that a project violates the rule.
Slack built chat. Teams turned it into a distribution war. Agents are forcing the next collaboration product to compete on architecture again.
Cascade Chat could connect to Libera.Chat just fine and then lose the socket a few seconds later. Finding out why took several PRs and a rethink of its event architecture.
The best use of AI in a product may be the part the customer never recognizes as AI at all.
Cascade Chat now runs on an Agentic Development Lifecycle. Agents write the code, Playwright verifies it, and the only human decisions left are ideation, architecture, and the release gate.
Semantic versioning signals intent. Calendar versioning tells you when. The second one is more useful.
Desktop software is having a quiet revival. After years of SaaS monoculture, frameworks like Wails and Tauri are enabling a new generation of native-feeling apps built with familiar web technologies — at a fraction of Electron's resource cost. Wails v3's first-class in-app updates might be what finally tips the scale.
As is tradition, my workflow continues to evolve at a rapid pace. I've since dumped Cursor in favor of a new stack.
Wiring SimpleFIN, a self-hosted Actual Budget instance, and Claude Desktop together over MCP so I can actually talk to my money — and walk into my financial planner's office already knowing the picture.
The industry has spent a decade recoiling into rigidity and pessimism, and the AI moment is reproducing the same false dichotomies. A case for returning to curiosity, experimentation, and the willingness to be wrong.
Warrant is a work queue plus shared project context so people and IDE agents can pull tickets, log work, and hand off to human review, without losing the thread between chat and the repo.
AI is automation and no matter how good the model you cannot automate things you do not understand.
Yes, it is still 2026 and you read that title correctly. I built an IRC client. Slack, Discord, and Matrix all still exist. But here we are. I made an IRC client, and I'm going to tell you about it.
I've been working on [lan.events](https://beta.lan.events), a platform for organizing and discovering LAN parties and gaming events. I started going to LAN parties as a kid, took a long break as a young adult, then got back into it in 2025 thanks to my friend Ben. We hit DreamHack together, which led me to PDXLAN in the fall.
I'm building my own personal assistant to help me with my daily tasks.
I've been publishing HashPost's code publicly since its inception but it's not actually open source. Recently I've been thinking about what the pros and cons of open sourcing are as well as how HashPost will sustain itself.
After a year and a half of my blog being a dynamic site I'm going back to a static site.
My blog is actually two applications: a frontend and a backend. The frontend used to be a client side rendered (CSR) application, which worked fine for my usual work on internal tools.
Since I started this blog project I've been using a Markdown based WYSIWYG editor. I necessarily had to pick a new framework when I migrated to Vue.
My 2025 roadmap is pretty simple: - [x] Site branding - [x] JSON feed endpoint > I originally intended to publish an Atom Feed but ended up going with JSON Feed since most modern services support it.
It's been six months since I last wrote about my experience using GitHub CoPilot while I wrote this blog. If you haven't read that entry, my key takeaways were: - CoPilot functioned like a smarter...
An idea I've been proliferating recently is that, in the year of our lord 2024, server and client communication should be guaranteed to be wire-compatible.
I love Python, but it's a minefield of a language. Here's some things I do to have confidence in the code I write. Always log exceptions Exceptions are the standard path for error reporting in...
November updates are out. This is the conclusion of the major features I intended to develop initially for this blog. Below is a summary of new features and fixes.
I've been working on the comments system for my blog in the past week. Comments systems are complicated; there's not only what the user experiences but there's also entire sub-systems and metadata...
As promised in one of my earlier posts I have continued to hack on this website. The early days of this project were pretty rudimentary at best as my git history will happily attest to.
I wrote a file manager so that I could upload photos and it turned out a lot better than I expected. I ended up with this feature list: - Public files - Private files - Automated, time-based...
I love Django as a framework. It's modularity makes building new and complex projects a breeze. When Django Ninja came around and layered Pydantic Schema onto the framework for serialization I was...
Before I was a professional programmer programming was much more of a labor of love. I built tools for IRC, mostly scripts and bots for channel management or novelty like slapping someone with...