Forms are one of those things everyone has built, but very few people enjoy spending time on. They tend to be designed quickly and revisited only when something breaks. But tiny decisions inside a form often have a lot of impact on how calm or frustrating the overall experience feels. Recently, while applying for a Frontend Engineer role at Evil Martians (the team behind tools like PostCSS & Autoprefixer), I noticed they weren't asking for a standard CV. Instead, they are asking for a link to the best login form I've implemented. At first, that sounded deceptively simple. But the more I thought about it, the clearer it became: building a good login experience is actually tricky, if you care about the right things. A login form is where frontend fundamentals get exposed. They even have an article outlining 11 best practices for login and sign-up forms (go ahead and give it a read). Reading it made me realize that the login/signup flow for beenthere.page is something where I had already spent a lot of time thinking about validation, feedback, accessibility and restraint. So this post is a breakdown of how I designed that flow. It's not a guide for building a "perfect" login form, it's more of a "here's what I cared about, what I avoided, and why" writeup. Most of these decisions are invisible when they are done right, but very noticeable when they are not. A Bit of Context This form is part of a niche product I'm building. (sorry for the shameless plug) beenthere.page is a calm, personal space for travel stories, where you can claim a public URL (for example, beenthere.page/sourav) and capture trips in a way you would actually want to revisit. It's built for remembering, not for algorithm - photos, small details you'd otherwise forget, inside jokes, meaningful places, and moments shared with the people you traveled with. Travel memories tend to disappear as stories vanish and photos get buried, and BeenThere is an attempt to create something intentional, human, and wo...
First seen: 2026-01-27 22:07
Last seen: 2026-01-27 22:07