Hi, how are you? Say it with a face and a color

A small app to check in with a face and a color, ask someone how they are with a one-time link, and watch everyone's colors blend on an anonymous map

Visit hi-how-are-you.pages.dev (opens in a new tab)

Date

2026

What I did

Product design

Front-end development

Full-stack development

Hi, how are you? is a way to ask someone how they are, and mean it. You pick a face and its color fills your screen. You send a one-time link; the other person answers first, and only then do you see each other. A global map blends everyone's colors, with no names and no accounts.

The project began on 29 October 2026, playing with text emoticons drawn with ":" eyes and no nose. The working name was Entre dos; that same day it became Hi, how are you?, with the interface in English.

Hi, how are you? home on a full yellow background: a big smiley face drawn with text characters, six small round face buttons, a note field that reads Add a note (optional) and a button, I'm feeling like this. The mobile view shows the same composition stacked
Six faces, no words. The background takes the color of the face you pick.

What it does

  • Check in. Six emotion-only faces, each with a color assigned by social convention (blue for sadness). No word is attached, so the face stays open to interpretation. An optional note stays private.
  • Ask someone. One tap creates an individual link, copied with a small popover and no extra screen. The other person answers first and only then sees your face; you see theirs once they answer. Each link is a closed exchange between two people and works once. There is no chain.
  • Both, blended. After the answer, the two colors mix as a soft organic nebula rather than a straight diagonal, with both faces still visible.
  • History. A private diary of your own feelings and your shared exchanges, saved in the browser, without accounts. Each record can carry a private note, shared exchanges can be re-copied, and you can delete your own records.
  • A global map. Every check-in adds one anonymous pin: a full-viewport blend of everyone's colors, where tapping a face shows the exact date and time it was added. No names, no link back to private exchanges.
From check-in to the map. Recorded on a local copy with example data.

Design decisions

  • Faces over colors alone. A colors-only version was tried and rejected as too abstract: you cannot tell calm from sadness. Few faces, emotion only, no kisses or jokes.
  • Color is the protagonist. Full-screen vibrant gradients, with text directly over the color. The ink adapts: it switches between black and white by contrast, on the map by the dominant luminance. The colors themselves are never darkened for the sake of text.
  • The reveal comes after answering. The other person's face is never exposed before you answer, neither in the interface nor in the API.
  • No accounts, on purpose. History is tied to the browser. If the browser data is erased, the history cannot be recovered; that trade-off was chosen over sign-ups and recovery links.
  • Small warm details. Rounded translucent controls, a random favicon drawn from the app's own faces on every visit, and a toast that confirms a copied link without leaving the screen.

Under the hood

  • A single-page app served as the static assets of a Cloudflare Worker, with a small JSON API and a D1 (SQLite) database. Tokens are opaque; there is no identity anywhere.
  • Answers are bound with a conditional write, so two people answering the same link at the same moment cannot both get through. Answering your own link is blocked.
  • Basic anti-abuse: per-hour rate limits keyed by a hash of the IP, never the raw IP, generous on purpose so real retries are not stopped. A blocked request only reads; it writes nothing.
  • When the map gets dense, its color field renders at reduced resolution and CSS upscales it. In a synthetic benchmark (1920 × 1080, 150 pins) rendering went from about 38 seconds to about 1 second, with no visible change. It is a lab benchmark, not a device measurement.
  • Zero cost by design: Workers, D1 and Pages on the free plan, where hitting a limit stops requests until the next day instead of billing. Live at hi-how-are-you.pages.dev.

Limitations

  • The site has not been verified in Safari on a physical iPhone, including the color strip under the notch. The map benchmark is synthetic.
  • History cannot be recovered if the browser data is cleared or the device changes: the price of the no-account model.
  • The map shows the exact time of each check-in. An audit suggested rounding it for privacy; showing it was an explicit product decision.
  • The screens and the recording in this case study were made on a local copy with example data, not real check-ins.

More projects