Projects (29)
I'm a big fan of ambient visualization; taking a data point and embedding it in your peripheral vision. I remember reading an essay where the author wore a belt that vibrated directionally; and he found himself innately not getting lost with the constant indicator of north being applied indirectly.
I think there's probably something similar there to be done with a desktop background, and so I wanted to lay the groundwork. This is a node js web server that runs on your Mac OS computer, and after being granted permissions, it will change your desktop background to whatever color the webhook receives. While the server is running, this theoretically lets any application change the desktop bacgkround on-the-fly, which is fun.
I wanted to make a website for my friend Zack, who makes excellent creative work and deserves an outlet besides Instagram.

Zack's the type of guy to be camping on a rare Maine island only accessible by ferry and with questionable cell reception. I knew it had to be pretty low-friction to update; so I decided to allocate a phone number on Twilio just for him. He can text that number anywhere, via SMS, and his blog updates instantly.

Sometimes when I'm coding late at night, I need something oddly hypnotic to stare at in the corner of my screen. That's why I built cli-ascii-3d - a completely unnecessary but strangely satisfying ambient ASCII art generator for your terminal.
It's basically a lava lamp for terminal dwellers. The shifting patterns of characters create an ever-changing dimensional space that's perfect for those moments when you need to zone out and let your subconscious work on a problem.
The animation speed and node count parameters let you dial in exactly the right level of visual chaos - from gentle waves (-b 2 -s 0.5
) to hyperspeed matrix-style madness (-b 20 -s 5.0
). I personally keep it running on a spare terminal while debugging, and more than once I've had that "aha!" moment while staring blankly at the patterns.
Have you ever found yourself typing the same loooong command over and over? So did I. After the 500th time typing git checkout -b feature/something-with-a-ridiculous-name
, I finally snapped and built cli-alias-wizard.
It provides an easy CLI to add and edit the aliases in your .zshrc
file. Sure- you could just edit it with vim- but I wanted a little wizard that would auto-refresh my shell afterward and make sure I didn't mess it up.


An Electron desktop app to customize the experience of talking to different LLM models through OpenRouter. Added a bunch of power user convenience features for myself, like seeing the total token usage, cost per token, and being able to prune out large messages from the history if desired. My goal is to keep adding on to it and using it as my daily-driver interface for different models.

I've always been fascinated by Conway's Game of Life and its emergent complexity from simple rules. As a terminal enthusiast, I naturally wanted a version I could run right in my command line and maybe play in the background like a dorky tamogotchi or futuristic lava lamp.
CLI-Conway is my minimalist implementation that brings cellular automata to your terminal. It's a text-based version where each cell is represented by using braille unicode characters, allowing it to perform at a higher resolution than just per-character.

I built Draft Assistant because I wanted to build a system to encourage me to finish my draft blog posts in Obsidian.
This CLI tool is deliberately retro, with a 90s hacker aesthetic that makes me nostalgic for the days when computers were mysterious and text-based. It connects to a local LLM to analyze my drafts and suggest improvement paths - kind of like having a no-nonsense editor who lives in your terminal.
The entire app is a single JavaScript file because I'm stubborn like that. It uses Blessed for the terminal UI (which is criminally underrated for building text interfaces) and deliberately avoids colors or fancy styling. The navigation is all keyboard-based - arrow keys, Enter, and single-letter commands like 'n' for next and 'z' for metadata.
My favorite feature is how it structures the writing improvement process like an old-school RPG quest: select your draft, choose an improvement path, then follow step-by-step guidance to level up your writing.
I've always been fascinated by the I Ching (Book of Changes), so naturally, I built a terminal-based version that brings this 3,000-year-old divination system to the command line.
CLI-CHING doesn't try to digitize the entire process - you still need to physically toss three coins and report their results (heads/tails). This preserves the meditative ritual while letting the app handle the complex hexagram calculations and interpretations.
The technical bits were surprisingly interesting:
- Building a system to convert coin tosses into binary line types (yin/yang, changing/unchanging)
- Creating ASCII visualizations of the resulting hexagrams
- Implementing a local LLM connection to connect with LM Studio to generate contextual interpretations
There's something delightfully contradictory about consulting an ancient oracle through a terminal prompt. My favorite feature is the consultation history that's saved to a dotfile (.iching-throws
), which lets you track patterns in your questions and the resulting hexagrams over time. This combination of esoteric analog frameworks with the command line scratches a unique itch that I have around how I want to use computers.
Cyberpunk-inspired CLI tools for developers. These apps enhance productivity, creativity, and add futuristic vibes to your terminal. From Conway's Game of Life to git management, each tool is designed for both functionality and aesthetics. Perfect for livestreaming or just making your coding sessions feel more cyberpunk.
Project List
- cli-conway: ASCII Conway's Game of Life with interactive features.
- git-status-dash: Multi-repo git status reporter.
- cli-ching: Digital I Ching with LLM-powered readings.
- cli-ascii-3d: Terminal-based 3D ASCII shape visualizer.
- cli-alias-wizard: Guided CLI alias creator.
- cli-ai-chat: AI-powered chat in IRC-style CLI interface.
- directory-sync-tool: Visual directory comparison and syncing.
- cli-content: AI-assisted content creation from Obsidian drafts.
- showtouch: Large ASCII keystroke visualizer.
- ascii_webcam: Live webcam-to-ASCII converter.
- scrapbook-cli: Terminal-based digital scrapbook manager.
- cli-delta-dojo: JSON comparison game for code review practice.

In 2021, I got my hands on a massive NYPD complaint dataset from Gothamist/WNYC and immediately went down a data rabbit hole. I was curious if we could find patterns similar to the officers who killed George Floyd- early warning signs that got missed.
I started by converting an 81MB Excel file into SQLite and used Datasette to explore it. After initial poking around, I jumped into Neo4j, which I'd fallen in love with during a previous Russian Twitter trolls project.
Neo4j let me build this super cool officer-complaint network by writing Cypher queries. Every officer became a node connected to their complaints. I ultimately created 29,915 officer nodes with 159,671 relationships between them.
Then came the force visualization with Gephi (love-hate relationship, but unrivaled for networks). I used Force Atlas 2 layout algorithms and eigenvector centrality to identify clusters of officers who repeatedly appeared in complaints together. The network communities often mirrored real-world precincts, which reinforced my confidence in the analysis.
When Gothamist reporter George Joseph interviewed victims, they confirmed what the network showed - certain officers like Radoncic were "catalysts" who other officers "followed" into misconduct. Math and reality matched up!
I documented everything in excruciating detail (with footnotes!) so others could replicate it for their own police departments.
Me and my studio worked with the Wildlife Conservation Society to create a microsite telling the story of coral reefs that may defy the odds and survive climate change.
I worked with studio designer Sam Vogt to develop and implement a redesign of our studio site using Nuxt, Three.js, and TailwindCSS.
From August 2023 to August 2024, I focused on a weekly practice of spending a few hours in the local ceramics studio focusing on throwing small items, particularly espresso cups.
I helped gather and visualize data to tell the story of extremists gathering in Telegram chats.
I created an interactive map that overlaid historic redlining maps with the locations of the story's subjects and the toxic Defense Depot.
I created Coach Artie to serve as a Discord Studio Assistant and he has evolved into a powerful AI tool with memories and tool usage.
I worked with LongLead as an interactive producer and supporting developer to bring this award-winning story to life.
During the beginning of the COVID-19 Pandemic, I worked on Carnegie Melon University's COVIDcast project, prototyping data visualizations and user interactions to help the public better understand the a variety of data being collected across the country on trends in hospitalization, transmission, and movement.
I worked with the Washington Post Opinion section and contributor David Byler as well as the Washington Post interactives team to create a unique interactive, that would let users game out different potential election scenarios based on the latest poll results.
I spearheaded an internal effort to develop new D3-powered mapping software used for visualizing election maps and results live, through a touchscreen app wielded by Steve Kornacki known as the "Big Board".
In 2016 I was working at NBC News, and reporter Ben Popken approached me with a unique mission. He had been given a huge dataset of over 200k tweets sent by known Russian twitter trolls, and he needed a way to analyze and visualize it. I jumped at the opportunity to help.
In partnership from analysts from Neo4J we began by applying standard OSINT principles; patterns, daily volume, and senders. Because this was twitter, the trolls had also helpfully hashtagged their tweets, providing another feature to explore.
The Neo4J team helped build exports from the data as .csv files, which I then created interactive d3 visualizations and static visualizations in Illustrator to embed into the NBC News CMS. The data was later expanded on with a release of over 2 million Russian troll tweets by FiveThirtyEight.
Our analysis showed that Russan trolling often spiked during significant political events like debates, and via hashtag analysis, we found they often pushed ideologies from both sides of the political spectrum- which I visualized as a streamgraph, with flowing colors for each topic.

During my time at NBC News, I worked on the Foundry team, creating bespoke longform articles in collaboration with journalists across the organization. These specials focused on unique approaches to video, data visualiation, and storytelling on the web.
Does America Need Another Prison? (2018)
The Making of an Astronaut (2017)
Along with Gerald Rich, and the Vocativ data team, I received a Knight Prototype Fund grant to create an initial prototype for Dataproofer an open source tool to check data for reliability, missing data, and outliers.
In 2013 I joined Vocativ a small media outlet in New York focused on the dark web, as Graphics Editor. I worked to create daily data visualizations for breaking news and data investigations. I also created the newsroom dataviz style guide under direction of Pentagram, and lead our small team day-to-day.

I worked closely with GitHub's internal data, design, and visualization teams in 2013 to create a year-in-review website that included a number of visualizations, including a spinning globe showing the locations of actions taken on GitHub, powered by GitHub's enormous BigQuery database.
1
In my first interactive da visualization for a a media outlet, I worked with the Mother Jones team to create a visualization of Dark Money Super PACs, which had recently become legal after Citizens UnitedC)
When I was 18 I had a choice to make; go to college or join the San Francisco-based start-up that had offered me a job. I chose to move my life across the country and start my first full-time job as a Staff Designer at Visual.ly an infographics showcase and marketplace.
I created dozens of static infographics, and also learned D3 from my incredible colleagues, and I've been creating dataviz ever since.