# First App / Aplikasi Pertama
> docs/user/ > First App
---
Tutorial ini membangun aplikasi Todo List interaktif dari nol. Setiap langkah menjelaskan fitur PromptJS yang digunakan beserta bukti dari source code.
This tutorial builds an interactive Todo List application from scratch. Each step explains the PromptJS feature used, with evidence from source code.
---
## Langkah 1: Buat Proyek / Step 1: Create the Project
```bash
pjs init todo-ku
cd todo-ku
```
CLI membuat file `index.pjs` dari template `basic`. Buka file tersebut di editor.
The CLI creates `index.pjs` from the `basic` template. Open the file in your editor.
---
## Langkah 2: State Reaktif / Step 2: Reactive State
Ganti isi `index.pjs` dengan:
Replace the contents of `index.pjs` with:
```pjs
---
judul: "Todo Ku"
---
Halaman Todo:
data daftar = []
data tugas = ""
```
**Apa yang terjadi / What happens:**
- Baris `---` membuka dan menutup **front-matter**. Konten di antaranya adalah metadata YAML-like yang diproses oleh parser sebelum kompilasi. Key `judul` disimpan sebagai data dan bisa direferensikan dengan `$judul`.
- `data daftar = []` mendeklarasikan state reaktif. Di balik layar, compiler menghasilkan `Proxy` yang melacak perubahan. Inisialisasi array kosong.
- `data tugas = ""` mendeklarasikan state reaktif kedua untuk input pengguna.
**Bukti / Evidence:** Deklarasi `data` diproses oleh parser menjadi node `DataDeclaration`. Compiler menghasilkan kode `Proxy`-based reactivity di output JS. Front-matter diproses oleh fungsi internal `_parseFrontMatter` di engine (`src/engine/promptjs.js`).
---
## Langkah 3: Elemen UI / Step 3: UI Elements
Tambahkan elemen di bawah deklarasi data:
Add elements below the data declarations:
```pjs
Buat h1: $judul
Buat masukan#input-tugas[placeholder="Tulis tugas..."]: ""
Buat tombol#btn-tambah: "Tambah"
```
**Penjelasan / Explanation:**
- `Buat` (atau `Create`) membuat elemen DOM. `masukan` adalah tag alias untuk ``, `tombol` adalah alias untuk `