Building a Full-Stack App with Spec-Driven Development
Gunakan Kiro untuk mengubah ide menjadi requirements, design, implementation tasks, lalu aplikasi Task Tracker yang bekerja—dalam satu alur yang dapat ditinjau.
60 menit9 modul≤50 credit guardrail
01RequirementsApa yang dibangun?
→
02DesignBagaimana caranya?
→
03TasksLangkah implementasi
Yang akan Anda bangun
Task Tracker full-stack satu halaman. Frontend React, backend Express, dan penyimpanan in-memory di laptop Anda. Pengguna dapat melihat daftar task, menambahkan task baru, dan menandai task selesai.
Tampilan akhir aplikasi
localhost:5173
Task Tracker
Tulis judul task…
Add task
☐Learn Kiro Specsbelum selesai
☑Review requirementsselesai
☐Run smoke testbelum selesai
Empty state, loading, dan pesan error juga ditangani.
Satu halaman, satu form, satu daftar task. Tanpa login dan tanpa halaman lain.
Tiga user story
Sebagai pengguna, saya ingin melihat semua task saya.
Sebagai pengguna, saya ingin menambahkan task dengan judul wajib.
Sebagai pengguna, saya ingin menandai task selesai atau belum selesai.
UIReactTask form & list
HTTP / JSON→
APIExpress3 endpoints
Read / write→
DBMemoryTask store
High-Level Design (HLD)
Browser menjalankan satu halaman React pada port 5173. Native fetch mengirim request JSON melalui proxy Vite ke Express pada port 3001. Express membaca dan mengubah satu array Task di memory.
Layer
Tanggung jawab
Batas scope
React Client
Form, list, loading, empty, validation, dan error state
Satu halaman; tanpa router/global store
Vite Proxy
Meneruskan /api/* ke port 3001
Tanpa CORS package
Express API
List, create, dan toggle task
Tepat tiga endpoint
In-memory Store
Menyimpan id, title, completed, createdAt
Data hilang saat restart
Tiga API yang akan dibuat
Hanya tiga endpoint. Setiap endpoint melayani tepat satu user story di atas.
Halaman dibuka → GET /api/tasks → React menampilkan daftar atau empty state.
Story 1
2
Create
Pengguna mengisi judul → POST /api/tasks → server memvalidasi → task baru tampil.
Story 2
3
Toggle
Pengguna memilih task → PATCH /api/tasks/:id/toggle → status diperbarui.
Story 3
4
Restart
API dihentikan atau dimulai ulang → array kembali kosong. Ini perilaku yang disengaja.
By design
Learning objectives
01
Specify
Mengubah ide menjadi acceptance criteria yang dapat diperiksa.
02
Design
Meninjau komponen, API, data model, dan error handling.
03
Implement
Menjalankan task terukur dan memvalidasi hasil terhadap spec.
Modul 2 · 7 menit
Registrasi dan setup Kiro
Pasang Kiro IDE, masuk dengan identitas pilihan Anda, lalu catat saldo awal sebelum mengirim prompt.
1
Unduh dan instal Kiro
Buka kiro.dev/downloads, pilih installer untuk sistem operasi Anda, lalu jalankan instalasi.
2
Masuk ke Kiro
Buka Kiro dan pilih metode sign-in yang tersedia, misalnya GitHub, Google, atau AWS Builder ID. Akun AWS tidak diwajibkan untuk menggunakan Kiro.
3
Periksa credit balance
Buka dashboard subscription/usage dari Kiro dan lihat saldo awal Anda. Pembaruan usage dapat tidak langsung terlihat, jadi periksa lagi di antara fase bila perlu.
Rekomendasi penggunaan
Budget credit per fase
Pakai angka ini sebagai patokan saat lab berjalan. Total rekomendasinya 50 credit, sesuai Free tier.
Requirements≤ 6
Design≤ 6
Tasks≤ 4
Implementasi≤ 28
Validasi/fix≤ 6
Angka per fase adalah rekomendasi workshop, bukan tarif resmi atau jaminan konsumsi. Kompleksitas prompt, model, refinement, dan eksekusi task memengaruhi pemakaian aktual. Saldo sebenarnya selalu dilihat di dashboard usage Kiro.
Modul 3 · 5 menit
Siapkan workspace kosong
Kita sengaja memulai dari folder kosong agar artefak dan kode dihasilkan dari spec yang sama.
1
Instal Node.js LTS dan npm
Lakukan langkah ini sebelum workshop. Unduh rilis LTS dari Node.js Downloads. npm ikut terpasang bersama Node.js.
Windows
Jalankan Windows Installer .msi dan pertahankan pilihan default, termasuk penambahan Node.js ke PATH. Alternatif dengan winget:
PowerShell / Windows Terminal
winget install OpenJS.NodeJS.LTS
macOS
Cara termudah: unduh macOS Installer .pkg versi LTS lalu ikuti wizard. Jika diminta memilih arsitektur, gunakan ARM64 untuk Mac Apple Silicon atau x64 untuk Mac Intel. Jika Homebrew sudah tersedia, Anda juga bisa memakai:
Terminal · macOS
brew --version
brew install node
Jika brew belum terpasang, gunakan installer .pkg. Memasang Homebrew saat workshop berjalan terlalu lama. Terminal macOS memakai zsh, tetapi seluruh command lab tetap sama.
Linux atau WSL
Gunakan installer atau version manager LTS yang direkomendasikan pada halaman Node.js Downloads. Hindari package distro yang terlalu lama karena bisa tidak kompatibel dengan Vite.
Setelah instalasi pada sistem operasi apa pun, tutup dan buka kembali Kiro agar PATH terbaca.
2
Verifikasi Node.js dan npm
Buka terminal baru di Kiro dan jalankan:
Terminal
node --version
npm --version
Kedua command harus menampilkan nomor versi. Jika muncul not recognized pada Windows atau command not found pada macOS/Linux, restart Kiro lalu buka terminal baru dan pastikan Node.js tersedia pada PATH.
Khusus macOS: jika memakai Homebrew atau nvm, pastikan terminal Kiro memuat profil shell Anda. Homebrew berada di /opt/homebrew/bin pada Apple Silicon dan /usr/local/bin pada Intel.
3
Buat folder project
Buat folder bernama kiro-task-tracker, lalu buka folder tersebut melalui File → Open Folder di Kiro.
Struktur awal
kiro-task-tracker/
└── (empty)
4
Pastikan mode Spec tersedia
Pada chat Kiro pilih sesi Spec. Untuk lab ini gunakan alur Feature → Requirements-First, bukan Quick Spec, agar setiap keputusan dapat ditinjau.
Modul 4 · 10 menit
Definisikan requirements
Mulai Feature Spec Requirements-First. Kita menetapkan perilaku aplikasi dan batas scope sebelum Kiro menulis kode.
1
Buat Feature Spec
Pada panel Specs, klik +, pilih Feature lalu Requirements-First. Gunakan nama task-tracker.
2
Kirim prompt requirement
Salin prompt berikut tanpa menambah fitur lain.
Prompt 1 · Create requirements
Buat feature spec Requirements-First untuk aplikasi Task Tracker full-stack.
Tujuan pengguna:
1. Melihat daftar task.
2. Menambahkan task dengan judul wajib.
3. Menandai task selesai atau belum selesai.
Gunakan struktur monorepo dengan folder backend dan frontend. Backend memakai Node.js dengan Express dan penyimpanan in-memory. Frontend memakai React dengan Vite. Aplikasi hanya satu halaman.
API dibatasi menjadi:
- GET /api/tasks
- POST /api/tasks
- PATCH /api/tasks/:id/toggle
Acceptance criteria harus mencakup happy path, judul kosong, task yang tidak ditemukan, kegagalan API, loading state, dan empty state. Gunakan format EARS yang jelas.
Jangan tambahkan autentikasi, database cloud, deployment, Docker, state-management library, pagination, search, real-time update, atau styling kompleks.
3
Review sebelum approve
Buka .kiro/specs/task-tracker/requirements.md. Pastikan requirement menjelaskan perilaku yang teramati, bukan detail kode.
Menampilkan daftar dan empty state.
Menambah judul valid.
Menolak judul kosong.
Toggle status selesai.
Menangani not found dan API error.
Checkpointrequirements.md tersedia dan sudah disetujui.
Modul 5 · 7 menit
Review technical design
Generate design dari requirements yang telah disetujui. Jangan memilih teknologi baru saat fase ini.
1
Generate design
Lanjutkan workflow Spec dan minta Kiro membuat design.md. Jika diminta konteks tambahan, gunakan prompt pembatas berikut.
Prompt 2 · Design guardrail
Buat design sesederhana mungkin untuk workshop pemula.
Gunakan monorepo dengan folder backend dan frontend. Backend hanya berisi API task (Express, array in-memory, tiga endpoint). Frontend hanya berisi halaman React (React hooks bawaan, native fetch) yang mengonsumsi API tersebut. Sertakan data flow, kontrak tiga endpoint, model Task, validasi, dan error handling.
Sertakan juga spesifikasi UI/UX yang konkret: struktur DOM halaman (judul, form, kartu, daftar task), token warna sebagai CSS variable, dan gaya task yang sudah selesai (strikethrough, warna pudar). Ini requirement wajib, bukan opsional.
Hindari repository pattern, ORM, Docker, authentication, cloud services, UI framework/icon package, dan abstraksi yang tidak diperlukan.
2
Cocokkan design dengan target
TaskPagestate & fetch
→
TaskFormcreate task
+
TaskListrender & toggle
Method
Path
Success
Error utama
GET
/api/tasks
200 + array
500
POST
/api/tasks
201 + task
400 title kosong
PATCH
/api/tasks/:id/toggle
200 + task
404 not found
3
Periksa spesifikasi UI/UX
Pastikan design.md memuat struktur DOM (judul halaman, kartu, form, daftar task), token warna sebagai CSS variable, dan gaya task selesai (strikethrough + warna pudar). Ini bagian wajib, bukan pelengkap.
4
Approve design
Approve bila design hanya memiliki komponen, endpoint, dan spesifikasi UI/UX yang dibutuhkan. Periksa sisa credit di dashboard Kiro sebelum lanjut ke fase tasks.
Checkpointdesign.md memetakan UI → API → storage, termasuk spesifikasi UI/UX, dan sudah disetujui.
Modul 6 · 5 menit
Buat implementation plan
Ubah design menjadi task kecil yang memiliki hasil jelas dan dapat dijalankan berurutan.
1
Generate tasks
Lanjutkan workflow untuk membuat tasks.md. Gunakan pembatas ini jika task terlalu banyak.
Prompt 3 · Task plan guardrail
Buat tepat lima required implementation tasks:
1. Scaffold project dengan folder backend dan frontend beserta shared scripts.
2. Implementasikan backend: in-memory store dan tiga endpoint Express.
3. Implementasikan frontend: React UI dan state.
4. Integrasikan frontend dengan backend termasuk loading, empty, validation, dan error state.
5. Jalankan validasi build dan smoke test.
Setiap task harus merujuk requirement terkait. Jangan menambahkan optional tasks, deployment, authentication, database, atau test framework baru.
2
Review dependencies
Pastikan scaffolding dikerjakan sebelum backend/frontend, dan validasi menjadi task terakhir. Untuk lab ini jalankan task satu per satu agar konsumsi dan perubahan mudah diamati.
Mengapa ada dua pilihan Run All Tasks?
Pada versi Kiro IDE yang diuji untuk workshop ini, required dan optional task dibedakan pada tasks.md dengan format berikut. Konvensi marker, label, dan kapan chooser tampil dapat berubah pada versi Kiro berikutnya.
Gunakan untuk implementasi inti atau dry run fasilitator
Run all required and optional tasks
Required dan optional task yang belum selesai (- [ ]*)
Hanya stretch goal jika waktu dan credit cukup
Kiro membuat dependency graph dan menjalankan task terpilih dalam beberapa wave. Task independen dapat berjalan paralel; task dependent menunggu prerequisite selesai.
Checkpointtasks.md berisi tepat lima required tasks dan tidak memiliki optional task.
Modul 7 · 15 menit
Implementasikan vertical slice
Jalankan task secara berurutan. Setelah setiap task, lihat diff dan pastikan tidak ada scope tambahan.
1
Scaffold
Jalankan task scaffolding. Hasil minimum: root scripts, backend/, frontend/, dan dependency yang diperlukan.
Rekomendasi ≤ 4 credits
2
Backend
Jalankan task API. Review bahwa hanya tiga endpoint dibuat dan validasi title dilakukan di server.
Jalankan task integrasi. Pastikan frontend menggunakan native fetch dan memperbarui state setelah create/toggle.
Rekomendasi ≤ 8 credits
Jika implementasi berhenti atau terlalu luas
Gunakan satu prompt koreksi yang menyebut gejala dan hasil yang diharapkan. Jangan meminta Kiro “perbaiki semuanya”.
Prompt 4 · Focused recovery
Periksa implementasi saat ini terhadap requirements dan design task-tracker.
Perbaiki hanya masalah yang menghalangi vertical slice berikut:
- backend dapat dijalankan,
- frontend dapat dijalankan,
- daftar task dapat dimuat,
- task valid dapat ditambahkan,
- status task dapat di-toggle.
Jangan refactor, menambah dependency, mengubah styling, atau menambahkan fitur baru. Jelaskan file yang diubah setelah selesai.
Jalankan aplikasi
Pastikan terminal berada di root project yang berisi package.json, backend/, dan frontend/. Pasang seluruh workspace dependency:
Terminal · project root
npm install
Cara A — satu command (default)
Dari root project:
Terminal · project root
npm run dev
Client dan API berjalan bersamaan dalam satu terminal lewat concurrently.
Cara B — dua terminal, backend dulu
Gunakan bila Cara A tidak berhasil, atau Anda ingin log backend dan frontend terpisah.
Terminal 1 — backend lebih dulu:
Terminal 1 · backend
cd backend
npm run dev
Tunggu sampai log menunjukkan server aktif di port 3001. Jangan lanjut sebelum backend aktif, karena Vite proxy pada frontend akan gagal terhubung.
Terminal 2 — baru frontend:
Terminal 2 · frontend
cd frontend
npm run dev
Komponen
URL
Fungsi
React Client
http://localhost:5173
UI Task Tracker
Express API
http://localhost:3001/api/tasks
JSON task endpoint
Buka http://localhost:5173 di browser. Biarkan terminal tetap terbuka selama smoke test — pada Cara B, kedua terminal harus tetap terbuka bersamaan. Untuk menghentikan, fokuskan terminal lalu tekan Ctrl + C.
Pada macOS gunakan Ctrl + C, bukan Cmd + C. Jika port masih terpakai karena terminal lama tertutup, periksa dengan lsof -ti :3001 pada macOS/Linux atau Get-NetTCPConnection -LocalPort 3001 pada Windows PowerShell, lalu hentikan process tersebut setelah memastikan itu milik lab ini.
Development server adalah proses jangka panjang dan harus dijalankan manual pada terminal Kiro. Jangan mengubah port atau menambahkan CORS package; Vite proxy sudah diarahkan ke API port 3001.
Modul 8 · 5 menit
Validasi terhadap spec
Keberhasilan bukan sekadar “aplikasi terbuka”. Uji perilaku yang ditulis pada acceptance criteria.
Validasi build
Terminal
npm run build
Jika build gagal, kirim satu error aktual kepada Kiro dan minta perbaikan terbatas:
Prompt 5 · Targeted build fix
Perbaiki hanya error build berikut tanpa refactor atau fitur tambahan:
[PASTE ERROR TERMINAL DI SINI]
Setelah memperbaiki, jalankan kembali build satu kali dan ringkas perubahan.
Modul 9 · 3 menit
Review hasil dan penggunaan credit
Catat saldo terakhir, evaluasi fase termahal, dan bawa insight ini ke pelaksanaan workshop.
✓
Lab complete
Anda membangun aplikasi dari spec, bukan dari tebakan.
Requirements mendefinisikan perilaku, design membuat keputusan teknis terlihat, dan tasks menghubungkan design ke implementasi.
Catat hasil eksperimen
menit
credits
kali
task
Pertanyaan evaluasi fasilitator
Apakah total penggunaan maksimal 50 credits?
Fase mana yang menggunakan credits paling besar?
Apakah ada prompt yang sebenarnya bisa dihilangkan?
Apakah semua peserta dapat mencapai vertical slice dalam 60 menit?
Checkpoint mana yang perlu disediakan sebagai backup?
Next step ke AWS
UIAmplify Hostingatau S3 + CloudFront
→
APIAPI Gateway+ AWS Lambda
→
DBDynamoDBpersistent tasks
Ekstensi cloud sengaja tidak dilakukan dalam lab 60 menit. Requirement inti dapat dipertahankan; perbarui design.md dan tasks.md untuk migrasi implementasi.
Informasi produk dari sumber resmi telah diparafrasekan untuk mematuhi ketentuan lisensi. Wording UI dan behavior produk dapat berubah; periksa sumber untuk informasi terbaru.