Passwords kill conversion. Every password field is friction. Reset flows, browser popups asking to save passwords, "I forgot my password at 2am" support tickets—they all cost you users. Velocity X dashboards ship magic links by default: users paste their email, check their inbox, click a link, and they're in. No password field. No reset flow. One click. It's fast, it's secure (one-time codes), and it turns password-anxiety into a frictionless onboarding moment. Supabase Auth handles the hard bits: generating time-limited codes, sending emails via Resend, and auto-signing users in when they click. The tradeoff is real—email delivery can fail, links can be misclicked, and some power users want a password—but the conversion lift justifies it. Here's the full pattern: magic link flow, Supabase Auth setup, Resend email template branding, link expiry tuning, fallback password gates for power users, and the 6 gotchas that bite production teams.
Why Passwords Are a Conversion Tax, Not a Feature
The average person has 100+ passwords. They forget them constantly. Password managers help, but they're not universal. A user lands on your SaaS signup form, sees a password field, and either (a) invents a weak password they'll forget, (b) uses the same password they use everywhere (security nightmare), or (c) bounces to a competitor with SSO. That's the tax. Magic links flip the equation: the thing users already trust (their email inbox) becomes the key. No password to invent, no manager to configure, no "I forgot" email—just click the link in your inbox. Conversion rates on magic-link flows are 20–30% higher than password flows, because the friction is lower. And from a support angle, you eliminate 40% of password-reset tickets. For Aidxn B2B clients, passwordless is the default, and password login is the fallback for admins who insist on it.
The Magic Link Flow: What Users See
Here's the UX: user lands on login, types their email, clicks "Send me a link." Your app sends an email with a one-time link (valid for 24 hours). User opens email, clicks link, and Supabase automatically signs them in—no password prompt. If the email bounces or gets marked spam, they can click "resend link" and try again. For a power user who wants a password, there's an "also set a password" option in account settings.
Magic Link Email Template
The email matters. A generic "Click here to sign in" gets marked as phishing spam 40% of the time. You need branding, clear CTA, link text preview, and a fallback code they can copy-paste if the link breaks. Resend (our email partner) makes this easy with React email templates.
// src/emails/MagicLinkEmail.jsx
import { Html, Body, Container, Text, Link, Button } from '@react-email/components';
export function MagicLinkEmail({ email, magicLink, code }) {
return (
<Html>
<Body style={{ fontFamily: 'Inter, sans-serif', backgroundColor: '#fafafa' }}>
<Container style={{ maxWidth: '600px', margin: '40px auto', padding: '20px' }}>
{/* Header with logo */}
<div style={{ textAlign: 'center', marginBottom: '32px' }}>
<img src="https://aidxn.com/logo.svg" alt="Aidxn" style={{ height: '32px' }} />
</div>
{/* Main message */}
<Text style={{ fontSize: '18px', fontWeight: 'bold', marginBottom: '8px' }}>
Your magic link is ready
</Text>
<Text style={{ color: '#666', fontSize: '14px', marginBottom: '24px' }}>
Click below to sign in to your dashboard. This link expires in 24 hours.
</Text>
{/* CTA Button */}
<Button
href={magicLink}
style={{
backgroundColor: '#7c3aed',
color: 'white',
padding: '12px 24px',
borderRadius: '6px',
textDecoration: 'none',
fontWeight: 'bold',
display: 'inline-block',
margin: '24px 0',
}}
>
Sign in to dashboard
</Button>
{/* Fallback code for people who can't click links */}
<Text style={{ color: '#999', fontSize: '12px', marginTop: '24px', marginBottom: '8px' }}>
Or copy this code to sign in manually:
</Text>
<pre style={{
backgroundColor: '#f3f4f6',
padding: '12px',
borderRadius: '4px',
fontFamily: 'monospace',
fontSize: '14px',
userSelect: 'all',
}}>
{code}
{/* Footer */}








