Solo Dev · Cursor-First · Ship or Kill Last updated: 2026-03-08 | Based on: Cursor docs + Reddit + Medium + Community research
| Claim | Reality |
|---|---|
| 200K token context | Actual: ~70K–120K (internal truncation, silent) |
| .cursorrules works | DEPRECATED → use .cursor/rules/*.mdc |
| Cursor follows rules | Ignores them ~1/3 of time (community finding) |
| Reads full .mdc file | Reads top ~30 lines + last ~100 lines of long files |
| Agent mode = autonomous | Still needs your direction and checkpoints |
- Tab autocomplete is the best in market (fastest, most accurate)
- Full codebase context when you @-tag files correctly
- Visual inline diffs — best for reviewing changes
- Agent mode for multi-file tasks
- Plan Mode: reads, doesn't write → use for exploration
- MCP integrations for external tools
- Context degrades in long sessions → start fresh chat often
- Rules are inconsistently applied → repeat critical rules in every prompt
- No persistent memory between sessions → memory files are your only fix
- Over-truncates large files → never reference files >300 lines without @-tagging
- "Forgets" earlier decisions mid-session → checkpoint commits often
- Hallucinations increase after ~60% context fill → use /compact or new chat
- PLAN before BUILD — separate planning session before any code
- Memory Bank —
.memory/folder Cursor reads at session start - One .mdc = one concern — never mix topics in one rule file
- Critical rules on line 1 — not line 50
- Commit after every working step — not at end of day
@docs/references — don't paste context into chat, reference files- alwaysApply: true only for truly universal rules (stack, naming)
- Never ask Cursor 2 things at once — one task per prompt
- STATUS.md — your session memory, updated every session end
- DONE.md frozen at start — your scope lock, never edited mid-project
"I'm building X (what) for Y (who) so they can Z (do what)" If you can't write this in one sentence → you're not ready to build.
Remove it. Does the app still work? NO = CORE (build first, never skip) YES = FEATURE (build after core ships)
1. Data model → what data exists?
2. Core logic → what does it do?
3. Terminal test → does it actually work?
4. API/interface → how does it connect?
5. UI → how does user see it?
6. Features → only after step 5 is stable
BUILD FROM SCRATCH IF:
• Nothing close exists (truly unique domain)
• Existing repos have wrong architecture
• MVP is <500 lines total
• Your core logic = your competitive edge
FORK/USE REPO IF:
• Core logic already exists (auth, CRUD, API clients)
• You need boilerplate (Next.js, FastAPI, etc.)
• Saves >1 full day of work
• It's infrastructure, not your product
MUST DO before taking anything:
1. Check stars (>100) + last commit (<6 months)
2. Read README in 30 sec → does it fit?
3. Check open issues (many bugs = danger)
4. Read /src structure — understand what you're copying
5. Copy ONLY what you need — strip everything else
6. Log it in SOURCES.md with: repo URL + what you took + why
7. NEVER copy license-incompatible code into commercial projects
BRAINSTORM: before starting, messy ideas, MAX 15 min, nothing committed
DOCUMENT: only after something WORKS, to lock it in
NEVER: document what doesn't exist yet (it will change)
Before every project write the DONE CARD and freeze it:
PROJECT: _______________
DONE WHEN: [max 2 sentences, specific and measurable]
WILL NOT BUILD: [kill list — at least 3 things]
DEADLINE: _______________
MAX FEATURES BEFORE SHIP: ___
Use ICE Score — simple, fast, solo-friendly:
Impact (1-10): How much does this move the project forward?
Confidence (1-10): How sure am I this will work?
Ease (1-10): How fast/simple to implement?
ICE = (Impact + Confidence + Ease) / 3
Always work highest ICE first.
v0.0.x broken / experimental
v0.x.0 core works, incomplete
v1.0.0 DONE definition is met → ship it
v1.x.0 post-ship features
v2.0.0 breaking architectural change
Use TERMINAL for:
• Testing logic/data
• Running scripts and automation
• Debugging
• First 80% of every build
• Anything without a real user
Use UI for:
• User-facing interaction
• After terminal version works and is tested
• When input is complex enough to need forms
• Demos / sharing with others
New UI per project?
YES if user-facing product
NO if internal tool or script
ALWAYS: keep a /ui-components reference to reuse from
alwaysApply: true → injected into EVERY request (use sparingly, <10 rules)
alwaysApply: false + globs → only activates for matching files
alwaysApply: false + description → cursor decides when relevant
---
description: One sentence — what this rule does and when to apply it
globs: ["src/**/*.ts", "src/**/*.tsx"]
alwaysApply: false
---
# Rule content here (KEEP UNDER 50 lines total).cursor/rules/
00-project.mdc → alwaysApply:true — stack, project name, language
01-code-style.mdc → alwaysApply:true — naming, formatting, patterns
02-memory.mdc → alwaysApply:true — how to use .memory/ folder
03-workflow.mdc → alwaysApply:false — planning, commits, task flow
04-repo-rules.mdc → alwaysApply:false — what to do when using external repos
05-no-go.mdc → alwaysApply:true — absolute prohibitions (SHORT)
Before starting:
1. Read STATUS.md — understand where we are
2. Read .memory/00-project.md — remember what this is
3. Read DONE.md — remember what the end looks like
4. Your task today: [SINGLE CLEAR TASK]
5. Do NOT create new files unless I explicitly ask
6. Commit with descriptive message after each working step
✓ Read STATUS.md — where am I?
✓ Check TASKS.md — what's next?
✓ Check git log --oneline -5 — what did I last do?
✓ State the ONE goal for this session
✓ Set a time limit for this session
If nobody (including you) has used the project in 7 days after "finishing" it → kill it or pivot. A project with no user is a hobby. That's fine — but name it honestly.
More than 2 = you finish none. Keep FEATURES.md as the graveyard for ideas — they live there, not in your head.
✓ Any file >300 lines → split it
✓ Any function >30 lines → split it
✓ Any function doing >1 thing → split it
✓ If you can't explain what a file does in 1 sentence → rename/refactor
✓ No file should surprise you when you open it
This framework is a living document. Update it when you discover something that works better.