<p>Last time we played SMTP sorcery to conjure passwordless login—beautiful in theory, hell in practice. Every mail provider now demands a paid, registered domain; slip through, and your welcome email lands in Spam. So I ripped off the bandaid: back to email + password. Crazy? Absolutely. But the mission’s unchanged.</p><p>That's not even the worst part! The worst part is the abyss yawning beneath my screen—endless tweets mocking my data-starved soul as Nigeria’s telcos jack prices sky-high. ₦1,000 for 3.5 GB in 48 hours; what a fucking joke. I recharge, only to find my motivation drained faster than my balance. I wake up each morning to a blinking cursor and no muse to feed it.</p><p>And yet, in the darkest scrolls of my social media feed—amid memes, political outrage, and endless hot takes—something shifted. Suddenly, instead of doom-scroll despair, I saw builders building, live-streams of code shipping, threads on design patterns igniting impassioned debates. Iron sharpens iron, right? So I leaned in, slapped open my laptop, and felt that spark again: the urge to craft, to ship, to carve meaning out of code.</p><p>Wait! Before we even continue, what the heck is he building that he needs smtp magic, a domain or an auth flow.Before we dive into what I’m building—and how it’s helping me stare down every distraction, from data-hike rage to unrelenting self-doubt—let me confess: this project is as much therapy as it is product. Each feature is a rampart against the noise. Every line of TypeScript is a foothold.</p><p>Remember that beauty-and-the-beast SMTP setup? It lived in a table called magic_links, with columns for user_id, token, and expires_at. Pretty—until it wasn’t. So I</p><p>dropped the old table. Removed migrations</p><p>Tossed every smtp-related file, code and folder out of my codebase .</p><p>Committed the void—felt like pulling off a Band-Aid.</p><p>This moment hurt, but databases are like relationships: if the foundation’s rotten, you rebuild.</p><p>I have to scaffold a new auth structure for our good ol' email and password authentication, install required dependencies like bcrypt, scaffold new DB structure.</p><p><br></p><p> I know I need a signup endpoint, but I don’t want just any signup endpoint—I want one that feels inevitable, like the internet needed me to write it.</p><p><br></p><p>“So,” I murmur to myself, voice echoing off empty walls, “first off: what’s the bare minimum here? I need someone’s email and password. Of course I need to hash that password—plain text is for amateur hour.” I crack my knuckles and think, *bcrypt*, because that library’s been in my head since I first learned what ‘salt rounds’ were. Twelve rounds feels like the sweet spot—enough friction to keep attackers honest, but not so slow that I’m sobbing into my beer.</p><p><br></p><p>I picture the user hitting “Submit” on that signup form. “POST,” I tell the code in my head, “that’s your signal. You listen for requests, you parse out JSON, and you validate: no empty email, no blank password. We’re not babysitting clowns who forgot to fill out a field.” It’s almost musical—JSON in, validation, then hashing. Each step is a note in the riff.</p><p><br></p><p>And of course, I imagine a little Prisma client humming in the background: “I take that hashed password, I store it alongside your email, and I give you back a shiny `userId`.” I lean back, hiccup. “That’s it. That’s all we need.” I can see the flow in my mind like a conveyor belt in a Tesla factory—streamlined, elegant, unavoidable.</p><p><br></p><p>I laugh to myself, thinking how this could’ve taken me days when I started, but now it’s muscle memory. The real genius isn’t in the code itself—it’s in stripping away every extra line, every unnecessary abstraction, until signup is pure. And that’s when I swivel in my chair, take another swig of beer, and whisper, “Ship it.”</p><p>Life’s a combustible mix of rage, hope, and code. We’ve faced the abyss—data hikes, unrelenting algorithms, self-doubt—and fought back with feature flags and clean code. This project isn’t just another SaaS; it’s my way of proving that even when the world screams “disconnect,” we can build something that connects</p>
Bits and pieces part 2: Rethinking auth
By
Matthew Okadinya
•
4 plays