Whenever I make something I write a blog about it. Sometimes I write essays too. Here's everything I've made and written.

I like being able to see how my work has changed over time! Infinite Hamlet isn't great, but there's a throughline from it to Stranger Video.

Anyway. Click the tags below to filter down the posts. I've tagged what I think is my best work with "Best of." Hopefully the other tags are self-explanatory.

  • Questions to ask when I don't want to work

    Treating myself a little more kindly

    Sometimes I don’t want to work. Not wanting to work makes me feel bad.

    My identity is tied up in liking to work hard! And I work for myself - it’s very easy to slack off. Not wanting to work makes me feel lazy. It makes me feel like I need to buckle down, and I feel like something is wrong with me when I can’t.

    This used to make me upset. I’d spend days distracted, neither fully working nor fully relaxing. Now when this happens I tell myself:

    You love to work. That hasn't changed.
    Something else needs to.

    This reframing has been a revelation for me. Thinking this way makes it easier to change my process, helps me find what excites me, and makes it easier to consciously take breaks. Here are some questions I ask in order to isolate what needs to change.

    Keep reading...

  • BreakTime

    Putting Brick Breaker inside Google Calendar and writing an engine along the way

    I made a game. It’s called BreakTime. It’s Breakout (aka Brick Breaker) running inside Google Calendar. Your meetings are bricks. It (optionally) declines the meetings you destroy.

    shattering some meetings

    It’s a chrome extension. You can install it here. It has no external dependencies; it’s 1,500 lines of javascript including a little game engine I made for the project.

    Making it was a ton of fun. Let me tell you about it.

    Keep reading...

  • TelEyegraph

    Converting blinks to morse code

    I made a little tool. It’s called telEyegraph. It converts blinks to morse code.

    me, blinking out a dril tweet

    I built it because I’m fascinated with controlling things with your eyes and as a test of the React and CSS skills that I spent January learning.

    You can play with it here or check out the code on github.

    Keep reading...

  • Talk Paper Scissors

    Rock paper scissors on the phone

    I made a new game with greg technology. It’s called Talk Paper Scissors. It lets you play rock paper scissors with strangers by calling a phone number.

    the Talk Paper Scissors mascot

    It’s an attempt to make an audio-only stranger video. Here’s how it works:

    • you call a phone number
    • you’re asked to say rock, paper, or scissors
    • you aren’t allowed to say anything else
    • you hear a recording of what the stranger said and are told whether you won or lost

    Games are 3 rounds long. Your stats are tracked between rounds.

    To play call 1-(515)-762-5762 (that’s 1-515-ROCK-ROC). Note that this is a US number so fees may apply if you call internationally!

    Keep reading...

  • I made a substack

    Thinking about audience engagement

    I made a newsletter. It’s here, on substack. Then I wrote a post on my blog about making a substack. It’s here, on my blog, which you’re reading right now.

    Keep reading...

  • My Computer Tells Me to Go to Bed

    Every night at 12:15 AM my computer tells me to go to bed.

    No, really. A voice says “time to sleep.” Then this window pops up:

    yeah, it's a little verbose

    If I hit “ok” the window pops up again a minute later. Sometimes I move the popup out of view and ignore it for a few minutes. Sometimes I snooze it and keep coding (or writing - it’s 12:28 AM right now). But most of the time I go to bed.

    Keep reading...

  • Stranger Video

    Staring contests with strangers

    Update: the day after I posted this stranger video went viral in japan. It was a ton of fun. The viralness has died off for now; I’m working on a separate post about the experience of using stranger video at peak popularity.

    I have a new project. It’s called ‘stranger video.’ It’s about staring at strangers.

    this is me and a friend - no strangers!

    stranger video has some rules:

    • you are paired with a stranger for a video call.
    • video is tightly cropped to just your face and cuts out if there’s no face in frame.
    • no audio, no text chat, just silent video.
    • video cuts out as soon as one of you blinks.

    You can play it at stranger.video

    It’s the most uncomfortable thing I’ve built. I hope you love it.

    Keep reading...

  • Flappy Dird

    Flappy Bird implemented in MacOS Finder

    I made a game. It’s called Flappy Dird. It’s Flappy Bird inside MacOS Finder.

    ad placements start at $2,000

    It has instructions, high score tracking, and marquee banner ads. You double-click to start a game and select any file in the window to jump. It runs at 4 frames a second and can’t run much faster. It occasionally drops inputs for reasons that you’ll understand if you finish this blog.

    I’m going to lay out how Flappy Dird works and how it got there. Head to the github repo if you want to check out the code or play the game yourself.

    Keep reading...

  • My Sheets Adventure

    A totally normal real-time game running in a Google Sheet

    I made a game. It’s in a Google Sheet:

    really, really, I'm fine

    There’s some stuff going on here! But in addition to aesthetics this game is “real time” - the spreadsheet tracks the time when you complete tasks and compares those times to where the animated blue progress bar is. Your final evaluation (in the lower right) tells you whether you completed your tasks early, on time, or late. This is all driven purely via Google Sheets formulas - no Apps Script or other trickery needed.

    Let’s talk about how this works!

    Keep reading...

  • Measuring something changes it - and sometimes that's enough

    Every night I write down six seconds of my day that I want to remember.

    Some nights I struggle to come up with something worth writing down. That’s ok! Sometimes I’ll struggle for many days in a row. That’s less ok.

    But when I have multi-day stretches where I have nothing to write down I notice. And noticing causes me to start changing my behavior. Journaling this way helps me seek out memories worth remembering.

    Measuring and optimizing the right metric can be powerful. Measuring and optimizing the wrong metric can be disastrous. But sometimes the act of measurement itself is sufficient to change behavior for the better.

    Keep reading...

  • Hexagone

    A font that converts hex color codes to rgb

    So here’s a neat trick:

    the font is called hexagone because it gets rid of hex

    By changing the font I’m able to automatically convert hex color codes to RGB! What’s going on?

    Keep reading...

  • Swedish Furniture Conglomerate Survivors


    Gameplay Video

    I like the 'pop' that the ghosts make

    Keep reading...

  • Wub

    Say nonsense words fast


    • Genre: Competitive toungue twister
    • Links: play it right here or play it on itch
    • Engine: A little hand-rolled javascript
    • Time Spent: ~4 hours one evening
    • Other Stuff: I built this game at Recurse Center, a magical place that functions like a writers retreat for programmers. Consider applying!

    In Wub you’re prompted to say some silly phrases while a timer plays. When you finish saying the silly phrases the timer stops. The first phrase you say is “wub wub1.” That’s why it’s called wub.

    wub wub wub wub wub

    1. Interestingly, the API does a better job of detecting the phrase “wub wub” than detecting a single wub! 

    Keep reading...

  • Infinite Hamlet

    Typing Shakespeare via Twitch chat

    I turned off Infinite Hamlet on September 30th.

    Some quick stats: 41 unique chatters submitted 4,400 characters and completed 136 lines of hamlet. Running it was a ton of fun! I’m excited to revisit this kind of game in the future.


    • Genre: twitch-plays-pokemon-like
    • Links: play it live on twitch
    • Engine: Godot 3.5
    • Time Spent: ~2 weeks on and off
    • Other Stuff: I built this game at Recurse Center, a magical place that functions like a writers retreat for programmers. Consider applying!

    Gameplay Video

    To play Infinite Hamlet you attempt to type out all of Hamlet one character at time via twitch chat. That’s the whole game. It’s called “Infinite Hamlet” because of the infinite monkey theorem


    Keep reading...

  • Wordle (Firefox's Version)

    Running Wordle in the Firefox address bar via OpenSearch

    So here’s a neat trick:

    If only the font was monospaced

    That’s the firefox address bar! And I’m playing a full game of Wordle in it! What’s going on?

    Keep reading...

  • Game 6: Put the DVD logo in the Corner

    This game was linked from New York Times Watching newsletter on Friday September 8, 2023. This was super cool for me! Margaret Lyons I have no idea how to get in touch with you but thanks for mentioning my game!


    • Genre: Uh. Arcade action game / childhood dream achievement simulator (?)
    • Links: play it on itch or check out the code on github
    • Engine: PICO-8
    • Time Spent: 4 days (June 27th - June 30th)
    • Other Stuff: I built this game at Recurse Center, a magical place that functions like a writers retreat for programmers. Consider applying!

    Gameplay Video

    My favorite part was adding manual 'particle effects' by drawing individual pixels to the screen

    Keep reading...

  • Game 5: ReShape Tower Defense


    • Genre: Tower defense with a vaguely roguelike choose-1-of-3 upgrade system
    • Links: play it on itch or check out the code on github
    • Engine: Godot 3.5
    • Time Spent: Uh. 15ish days? May 8th - May 13th part time, May 29th - June 11th full time1.
    • Other Stuff: This game shamelessly rips off the UI of DesktopTD, one of my favorite games of the flash game era. Thanks for the many hours of enjoyment, DesktopTD!

    Gameplay Video

    I was so excited when I first combined 'many projectiles' and 'exploding projectiles'

    1. More context than you want or need: I started making a tower defense, went on a trip and worked on it in my off hours, dropped it to make click click trick for a game jam, and then started back up on a new tower defense on June 7th (using the bones of the original TD). 

    Keep reading...

  • Game 4: click, click, trick


    • Genre: Rhythmic puzzle game
    • Links: play it on itch or check out the code on github
    • Engine: Godot 3.5
    • Time Spent: May 15th - May 21st (1 week)
    • Other Stuff: The first few levels of the game are probably too hard. If you almost immediately get stuck check out “the game is too damn hard” below.

    Gameplay video

    No phones in sight just squares pulsing to beats

    Keep reading...

  • Game 3: Don't Send Me a Puddle (Ludum Dare 53)


    Gameplay video

    If I showed any more you'd get spoiled!

    1. Alright I did a two-hour game jam and made a relaxing drive but that doesn’t really count. 

    Keep reading...

  • Game 2: Sisyphus Needs a Nap


    • Genre: Launcher, almost idle. Inspired by “Learn to Fly” and some other games popular in the Flash era.
    • Links: play it on itch or check out the code on github
    • Engine: Godot 3.5
    • Time Spent: April 11-13, April 18-26 (12 days with some traveling in between)
    • Other: Sisyphus Needs a Nap got more plays on itch in a single day than platris did over its lifetime! It also made it to the top of itch’s “new and popular web games” page. Neat!

    Gameplay Video

    alright I cheated and started part of the way through the game but it's more fun that way.

    Keep reading...

  • Game 1: Platris


    Gameplay Video:

    the enemy is named doug

    Keep reading...

  • No Results Found!

    try another search

get new posts via twitter, substack, rss, or a billion other platforms
or subscribe to my newsletter right from this page!