I’ve decided to start my own startup here in Silicon Valley. Initially, I considered working on music recognition, but I ultimately chose a different path. Follow me on this journey!

Debugging Supabase Sessions, UX Microcopy Tweaks, and Planning for Backend-Agnostic Auth

Morning Vibes

Started my day by chasing a bug that’s been haunting me like a ghost in a legacy PHP CMS.

Session states in Supabase are still acting weird in multi-tab and cross-device cases. One user logs out on desktop, still logged in on mobile. Happens ~20% of the time. Totally unacceptable. Dug into Supabase internals—I think it's a refresh token race condition when cookies aren’t synced fast enough. Temporarily patched it, but it smells like patch-on-a-leaking-boat energy.

This led to the classic founder spiral: “Should I switch off Supabase? Hard cut to custom auth? Write my own session manager?” Then I sobered up. We're building a backend-agnostic layer anyway. Time to let abstraction do its thing.

So that's what I worked on mid-morning: extracted the session management flow into its own module, with a flexible interface for plugging in other backends. First version is rough, but it's working. Really proud of how it simplifies future integrations. Firebase? Custom backend? Bring it on.

Product Feedback Loop

Had a quick sync with my designer. Cleaned up some auth microcopy, especially around error states like “Invalid token” or “Session expired.” We borrowed conversational tones from Stripe and Notion—they’ve nailed that balance between clarity and not sounding like a robot.

An early user mentioned “I didn’t know if the login worked or not.” That was enough for us to ship small UI affordances—like a bounce animation for successful login. Feels better already. It’s a crazy feeling when two lines of text improve trust.

How-To: Building A Backend-Agnostic Session Manager

Here’s the mini-tutorial I wish I had yesterday:

  1. Abstract your session logic from day one. Build an interface like:
interface SessionProvider {
  getCurrentSession(): Promise<Session | null>
  refreshSession(): Promise<void>
  signOut(): Promise<void>
}
  1. Don't assume cookies or localStorage. Support both, and isolate storage concerns.

  2. Handle refresh race conditions by debouncing or mutex locking refreshToken() calls. Token storms are real.

  3. Instrument everything. Log session lifecycle events. You can’t fix what you can’t measure.

Start with Supabase, but build with swap-ability in mind. Firebase, Clerk, custom OAuth—your code shouldn’t care.

Gut Check

Momentum ≠ Progress. Spent a good chunk of the afternoon rewriting tiny bits of code and pretending it was moving the needle. Had to stop and re-do my priorities. Cut 3 tasks that felt “important” but were actually me avoiding the investor deck.

Speaking of which, deck v2 is in progress. Clean, lo-fi slides. Clearer narrative. Fewer buzzwords. One slide simply says: “Google login, 750ms to screen. No reload.” That’s it. Gotta let the product lead.

Outreach Anxiety

Sent a few cold emails to dev tool founders I admire. It’s still scary hitting send on those. But you can’t wait for luck. One “hey this is cool” reply can shift the week. No replies yet. Refreshing Gmail like it's 2009.

Today’s Lessons

  • Abstractions are your armor against early-stack regret.
  • One confused user is enough signal. Listen to them.
  • Cold emails feel vulnerable. Do them anyway.
  • Build for swap-ability from day one.

Ending the day tired but satisfied. No launch yet. No hockey-stick charts. But every line of code today pushed us toward real technical leverage.

See you tomorrow.

Warning: Empty Post

Did you enjoy this? Then I have to disappoint you: it’s 100% made up by AI. No human has spent a second creating this; nobody is even keeping up with this site or reading anything it publishes. Yet, this article has just taken away some of your time … Isn’t that depressing? This is the inevitable future of the internet, so we must rethink our relationship with it. The empty blog is an experiment showing the reality of the dying internet, but it also offers hope and a view of our future use of this technology.

About The Empty Blog