Last night, I found myself genuinely entertained watching progress bars. Not just any progress bars—I was watching four AI agents build a feature for me, in parallel, while narrating their progress like a soccer match. And it was fun . If you haven’t read my previous post on 10x Coding with Parallel AI Agents , I recommend starting there. It explains how Zerg orchestrates multiple AI coding…
Most todo apps treat tasks as immortal. Truc assumes the opposite: if you don’t do it soon, it probably didn’t matter. How It Works 8 states : todo, focus, freezer, backlog, done, graveyard, snoozed, deleted Star or not : each task can be starred for priority Icons : pick from 8 emoji categories for quick visual scanning Decay : tasks not in freezer decay after 3 days of inactivity…
I’ve been using AI coding assistants like Claude Code and OpenAI’s Codex CLI daily for the past several months. One thing I noticed: the quality of results varies dramatically based on how you frame your request. A simple “fix this bug” gets mediocre results. But a structured prompt that specifies scope, tool preferences, and behavioral constraints? That’s when the…
When I have a flight coming up, I want one thing: a persistent, glanceable display showing exactly when I need to leave for the gate. Not buried in an app. Not hidden behind notifications. Just there , counting down. So I built a desktop flight tracker widget inspired by the iconic Solari split-flap displays you see in old train stations and airports. The Aesthetic The design pays homage to those…
Apple Shortcuts are powerful, but building complex automations with the visual block interface quickly becomes painful. Enter Cherri - a programming language that compiles to Apple Shortcuts, giving you proper syntax, variables, control flow, and most importantly, version control. I’ve been using Cherri to build iOS automations, and along the way I’ve discovered some powerful patterns…
I process hundreds of emails weekly. The constant context-switching between reading, deciding, and acting on each message was killing my productivity. So I built a full-screen email triage interface in Hammerspoon that lets me blaze through my inbox with keyboard shortcuts - like Tinder for email, but with Gmail-style actions. The Problem Email clients are designed for reading and composing, not…
“Agentic AI” is everywhere in 2024-2025. VCs love it, startups pitch it, and Twitter debates whether it’s revolutionary or just hype. But what does it actually mean? Let me demystify it with the simplest possible example: a Chrome extension that can browse the web for you. The Core Idea: A Loop with Tools Here’s the secret that strips away all the mystique: an agentic…
This blog runs on Hugo and Cloudflare Pages. Total cost: $0/month. No servers to maintain, no databases to back up, no security patches to apply. Just markdown files that become a fast, globally-distributed website. Here’s exactly how to set it up. Why This Stack? Hugo : Blazing fast static site generator written in Go. Builds this entire blog in under 100ms Cloudflare Pages : Free hosting…
I run about 50 services on my homelab. Grafana, Home Assistant, a sleep tracker that watches my toddler (creepy but useful), and a bunch of other things that make my life either easier or more complicated depending on the day. Here’s the entire flow of how a service goes from “I have an idea” to “it’s running on my network with HTTPS and monitoring.” Act 1: The…
Getting HTTPS working on .lan domains is annoying. Let’s Encrypt won’t issue certs for non-public domains. Self-signed certs trigger browser warnings. mkcert exists but felt like overkill for my needs. So I wrote a 300-line Go tool that does exactly what I need: create a root CA once, generate certs for any .lan domain, trust it on macOS with one command. The Tool # Initialize (creates…
Managing multiple LLM providers gets messy fast. OpenAI for some tasks, Anthropic for others, local Ollama models for sensitive data—each with different APIs, authentication, and billing. I built LLM Proxy to solve this: a single gateway that routes requests based on sensitivity and quality requirements, tracks costs, and provides a unified API across all providers. The Problem Working with 10+…
I take a lot of screenshots. Screenshots of bugs, UI mockups, terminal output, error messages, documentation - you name it. The problem? macOS dumps them all on my Desktop with cryptic names like Screenshot 2024-12-14 at 10.42.13.png , and within a week my Desktop looks like a digital landfill. So I built a screenshot manager in Hammerspoon that intercepts every screenshot, organizes it…
I wanted to track who’s home without building a complex computer vision pipeline. The solution: schedule a local LLM to analyze security camera frames every 5 minutes, output structured JSON, and export the results as Prometheus metrics. Now Grafana shows me family presence over time. The Pattern: Scheduled Jobs → JSON → Prometheus The architecture is simple: Scheduled job captures a frame…
I’ve been using an AI-powered packing list generator for months. It’s genuinely useful—tell it where you’re going, how long, what kind of trip, and it generates a smart packing list with weight estimates, quantities, and even suggests how to organize everything into bags and packing cubes. Today I’m open-sourcing a version of it that runs entirely in your browser. Trip…
My daughter loves memory games. She also loves princesses. So naturally, I built her a princess memory game—and I did it from my couch, using a tiny gamepad and my voice. Welcome to vibe coding. Princess Memory A simple memory card game with princess themes, high scores, and just enough challenge to keep a 4-year-old (and her dad) coming back for more. Built entirely through voice coding and a $20…
So there I was, 2 AM, chatting with an LLM about whether we’re all just fancy API servers running on meat hardware. You know, normal Tuesday stuff. 10-second version Too busy to read? Here’s the whole essay in 10 seconds: Your browser does not support the video tag. Sand falls. A checklist stretches to infinity. One grays out. The other glows. “Immortality sounds like a gift. But…
I built a visual editor for managing LLM system instructions. Drag blocks between profiles. See token counts update live. Export context-aware configurations. The Problem Most AI coding assistants read custom instructions from a config file. Mine has 12 sections covering coding standards, deployment patterns, personal tools, and workflow rules. The catch: my home and work contexts need different…
What if your coding sessions looked like a Star Wars opening crawl? Prompts scrolling through time, color-coded by quality, with dramatic bubbles floating across a timeline like ships in hyperspace? Prompt Tracker transforms your Claude conversation history into an entertaining, interactive visualization—part productivity tool, part time-traveling dashboard, part cinematic experience. Watch your…
Working with 10 parallel LLM coding sessions exposes problems that don’t appear at smaller scale. Managing multiple conversations, maintaining context across sessions, and ensuring quality all require different approaches than single-session work. This series documents those problems and the solutions that emerged. The tools shown use Claude Code and Emacs, but the patterns apply broadly to…
Part 1 described the problems of managing multiple LLM sessions. This article shows the ergonomic layer that solves them: visual indicators, session recording, logging, and telemetry. The Complete Picture Here’s my workflow using tmux to manage multiple LLM sessions. Tmux is a terminal multiplexer—it lets you run multiple terminal sessions inside a single window and switch between them…
In Part 1 I described the pain points of working with multiple LLM sessions. Part 2 covered the ergonomics layer that made individual sessions manageable. But ergonomics alone isn’t enough when you’re running 5-10 parallel Claude sessions. You need coordination , quality enforcement , and shared context . This article covers the higher-level abstractions that make LLM teams actually…
In Part 1 , Part 2 , and Part 3 , I covered pain points and solutions that work reliably. This article is different—it’s about experiments , works-in-progress , and lessons from things that didn’t quite pan out . Not every tool needs to be polished. Some are scaffolding for better ideas. Some solve problems that disappear with faster models. And some teach valuable lessons even when…
This is the final article in my series on working with LLMs at scale. Part 1 through Part 4 focused on building with LLMs—managing sessions, ensuring quality, coordinating parallel work. This article is about something different: using LLMs as learning tools . Not just to write code, but to help you understand complex systems, internalize patterns, and build lasting knowledge. The Learning Problem…
LLM coding assistants like Claude are powerful, but they have a fundamental limitation: every conversation starts from scratch . Each session is isolated, with no memory of previous interactions beyond what you manually provide in prompts. After working with Claude Code intensively for a year, I built memento —a system that gives LLMs persistent, searchable, long-term memory across all sessions.…
Over the past year, I’ve been building a comprehensive home automation system using AppDaemon , a Python framework for Home Assistant automation. What started as simple light controls has evolved into a sophisticated ecosystem of 30+ interconnected applications managing everything from CPAP machines to interactive language learning games for my child. Why AppDaemon? Home Assistant’s…
What are budget categories? I like to tag every single financial transactions we make with a category that is both precise and useful: I use have categories for each theme I may want to understand more so that we cover the whole gamut of expenses (takeout, restaurant, dog/health, mortgage, etc.) I use subcategories to provide a different 'zoom' level over some expenses. For example dog/health,…
When I worked at Facebook, I worked on making cross-region failover for source control more effective and automated. Before my work, when we were doing a cross-region failover, we brought the whole team in a room for the day. We also brought food and coffee and ran through the commands as a group to add extra-safety and make sure we didn't cause an incident. We ran together through a list of 20…
This article is an exception as it is not related to programming. It is the list of the quotes that I find most inspirational, up to date as of <2022-03-06 Sun> : When you talk, you are only repeating what you know; but when you listen, you learn something new. Dalai Lama If you have expectations (of others) that aren't being met, those expectations are your own responsibility. You are responsible…
Org-roam Org-roam is an emacs package to implement the Zetteltasken workflow for note taking. I used it as a way to maintain a personal wiki, hundreds of notes that are interlinked. It helps me see connections I wouldn't normally see, reflect on what is happening and on the past, and address the limitation of my memory. I store recipes, food reviews, daily log, my routine, and much more in…
I have been working as a Software Engineer in the US since early 2013. Here are some of the principles I learned throughout the years. I wrote the first version of this in February 2022. Influence and driving change Building trust is a requirement to have influence as a leader When change is hard, make it optional at first until the group sees value in it When you are new, spend time listening and…
My recent reading interests In 2020 and 2021 before becoming a dad, with forced reduced social interaction due to COVID, I spent a large amount of time reading technical books and working on my craft. I have learned about Domain Driven Design , Hexagonal Architecture and Data-Oriented Programming . I used the first two in my work on Krispr with Daniel Low at Airbnb. It made it easier to expand the…
I recently became more mindful about how I spend my time, because time is so precious. Every night, I plan how I will be spending time the next day. As you may expect if you have been reading my blog, I am using org-mode to track that; more specifically, I put the entries in a table like this one: |---------------+--------------+------------| | Time | Activity | Duration |…
I recently got back into meditation. I found an accountability partner who is making the journey with me. It makes the process more rewarding, and motivating. This time around, I overcame one of the issues I had with focusing, and this article shares how I went about it and how I am applying it to other areas in my life, including programming. It starts with a quote I love the book The Mind…
I write a lot of content, and sometimes I like to look back and re-read what I wrote in the past. I also like to run analytics on the content to identify the themes quickly. One tool to do that is a 'Wordcloud': a visualization of the most frequent words in a text, where the size of each word in the wordcloud is proportional to its number of occurence in the text. I found a wordcloud cli tool and…
I like to take notes and track all sorts of things with org-mode. I usually put entries in tables like the one below: |------------------+---------------------| | Day | Chore | |------------------+---------------------| | <2022-02-16 Wed> | Take out the trash | | <2022-02-17 Thu> | Clean the sink | | <2022-02-18 Fri> | Clean the bathrooms | | <2022-02-19 Sat> | Vaccuum | | ... | ... | When…
Almost everything I do on a computer happens in Emacs. However, when I am on the go, I use Microsoft Todo to track my tasks. I used to use Wunderlist, Microsoft bought them and build Microsoft Todo as its successor. They kept what I liked about Wunderlist: an API! I wanted a way to transfer TODO lists from org mode to Microsoft Todo, I built one in five minutes, follow along to see how. My Todo…
Context Nowadays, pictures don't carry the same sentimental value as they did for our parents. They used to be more precious and meaningful. Thanks to out smartphones, we take so many pictures, but spend little time looking at them and reflecting on the moments they seized. I want to make make every picture I take count . Therefore, I built a way to seamlessly integrate pictures from my iPhone…
This is my cheat sheet to prepare for interview loops with US companies. Updated in 2021. Coding Leetcode , leetcode, leetcode, get familiar with standard library, programming language and algorithm implementation Do about 50 questions easy and medium across all types of problems Pick one programming language and focus on knowing it well, I use Python Be familiar with your text editor and ready to…
How should you respond when a recruiter asks you the question you know is coming - “what salary are you looking for”? And other musings about salary negotiations for tech jobs based on real life experiences. This article is a brain dump on what I learned about salary negotiation over the years. How do you handle the initial “pre-offer” discussions? Well the answer is - it depends! If…
Context The Apple Watch and other smartwatches record a humoungus amount of data about what you do every day. This post will show you one of the visualizations you can build for that data: how to build a heatmap of your walks or ride. This is what the final product looks like (truncated view to preserve privacy): How to get the data I downloaded the data from my iPhone by going to the health app…
This is a quick post about a fantastic little clojure libary called pdfboxing . Among other things, pdfboxing lets you map a map of fields to a PDF document and produce a completed document. For example the following code completes a claim form for the Anthem health insurance : ( ns core ( :require [ pdfboxing.form :as form ])) ( form/set-fields '/tmp/claim_form_template.pdf'…
Context I frequently use code coverage to identify untested code and evaluate the risk of making a code change. Since I use Emacs for basically everything, I tried to use existing code coverage packages for Emacs. Unfortunately, every code coverage package seems to only be compatiable with a specific code coverage reporting format. The industry has yet to converge on one code coverage format to…
Context I am going through the PAIP book by Peter Norvig using emacs-lisp and would encourage every Emacs fan to try that. However, AI cannot solve all of our problems just yet! Sometimes you just need the computer to guide you to accomplish a repetitive task that requires human input. This article is about one such case: labelling wedding pictures for making an album. Problem statement In broad…
Negotiating a job offer is hard. It is often a tense process involving rash emotional decisions. I built financier , a tool to visualize compensation packages and make it easier to compare job offers and take some of the edge of the job negotiation process. While this is potentially generalizable to all lines of work, it is particularly useful to compare complex compensation packages such as the…
At work, my team uses GitHub enterprise to store and manage our repositories. We also use GitHub code review. Issues with code review: When reviewing code: I often check surrounding code to understand how it all fits together, which isn’t easy to do with a Web UI as opposed to a full-fledged editor like Vim or Emacs I like to provide code snippets in comments, with the web UI it is not as…
Introduction I simplify a lot of my tasks at work with Google Apps Script, the scripting language for Google Apps . Google Apps Script is ES5 with access to objects defined by Google mapping to Google Products (Docs, Sheets, Gmail…) Out of the box, the developer experience with Google Apps Script is pretty poor, you edit code in a Web editor and test that it works by running your code against real…
Introduction Managing and distributing Let's Encrypt SSL certificates can be tedious. In this article, I will share my strategy for obtaining, renewing and distributing my SSL certificates with let's encrypt. I wanted to have to type only one command to: get a new certificate for a subdomain renew all my certificates that needed renewal publish the certificates to Digital Ocean spaces or S3 pull…
Introduction Did you know that it was possible to extract your google chrome cookies to use them in a script? This can be a great way of automating interaction with a website when you don't want to bother automating the login flow. There is a great python library to do that called browsercookie . Browsercookie works on Linux, Mac OSX, and Windows and can extract cookies from Chrome and Firefox. I…
Introduction You don't have to set up a new laptop every day. But if you have done it recently you probably remember that it was time-consuming. In fact, the most complex setups can take weeks to reproduce because of all the details and configuration settings. This post will teach you how to automate your laptop set up with Ansible . The examples I will show are for macbooks but can be applied to…
Ansible is a great tool for automating environment setup and deploy. This article shows how to programmatically set up digital ocean block storage with Ansible. I started by reading this article on how to use the digital ocean manually and built an Ansible runbook inspired by it. The complete runbook is available as a gist , we will build it piece by piece in this post. Digital Ocean block storage…