How to Build an App With Cursor (As a Non-Engineer)

Building a swipe-to-decide group meal app from scratch in one afternoon.

A real workflow guide for designers, creators, and non-engineers who want to build a working app using Cursor 3 + Composer 2, without writing a single line of code.

You'll need:

  • A laptop (Mac or Windows)

  • A phone

  • About 4–6 hours of focused time

  • A Cursor subscription (Pro plan, ~$20/month — needed for Composer 2 + Cloud Agents)

  • Optional but nice: a Gemini account for image generation (Nano Banana)

You don't need:

  • Coding experience

  • Design experience (helpful, not required)

  • Money for designers, developers, or APIs

The mindset shift

Before tools, before prompts, this is the most important part:

Old mental model: "I have an idea → I describe it to AI → AI builds it."

This is wrong, and this is why most people end up with generic, ugly apps.

Correct mental model: "I am the product manager. AI is the engineer. My job is to write the spec clearly enough that any engineer (human or AI) could build the same thing."

If you skip the spec and just type "build me a Tinder for food," you'll get an app that looks generic and has random behaviors you didn't ask for

Spend 60% of your time on the spec, 30% on assets and visual direction, 10% on actually prompting Cursor. This ratio sounds wrong, but it's correct.

Phase 1: Sharpen the idea (1–2 hours)

Start with the pain point, not the feature. "Tinder for restaurants" is a feature. "8 friends fighting in a group chat for 30 minutes about where to eat" is a pain point.

Stress-test against existing apps. Ask: "Why wouldn't they just use [existing app]?" If the answer is "mine is prettier" — pivot or kill it.

Real example: original idea was "swipe meals, then order on Uber Eats." When stress-tested with "how is this different from Uber Eats?" — there was no good answer. Pivoted to "swipe restaurants as a group" — different problem Uber Eats doesn't solve.

Define the smallest version that proves it. For a demo or video, you don't need a real backend, real users, real multiplayer, or auth. You need a flow that LOOKS real, enough fake data for predictable demos, and one "wow" moment per screen.

The meal app shows "8 players joining a room" — only 1 is real (you). Other 7 are hardcoded names that pop in on a timer. Looks multiplayer on video. Build complexity stays low.

By end of phase 1, write down in plain English:

  • Pain point in one sentence

  • Why it's different from existing apps

  • Who specifically uses it

  • Smallest version that proves it

Phase 2: Write the spec doc (1–2 hours)

This is the doc you'll feed to Cursor. The clearer it is, the better the app will be.

Structure:

  1. Product summary (one-liner, pain point, differentiator)

  2. Personas

  3. Screen-by-screen flow

  4. Data architecture (even fake data needs structure)

  5. Edge cases

  6. Tech stack

  7. Out of scope

  8. Success criteria

For each screen, answer:

  • Purpose (one sentence)

  • What's on it (list elements)

  • What user can do

  • What animations

  • What triggers next screen

The mock data rule (most important architectural decision):

All fake data lives in ONE file (e.g., lib/mockData.ts). UI components NEVER hardcode mock values. Components consume data through functions like getPlayers(), getRestaurants().

Why: when your demo gets traction and you want to launch for real, you don't rebuild. You replace 5 functions and you're done.

Save the spec as USER_FLOW.md. You'll commit it to GitHub so Cursor reads it during build.

Phase 3: Visual direction + assets (1–2 hours)

This is where most non-engineer apps fail. The flow works, but the app looks generic.

Pick reference apps, not adjectives. Don't say "modern and clean." Say:

  • "Cron Calendar's typography polish"

  • "Headspace's warm illustrations"

  • "Duolingo's bouncy mascots"

Mix references to make your own vibe. Example: "Studio Ghibli soul meets Duolingo playfulness."

Pick exact hex codes, not color names:


Token

Hex

Use

Background

#FBF4E8

Warm cream, not white

Primary

#E8825F

Muted coral, not red

Success

#7FB069

Sage green

Text

#3D2E2A

Warm cocoa, not black

Six colors max.

Pick 2 fonts: one display (headings), one body (UI). Both from Google Fonts.

Generate a mascot if it fits. Cheapest way to make an app feel charming. Use Gemini Nano Banana — best for character consistency across multiple poses. Generate 5 poses (waving, thinking, jumping, working, sad). Save as transparent PNGs. Tell Gemini explicitly "transparent background" or you'll get grey rectangles.

Validate vibe BEFORE building. Mockup the landing screen by hand or AI. Look at it on your phone. Ask: "Would I show this to a friend?" If yes, that's your vibe contract. If no, tweak first.

5 minutes here saves 2 hours of rebuild later.

Phase 4: Set up tools (30 min, one-time)

GitHub: create public repo with README + Node .gitignore

  1. Cursor: download from cursor.com, sign in with GitHub, subscribe Pro plan, update to latest, open Agents Window (Cmd+Shift+P → "Agents Window")

  2. Connect Cursor to repo: Home dropdown → Cursor Cloud → select repo, set Cloud mode + Composer 2 model

  3. Vercel: sign up with GitHub, Hobby plan, don't import yet

  4. Optional: Cursor mobile app (lets you tweak from phone — flagship Cursor 3 feature)

Phase 5: Commit spec + assets (15 min)

On GitHub repo:

  1. "Add file" → "Upload files"

  2. Drag in USER_FLOW.md → commit

  3. Same for asset files (mascot PNGs etc.) → commit

Files at repo root is fine. Cursor agent finds them either way.

Md Files that I used for this project:

If this helped, the best thank you from you is a follow + share with one designer friend who needs to see it! More breakdowns coming weekly!!!

— Serena

Create a free website with Framer, the website builder loved by startups, designers and agencies.