After a hardware failure on Fly.io triggered a migration to new hardware, I encountered an issue where the new machine didn't mount to the old volume but instead created a new one. Despite attempts to mount the old volume, persistent errors prevented me from attaching it to the application. This

2 min read

I had to make a new blog because we can't have nice things.

1 min read

With Phoenix LiveView you can build components that encapsulate styling. This is especially useful when using a class-based CSS framework like Tailwind CSS.Often you will want to make your component configurable by allowing the users of the component to pass in additional classes. The CoreComponents module that is created with

2 min read

As I was writing a Phoenix LiveView component I determined that I wanted to provide a default "empty state" when a slot provided to the component rendered to a blank value. A good example is a detail list component that may be used as follows:<.list><:itemtitle="Email"><%=@contact.email%></:item><:itemtitle="Mobile Phone"><%=@contact.mobile_phone%></:item></.list> In the component you

3 min read

While implementing a LiveView external upload to S3 I noticed that the default cancellation mechanism doesn't properly terminate the upload. The upload is cancelled within the LiveView state, but the browser will continue to upload the file via XMLHttpRequest and never gets terminated. When uploading large files or handling file

1 min read