Vibecoding
30 minutes
linux
macos
windows

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

vibecoding

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):

python
import 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)

bash
git 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

ProblemFix
JSON decode errorDelete tasks.json and recreate with []
Emoji not showingWindows 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 remove command
  • 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:

0/4

Congratulations! You've completed the Vibecoding track. For more advanced topics, check out the Engineer Track or explore Patterns.