Nick Richard · Full-stack developer

I turn rough ideas into things people actually use.

Right now that's Hanzi Rivals, a Chinese vocab game you play with friends over text. It runs on the web, as an iPhone app and right inside iMessage.

Now buildingHanzi Rivals
Live at hanzirivals.com

Featured · 2026 · Live

Hanzi Rivals 汉字

Paste the words you're studying, send a friend a link, and take turns attacking and blocking with meanings, pinyin and handwriting. Your friend doesn't install anything, and you both practice on every move.

  • Five ways to play. Duels, a 60-second sprint, a group climb, a daily set and word chain.
  • Handwriting, graded by stroke. Matched against stroke data, not OCR, and forgiving about order.
  • A 124,000-entry dictionary that searches as you type in pinyin, English or characters.
  • Three surfaces, one client. A web app, an iPhone app and an iMessage game, all solo.
  • TypeScript
  • React 19
  • Vite
  • Node + Express 5
  • SQLite
  • Capacitor
  • Swift
  • Fly.io
Leo charged a 30-power Dragon Strike by writing 机场 (jīchǎng, airport), with buttons to send the turn to Ana by text or link.
Character Sprint: the word 'weather' with two empty character slots above a grid of nine look-alike characters, a 54-second timer and a score of 2,300.
A duel in progress: Leo's scholar fighter against Ana's fox at 73 and 74 HP, with Light Attack, Heavy Attack, Dragon Strike and Wild Strike to choose from.

Earlier work · 2021

Where it started

Full-stack apps from 2021, two of them built with a team. Their demos ran on Heroku's free tier, which ended in 2022, so these link to the source.

  • Hanzi U landing page: a photo of paper lanterns above the heading 'Welcome to Hanzi U!'

    2021 · Solo

    Hanzi U

    The first try at a Chinese learning app: character decks ordered by how often each character appears, with quizzes to track progress.

    React · Chakra UI · Flask · PostgreSQL

    Source on GitHub for Hanzi U
  • Catch Me If You Can's Create Route screen: a loop drawn on a map of Brooklyn

    2021 · Team of 4

    Catch Me If You Can

    Draw a walking, biking or running route on a map, then race your rivals' times on it. Every route has its own leaderboard.

    React · Redux · Flask · PostgreSQL · Mapbox

    Source on GitHub for Catch Me If You Can
  • Burn Reads landing page: 'Welcome to BurnReads' over a candle flame

    2021 · Team of 3

    Burn Reads

    Goodreads, inverted: search for the books you can't stand, shelve them as kindling and leave fiery reviews.

    React · Express · Sequelize · PostgreSQL · Google Books API

    Source on GitHub for Burn Reads
Portrait of Nick Richard

About

Hi, I'm Nick.

I'm a full-stack developer who loves the stretch between a rough idea and something people actually use. Programming is where my problem-solving and my creative side meet, and I'm happiest learning whatever a project needs next.

On Hanzi Rivals that meant game design, a Node server and SQLite schema, a React client, a Capacitor iPhone app with a Swift iMessage extension, 16×16 pixel fighters, and a guzheng soundtrack synthesized in the browser. Chinese has been a thread through my work: my first app, Hanzi U, was a character trainer too.

Toolbox

Languages
TypeScript, JavaScript, Python, Swift, SQL, HTML & CSS
Front end
React, Vite, Astro, Redux, Web Audio, Canvas & SVG
Back end
Node & Express, Flask, SQLite, PostgreSQL, REST APIs
Mobile
Capacitor, iMessage apps, Installable web apps
Shipping
Fly.io, Docker, GitHub Actions, Git

Contact

Have something in mind? Let's talk.

Whether it's a role, a project or a question about Hanzi Rivals, email is the quickest way to reach me.