# Situs web dan backend

Sumber: https://kilat.host/id/docs/websites-and-backends

Agen Anda bisa menerbitkan situs web dan bekerja dengan backend di workspace yang sama, dibayar dari dompet yang sama. Satu situs web statis per workspace gratis; backend (PocketBase) adalah paket berbayar.

## Situs web statis

Terbitkan HTML/CSS/JS hasil build, aplikasi React/Vite, dan ekspor framework statis di alamat `kill.lat`. Situs dimulai dengan subdomain acak; pilih label sendiri di **Kilat address** pada paket mana pun. Build secara lokal, di CI, atau dengan agen Anda; Kilat meng-hosting aset browser yang sudah jadi, bukan build dari source.

Server-side rendering, rute API, fungsi serverless, dan proses backend sembarang tidak didukung. Simpan source code dan lockfile dependensi di cadangan proyek Anda sendiri.

### Paket dan batasan

| Batas | Gratis | Berbayar |
| --- | --- | --- |
| Harga / 30 hari | Rp0, satu situs per workspace terverifikasi | Rp15.000, tanpa diskon |
| Unggahan / setelah diekstrak | 10 MiB / 25 MiB | 100 MiB / 300 MiB |
| Jumlah file / file terbesar | 500 / 5 MiB | 10.000 / 50 MiB |
| Rilis terbit yang disimpan | 2 | 10 |
| Izin unggah harian | 10 | 100 |
| Domain sendiri | Tidak | Ya, dengan verifikasi kepemilikan DNS |

MiB berarti 1.048.576 byte. Izin unggah dihitung ke batas harian meskipun tidak dipakai. Unggahan yang tertunda dibatasi; artefak yang tidak dipakai kedaluwarsa setelah satu hari. Tidak ada kuota bandwidth yang dijanjikan. Pembuatan membutuhkan kapasitas host yang tersedia serta konektivitas DNS/runtime yang dikonfigurasi operator.

### Membuat dan menerbitkan

1. Buka **Websites → New static site**. Konfirmasi email Anda, selesaikan tantangan keamanan, pilih region, lalu pilih Free atau Paid. Pembuatan Paid memotong dompet Anda untuk masa 30 hari.
2. Opsional, hubungkan layanan PocketBase di workspace Anda. Menghubungkan menampilkan URL API publik dan statusnya, bukan kredensial admin; tindakan ini tidak mengubah aturan koleksi atau skema.
3. Build frontend Anda. Arsipkan isi direktori output-nya, bukan direktorinya:

```
npm ci
npm run build
tar --format=ustar -czf site.tar.gz -C dist .
```

Perintah npm di atas mengasumsikan proyek yang sudah ada dengan lockfile dan skrip build. Untuk Vite, build dulu lalu kemas hanya isi `dist`; jangan pernah mengarsipkan root proyek atau `node_modules`. Situs HTML biasa cukup memakai perintah arsip, dengan direktori asetnya sebagai pengganti `dist`. Sertakan `index.html` yang tidak kosong di root arsip. USTAR disarankan; metadata POSIX PAX standar yang terbatas juga didukung. Ekstensi GNU, atribut PAX khusus vendor, symbolic link, hard link, path traversal, dan file khusus ditolak. Bila alat tar Anda menambahkan metadata yang tidak didukung, kemas ulang dengan perintah `--format=ustar` persis seperti di atas. Ganti link di output build dengan file publik biasa; jangan mengemas source atau rahasia.

1. Pilih arsip di halaman situs web Anda. Aktifkan **SPA navigation fallback** untuk routing di sisi klien, lalu pilih **Upload build**. Rilis yang siap sudah tervalidasi tetapi belum publik.
2. Pilih **Publish** untuk rilis tersebut. Aktivasi runtime dan verifikasi penerimaan HTTPS publik adalah langkah terpisah; tunggu sampai dasbor mencatat rilis aktif sebelum menyatakan berhasil.
3. Buka situs dan cek konten, navigasi, dan asetnya. Gunakan **Rollback** pada rilis yang disimpan untuk mengganti konten saat ini tanpa mengubah hostname.

Path aset yang tidak ada mengembalikan 404. Path SPA yang mengandung titik juga bisa mengembalikan 404, bukan `index.html`. Kegagalan aktivasi runtime memulihkan konten sebelumnya; verifikasi publik yang gagal memicu rollback. Konten kandidat bisa sempat terlihat sebelum verifikasi eksternal selesai. Container yang berjalan saja tidak membuktikan DNS, TLS, atau penerbitan berfungsi.

### Naik paket, perpanjangan, dan pemulihan

Pada situs gratis yang bisa diakses, **Pay & upgrade** memulai masa berbayar 30 hari dan mempertahankan hostname-nya. Batas runtime disesuaikan untuk deploy yang sudah ada. Halaman berbayar menampilkan kontrol perpanjangan otomatis dan panel domain sendiri; verifikasi kepemilikan DNS diperlukan. Situs gratis bisa mengganti nama subdomain `kill.lat`-nya; menghubungkan domain sendiri memerlukan Paid. Perubahan alamat terbit mempertahankan rute lama sampai peralihan berhasil; situs yang belum dipakai langsung berganti nama.

Situs gratis ditangguhkan setelah 90 hari tanpa penerbitan atau login pemilik, lalu disimpan tujuh hari untuk pemulihan. Situs berbayar mengikuti [aturan kedaluwarsa dan retensi tagihan](https://kilat.host/id/docs/billing-and-support) dan tidak pernah turun paket diam-diam. Situs yang ditangguhkan memerlukan pemulihan lewat dukungan; naik paket ditolak sebelum penagihan dan tidak melewati penangguhan.

### Aset publik dan PocketBase

Setiap aset browser bersifat publik, termasuk nilai variabel lingkungan frontend saat build yang tertanam di JavaScript. Jangan pernah mengunggah kunci penyedia, token MCP/unggah, file `.env`, kunci privat, atau kredensial superuser PocketBase. Penolakan file otomatis tidak bisa membuktikan sebuah artefak bebas rahasia.

Klien browser memakai autentikasi pengguna akhir PocketBase dan aturan koleksi. CORS bukan otorisasi. Bila backend yang terhubung ditangguhkan atau dihapus, frontend tetap bisa tampil tetapi mungkin tidak lagi memuat data aplikasi; menghubungkan tidak menjamin ketersediaan backend.

### Menerbitkan dengan agen dan MCP

Image agen terbaru menyertakan skill **kilat-create-website** dan otomatis menghubungkan agen yang baru dibuat dengan kredensial penerbitan khusus. Agen seperti itu bisa membuat situs gratis yang tersedia di workspace setelah email terverifikasi tanpa persetujuan MCP manual terpisah. Agen tidak bisa membeli atau menaikkan paket: paket berbayar memerlukan tindakan pemilik di dasbor. Agen yang sudah ada dan token manual tetap memakai alur persetujuan eksplisit di bawah. Peluncuran image wrapper diperlukan.

Untuk koneksi manual, buat situs di Websites terlebih dulu, atau pilih **Approve free creation through MCP instead**. Di **Account → MCP**, aktifkan **Site publish** pada token yang tepercaya. Scope read/manage yang sudah ada tidak memberi izin penerbitan. Token yang terikat ke sebuah situs hanya melihat situs pilihannya dan tidak bisa membuat situs lain; pembelian berbayar tetap disetujui lewat dasbor.

Simpan kredensial MCP di lingkungan pribadi agen, jangan pernah di aset frontend. Izin unggah berlaku untuk satu rilis, berumur pendek, dan sekali pakai; jauhkan dari URL dan log. Penerbitan dan rollback mengganti konten publik dan memerlukan persetujuan klien. Ikuti [panduan penerbitan Kilat Agent](https://kilat.host/id/docs/kilat-agent#static-publishing) dan [referensi alat MCP](https://kilat.host/id/docs/mcp#static-sites) untuk argumen, pengecekan rilis yang diharapkan, dan percobaan ulang.

## Backend (PocketBase)

PocketBase adalah backend open source dalam satu aplikasi: database SQLite, autentikasi pengguna, penyimpanan file, API realtime, dan dasbor admin. PocketBase termasuk dalam katalog peluncuran Kilat.

### Paket

| Paket | RAM | CPU | Harga / 30 hari |
| --- | --- | --- | --- |
| Starter | 256 MB | 0,25 vCPU | Rp 20.000 |
| Standard | 512 MB | 0,5 vCPU | Rp 30.000 |
| Pro | 1 GB | 1,0 vCPU | Rp 50.000 |

PocketBase tidak memerlukan kunci model AI.

Pro mengalokasikan RAM 1 GB dan 1 vCPU seharga Rp25.000 per 30 hari (harga normal Rp50.000, diskon 50% saat ini). Sumber daya lebih besar memberi ruang lebih, bukan jaminan beban kerja; deploy bergantung pada kapasitas host.

### Login pertama

1. Deploy PocketBase dari katalog.
2. Kilat membuat superuser dengan email akun Anda dan kata sandi acak sebelum aplikasi menjadi publik.
3. Tampilkan kredensial awal di halaman layanan, masuk ke dasbor PocketBase di `/_/` pada alamat layanan Anda, lalu **ganti kata sandinya**.

Kata sandi baru Anda tetap tersimpan saat restart dan pembuatan ulang; Kilat tidak mengaturnya ulang.

### Mengamankan data Anda

- Atur **API rules** di setiap koleksi sebelum Anda mengarahkan situs web atau aplikasi ke sana. Koleksi dengan aturan terbuka bersifat publik.
- Rahasiakan kredensial superuser dan jangan pernah mengirimnya lewat email, termasuk ke dukungan.

### Cadangan

Semua data berada di penyimpanan `pb_data` PocketBase, yang tetap ada saat restart dan pembuatan ulang. Itu bukan cadangan: gunakan fitur cadangan bawaan PocketBase atau ekspor data Anda secara rutin.
