skip to content
all work
activeAugust 2026 – present

a drawing app for exactly two people.

ILY

built with
  • TypeScript
  • React
  • Vite
  • Cloudflare Workers
  • Cloudflare D1
  • Durable Objects
  • Web Push
  • Web NFC
where it stands
phase 7 of 9. web app and NFC contract working; physical-object qualification open.
not yet public

Four things shaped this app: one thumb, patchy signal, two time zones, and an object you tap to open it.

what it is

An installable web app that lives on two phones. You draw something with your thumb, you send it, the other phone says it arrived. Tapping a small printed object with an NFC tag in it opens the app and starts the connection. That is the entire product.

A small idea taken seriously: a shared archive of what has been sent, both local times on screen at once, and a doodle sent to someone with no signal still arrives when they come back.

ILY drawing canvas with a heart, partner-online status, and both local times visible

it does not scale, on purpose

Built for exactly two approved people. The design would have to be thrown away to support three.

No feed, no discovery, no sharing outward, no sign-up. Every decision that would normally go to growth went to the two people who use it, which is a rarer exercise than it sounds, because almost every default in modern web tooling assumes the opposite.

ILY private invite screen labeled just for you two

where the hard parts were

The thumb and the time zones were interface work. The signal and the object turned into the real engineering, and a third problem arrived with them.

Idempotent NFC finalization. A phone tapping a tag is lossy and retry-prone, and the naive version double-fires. Finalization runs through a Durable Object, so a repeated tap resolves to the same event rather than a second one.

Offline as the normal case. A doodle sent to someone with no signal is the expected path, not the error path. The archive rolls and delivery is eventually-consistent, because the alternative is an interface that lies about state.

Costs bounded by architecture. Workers, D1, Durable Objects and static hosting keep a two-person product inside Cloudflare's free tier, with the domain the only intended recurring cost.

ILY shared archive open with four saved drawing thumbnails

the accessibility bar

WCAG 2.2 AA, full keyboard operation, prefers-reduced-motion substituted rather than switched off, 44×44 minimum targets, colour never the sole carrier of state.

A two-person drawing app is exactly where it would be easiest to argue the standard does not apply. Nobody is auditing it. That is the reason to apply it, and the reason the bar is the same one I hold on work somebody is paying for.

Close view of the ILY canvas and its large colour and stroke controls

physical and digital

Phase 7 of 9. The web app works, and the enclosure's model passes its checks locally. The object is a printed shell built to a layer contract the geometry is not allowed to violate, and the phase closes when a real phone reads a real printed object reliably.

The interesting half is already proved: a product where the hardware, the network and the person can each fail, and the app tells the truth in every one of those cases.

contact

If the work overlaps with something you are building, message me.

opens in your email app

neil mahure

applied AI engineer · San Francisco Bay Area · neil@neilmahure.com

open to applied AI engineer and forward deployed engineer roles.