A practical guide to vibe coding: rapidly building products using AI-assisted tools like Cursor or Windsurf. This approach focuses on quick iteration and shipping functional prototypes. While I’ve primarily used Cursor and Windsurf, similar principles may apply to other AI coding tools like Replit or Bolt
You can find most of my vibe coded products on /projects
The vibe is simple: ship fast. Prioritize functionality first, design second.
This mindset helps you stay focused on solving problems rather than perfecting things too early.
Stick to popular tech stacks — they usually perform better with LLMs.
If your project involves a database, go with:
If you don’t need auth just go with a JSON Database, SQLITE, Google Sheets or Airtable
Your first prompt is crucial because the LLM has zero context about what you’re building. Here’s the an example structure I usually follow:
Context
---
I’m building [project name]. My ideal user is [target user],
and the problem I’m solving is [problem].
Tech Stack
---
I’m using a NuxtJS starter template generated via <command>.
Package manager: bun
Use Supabase for database and authentication.
This is just context, don’t generate code yet.
This helps the LLM build context of your project before diving into implementation.
Have a Product Requirement Document (PRD). It can be just a list of features and ideas for what libraries you’ll use.
Create a WYSIWYG markdown editor.
The user types in markdown, and the editor renders live HTML.
Use TipTap for the editor.
Fix errors and warnings as they appear, don’t wait till the end of your project to fix it.
Use version control. Manually commit after each feature or major change. Simple, but critical.
LLMs don’t always know the latest packages or external APIs. Help out the LLM by:
As your codebase gets complicated you need to specify what changes to make to which files
Implement user authentication with Supabase,
I want the user to be able to sign in via Google Auth on @login.vue
Use the below code as reference for @login.vue:
<code sample>
And use the below code as reference or @callback.vue to
create a callback function
<code sample>
Copy and paste the error → Ask the LLM to fix it (repeat)
Do not change any functionality.
Only update HTML and Tailwind classes.
Make the page look like Notion.
Use #28282B for primary buttons and borders.
Add icons from phosphor-vue (duotone style).
Add a light gray border (gray-100)
around @editor.vue to visually distinguish it from other elements.
This is a strutured approach on how I code with LLMs. I’m always trying out new ways to improve my workflow and this is a work in progress.
I'm a generalist product manager, engineer now working in growth and marketing. I've worked across quantum, fintech, and devtools, & write about tech and life here.
Get posts & updates about latest things I'm working on straight to your inbox.