A Better Face for Every Unknown User

Most products handle an unknown user with a grey circle, two initials, and a quiet apology that the profile is incomplete.

It works. It also makes every unknown person look like the same person.

Blobatar takes a different route: give it a name, handle, or ID and it draws the same geometric face every time. The result feels small, but the idea is useful.

Consistency Beats Decoration

An avatar often appears in several places. A sidebar, a comment thread, a commit list, a presence indicator. If the same person keeps the same face, I can recognise them without the application storing another profile image.

That works for the people and objects that rarely have photographs: bots, agents, imported users, automated jobs, and commit authors. The face does not replace a portrait. It gives the fallback state a little memory.

Small Enough to Disappear

Blobatar’s core has no dependencies and weighs about 4.4 KB gzipped. It also offers framework packages and shadcn registry components. That matters because a fallback avatar should not become another subsystem.

Good tools solve one recurring problem, fit into the existing interface, and then stop asking for attention. This feels like one of those tools.

Cute, But Not Careless

The shapes make the idea approachable, but the useful details sit underneath. The project documents a 4.5:1 contrast target for the eyes, keeps expressions decorative, and makes motion optional. Its motion styles respect prefers-reduced-motion.

That turns a playful SVG into a reasonable UI primitive. It can be memorable without becoming another animated object competing with the page.

The Privacy Footnote

The hosted endpoint makes rendering easy, but it puts the name into the URL. If that name contains an email address or an internal ID, it may reach server logs, proxy logs, browser history, or analytics.

For sensitive identifiers, I would render inside the application, hash the input first, or self-host it. The developer docs explain the same trade-off: the public endpoint is convenient, while in-process rendering gives a product more control.

A Better Empty State

The lesson is not that every interface needs a blob creature.

It is that an empty state can carry identity without carrying a database. Sometimes the better design decision is simply a more thoughtful answer to what appears when data is missing.

A grey circle with initials has had a good run. It can retire from a few sidebars.