• Adventures in Vibe Coding

    Adventures in Vibe Coding

    Disclaimer: I know "AI" is controversial among my friends and followers. I discussed my thoughts about AI in general in an earlier post last July: On Directories. And Vibe Coding. TL;DR - the "coding" use case for LLMs is unique and largely does not share moral or ethical ambiguity of the other uses.

    I like creating software again

    I’ve been seeing a lot of my peers — web developers like myself who have been doing this for 15-20 years+ — talk about how “vibe coding” has renewed their old love for writing code building software. I get it.

    My interest in software started as a way to scratch my own itch. Build little niche things for my own use, with little care for whether anyone else would want them.

    The first large project I remember building in the 90s was a vaguely Star Trek-theme version of LORD, written in QBasic. Later, when I got my first real job in an office, I wrote some software to stream my local mp3 library to my work computer (well before streaming services existed). I wrote a little bookmarking service because I found logging into del.ico.us from work to be too onerous.

    Those projects were small, achievable, and fun. I learned things and built useful stuff.

    But over the years, my enthusiasm for personal projects waned. Professionally I kept writing software — but the scrappy, scratch-your-own-itch energy that got me into this in the first place quietly disappeared. The developer experience of building for the web got complicated fast. The shift to JavaScript-based development felt like a steep learning curve, and combined with the flakiness of early NPM, I found myself noping out of “modern” web development in my own time.

    Enter Vibe Coding

    Claude Code entirely eliminates the effort required to build a fully functional minimum-viable-product of my random ideas!

    The current models have an uncanny ability to turn an idea — described in a few sentences, sometimes less — into a functioning prototype. From there, the rounds of tweaking and refining can begin, which has always been my favourite part anyway.

    So over the course of a few hours on a weekend, I’ve been able to put together projects that might have taken me weeks. In languages I don’t even know.

    Ongoing vibe coded projects

    Over the past half year or so, I’ve built some pretty neat weekend vibe coded projects.

    For each and every one of these projects I let Claude code take the wheel. Rather than manually edit code like I used, Claude did all the dirty work. I have likely touched less than a dozen lines of code across all of these projects.

    wpg.beer, taproom directory

    I built wpg.beer so that I could easily know what’s open, it continues to be super useful to me personally; and it’s also being visited by about 2,000 unique visitors every month. Plus it’s ranking on Google for “Winnipeg Taprooms”.

    Now powered by Claude CoWork

    The most tedious task with the directory site was keeping the hours data up-to-date. When Anthropic recently added the CoWork product to Claude’s desktop app, I immediately set up an automation to do this for me!

    1. Collects the current hours from each brewery’s instagram page.
    2. Compare it with the last known hours.
    3. Update wpg.beer through the admin backend, by manually updating the forms for me.

    It’s scheduled to do this once a week on Sundays and it works like a charm!

    pegguessr.fun, birds eye view geoguessr

    I created pegguessr.fun as a neat outlet for my drone photography and a small motivation to get myself back into the hobby.

    I wish I had saved my initial prompt, it was something like:

    Create a geogeusser style game using my drone photography. Laravel. With an admin to upload and manage my photographs. Keep score client side using local storage.

    I included some technical detail use Laravel, keep score client side. But one thing I did not do and never had to do was explain what a “geoguesser style game” is. It new exactly what I meant, it wrote all the backend calculation code, and front-end UI. In fact, the core game system is a piece of code I did not have to modify, beyond tweaking the scoring algorithm to make it make more sense for a city Winnipeg’s size.

    I was totally blown away!

    Dipatch: newsletter reader prototype

    Dispatch is a prototype gmail client designed to help you read newsletters by providing a distraction free and focused reading experience.

    This is my first foray into iOS development in 17 years. And it’s the first time I’ve ever noodled with Swift.

    When it identifies a newsletter in your gmail inbox, it immediately archives in so that you never have to see it cluttering up your gmail inbox again.

    The Dispatch app present it to you alongside your other newsletter subscriptions. It has some unique, opened, read and unread states that are handled in a way that makes a lot of sense to me. But might never make sense to anyone else.

    If you want to try it out, shoot me a DM and I’ll add you to TestFlight.

    Realms of AI

    Realms of AI is my latest weekend vibe coding project. It hearkens back to the Star Trek themed LORD game I made over 30 years ago.

    It’s a text-based adventure in the style of an old ASCII-art BBS game, with one twist: every NPC is powered by a live LLM conversation. You’re not reading canned responses, you’re actually talking to the characters.

    The whole game system — NPCs, quests, rooms, items, enemies — is defined in simple .md files, and Claude Code even wrote a CREATE_MODULES.md that lets you prompt new modules into existence. Players bring their own Claude API key; Haiku keeps it cheap to run.

    I mainly wanted to know if this concept even worked. Would LLM-powered NPCs actually add anything in a format this simple?

    They really, really do.

    It’s written in Python, a language I don’t know. It would have taken me a month of weekends to get here on my own.

    It still needs work and if you want to contribute you can check it out on github.

    What next?

    Reviewing this list, these four projects seem like an awful lot to manage. And they would be, if I was trying to promote them as products. But these are entirely stand alone things that live on their own, essentially purely for my own enjoyment.

    These four weekend projects are more personal projects than I’ve gotten off the ground in the last 20 years. Literally.

    Vibe coding isn’t about offloading your brain — it’s about removing the friction that got between me and the stuff I actually wanted to build. The tedious scaffolding, the unfamiliar ecosystems, the hours lost to tooling — those were the things that killed my enthusiasm, not the building itself.

    It’s like a time machine. I’ve regained some of that scrappy, anything-is-possible energy that I thought I’d just…aged out of.

    I’m having so much fun again, building things that I just want to exist.


  • Time for Usonia

    Time for Usonia

    The fact that we refer to the USA as “America,” its citizens as “Americans” has always mildly annoyed me. “America” describes two entire continents. Canadians are Americans. Colombians are Americans. Why does one country get to own the word?

    The recent events in Minneapolis, a city I love dearly, pushed that mild annoyance into something sharper.

    At this point in history, when administration of the United States is actively pulling itself out of free world1, and openly flirting with claims of dominance over the entire western hemisphere2, the U.S. has lost the privilege of using “America.”

    Names matter. They imply ownership, authority, and inevitability. And “America” has always been a power grab masquerading as a neutral label.

    So here’s my tiny, symbolic act of protest against rising tyranny: let’s take “America” back, and give the United States a different name.

    The Demonyms for the United States Wikipedia article is surprisingly long. One particularly jumped out at me: “Usonia.”

    It rolls off the tongue smoothly and it sounds like a real place.

    “Usonia” wasn’t invented as a joke or a slur. It was coined by a Scottish writer grappling with the same naming problem I’ve always bristled against.

    We of the United States, in justice to Canadians and Mexicans, have no right to use the title ‘Americans’ when referring to matters pertaining exclusively to ourselves.

    Frank Lloyd Wright later adopted the term, using it to describe a distinctly U.S. style of architecture. The details aren’t especially important, what matters is that this is a real word, with history, and a clear intent behind it.

    Proposal

    So here it is: when I reach for “American,” I’m going to start using Usonian instead.

    As a refusal.
    As resistance.
    As a small reminder that “America” belongs to more than one country and certainly more than one government.


    1. In a recent Canadaland interview with the Canada’s outgoing ambassador to the UN, Bob Rae. The interviewer states “I mean, they’re not part of the free world anymore.” To which Rae replies, “They’re not anywhere else.” Canadaland #1298 Bob Rae Just Retired and is Telling All About What he Saw at the UN ↩︎
    2. Donroe Doctrine ↩︎

  • An EV in Winnipeg. In the Winter?

    An EV in Winnipeg. In the Winter?

    I suppose this is the inevitable follow-up to my So I bought a PHEV post from 2021.

    In September, I bought a Hyundai Kona EV.

    The number one question/concern I received from most people is how the hell I was planning on surviving in Winnipeg’s notoriously cold and brutal winters in a battery car.

    The short answer: it’s not a big deal for me.
    The long answer: it might be for you, but that depends.

    We’ve had a solid couple of months of winter, including a solid week below -20. I’ve been collecting some data1, and taking note of my subjective experiences.

    Heating

    I suspect some of the skepticism I’ve heard is driven by the fact that resistive electric heating is extremely inefficient! If you’ve ever had electric baseboard heating your winter bill will leave you with a profound understanding of this fact. It seems like it would drain the battery at an impossible rate.

    However, EVs sold in Canada are equipped with heat pumps! Heat pumps are magic: they are up to 4x more efficient than resistive heating2.

    Not only are they more efficient than dumping a bunch of electricity into resistors, they start generating heat in under a minute. So there’s no warming up the engine for 15 minutes before it starts heating in the bitter cold.

    The Curious Relationship Between Heat & Distance

    I’ve observed an interesting relationship between heat and distance.

    Energy consumed to heat the car’s interior is time-based. It takes a certain amount of time to raise the temperature inside the cabin. The heating system initially uses a large amount of energy and then decreases the energy as the car warms. The amount of energy devoted to heating is almost a fixed average over time.

    Energy consumed to move the car is a function of speed and distance. Obviously sitting at a red light doesn’t consume any energy3.

    So if you’re stuck in traffic in -20 for 20 minutes driving only a few km, the drivetrain might have only consumed under 1kWh but the heating system may have spent 2 or 3kWh.

    This has the counter-intuitive effect of increasing efficiency (to a point) the further you drive. Seeing the km/kWh number go up as I get closer to my destination is a trip!

    Regardless, even with a heat pump, heating has a huge impact on range!4

    Battery Heating

    Another factor mentioned by skeptics was the performance of the battery at colder temperatures. And in this regard, the skeptics are right.

    Lithium-ion batteries have a sweet spot between 20º – 30º and are thermally managed to keep them there5.

    In other words, at a certain point the battery begins to spend energy heating itself. I guess the engineers have determined the point at which the loss of performance due to colder battery exceeds the energy cost of heating itself.

    In my experience, the point at which this system kicks in is entirely unpredictable. So it’s not necessarily reasonable to avoid driving at -25, for example.

    Battery Percent Oddity

    On a particularly cold day this month, I parked in a heated garage for about an hour. When I got back into the car, to my surprise the state of charge had decreased by about 20%!

    Thinking about this logically, I believe what’s happening here is that Hyundai is choosing to represent the battery % as a factor of all the cold-related physics that decrease battery efficiency and effectively make fewer kWh available.

    So when the battery is cold, it’s effectively smaller. And when it warmed up inside a garage, it’s effectively bigger. The amount of energy stored in the battery didn’t change, but the amount available for use (the denominator in the equation) increased.

    That’s just a theory.

    The Numbers

    The Kona EV is advertised as having “approximately 420km of range.”

    The actual numbers from Natural Resources Canada6 work out to:

    • City: 347km
    • Highway: 288km
    • Combined: 314km

    Hyundai’s marketing number seems wildly optimistic!

    City

    My city driving efficiency varies a great deal.

    I’m seeing individual trip efficiency anywhere from 1.6km/kWh (just over 100km range) on very short, cold drives. To 4.1km/kWh (264km) on longer drives across the city.

    The main factors affecting this efficiency seem to be:

    • Distance of trip: very short drives consume a large percent of energy on heating and so decrease the per km efficiency dramatically.
    • Length of stops: if you stop long enough for the battery to cool down, the car may reengage battery heating once you’re underway again.
    • Traffic: slow traffic means more watt-minutes devoted towards heating when you’re not moving.

    There was one extremely cold Saturday where I spent 50% battery just running around the city. I don’t think I drove more than 50km but I had to drive cross town in slow traffic and I was stopped 30 – 60mins+ at two or three destinations.

    Worth noting that in my car co-op experiment, I found that most of my trips are quite short. So I think I might be seeing worse average efficiency than someone who commutes for 30 minutes every day.

    Highway

    For the purpose of collecting data for this blog post, I did a 100km loop on the Trans-Canada highway at an average speed of 100km/h.

    Outside temperature was -17. I set climate control to automatic at 19.5. This was on all season tires, properly inflated to 35psi. I was the only passenger7.

    I recorded an average efficiency for that trip of 3.8km/kWh (so 245km range).

    Other observations:

    • I did not record the wind speed or direction, but I recorded a 0.4km/kWh efficiency difference heading west vs east.
    • The battery heating system did not engage at any point during the trip.
    • This is obviously much more efficient than what I’m seeing in driving in the city.

    I don’t have concrete numbers from warmer temperatures yet. But this feels roughly in line with a trip to Brandon that we took in October.

    Charging

    Charging is extra relevant to the winter equation because the car consumes more energy during the winter. So this section is not really winter specific, rather it’s more a report on the state of things in and around Winnipeg in 2025.

    A large factor in my decision to buy an EV was convincing myself that I would be able to get by on only level 1 charging8 at home.

    In terms of my own experiences this winter, it has been going OK. The math of it all is pretty silly: charging 1% at level 1 takes around 45 minutes. So for example, if I spend 2% heating the car before I leave, that’ll take an hour and a half to recoup later. But I haven’t felt the need to visit a fast charger.

    Cost

    A huge benefit of charging at home is the cost. Manitoba Hydro currently charges a flat rate of $0.095/kWh. Math that out and charging the car’s 64.5kWh battery from 0-100% would cost a total of $6.128 (plus tax).

    In terms of real numbers, my electrical bill for November and December were both roughly 400kWh more than last year. In other words, it’s costing me $38/mo to drive my car in the Winter. That’s almost entirely city driving, about 1200km/mo.

    Infrastructure

    Technically, there are 123 publicly accessible chargers in Winnipeg if you count everything9.

    While that sounds like a lot, a large number of these are semi-private, either: at car dealerships, attached to apartment buildings — you could probably use these in a pinch but I assume it’s frowned upon — or paid parking lots.

    In reality, I’ve only happened across maybe a half dozen (or less?) chargers that are actually near a destination I intend to visit. That’s not great.

    Fast Charging

    Fast charging is where the infrastructure is currently lacking the most.

    Excluding dealerships, there are only 13 charging locations that offer > 50kW (5 > 100kW) in Winnipeg.

    That’s not great.

    Outside of the city there are 23 > 50kW (9 > 100kW). None of those are to the east.

    If you’re thinking of heading out of town, you’ve got to do a lot of pre-planning. And in the winter, with the possibility of being stranded in the cold. That’s a little scary.

    Verdict

    The bottom line for me is: city driving an EV in a Winnipeg winter is not a big deal, at all. In fact, the nearly instant heat is almost reason enough to switch to an EV! Not to mention the extremely low operating cost.

    Highway driving in a Manitoba winter becomes a little more iffy but that’s more of a function of poor state of the infrastructure.

    None of this matters

    But thanks for reading. Ha.

    Let’s ignore the highway driving situation, since it is currently so infrastructure limited and just focus on the city driving question.

    Range is basically irrelevant. Even at my extreme worst case scenario of 1.6km/kWh, that’s slightly over 100km on a full charge. I don’t think I’ve ever driven 100km around the city? But if I did, I could find a fast charger.

    The real question isn’t range. It’s this: can you meet your daily driving needs by charging at home?

    For me: the answer is a resounding yes. But I work from home and live in a reasonably walkable neighbourhood, and there are some days the car doesn’t even move.

    For you, it depends.

    If you have a longer commute, relying on level 1 charging during a week-long Winnipeg cold snap would be challenging. As your daily usage exceeds the range gained by charging over night, you’re gradually slide closer to 0%. Worst case scenario you might have to find a fast charger once or twice that week. In my opinion, that’s still not really a big deal.

    On the other hand, if you have a longer commute and a bunch of additional errands that are far-flung, you might find yourself cutting it close to 0% on a very cold day. If that’s your reality, then yeah — maybe an EV isn’t the right fit right now.


    1. The Kona’s infotainment system provides a real-time reading of electrical energy being consumed by each system (it looks like this); additionally, the trip metrics provider a km/kWh (it looks like this). I use this sources throughout. ↩︎
    2. If you haven’t be radicalized in favour of heat pumps yet, I highly recommend watching this incredible video by Technology Connections. ↩︎
    3. It’s not technically 0kW, running the lights, screens, radar, fans, etc consumes about 650W, or roughly equivalent to a mid gaming PC. Heated seats/steering wheel and rear window defrost can bump this up to a nearly a full 1kW. Parked with no lights or fans drops it down below 300W. ↩︎
    4. I suspect A/C has a similar impact on range, since the heat pump just changes directions to cool in the summer. But the temperature differentials are much lower. TBD maybe I’ll post a follow up in the summer. ↩︎
    5. I was not able to find a precise number Hyundai’s batteries but this seems to be the approx range mentioned by a bunch of source. ↩︎
    6. Counter-intuitively, the Kona with smaller wheels is about 14% more efficient. ↩︎
    7. It’s possible that vehicle weight has little to no effect on EV efficiency (see Aging Wheels’ video about EV towing). Though I’m curious if a full car would decrease the heating load. ↩︎
    8. This is a bog standard wall plug, maxing out at 1.3kW. Upgrading to level 2 is a significant expense since it would involve upgrading the 100A panel in our house, possibly running thicker gauge wiring out to the carport, plus the level 2 charger itself. I estimate this is around $2000 of possibly unnecessary expense. ↩︎
    9. Based on plugshare, filtering for CCS1 and J-1772 connectors (i.e. what my car can actually use without an adapter). ↩︎