Building Alice, an Empowering AI Agent

What does it look like to build AI agents that actually empower people’s lives, not just “augment” them? For HealthShare Technology Solutions, I wanted to build an AI agent that non-technical users can actually use to take the hassle out of their health care cost sharing plan. In this post I’ll describe the guiding principles and design decisions that made Alice not just possible, but empowering to everyday users. The guiding principles I used in building Alice come down to four key words: ...

March 18, 2026 · 9 min · 1905 words · Gordon Burgett

Building an Unstructured Data Import

Sometimes the hardest thing to figure out is not “how” to best apply a new technology, but “when not” to apply it. Nowhere has this been more true than with AI. With the rush to stick the AI brand on every project, software engineers are being pressured to “just throw more AI” at the problem and hope it works. In my hourly contracting on Neighbor Solutions, I’ve been asked to build a data import pipeline for community resources. To give a bit of context, one core function of the Neighbor Solutions app is to help users who have a heart for our unhoused neighbors to guide them towards helpful resources in their community. These can be food banks, shelters, warming stations, and many more. The major technical difficulty here is getting accurate data into the system in an automated way. Many times, lists of these resources are in poorly formatted PDFs or screenshots of webpages. There is very little consistency here, so some amount of natural language processing is required. ...

November 16, 2024 · 5 min · 912 words · Gordon Burgett

Implementing Licensing & Permissions in a React Redux app

In the process of building out the VoirDire App for our client, we ran into an interesting problem. How do we enforce licensing requirements in a cross-cutting way, without tediously identifying every area in the UI where the user might take an action that they were not allowed to take? The client’s licensing requirements were: On the free plan, a user can have 1 trial, up to 20 jurors, and up to 20 stored questions. With a standard license ($30), up to trials, 100 jurors, and 100 stored questions. An unlimited license ($50) removes all limitations. Since we are using Redux to handle application state, calculating the remaining jurors, trials, etc. in the license can be done with a selector. The selector accepts the entire redux state and the user’s current license key, then calculates whether they are over or under the limit. ...

October 20, 2024 · 2 min · 305 words · Gordon Burgett

Thoughts on Cursor

As AI tools continue to reshape software development, I’ve been particularly impressed with Cursor, an AI-powered code editor that has transformed my daily workflow. After several months of use, I want to share my experiences and observations about why this tool has become indispensable in my development process. The most striking impact of Cursor has been the dramatic increase in my productivity - I estimate it has doubled my coding speed. The secret sauce that Cursor has nailed is the UX around applying suggested edits back to my codebase. The experience feels natural, almost like dictating your thoughts to a junior developer who then implements the code exactly as you envision it. ...

September 20, 2024 · 4 min · 813 words · Gordon Burgett

Feeling Like I'm at Hogwarts

I spent some time this week playing with Typescript 2.8’s new features for modeling various complex types. The new syntax that I wanted to play with was the conditional type syntax, 1 T extends U ? X : Y This syntax allows you to express some really crazy type relationships! Some of the most interesting ones have been pre-defined in the Typescript standard lib: Exclude<T, U> – Exclude from T those types that are assignable to U. Extract<T, U> – Extract from T those types that are assignable to U. I wanted to see if I could use these to model the way we’ve been working with return values from Contentful’s Content Delivery API. ...

May 20, 2018 · 9 min · 1712 words · Gordon Burgett

Making a static site searchable

My site is getting pretty big now! 50+ posts, plus my journal entries from years past, I have content stretching over 4 years. So I started thinking about ways to add search functionality. And anyone who knows me knows I like to make these kind of things more complicated than they need to be, so with that in mind I had a fun challenge to solve. How do I add search functionality to a static site? ...

July 23, 2017 · 13 min · 2639 words · Gordon Burgett

Modern Static Sites

Today in 2017, there are a thousand and one different ways to build a website. As always there’s good old fashioned Wordpress, and of course there’s drag-n-drop website builders like Wix. One thing these have in common is that they need a traditional hosting environment, and for that you gotta pay. If you can manage it, the cheapest way to host a website nowadays is to create a static HTML site. But don’t hand-craft HTML, that’s hard and boring. Use a static site generator, for fun and profit! ...

April 20, 2017 · 12 min · 2472 words · Gordon Burgett

Taking Control of My Data

One of my projects during my vacation has been to take back control of my data. The question of online privacy is a difficult one, because while there’s some things you can do to improve your privacy, to really own your data takes a lot of effort and learning. For most people, hosting their own services is more headache than it’s worth. There’s a lot of good privacy-conscious services out there if you’re willing to pay, but most people are not willing to pay. The convenience trumps the privacy concerns, and for me it has been that way for a long time as well. ...

September 17, 2016 · 10 min · 1979 words · Gordon Burgett

Adventures in Dockerland

I’ve been on a serious docker/aws kick recently. I’ve learned just enough that it drives me to play with it. I spent a lot of my free time on it this week, and didn’t spend as much as I’d like on learning Albanian… This could be a problem… Anyways I might as well post more about what I’ve learned. I’ve been wanting to make my web server more robust, to where if it dies for whatever reason I don’t have to do anything, it’ll come back on a new instance all on its own. Unfortunately that’s a bit more difficult than you’d expect. Lots of moving parts. ...

February 20, 2016 · 4 min · 782 words · Gordon Burgett

Docker Cloud is Neat

I had some time off today so I decided to revisit how I’m hosting all my stuff. One of my issues with using Amazon’s container service is that they make you assign resource values to each container, and those are not flexible. So, I have to give each container high enough memory that it won’t die, but then I run out of space on my server real quick. Since most of the stuff I want to host just sits idle the majority of the time, this wasn’t ideal for me. ...

February 15, 2016 · 4 min · 843 words · Gordon Burgett