As coding moves more and more towards AI-based workflows, we're seeing a lot of tooling being built specifically for agentic coding. New types of tools, like agent harnesses and ACPs, are built around interacting with the agent, as opposed to tools specifically built for humans, like TUIs
Working on Holt Kit , I need to write a lot of Leptos components. A lot . Lots of components still to be done... Holt Kit is intended to be an overly complete collection of elements, which need to be maintainable and have a consistent level of quality and implementation style. So
I ran into an instance of this  Typescript bug  recently. Basically, Typescript lets you do this without compiler errors: const arr = [1, 2, 3]; const x: { a: number[] } = { a: { ...arr } }; x.a.map(n => n + 1); Note the { ...arr } instead of [...arr] ! Running this throws the error
This is the third (or third-and-a-halfth) article in a series called "Hosting quickly". I want to launch Rust apps quickly and often, and I want to have stable, common infrastructure for all of them. Hosting quickly 1 - Setting up Terraform, Github, and 1Password Hosting quickly
Hosting quickly 1 - Setting up Terraform, Github, and 1Password Hosting quickly 2 - Dioxus to the web on Fly.io We should make the backend serve some API that we can hit from the frontend. We'll turn the root endpoint in the backend into a JSON-returning endpoint: #[derive(
This is the second article in a series called "Hosting quickly". I want to launch Rust apps quickly and often, and I want to have stable, common infrastructure for all of them. Hosting quickly 1 - Setting up Terraform, Github, and 1Password Today, let's build a frontend
If you read this blog or my digital garden you'll know I like working with state machines in the frontend. There's plenty of reasons for this, but the two main ones are that user interaction maps really well to state machines, and so do shared background
I love using state machines in my frontends, and the current winner library to do it is XState. State machines (or actually state charts) can get quite complex, and like with everything I've developed some specific ways to test it. I've collected some guidelines and tricks
I love neverthrow , io-ts' Either , or a homemade Result library as much as anyone, but I do miss the ? -operator in Typescript. This is my attempt at recreating it [1] . The basic idea There are two core things that Rust's ? -operator allows us to do: early
This is the first article in a series called "Hosting quickly". I want to launch Rust apps quickly and often, and I want to have stable, common infrastructure for all of them. Hosting quickly 1: Setting up Terraform, Github, and 1Password We'll call this Cochrane [1]
In the last two posts ( 1 , 2 ) in this series, I explained why I want Typescript to be more predictable, and some of the most important guidelines I follow to make that happen. Here, I want to dive into a specific library that has helped me significantly improve the predictability
While developing RCKIVE , I've done a development against Shopify's GraphQL APIs. I quickly found out that the dealing with GraphQL in Rust could be challenging. Generating Rust serde structs and clients from GraphQL is seamless, but GraphQL's lenient response typing doesn't combine
This is the second post in a series of blog posts where I explore ways to make Typescript development more predictable. I describe my motivations in-depth in my first post. In this post, I'll focus on a list of concrete techniques to make Typescript development more predictable.
Javascript errors are bad. I think we can all agree that new Error("...") doesn't give you something super useful to work with. Extending the Error class is surprisingly difficult . After that, actually dealing with the errors turns into a bit of a guessing game on what
I've spent a lot of time building and maintaining React applications. React, with Typescript, is fine, but I keep coming back to the same realisation: it's not Rust. Over the past few years I've been learning Rust, and it has transformed how I write