My Home Assistant Setup
I’ve been using Home Assistant for several years now, since before there was a Android Mobile app (2019) and I can say that it’s been an incredible journey with each update to the project bringing new features and maturity to the platform. There are a couple things which really contributed to my experience with Home Assistant, primarily the extensive catalog of integrations and the integration of non-Home Assistant devices through ESPHome, Z-Wave, and Zigbee. ...
Real Time Web Applications
As part of my involvement in the UTS Programmers’ Society in 2024 and 2025 I’ve had the opportunity to work on several real-time web applications. These projects have given me hands-on experience with various technologies and architectures that enable real-time communication between clients and servers, inspiring my interest in WebRTC, WebSockets, and Server-Sent Events (SSE). Technologies Explored Throughout these projects, I’ve explored a range of technologies that facilitate real-time interactions: tRPC: A library that facilitates type-safe communication between client and server applications (provided they’re both written in TypeScript). It allows for seamless integration of real-time features using WebSockets. WebSockets: A protocol that enables two-way communication between a client and server over a single, long-lived connection. This is particularly useful for applications that require instant updates, such as the Programmers’ Society Club Voting System and FuzzJudge, a real-time competitive programming platform with live score updates. Server-Sent Events (SSE): A technology that allows servers to push updates to clients over HTTP. This is useful for applications that need to send real-time updates without requiring full-duplex communication. WebRTC: A technology that enables peer-to-peer communication between browsers. I’ve used WebRTC in projects like go2rtc-for-3dprinters to facilitate real-time video streaming from 3D printer cameras. GraphQL Subscriptions: An extension of GraphQL that allows clients to subscribe to real-time updates from the server. This is useful for applications that require dynamic data updates and can be integrated with WebSockets for efficient communication. Projects The primary projects I’ve worked on that utilize these technologies include: ...
Using TanStack Start on it's Journey to Release
The prevalence of component libraries and an increasingly large ecosystem of tools for building web applications has provided a litany of choices for developers looking to build modern web applications. When I started programming with React a few years ago I began making single page applications using the ever-popular react-router for routing between pages of my application. This didn’t change much as I began to build more complex applications as it scaled well enough for my needs. ...
Vaultwarden Self-Hosting Experience
For almost as long as I’ve been self-hosting, I’ve been running my own instance of Vaultwarden, previously bitwarden-rs. A self-contained lightweight server implementation of the Bitwarden password manager it allows me to have full control over my password data without relying on a third-party service. Why Self-Host? The primary driver behind self-hosting Vaultwarden was to save on cost. Although Bitwarden has generous pricing tiers for personal use, I wanted to avoid having to pay extra money for essential features like 2FA and Passkey support. By self-hosting, I can access all these features for free while maintaining full control over my data. ...
Building Fast React Applications in React in 2025
One of the key challenges in building efficient React applications falls on managing state updates effectively. This is typically the largest problem that occurs when a React application grows in size and complexity. In this post, I’ll explore how incorrectly managed state updates can lead to performance issues and how to mitigate these problems using popular state management libraries and techniques. When you look at a typical React application (not a static website) you will often find that the depth of the component tree can grow very large. A tree with many nested components is the first and most probable cause of performance issues. If any component high up in the tree updates its state every component below it in the tree will re-render as well. If your application performs a lot of operations when a component renders or is re-rendered this can lead to a very sluggish user experience with a single page change causing multiple seconds of lag. ...
Using go2rtc for Real-Time 3D Printer Monitoring
From when I first upgraded my 3D printer to use Octoprint in 2020 one part of the setup that has been essential has been the ability to monitor and control my printer remotely. Initially I used a seperate Raspberry Pi 3b+ with a USB webcam streaming over octoprint’s mjpeg streamer. This worked well for a while but the quality was limited to 640x480 and the frame rate was low, making it hard to see fine details of the print. ...
Personal Wikis and Notes
One of the most useful tools as a software developer is a personal wiki. As a software developer I often have to deal with obtuse documentation, complex systems, and a lot of information that I need to keep track of. A personal wiki allows me to organize this information in a way that makes sense to me, and to easily find it when I need it. One thing I do want to clarify is the difference between wiki software and solutions like Google Docs or a something like Google Keep. Whilst these solutions can be used to take notes, they lack the structure and organization that a wiki provides. A wiki allows you to create a hierarchy of information, with pages that can link to other pages, and categories that can group related information together. This makes it much easier to find what you are looking for, and to see how different pieces of information are related. ...
Learning Go as a JavaScript Developer
I’ve been working with JavaScript and its ecosystem for several years now, primarily focusing on web development with libraries like React and experimenting with different runtime environments like Node.js and Bun. Recently, I decided to expand my programming skills by learning Go (Golang), a statically typed, compiled language known for its simplicity and performance. Why Go? Given my interest in web development and developing efficient backend services, Go seemed like a natural choice coming from JavaScript. I first considered learning Go after seeing that Microsoft was porting the TypeScript compiler to Go. There are many different projects in the JavaScript ecosystem that use a faster compiled language for the massive performance improvements. For example, the Deno JavaScript runtime is built using Rust and the Bun runtime uses Zig. Coming from languages like JavaScript and TypeScript I was curious to see how Go handled concurrency and multithreading, as these are areas where JavaScript often meets limitations. ...
Adding CANBus to my 3D Printer with an EBB Upgrade
Recently I added an upgrade to my 3D printer that I’m really excited about as it takes advantage of quite a few different technologies that I haven’t used before. Primarily the use of CANBus and Klipper’s multi-MCU processing capabilities. In short the upgrade uses CANBus to communicate between the printer’s mainboard and the PCB placed on the tool head, drastically reducing the number of cables down from ten plus down to four, two for twelve volt power and a twisted pair of CANBus wires for data and signalling. ...
Self-Hosting: My Journey and Lessons Learned
Over the past few years, I’ve embarked on a journey into the world of self-hosting, starting with a single instance of Home Assistant and gradually expanding my services to include a variety of applications. This journey has been both exciting and challenging, filled with valuable lessons learned along the way. Inspiration: The Self Hosted Podcast I’ve been self-hosting for a number of years now, starting with one or two core programs and gradually expanding to host more than a dozen different services. A lot of my inspiration came from the Self Hosted podcast, which I discovered a few years ago. Every fortnight Chris and Alex would cover news in the open source and self-hosting world, as well as interviewing maintainers and covering new services that they had discovered. The podcast was a great way to learn about new tools whilst commuting and then arriving home to try them out. A lot of the services I run today were discovered through the podcast and I’ve learnt more than a few lessons from the hosts’ experiences. ...