Most teams reach for a custom backend too early. Express, NestJS, Fastify — they add complexity before you need it.

For mymuaythai.app, we went all-in on Supabase. Here's what that means in practice:

Auth

Supabase Auth with PKCE flow for iOS (critical — the standard flow silently fails on iOS WebViews). Magic links for web. Social auth (Google, Apple) for mobile.

Database

PostgreSQL with Row Level Security as the authorization layer. No middleware auth checks — the database itself enforces who can see what. This is a massive simplification.

Real-time

Supabase Realtime for the chat feature. No WebSocket server to manage. Subscribe to a channel, get messages. The Thai ↔ English translation happens in an Edge Function before the message hits the database.

Edge Functions

Business logic that doesn't belong in the client: payment webhooks, translation, email notifications, scheduled jobs. Deno runtime, deployed globally.

The tradeoff

You're locked into Supabase's patterns. Complex queries sometimes need raw SQL. The Edge Functions cold start can be noticeable. But for 90% of what we need, it's faster to ship and easier to maintain than a custom backend.

The key insight: the best backend is the one your team can ship with. For a two-person team building a multi-surface product, Supabase is that backend.

Share this article

X LinkedIn

Continue reading

Your AI-built product works. What breaks in production

What AI-generated code hides in production — secrets, data layer, EU AI Act exposure. Production Readiness Audit €3,500 · free 30-min call.

A Client Rebuilt My AML System in a Weekend. Here's What Both Codebases Actually Look Like.

A client rebuilt my AML screening system with AI in a weekend. I audited both codebases. Here's what the rebuild missed — and why it matters.

Why Your LLM App Needs a Graph

Stateless chatbots are a dead end. Here is how I am using graph-based architectures to build reliable AI agents that can actually reason.

← Back to all articles