← All work

Live — this is the real project running in the page.

Aniemails

Your writing style, rendered as a creature.

Role
Sole designer and engineer; system design and build direction
Stack
Python · SVG · Slack API · Stanford POS Tagger
Dates
2012, revived 2026

Built with Claude Code; system designed and build directed by me.

In 2012 I built Born Between the Lines: a tool that read your email and drew an animal for each person you wrote to. The premise was that the way you write to your mother is measurably not the way you write to your landlord, and that the difference is a shape.

The original pipeline ran raw email through the Stanford POS tagger into a hand-curated lexicon of about 8,259 words, each tagged with part of speech, subjective strength, sentiment, and a visual trait. Adjectives set body texture and shape. Verbs set the eyes. Conjunctions grew antlers. but_CC → _ANTLERZ is a real line in that dictionary.

I rebuilt it in 2026 because the language had moved and the tooling had caught up.

The decision

Five renderers over one genome, not one renderer with five skins. Tangram, Glyph, Origami, Tamagotchi, and Chernoff each read the same six dimensions — energy, warmth, formality, vulnerability, reciprocity, play — and disagree about what they mean. Chernoff faces come from a real statistical tradition of encoding multivariate data in facial features. Tangram is pure geometry. Putting them side by side over identical input makes the mapping visible as a choice rather than a truth.

The non-obvious engineering problem was seeds. Four of the renderers derive their jitter from a hash of the whole genome, so nudging any dimension by 0.01 rerolls every wobble. Under a parameter sweep that reads as noise unrelated to the parameter. There is now a pin_seed context manager that holds jitter constant so you can see the treatment respond, and it never touches shipped behaviour — you pin the seed to judge a design, and unpin it to see what users actually get.

What it cost

The lexicon is a 2012 artifact and it shows. It has no idea what an emoji is, treats “lol” as noise, and was built on email — a form most people now use for receipts. The revival works because the analyzer was rewritten around dimensions rather than word counts, but the visual traits still inherit assumptions from a corpus that predates how anyone writes now.

What I’d change next

The creatures are read-only. They should be arguable: point at an antler, see the sentence that grew it. Every creature is currently a claim about you with no way to check its evidence, which is the same failure I spend the rest of this portfolio complaining about.

The contacts in the live demo are the project’s own synthetic personas — six fabricated correspondents scored through the real analyzer. No actual correspondence appears here.