
Portfolio Feature
The Player Creator
Visitors make a pixel character on my portfolio and get a page of their own. No sign-up, no password, and I read every one before anyone else can.
My portfolio is built like a 16-bit game, so at some point the obvious question was: why is the visitor the only one without a character? The Player Creator is the answer. You pick a pixel avatar, give it a name, and you're on the site, with a card in the row and a page you can share.
The interesting part isn't the form. It's that there is no sign-up, no password and no email anywhere in it, and it still knows who you are tomorrow. Everything below is how that works, and what it costs.
Here's the thing it produces. A card in a row you can swipe through: portrait on the left, name in the pixel face, whatever the person chose to say about themselves, and their tags underneath. Every character in that row belongs to somebody who visited the site. Tap any of them and you're looking at their card instead of mine, read only, because nobody gets to touch anyone else's.

And here's the creator itself. Eight pixel characters to pick from, a name, and that's genuinely all you have to fill in. Everything under it is optional. A username is made from your name if you leave it empty, so "Renée Dubois" becomes @renee_dubois without you thinking about it. The counters aren't decoration: 280 for the bio, 24 for a name, six tags maximum. I'd rather the limit be visible than have a field quietly refuse you later.

No sign-up. That was the one rule I set before starting, because a sign-up wall on a portfolio loses almost everyone and a password would then be mine to protect. So: when you save, the server mints a random 256-bit key, puts it in a cookie your browser can't read from JavaScript, and stores only a hash of that key. The cookie says which character is yours; the site holds nothing that can unlock it. Clearing cookies would normally end the story, so you also get a recovery key once: sixteen characters, shown a single time. It forgives the mistakes people actually make: lowercase, missing dashes, a letter O typed for a zero.
Then it stops being automatic. Nothing you make is public until I've read it. Before it reaches me it goes through word lists in English and Hungarian, and those lists assume people will try. It undoes leetspeak, strips accents, collapses stretched letters, catches spaced-out words and swapped Cyrillic look-alikes. Links are refused outright rather than flagged, in every disguise I could think of, down to "site dot com". Anything that gets past lands in a queue for me. It's slower than publishing instantly. It's the only reason I'm willing to have this on a site with my name at the top.
Every approved character also gets its own page, at /players/their-username, which is the bit people actually use. The catch is that most people fill in a name and not much else, so the page is built for the sparse one on purpose. It carries its own frame, and a join date that's always there, so a character with nothing but a name still looks finished rather than broken. If you've linked GitHub, your handle shows here too, but only if you tick the box. Off by default, and it's verified by signing in rather than typed into a field, so nobody can claim to be someone they aren't.

A few things I'd tell anyone building something similar. Notion is the database, which sounds like a joke and mostly isn't. It gave me a review queue, an admin UI and an audit trail for free, and the ceiling is real but a long way off. One character per person is impossible to guarantee without accounts, so instead there are three layers that make it hold for everyone except the determined: the cookie, a cap per network, and a rate limit. And the feature that took longest wasn't the creator at all. It was deciding what happens when someone types something horrible into it.