You opened Cursor. You typed a prompt. Twelve seconds later, three files appeared. A button. A form. A header. The dopamine hit was real.
Then you tried to log a user in.
This is where most vibe-coded apps stop being fun. Not because AI cannot help, but because login is not a feature you generate in isolation. Login is a relationship between four things: your database, your auth provider, your access rules, and the rest of your product. Skip any of them and the whole thing breaks.
The illusion of speed
A working screen is not a working product. AI can write a Stripe checkout button in three lines of code. But that button is connected to nothing unless:
- A real Stripe product exists with a real price ID
- Your webhook is verified and listens for
checkout.session.completed - Your database has a place to mark this user as paid
- Your access rules check that flag before serving the course
Each of those is a small decision. Together, they are an architecture.
What random prompting misses
When you ask AI for "a login page," you get a login page. When you ask AI for "magic link login that creates a profile, sets a role, and protects the dashboard," you get something that actually works.
The skill is not the prompt. The skill is knowing what the prompt should contain.
What to do instead
- Define the user first. Roles, permissions, what they pay for.
- Sketch the data model. Tables, foreign keys, who owns what.
- Then write the screens. Forms are the easy part once the structure is clear.
This is exactly what the Mini Course walks you through - in under two hours.
The Introplan loop
Plan → Prompt → Review → Test → Ship. Skip any of these and you are gambling.
Want the full system? Start with the free Scorecard and decide if your idea is worth building before you write the first line of AI-generated code.