Skip to Content


Documenting a lifetime of learning
  1. Introducing syngen

    A library for audio game development

    Over the past year I’ve used web technologies to create audio games like soundStrider and participate in numerous game jams. With syngen I’m releasing my tools as open-source so folks can join me in crafting dynamic audio experiences and games for the web. Continue reading to dive into its features, view example code, and learn more about its future.

    Continue reading Introducing syngen
  2. Introducing Auraboros

    An endless audio bullet hell game

    Devour singularities or be assimilated in this submission to Ludum Dare 47. Auraboros is an audio game that’s best experienced with headphones.

    Continue reading Introducing Auraboros
  3. No Video Jam postmortem

    What I learned from hosting an audio gam jam without graphics

    Last month it was my pleasure to host the No Video Jam, an audio game jam featuring accessible games without graphics. In two weeks dozens of developers created 20 games that were accessible to gamers who are blind. We had a variety of submissions, from action games to interactive fiction, that surprised and delighted. Continue reading to learn more about how it went and the lessons I learned from organizing my first jam.

    Continue reading No Video Jam postmortem
  4. Introducing S.E.A.

    A relaxing audio watercraft simulator

    Drive an experimental watercraft and explore relaxing aquatic soundscapes in this submission to No Video Jam. S.E.A. is an audio game that’s best experienced with headphones.

    Continue reading Introducing S.E.A.
  5. Introducing Kaleidophone

    A relaxing generative audio toy

    Manipulate time to explore ambient soundscapes in this submission to LOWREZJAM, Brackeys Jam, and AGJam. Kaleidophone is an audio toy designed for deep thinking, meditation, and relaxation that’s best experienced with headphones.

    Continue reading Introducing Kaleidophone
  6. Announcing the No Video Jam

    An audio game jam without graphics

    Please join us on Friday, August 14, for the No Video Jam, an audio game jam featuring accessible games without graphics. Participants will create blind-friendly games of any genre using audio and accessible text. Submissions will then be judged by the public based on criteria like accessibility, fun, originality, and sound.

    Since I began making audio games I’ve learned that it’s a niche and neglected market. Gamers who are blind often feel isolated from the mainstream gaming community and have few games made specifically for them. My hope with organizing this jam is to give them visibility by normalizing audio games with sighted developers and gamers. Then when it’s over they’ll have more games in their canon to enjoy and discuss.

    I’m looking forward to hearing what everyone creates!

  7. Introducing Audo

    A high-speed endless audio racing game

    Avoid opponents and collect power-ups as you vie for the top velocity in this submission to GMTK Jam 2020. Audo is an audio game with screen reader support that’s best experienced with headphones.

    Continue reading Introducing Audo
  8. Building Soundsearcher

    Starting with nothing for Ludum Dare 45

    Last month I participated in Ludum Dare 45. Over its 48 arduous hours there were many challenges to overcome and insights to gain as I built a game completely from scratch.

    As an accessibility advocate with a background in digital signal processing, I wanted to explore how the Web Audio API could be leveraged to build spatial audio experiences. The result was Soundsearcher, a minimalist exploration game designed for playing with your eyes closed.

    Continue reading Building Soundsearcher
  9. Introducing Soundsearcher

    A minimalist auditory exploration game

    Explore a procedurally-generated world of synthesized sounds in this submission for Ludum Dare 45. Soundsearcher is designed for playing with your eyes closed. Headphones are strongly recommended.

    Continue reading Introducing Soundsearcher
  10. A Day With Python

    Where have you been all my life?

    Today I installed Python for the first time.

    Whenever I learn something new I like to stay motivated with a small project. A friend and data engineer told me that Python excels at crunching numbers—and lately I’ve been quite a Numberphile—so I built a small library for generating my favorite OEIS integer sequences. When I encounter exciting sequences in the future they’ll surely get added.

    You can explore the result at this GitHub repository.

    Continue reading A Day With Python
  11. Web Performance

    An empathetic pitch

    Unlimited data and processing power is a privilege.

    Ignoring this privilege adversely affects: user experience because true performance is the foundation of perceived performance; accessibility because every requirement for a baseline experience is exclusionary; the economy as long as our users are paying for each web request with their labor; and the environment because every web request has material costs.

    It’s easy to forget that the web is for all people. So it’s a moral imperative to prioritize performance when we develop for the web.

  12. Lazily Lazy Loading

    Crafting a lazy loader for lazy folks

    Lazy loading is one of the best accessibility wins available to front-end developers. By deferring the loading of assets until we need them, we save our users’ data—and consequently their money. For folks who pay disproportionately more for their data, this can be invaluable.

    In this tutorial we will craft a lazy loader that can be deployed with minimal effort on any site. Because we’re lazy folks. So we’ll leverage the MutationObserver and IntersectionObserver interfaces to lazily lazy load lazy-loadable elements whenever they’re added to the DOM.

    Please feel free to skip to the result at this GitHub repository.

    Continue reading Lazily Lazy Loading
  13. Changelog: Links

    Conjuring a Web 1.0 staple

    The thing I miss most about the web before social media was everyone having their own blog or personal site. It was decentralized and punk.

    The URL made it all work. One inbound link and you were in. And every outbound link made it stronger. So we all linked to our friends and favorites to include, inform, and pay respect. We called them blogrolls.

    Let’s unpack some teachable moments that I encountered while implementing my links page.

    Continue reading Changelog: Links