Shipping Something Small, Quickly
Put it all together and ship a small but complete project using AI assistance.
What you'll accomplish
Build and run a complete (small) project end-to-end with AI assistance.
Prerequisites
- Completed lessons 1-3
- Python installed
- A code editor
The Goal
Build and run a complete command-line todo list app in 30 minutes.
Features:
- Add tasks
- List tasks
- Mark tasks as done
- Save tasks to a file (persistence)
Note
This is a small project, but it covers the full workflow: planning, building, testing, and running.
Step 1: Plan (3 minutes)
Before coding, decide what you want:
- Storage: Simple JSON file
- Interface: Command-line commands
- Scope: Just the basics - no due dates, priorities, etc.
Step 2: Bootstrap (5 minutes)
Create the project structure:
Step 3: Generate the Core (10 minutes)
Use this prompt to generate the main code:
Todo App Generator
Generate a simple command-line todo app
Create a simple command-line todo app in Python with these requirements:
1. Commands:
- python todo.py add "task description" - adds a task
- python todo.py list - shows all tasks
- python todo.py done 1 - marks task #1 as done
2. Storage: Read/write tasks from tasks.json
3. Format in tasks.json:
[{"id": 1, "text": "Buy milk", "done": false}]
4. Keep it simple:
- Use only standard library (json, sys)
- No classes needed, just functions
- Print helpful messages
Generate the complete todo.py file.Step 4: Review and Apply
The AI should generate something like this (your version may differ):
pythonimport json import sys TASKS_FILE = "tasks.json" def load_tasks(): try: with open(TASKS_FILE, "r") as f: return json.load(f) except FileNotFoundError: return [] def save_tasks(tasks): with open(TASKS_FILE, "w") as f: json.dump(tasks, f, indent=2) def add_task(text): tasks = load_tasks() new_id = max([t["id"] for t in tasks], default=0) + 1 tasks.append({"id": new_id, "text": text, "done": False}) save_tasks(tasks) print(f"Added task #{new_id}: {text}") def list_tasks(): tasks = load_tasks() if not tasks: print("No tasks yet!") return for task in tasks: status = "✓" if task["done"] else " " print(f"[{status}] {task['id']}. {task['text']}") def mark_done(task_id): tasks = load_tasks() for task in tasks: if task["id"] == task_id: task["done"] = True save_tasks(tasks) print(f"Marked task #{task_id} as done!") return print(f"Task #{task_id} not found") def main(): if len(sys.argv) < 2: print("Usage: python todo.py [add|list|done] [args]") return command = sys.argv[1] if command == "add" and len(sys.argv) > 2: add_task(" ".join(sys.argv[2:])) elif command == "list": list_tasks() elif command == "done" and len(sys.argv) > 2: mark_done(int(sys.argv[2])) else: print("Unknown command or missing arguments") if __name__ == "__main__": main()
Review checklist:
- Only uses standard library (json, sys)
- Has all three commands (add, list, done)
- Loads and saves from tasks.json
- Matches what you asked for
Step 5: Test (5 minutes)
Expected output:
[ ] 1. Buy groceries
[ ] 2. Call mom
[ ] 3. Finish project
Then after marking #1 done:
[✓] 1. Buy groceries
[ ] 2. Call mom
[ ] 3. Finish project
Step 6: Commit and Ship (2 minutes)
bashgit add . git commit -m "Complete todo app with add, list, and done commands"
Tip
You just built a working app in 30 minutes! It's not perfect, but it works. That's what vibecoding is about.
Common Issues
| Problem | Fix |
|---|---|
| JSON decode error | Delete tasks.json and recreate with [] |
| Emoji not showing | Windows may need UTF-8 encoding in terminal |
| "python not found" | Use python3 on Linux/macOS |
What You Built
In 30 minutes, you:
- Planned a small project
- Generated code with AI
- Reviewed it for correctness
- Tested all features
- Committed your work
Next Steps
Ideas to extend this (good vibecoding practice):
- Add a
removecommand - Add due dates
- Add priorities (high/medium/low)
- Save to a different file format
Each extension is another opportunity to practice the vibecoding workflow.
Track Complete!
You've completed the Vibecoding track if you can:
Congratulations! You've completed the Vibecoding track. For more advanced topics, check out the Engineer Track or explore Patterns.