Panduan Lengkap
Cara memakai setiap fitur rakit.io — dari editor, AI Builder, database, sampai fungsi serverless — plus cheat sheet menulis perintah ke AI.
/api/db.
Kode backendFungsi serverless, referensi API & contoh kode.
Menulis promptRumus prompt & contoh siap salin.
Ada masalah?Penyebab umum & solusinya.
Panduan Fitur
Kenali setiap bagian editor rakit.io: di mana letaknya, apa gunanya, dan cara memakainya langkah demi langkah. Di editor, tombol ⓘ di samping setiap fitur juga membuka penjelasan singkatnya.
F1Memulai & Mengenal Editor
Dari daftar akun sampai paham letak setiap tombol di layar.
Daftar & masuk
- Buka halaman depan rakit.io, klik Daftar. Isi username, email, dan password — atau pilih Lanjutkan dengan Google.
- Setelah daftar, website pertamamu langsung online di
namamu.rakit.iodan editor terbuka otomatis. - Akun baru mendapat bonus kredit AI sekali pakai, ditambah kredit gratis setiap hari (lihat Kredit & Paket).
Dua tampilan editor: Simple & Coding
Pilih di tombol tengah atas. Pilihanmu diingat di browser.
✦ Simple
Hanya chat AI dan preview. Cocok kalau kamu cukup bercerita ke AI dan melihat hasilnya tanpa menyentuh kode.
</> Coding
Tampilan lengkap: panel file, editor kode, database, fungsi, diagram, riwayat, dan console. Fitur yang butuh tampilan ini otomatis memindahkanmu ke Coding.
Peta layar (tampilan Coding)
| Bagian | Isinya |
|---|---|
| Bilah atas kiri | Logo, tombol panel file, chip alamat website (tombol folder = ganti/buat project, tautan situs, tombol salin URL). |
| Bilah atas tengah | Pilihan Simple / Coding dan status penyimpanan. |
| Bilah atas kanan | Preview (tampil/sembunyi), Panduan, Publikasikan (hanya di mode publikasi manual), Lihat situs, badge paket, dan avatar (menu akun). |
| Panel kiri | Daftar file & folder project, tombol file/folder baru, upload gambar, dan pemakaian kuota. |
| Area tengah | Tab Code · AI · Data · Diagram · Fungsi · Riwayat · Console. Tombol ⓘ menjelaskan tab yang sedang dibuka. |
| Panel kanan | Preview website, pilihan ukuran layar, Pilih blok, dan Edit (teks & gambar). |
Menu avatar (pojok kanan atas)
| Menu | Fungsi |
|---|---|
| Buka website publik · Salin URL website | Membuka atau menyalin alamat website project aktif. |
| Mode publikasi | Pilih langsung tayang atau manual (dev/prod) — lihat Publikasi. |
| Simpan semua | Menyimpan semua file yang masih terbuka & belum tersimpan. |
| Pengaturan | Tema terang/gelap, bahasa, dan prediksi kode AI. |
| English / Bahasa Indonesia | Mengganti bahasa tampilan. |
| Langganan & kredit AI | Lihat paket, beli kredit, atau berlangganan. |
| Keluar | Keluar dari akun di browser ini. |
F2Project — Banyak Website dalam Satu Akun
Setiap project adalah website terpisah: alamat, file, database, riwayat versi, dan percakapan AI sendiri.
Membuat project baru
- Klik tombol folder di chip alamat website (kiri atas).
- Pilih Project baru.
- Isi alamat website (huruf kecil, angka, tanda
-), mis.tokokue→tokokue.rakit.io. - Isi nama project (opsional), lalu Buat project.
Ganti, ganti nama, hapus
- Ganti project: klik tombol folder, pilih project dari daftar.
- Ganti nama project…: mengubah nama tampilan (alamat tetap).
- Hapus project ini…: menghapus file, database, dan riwayatnya. Project terakhir tidak bisa dihapus.
| Hal | Keterangan |
|---|---|
| Jumlah project | Maksimal 5 per akun. |
| Kredit AI | Milik akun, dipakai bersama semua project. |
| Kuota file & database | Dihitung per project (besarnya mengikuti paket). |
| Prompt AI berjalan | Satu prompt sekaligus per akun, di project mana pun. |
F3File, Folder & Gambar
Semua bagian website tersimpan sebagai file di panel kiri. index.html adalah halaman utama.
Membuat & mengelola file
- Tombol File baru / Folder baru di atas daftar file. Tulis path lengkap untuk membuat di dalam folder, mis.
css/style.css. - Klik kanan (atau tombol ⋯) pada file: Buka, Preview halaman ini, Salin URL publik, Ganti nama (F2), Hapus (Del).
- Klik kanan pada folder: File baru, Folder baru, Upload gambar ke folder itu.
- Tombol Muat ulang dan Tutup semua folder ada di sebelahnya.
Upload gambar
- Klik tombol Upload gambar, klik kanan → Upload gambar…, atau seret file langsung ke daftar file.
- Format:
.png .jpg .jpeg .gif .webp .svg .ico .avif— isi file diperiksa, jadi file lain yang diganti ekstensinya ditolak. - Nama dirapikan otomatis (huruf kecil, spasi →
-). Bila nama sudah ada: Ganti, Simpan sebagai baru, atau Lewati.
Memakai gambar di halaman
Klik gambar di panel file untuk melihatnya (ukuran piksel & file), lalu salin path, tag <img>, atau url() CSS.
<img src="/images/logo.png" alt="Logo Toko Kue">.hero { background-image: url('/images/hero.jpg'); }| Batas | Gratis | Pro | Unlimited |
|---|---|---|---|
| Ukuran satu file kode | 512 KB (.html · .css · .js) | ||
| Ukuran satu gambar | 1 MB | 5 MB | 10 MB |
| Total storage per project | 20 MB | 100 MB | 250 MB |
| Jumlah file & folder | 500 | 2.000 | 5.000 |
F4Editor Kode
Editor ala VS Code untuk mengubah HTML, CSS, dan JavaScript secara langsung.
Menyimpan
- Auto-save (sakelar di bawah editor): tersimpan sendiri saat mengetik, preview ikut berubah.
- Ctrl/⌘ S simpan file aktif · menu avatar → Simpan semua.
- Saat menutup tab yang belum tersimpan, kamu ditanya: Simpan / Jangan simpan / Batal.
Prediksi kode (AI) — gratis
- Berhenti mengetik sebentar → AI menebak lanjutannya dalam teks abu-abu.
- Tab menerima · Esc atau lanjut mengetik mengabaikan.
- Tidak memakai kredit (ada batas harian). Matikan di Pengaturan.
Klik kanan → ✦ AI
- Blok (pilih) beberapa baris kode, lalu klik kanan:
- ✦ Minta AI mengubah kode ini — mengisi kotak AI dengan kode itu.
- ✦ Tanya AI tentang kode ini — untuk penjelasan.
- Permintaan tidak langsung dikirim; kamu bisa melengkapinya dulu.
Cari & navigasi
- Ctrl/⌘ F cari di file · Ctrl/⌘ B tampil/sembunyi panel file.
- Breadcrumb di atas editor menunjukkan lokasi file.
- Bilah bawah: posisi kursor dan bahasa file.
📖 Baca Alur Kode — AI menjelaskan kodemu (gratis)
Tombol Baca Alur Kode di atas editor (untuk file .html, .css, .js) membuka panel penjelasan di samping editor. AI menjelaskan kode berurutan seperti saat dijalankan, bukan urut baris.
- Buka file, klik Baca Alur Kode. Tunggu AI menyusun langkah-langkahnya.
- Setiap langkah berisi judul, jenis (mulai, keputusan, perulangan, menunggu aksi, permintaan…), baris yang terlibat, penjelasan, contoh nilai nyata, dan istilah penting (klik untuk melihat artinya).
- Klik langkah → barisnya disorot di editor. Klik baris di editor → langkahnya terbuka. Pakai tombol ‹ ›, ▶ (putar otomatis), atau panah keyboard.
- Langkah yang merujuk file lain (halaman, class CSS, fungsi
/api/fn/…) bisa diklik untuk membukanya, lalu ← Kembali. - Lihat juga diagram alur, catatan (bug, perlu dicek, saran), dan kecepatan kode. Pakai Tanya AI untuk bertanya tentang langkah yang sedang dibuka.
F5Preview, Pilih Blok & Edit
Lihat website seperti yang dilihat pengunjung, di berbagai ukuran layar.
| Kontrol | Fungsi |
|---|---|
| Kolom alamat | Ubah path halaman (mis. /tentang) lalu tekan Enter untuk membuka halaman lain. Esc batal. |
| Desktop · Tablet · HP | Mengubah lebar preview: penuh, 768 px, atau 390 px — untuk mengecek tampilan responsif. |
| ↻ Muat ulang | Memuat ulang preview. |
| ↗ Buka di tab baru | Membuka halaman yang sedang di-preview di tab browser baru. |
| Badge DEV | Muncul di mode publikasi manual: preview menampilkan versi dev, bukan website publik. |
| Ctrl/⌘ \ | Tampilkan/sembunyikan panel preview. |
🎯 Pilih blok — ubah bagian tertentu saja
Daripada menjelaskan “bagian yang di bawah judul kedua…”, tunjuk langsung bagiannya di preview.
- Klik Pilih blok di atas preview.
- Arahkan kursor ke halaman, lalu klik bagian yang ingin diubah (maks. 5 blok, boleh dari beberapa halaman — pindah halaman lewat link di preview).
- Klik Tulis perintah. Blok terpilih muncul di atas kotak AI.
- Tulis perubahannya, mis. “jadikan 3 kolom dan beri ikon”, lalu kirim. AI fokus ke blok itu dan tidak mengubah bagian lain.
- Klik Selesai untuk keluar dari mode memilih.
✏️ Edit — ubah tulisan & gambar langsung di preview
Untuk mengganti judul, paragraf, label tombol, isi daftar, atau gambar tanpa membuka kode dan tanpa memakai kredit AI.
- Klik Edit di atas preview.
- Arahkan kursor ke halaman — teks yang bisa diubah diberi kotak biru — lalu klik teksnya dan ketik.
- Tekan Enter atau klik di tempat lain untuk menyimpan. Esc membatalkan.
- Klik Selesai untuk keluar dari mode edit.
Perubahan ditulis ke file HTML halaman itu (mis. index.html) di tempat yang sama persis — format seperti tebal atau tautan di dalam teks tetap ada. File-nya ikut terbuka di tab Code, jadi bisa dibatalkan dengan Ctrl/⌘ Z. Teks yang ditulis JavaScript (mis. pesan 'Password minimal 6 karakter.' di script.js) juga bisa diubah — string-nya diganti di file JS itu. Teks yang dirakit dari data (mis. “Kamu sudah klik 3 kali”) tidak bisa: saat diklik muncul tanda merah, ubah lewat kode atau minta AI. Pindah halaman: Alt+klik link.
Ganti gambar: di mode Edit, klik gambarnya. Pilih gambar lain dari project, klik Upload gambar baru…, atau tempel alamat gambar (https://…). Isi juga teks alternatif (alt) — deskripsi singkat gambar untuk pembaca layar dan mesin pencari — lalu Simpan. Yang bisa diganti di sini hanya gambar <img>; gambar latar dari CSS dan gambar <picture> dengan beberapa versi diubah lewat kode atau AI.
F6Asisten AI (Builder & Plan)
Buka tab AI atau tekan Ctrl/⌘ I. Teknik menulis prompt ada di Bagian 2.
🔨 Builder
AI langsung menulis/mengubah/menghapus file dan membuat tabel database.
- Pilih Builder di bawah kotak prompt.
- Tulis permintaan, tekan Enter (Shift+Enter = baris baru).
- Lihat progres & daftar file yang diubah. Klik file untuk melihat perbedaannya.
- Pilih Simpan untuk menerima atau Batalkan untuk mengembalikan semuanya.
🧭 Plan
AI hanya berdiskusi & menyusun rencana, tanpa mengubah file.
- Pilih Plan, ceritakan idemu.
- Tanya-jawab sampai rencananya pas.
- Tekan Jalankan rencana ini — AI pindah ke Builder dan mengerjakannya.
Fitur kotak prompt
| Fitur | Cara pakai |
|---|---|
| 📎 Lampirkan gambar | Tombol Gambar, tempel (Ctrl/⌘ V), atau seret file. Maks. 3 gambar (JPG/PNG/WEBP, maks. 2 MB) — desain contoh, sketsa, atau screenshot error. Prompt bergambar memakai 2 kredit. |
| 🎯 Blok terpilih | Dari Pilih blok. Hapus satu blok dengan tombol × pada chip-nya. |
| ⏹ Stop | Menghentikan AI di tengah jalan. Kreditnya dikembalikan. |
| Panjang prompt | Maks. 20.000 karakter. |
Percakapan & riwayat
- 🕘 Riwayat percakapan (ikon jam): buka percakapan lama untuk melanjutkannya.
- ↻ Percakapan baru: mulai topik baru. AI tidak membawa konteks obrolan sebelumnya, jadi lebih hemat dan fokus.
- 🗑 Hapus semua riwayat: menghapus semua percakapan di project ini.
- Riwayat disimpan di server (maks. 50 percakapan, terhapus setelah 90 hari tidak dipakai).
Tombol “✦ … dengan AI” di fitur lain
Banyak fitur punya tombol bertanda ✦ yang mengisi kotak AI dengan permintaan beserta konteksnya (tidak langsung dikirim):
| Di mana | Contoh tombol |
|---|---|
| Fungsi | Buat dengan AI, Ubah, Perbaiki dengan AI (dari log/uji coba yang gagal) |
| Database | Pakai tabel di website, Buat form dengan AI |
| Diagram | Perbaiki temuan dengan AI |
| Console | Perbaiki dengan AI pada baris error |
| Editor kode | Klik kanan → ubah / tanya tentang kode terpilih |
| Penjelasan fitur (ⓘ) | Coba sekarang — contoh prompt untuk fitur itu |
F7Database (Tab Data)
Simpan data pengunjung & konten secara permanen — mirip spreadsheet, langsung bisa dipakai dari halaman website.
Membuat tabel
- Buka tab Data, klik + (Tabel baru) atau + Buat tabel.
- Isi nama tabel (mis.
ucapan), lalu tambahkan kolom: nama, tipe, centang Wajib bila harus diisi, dan Privat bila tidak boleh terlihat pengunjung. - Klik Buat tabel. Kolom
iddancreated_atdibuat otomatis.
Tipe kolom
| Tipe | Untuk | Contoh nilai |
|---|---|---|
| Teks | Nama, pesan, alamat (maks. 10.000 karakter) | Budi |
| Angka | Harga, jumlah, skor | 150000 |
| Ya/tidak | Hadir, setuju, sudah dibayar | true / false |
| Tanggal | Tanggal lahir, jadwal acara | 2026-12-31 atau 2026-12-31T19:00 |
| Relasi | Menunjuk baris di tabel lain (mis. pesanan → produk) | 12 (id baris tujuan) |
| Gambar | Foto produk, avatar, bukti transfer | /uploads/produk/abc.jpg |
Akses: siapa boleh apa
Klik Atur pada tabel. Setiap operasi bisa Publik (semua pengunjung) atau Hanya kamu (pemilik, lewat editor). Bawaannya semua Hanya kamu.
| Operasi | Artinya | Saran umum |
|---|---|---|
list | Membaca daftar data | Publik untuk buku tamu, katalog, papan skor |
view | Membaca satu data | Publik untuk halaman detail produk |
create | Menambah data | Publik untuk form kontak, RSVP, pesanan |
update | Mengubah data | Hanya kamu (pengunjung anonim) |
delete | Menghapus data | Hanya kamu |
Kolom Privat tidak pernah dikirim ke pengunjung walau list publik — cocok untuk email, nomor HP, alamat.
Mengelola isi tabel
- + Baris menambah data manual. Klik dua kali sel untuk mengubah. Ikon tempat sampah menghapus baris.
- Kolom gambar tampil sebagai thumbnail; klik dua kali untuk upload, ganti, atau kosongkan (bisa juga tempel alamat
https://…). - Data banyak dibagi per halaman — pakai tombol Sebelumnya / Berikutnya.
- Bagian Pakai di websitemu menampilkan contoh kode siap salin (membaca, menambah, mengubah, menghapus, menangani error) dan memberi tanda bila aksesnya belum publik.
- Hapus tabel ada di pengaturan tabel — klik sekali lagi untuk memastikan.
Memakai database dari kode website
| Request | Fungsi |
|---|---|
GET /api/db/<tabel>?sort=-created_at&limit=20&offset=0 | Daftar baris → { rows, total }. Tambah &kolom=nilai untuk menyaring. |
GET /api/db/<tabel>/<id> | Satu baris |
POST /api/db/<tabel> | Tambah baris (body JSON) |
PATCH /api/db/<tabel>/<id> | Ubah baris |
DELETE /api/db/<tabel>/<id> | Hapus baris |
POST /api/db/<tabel>/upload?column=<kolom> | Upload gambar untuk kolom Gambar → { url } |
GET /api/db/<tabel>?expand=<kolom_relasi> | Ikut mengambil data dari tabel yang ditunjuk kolom relasi |
// simpan
const res = await fetch('/api/db/ucapan', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ nama, pesan }),
});
if (!res.ok) alert((await res.json()).error);
// tampilkan 20 terbaru
const { rows } = await (await fetch('/api/db/ucapan?sort=-created_at&limit=20')).json();const up = await fetch('/api/db/produk/upload?column=gambar', { method: 'POST', body: fileInput.files[0] });
const { url } = await up.json(); // mis. "/uploads/produk/lx3k-9f2a.jpg"
await fetch('/api/db/produk', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ nama, gambar: url }),
});create atau update tabel itu publik.| Batas database | Gratis | Pro | Unlimited |
|---|---|---|---|
| Ukuran per project | 10 MB | 50 MB | 100 MB |
| Jumlah tabel · kolom | 20 tabel · 30 kolom per tabel | ||
| Request dari pengunjung | 300 baca & 60 tulis per menit per pengunjung · maks. 20 upload / 10 menit | ||
F8Fungsi Serverless (Backend)
Kode JavaScript yang berjalan di server, bukan di browser pengunjung — untuk kunci API rahasia, perhitungan yang tidak boleh diakali, notifikasi, atau memanggil layanan lain.
Membuat & mencoba fungsi
- Buka tab Fungsi, klik + Fungsi baru. Beri nama (huruf kecil, angka,
-atau_, maks. 40), mis.kirim-pesan. - File
functions/kirim-pesan.jsdibuat dengan kode contoh. Klik Buka kode untuk mengubahnya. - Klik Coba: pilih method, isi query & body JSON, lalu jalankan. Hasil, status, waktu, dan
console.logtampil langsung. - Panggil dari halaman website lewat
/api/fn/kirim-pesan. Salin URL menyalin alamat lengkapnya.
Bentuk kode fungsi
export default async function (req, { db, env, fetch, ai }) {
// req: { method, query, headers, body }
const row = await db.insert('pesanan', {
nama: req.body.nama, total: 150000,
});
return { ok: true, id: row.id }; // dikirim sbg JSON
}Memanggil dari halaman
const res = await fetch('/api/fn/pesan', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ nama: 'Ani' }),
});
const data = await res.json();Yang tersedia di dalam fungsi
| Objek | Kegunaan |
|---|---|
req | method, query, headers, body (sudah di-parse bila JSON). Untuk jalan terjadwal, req.method bernilai "CRON". |
db | Database project sebagai pemilik (aturan akses publik tidak berlaku): db.list(tabel, { sort, limit, offset, filter }), db.get, db.insert, db.update, db.delete. |
env | Nilai rahasia dari Rahasia (env), mis. env.TELEGRAM_TOKEN. |
fetch | Memanggil API luar (maks. 10 per eksekusi; tidak bisa ke website rakit.io — pakai db). |
ai | Memakai AI dengan API key-mu sendiri — lihat AI di Fungsi. |
| Balasan | Nilai biasa dikirim sebagai JSON. Untuk kendali penuh: new Response(teks, { status, headers }) atau Response.json(data, { status }). Error yang dilempar → status 500 { error }. |
require, paket npm, atau akses file. Kode di folder functions/ tidak pernah bisa dibaca pengunjung.Referensi lengkap
| API | Keterangan |
|---|---|
req.method | GET, POST, PUT, PATCH, DELETE… atau CRON saat dijalankan jadwal. |
req.path | Path yang dipanggil, mis. /api/fn/pesan. |
req.query | Objek parameter URL (nilainya teks): /api/fn/cari?q=kue → req.query.q. |
req.headers | Header request (nama huruf kecil). req.headers['x-client-ip'] = IP pengunjung. Cookie tidak diteruskan. |
req.body | Objek bila request mengirim JSON (Content-Type: application/json), selain itu teks mentah. Maks. 1 MB. |
await req.text() · await req.json() | Body sebagai teks / di-parse sebagai JSON. |
db.list(tabel, { sort, limit, offset, filter }) | → { rows, total }. sort: '-created_at' (tanda - = terbaru dulu), limit maks. 100, filter: { status: 'baru' } = kolom sama dengan nilai. |
db.get(tabel, id) | Satu baris (error bila tidak ada). |
db.insert(tabel, data) | Menambah baris → baris baru beserta id & created_at. |
db.update(tabel, id, data) | Mengubah kolom yang dikirim saja → baris terbaru. |
db.delete(tabel, id) | Menghapus baris → { ok: true }. |
env.NAMA | Rahasia project (maks. 30 rahasia, nama HURUF_BESAR). Belum diisi → undefined. |
await fetch(url, { method, headers, body }) | Memanggil layanan luar. body berupa objek otomatis dijadikan JSON. Hasil: ok, status, headers.get(nama), await text(), await json(). Maks. 10 panggilan, 8 detik & 2 MB jawaban per panggilan. |
console.log/info/warn/error | Tampil di Coba, Log eksekusi, dan tab Console (BE). Objek dicetak sebagai JSON. Juga ada console.time/timeEnd, count, table, assert. |
return nilai | Status 200 + JSON. return tanpa nilai → status 204 (kosong). |
Response.json(data, { status, headers }) | JSON dengan status sendiri, mis. 400 untuk input salah. |
new Response(teks, { status, headers }) | Balasan teks/HTML/CSV. Header yang boleh: content-type, cache-control, content-disposition, location, etag, access-control-*, dan x-…. |
Response.redirect(url, 302) | Mengalihkan pengunjung ke alamat lain. |
throw new Error('…') | Status 500. Di versi dev & uji coba pesan lengkapnya tampil; di website publik pengunjung hanya melihat “Fungsi gagal dijalankan”, detailnya di Log. |
Contoh kode siap pakai
Salin ke functions/<nama>.js, sesuaikan nama tabel/kolom, lalu uji dengan tombol Coba.
export default async function (req, { db, env, fetch }) {
if (req.method !== 'POST') return Response.json({ error: 'Pakai POST' }, { status: 405 });
const { nama, email, pesan } = req.body || {};
if (!nama || !pesan) return Response.json({ error: 'Nama dan pesan wajib diisi' }, { status: 400 });
// tabel "pesan" cukup "Hanya kamu": db di fungsi bekerja sebagai pemilik
const row = await db.insert('pesan', { nama, email, pesan });
// rahasia: TELEGRAM_TOKEN & TELEGRAM_CHAT_ID (tab Fungsi → Rahasia)
const tg = await fetch(`https://api.telegram.org/bot${env.TELEGRAM_TOKEN}/sendMessage`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: { chat_id: env.TELEGRAM_CHAT_ID, text: `Pesan baru dari ${nama}:\n${pesan}` },
});
if (!tg.ok) console.warn('Telegram gagal', tg.status, await tg.text());
return { ok: true, id: row.id };
}export default async function (req, { db }) {
const { nama, telepon, items } = req.body || {}; // items: [{ id: 3, jumlah: 2 }, …]
if (!Array.isArray(items) || !items.length) {
return Response.json({ error: 'Keranjang kosong' }, { status: 400 });
}
let total = 0;
const rincian = [];
for (const it of items) {
const p = await db.get('produk', it.id); // harga diambil dari database, bukan dari browser
const jumlah = Math.max(1, Math.min(99, Number(it.jumlah) || 1));
if (p.stok < jumlah) return Response.json({ error: `Stok ${p.nama} tidak cukup` }, { status: 409 });
total += p.harga * jumlah;
rincian.push(`${p.nama} x${jumlah}`);
await db.update('produk', p.id, { stok: p.stok - jumlah });
}
const order = await db.insert('pesanan', { nama, telepon, item: rincian.join(', '), total, status: 'baru' });
return { ok: true, nomor: order.id, total };
}export default async function (req, { env, fetch }) {
const kota = req.query.kota || 'Jakarta';
const url = `https://api.openweathermap.org/data/2.5/weather?q=${encodeURIComponent(kota)}`
+ `&units=metric&lang=id&appid=${env.OWM_KEY}`;
const res = await fetch(url);
if (!res.ok) return Response.json({ error: 'Data cuaca tidak tersedia' }, { status: 502 });
const d = await res.json();
return Response.json(
{ kota: d.name, suhu: d.main.temp, cuaca: d.weather[0].description },
{ headers: { 'cache-control': 'public, max-age=600' } }, // cache 10 menit
);
}
// dipanggil dari halaman: fetch('/api/fn/cuaca?kota=Bandung')export default async function (req, { db, env }) {
// kunci sederhana untuk halaman admin pribadi (rahasia ADMIN_KEY)
if (req.headers['x-admin-key'] !== env.ADMIN_KEY) {
return Response.json({ error: 'Tidak diizinkan' }, { status: 401 });
}
switch (req.method) {
case 'GET':
return db.list('pesanan', { sort: '-created_at', limit: 50, filter: req.query.status ? { status: req.query.status } : {} });
case 'PATCH':
return db.update('pesanan', req.query.id, { status: req.body.status });
case 'DELETE':
return db.delete('pesanan', req.query.id);
default:
return Response.json({ error: 'Method tidak didukung' }, { status: 405 });
}
}
// dari halaman: fetch('/api/fn/admin-pesanan?status=baru', { headers: { 'X-Admin-Key': kunci } })export default async function (req, { db, env, fetch }) {
if (req.method !== 'CRON') return Response.json({ error: 'Hanya untuk jadwal' }, { status: 403 });
const sejak = Date.now() - 24 * 3600e3; // 24 jam terakhir (created_at dalam UTC)
const hariIni = new Date(Date.now() + 7 * 3600e3).toISOString().slice(0, 10); // tanggal WIB untuk judul
const { rows } = await db.list('pesanan', { sort: '-created_at', limit: 100 });
const baru = rows.filter((r) => Date.parse(r.created_at) >= sejak);
const omzet = baru.reduce((n, r) => n + (r.total || 0), 0);
console.log(`Laporan ${hariIni}: ${baru.length} pesanan, Rp${omzet}`);
await fetch('https://api.resend.com/emails', { // kirim email via Resend
method: 'POST',
headers: { Authorization: `Bearer ${env.RESEND_KEY}`, 'Content-Type': 'application/json' },
body: { from: 'toko@domainmu.com', to: env.EMAIL_SAYA, subject: `Laporan ${hariIni}`,
html: `<p>${baru.length} pesanan, total Rp${omzet}</p>` },
});
}
// atur di tab Fungsi → Jadwal → "Setiap hari jam 21:00"export default async function (req, { db, env }) {
if (req.query.key !== env.ADMIN_KEY) return Response.redirect('/', 302); // bukan pemilik → ke beranda
const { rows } = await db.list('pendaftar', { sort: 'id', limit: 100 });
const csv = ['id,nama,email', ...rows.map((r) => `${r.id},"${r.nama}","${r.email}"`)].join('\n');
return new Response(csv, {
headers: {
'content-type': 'text/csv; charset=utf-8',
'content-disposition': 'attachment; filename="pendaftar.csv"',
},
});
}export default async function (req, { ai }) {
const riwayat = (req.body?.messages || []).slice(-10); // [{ role: 'user'|'assistant', content }]
const { text } = await ai.chat({
system: 'Kamu CS Toko Kue Bu Sari. Jam buka 08.00–20.00. Jawab singkat & ramah.',
messages: riwayat,
maxTokens: 400,
});
return { reply: text };
}async function kirim(data) {
const res = await fetch('/api/fn/kontak', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(data),
});
const hasil = await res.json().catch(() => ({}));
if (!res.ok) throw new Error(hasil.error || 'Gagal mengirim'); // pesan dari Response.json({ error })
return hasil;
}400 dengan pesan jelas · jangan percaya harga/total dari browser · simpan semua kunci di Rahasia · pakai console.log lalu lihat hasilnya di Coba atau Log · batas waktu 10 detik, jadi hindari banyak fetch berurutan.| Batas lain | Nilai |
|---|---|
| Request ke satu website | 120 per menit (semua pengunjung) · 60 per menit per pengunjung |
Body request · jawaban fetch | 1 MB · 2 MB |
| Output console per eksekusi | 16 KB (sisanya dipotong) |
| Versi dev (publikasi manual) | Fungsi dev dipanggil di namamu--dev.rakit.io/api/fn/… dan memakai database dev |
Rahasia, jadwal, dan log
🔑 Rahasia (env)
Isi nama (mis. TELEGRAM_TOKEN) dan nilainya, klik Simpan. Baca di kode lewat env.TELEGRAM_TOKEN. Nilai tidak ditampilkan lagi di editor.
⏱ Jadwal Pro / Unlimited
Klik Jadwal pada fungsi: setiap 5/15/30 menit, setiap jam, setiap hari jam tertentu, setiap minggu, atau cron kustom (waktu WIB). Paling sering: Pro 15 menit, Unlimited 5 menit.
📜 Log eksekusi
Daftar eksekusi terakhir (dipicu pengunjung, uji coba, atau jadwal) dengan status, durasi, error, dan console. Eksekusi gagal punya tombol ✦ Perbaiki dengan AI.
📊 Kuota
Meteran di atas tab menunjukkan eksekusi hari ini. Batas: 10 detik & 64 MB per eksekusi.
| Eksekusi per hari (WIB) | Gratis | Pro | Unlimited |
|---|---|---|---|
| Semua fungsi di akun | 1.000 | 20.000 | 100.000 |
F9AI di Fungsi (Provider AI)
Bangun fitur AI di websitemu — chatbot, ringkasan, ekstraksi data, cek gambar — memakai API key milikmu sendiri.
Menambahkan provider
- Tab Fungsi → bagian Provider AI → tambah provider.
- Pilih jenis: OpenAI, Anthropic Claude, Google Gemini, atau kompatibel OpenAI (ada tombol cepat DeepSeek, Groq, OpenRouter, Mistral, Together).
- Isi nama (dipakai di kode), API key, model chat, dan model embedding (opsional). Tandai satu sebagai default.
- Klik Simpan & tes untuk memastikan key dan modelnya berfungsi. Maks. 10 provider per project.
export default async function (req, { ai }) {
const { text } = await ai.chat(req.body.pertanyaan, { system: 'Kamu CS toko kue. Jawab singkat.' });
const data = await ai.json('Ambil nama & HP dari: ' + req.body.pesan, { nama: 'string', hp: 'string' });
const cek = await ai.chat('Apakah ini bukti transfer?', { images: ['/uploads/bukti/abc.jpg'] });
const [a, b] = await ai.embed(['kue coklat', 'brownies']);
return { text, data, cek: cek.text, mirip: ai.similarity(a, b) };
}| Perintah | Hasil |
|---|---|
ai.chat(prompt, { system, images, provider, model, temperature, maxTokens }) | { text, model, provider, usage } |
ai.json(prompt, bentuk) | Objek sesuai bentuk yang diminta |
ai.embed(teks | [teks]) | Vektor untuk pencarian makna (Anthropic tidak punya embedding) |
ai.similarity(a, b) | Kemiripan dua vektor (0–1) |
ai.providers() | Daftar provider terpasang (tanpa key) |
Batas: maks. 5 panggilan ai.* per eksekusi, 60 detik per panggilan, gambar maks. 4 (5 MB). Waktu menunggu AI tidak dihitung ke batas 10 detik fungsi. Pemakaian per provider tampil di tab Fungsi.
F10Diagram Buatan AI
AI menggambar struktur websitemu dari file & database — untuk memahami gambaran besar, dokumentasi, atau tugas kuliah.
| Jenis | Menunjukkan |
|---|---|
| Use Case | Aktor dan apa yang bisa mereka lakukan di website |
| Activity | Alur proses utama pengunjung, dengan cabang keputusan |
| Sequence | Urutan interaksi Pengunjung → Halaman → API → database/layanan luar |
| Class | Tabel dan modul JavaScript beserta atribut, method, dan relasinya |
| State | Perubahan status objek penting (mis. pesanan) |
| ERD | Tabel, kolom, tipe, wajib/privat, dan relasi |
| Peta halaman | Halaman, link antarhalaman, file CSS/JS — link rusak & file hilang ditandai |
| Alur data | Halaman/script/fungsi mana memakai tabel apa — request yang akan ditolak ditandai |
- Buka tab Diagram, pilih jenisnya.
- Klik Update diagram — AI menggambar dari kondisi terbaru (memakai 1 kredit, dikembalikan bila gagal). Diagram tersimpan dan tidak berubah sendiri.
- Baca panel Temuan: catatan AI seperti tabel yang bisa dihapus siapa pun atau link rusak.
- Bila gambar gagal ditampilkan, klik Perbaiki dengan AI (gratis, maks. 2 kali per diagram).
- Salin kode Mermaid atau unduh sebagai SVG. Tombol ⓘ menjelaskan cara membaca jenis diagram yang dibuka.
Zoom & geser
| Zoom | Geser | |
|---|---|---|
| Mouse | Scroll roda; klik dua kali (Shift = perkecil) | Seret; Shift + scroll = mendatar |
| Touchpad | Cubit, atau Ctrl/⌘ + scroll | Geser dua jari |
| Layar sentuh | Cubit dua jari | Seret satu jari |
| Keyboard | + / −, 0 pas layar, 1 ukuran asli | Tombol panah |
F11Riwayat Versi
“Save point” untuk seluruh file project. Bereksperimen tanpa takut merusak.
Kapan versi tersimpan
- Otomatis saat kamu mulai mengedit (paling sering tiap 10 menit).
- Otomatis sebelum AI mengubah file.
- Otomatis sebelum mengembalikan versi (jadi restore pun bisa dibatalkan).
- Manual: tombol Simpan versi sekarang dengan nama sendiri, mis. “sebelum ganti desain”.
Mengembalikan
- Buka tab Riwayat, pilih versi.
- Lihat file berlabel Berbeda, Sudah dihapus, atau File baru. Klik Lihat perbedaan.
- Kembalikan file ini untuk satu file, atau Kembalikan ke versi ini untuk seluruh project.
| Batas riwayat per project | Gratis | Pro | Unlimited |
|---|---|---|---|
| Disimpan selama | 7 hari | 30 hari | 90 hari |
| Jumlah versi | 20 | 200 | 2.000 |
Riwayat tidak dihitung ke kuota storage.
F12Console — Mencari Penyebab Error
Semua pesan dari websitemu di satu tempat. Angka merah di tab menandakan error baru.
| Sumber | Isinya |
|---|---|
| FE (frontend) | console.log dan error dari halaman di preview |
| BE (backend) | Log dan error fungsi serverless |
| Jaringan | Request halaman ke server (mis. fetch('/api/db/produk')) beserta status-nya |
| Sistem | Catatan seperti halaman yang dimuat |
- Saring per sumber, centang Hanya error, atau ketik di Cari log….
- Tombol ↻ memuat ulang preview, 🗑 membersihkan log.
- Pada baris error, klik ✦ Perbaiki dengan AI — pesan error ikut dikirim sebagai konteks.
| Status | Artinya |
|---|---|
| 2xx | Berhasil |
| 4xx | Permintaan ditolak — mis. 403 akses tabel belum publik, 404 tabel/halaman tidak ada, 400 data tidak valid |
| 5xx | Error di server/fungsi |
F13Publikasi: Langsung Tayang atau Dev/Prod
Atur kapan perubahan terlihat oleh pengunjung. Buka menu avatar → Mode publikasi.
⚡ Langsung tayang bawaan
Setiap perubahan langsung terlihat di namamu.rakit.io. Cocok untuk belajar dan mencoba-coba.
🚀 Publikasi manual (dev/prod)
Kamu mengedit versi dev di namamu--dev.rakit.io (bisa dibagikan untuk minta pendapat). Website publik baru berubah saat kamu menekan Publikasikan. Database dev terpisah untuk uji coba.
Mempublikasikan perubahan
- Titik pada tombol Publikasikan (kanan atas) menandakan ada perubahan yang belum tayang.
- Klik tombolnya — tampil daftar file baru, diubah, dihapus, dan perubahan struktur database.
- Klik Publikasikan. Data & gambar kiriman pengunjung di website publik tetap aman; data uji coba dev tidak ikut.
- Bila ada tabel/kolom yang akan dihapus, centang konfirmasi dulu — datanya akan hilang dari website publik.
F14Kredit AI, Langganan & Pembayaran
Badge kredit di panel AI menunjukkan sisa kreditmu. Klik badge itu atau menu avatar → Langganan & kredit AI.
Berapa biaya tiap fitur?
| Fitur | Biaya |
|---|---|
| Prompt AI (Builder / Plan) | 1 kredit |
| Prompt dengan gambar | 2 kredit |
| Update diagram | 1 kredit |
| Prediksi kode, Baca Alur Kode, perbaikan diagram | Gratis (ada batas harian) |
AI di fungsi (ai.*) | Ditagih provider ke API key-mu, bukan kredit rakit.io |
| Prompt gagal / dihentikan / antrean penuh | Kredit dikembalikan |
Sumber kredit (dipakai berurutan)
- Kuota langganan — bila berlangganan Pro/Unlimited.
- Bonus awal untuk akun baru (sekali pakai), lalu kredit gratis harian — reset pukul 00.00 WIB, sisanya tidak menumpuk.
- Kredit yang dibeli — tidak hangus.
Paket
| Gratis | Pro | Unlimited | |
|---|---|---|---|
| AI | Kredit gratis harian | Kuota kredit tiap 30 hari | Tanpa kuota bulanan, ada batas prompt per hari |
| Storage file / project | 20 MB | 100 MB | 250 MB |
| Database / project | 10 MB | 50 MB | 100 MB |
| File & folder | 500 | 2.000 | 5.000 |
| Ukuran gambar | 1 MB | 5 MB | 10 MB |
| Riwayat versi | 7 hari / 20 | 30 hari / 200 | 90 hari / 2.000 |
| Eksekusi fungsi / hari | 1.000 | 20.000 | 100.000 |
| Jadwal fungsi | — | min. 15 menit | min. 5 menit |
Harga dan kuota AI terbaru tampil di menu Langganan & kredit AI.
Membayar dengan QRIS
- Pilih paket kredit atau langganan, lalu klik bayar.
- Pindai kode QRIS dengan aplikasi bank atau e-wallet mana pun.
- Biarkan jendela pembayaran terbuka — kredit/paket aktif otomatis begitu pembayaran diterima.
- Langganan 30 hari, sekali bayar tanpa tagihan otomatis.
- Perpanjang paket yang sama: masa aktif ditambah 30 hari dari tanggal berakhir.
- Upgrade Pro → Unlimited: langsung aktif, sisa hari Pro dikonversi sesuai harga.
- Saat langganan berakhir, batas kembali ke Gratis. File tidak dihapus, tetapi file baru/lebih besar ditolak sampai pemakaian di bawah batas.
F15Pengaturan & Pintasan Keyboard
Menu avatar → Pengaturan. Pengaturan disimpan di browser yang sedang dipakai.
Tampilan & bahasa
Tema Terang (kertas krem) atau Gelap. Warna editor kode dan diagram ikut menyesuaikan. Pilih bahasa tampilan Bahasa Indonesia atau English — penjelasan, diagram, dan pesan dari AI ikut bahasa itu.
Editor kode
Prediksi kode otomatis (AI) — nyalakan/matikan tebakan kode abu-abu.
| Pintasan | Aksi |
|---|---|
| Ctrl/⌘ S | Simpan file |
| ⌥ ⌘ S | Simpan semua |
| Ctrl/⌘ F | Cari di file |
| Ctrl/⌘ B | Tampil/sembunyi panel file |
| Ctrl/⌘ \ | Tampil/sembunyi preview |
| Ctrl/⌘ I | Buka Asisten AI |
| Enter · Shift Enter | Kirim prompt · baris baru |
| Tab · Esc | Terima · abaikan prediksi kode |
| F2 · Del | Ganti nama · hapus file terpilih |
| ← → | Pindah langkah di Baca Alur Kode |
F16Masalah Umum & Solusinya
Cek di sini dulu sebelum bingung.
| Masalah | Penyebab & solusi |
|---|---|
| Form tidak tersimpan, Console menunjukkan 403 | Akses create tabel masih “Hanya kamu”. Buka tab Data → Atur → jadikan Publik. |
| Data tidak muncul, status 404 | Nama tabel di kode berbeda dengan di tab Data (perhatikan huruf & garis bawah). |
| Kolom email tidak tampil di halaman | Kolom bertanda Privat memang tidak dikirim ke pengunjung. Lihat di tab Data. |
| Gambar tidak muncul | Path salah (huruf besar/kecil berpengaruh). Klik gambar di panel file → salin path-nya. |
| Perubahan tidak terlihat di website publik | Mode publikasi manual aktif — tekan Publikasikan. Atau file belum tersimpan. |
| Hasil AI tidak sesuai | Tekan Batalkan, lalu tulis ulang lebih spesifik, atau pakai Pilih blok. Bisa juga kembali lewat tab Riwayat. |
| “AI sedang penuh” | Antrean sedang ramai; kredit dikembalikan. Coba lagi sebentar. |
| Kredit habis | Tunggu reset 00.00 WIB, beli kredit, atau berlangganan. |
| File/gambar ditolak karena kuota | Hapus file yang tidak dipakai, perkecil gambar, atau upgrade paket. |
| Fungsi error / timeout | Lihat Log eksekusi di tab Fungsi, lalu ✦ Perbaiki dengan AI. Pastikan rahasia (env) yang dipakai sudah diisi. |
| Tombol diam saja saat diklik | Buka tab Console → saring FE → baca error merah → ✦ Perbaiki dengan AI. |
Cheat Sheet Prompt
Cara menulis perintah ke AI Builder agar hasilnya tepat sejak percobaan pertama — lengkap dengan contoh siap salin.
1Dasar — Cara AI Bekerja
Pahami dua mode & tiga aturan emas agar hasilnya tepat sejak percobaan pertama.
🧭 Mode Plan
AI hanya menyusun rencana — tidak menyentuh file. Cocok untuk proyek baru atau ide yang masih kabur. Akhiri dengan menekan “Jalankan rencana ini”.
🔨 Mode Builder
AI langsung membuat/mengubah file dan tabel database. Cocok untuk membangun, mengubah, atau memperbaiki.
Tiga aturan emas
- Sebut tujuan, bukan cuma nama. “Website untuk toko kue rumahan yang terima pesanan online” jauh lebih baik daripada “website toko kue”.
- Sebut bagiannya satu per satu. Halaman apa, isi tiap bagian, data apa yang disimpan.
- Satu prompt = satu perubahan besar. Untuk hal berbeda, kirim prompt terpisah agar mudah diperbaiki dan hemat kredit.
[Jenis situs] untuk [siapa/tujuan], dengan [bagian-bagian], gaya [warna/suasana], dan [data yang perlu disimpan]
2Struktur & Halaman
Menentukan file, halaman, dan navigasi.
Layout dari awal
Menambah halaman
3Desain & Gaya Visual
Cara menyebut warna, font, dan suasana dengan efektif.
| Yang diinginkan | Cara menulis prompt |
|---|---|
| Warna spesifik | warna utama #2563eb, latar krem #fef9f3 |
| Gaya umum | gaya korporat bersih & profesional / playful & ceria |
| Font | font "Plus Jakarta Sans" dari Google Fonts |
| Tema gelap | dark mode dengan tombol pengalih tema |
| Animasi | animasi fade-in saat halaman di-scroll |
| Ikon | ikon dari Lucide (via CDN) |
Ikon & ilustrasi
Tema gelap
<script> atau <link>. Tulis jelas, mis. “pakai Bootstrap 5 dari CDN”.4Responsive Design — Desktop / Mobile
Cara meminta tampilan yang berbeda di HP dan desktop, atau mengunci ke salah satu.
Pilih arah tampilan
Responsif (dua-duanya)
Tata letak menyesuaikan layar. Tidak perlu ditulis — ini default.
Desktop-only
Halaman dirancang untuk layar lebar (mis. dashboard, tabel data).
Mobile-only
Dirancang khusus layar HP (mis. aplikasi absensi, kalkulator).
Desktop-only
Halaman dibuat untuk layar lebar. Pengunjung HP melihat pesan “buka di desktop”.
Mobile-only
Dirancang untuk HP: tombol besar, satu kolom, navigasi bawah.
Perilaku berbeda per ukuran layar
Kalau ingin elemen muncul/hilang atau berubah bentuk di ukuran tertentu:
Sembunyikan di HP
Ubah bentuk
Kolom menyesuaikan
Tabel jadi kartu
Ukuran layar (titik henti umum)
Kalau mau menyebut angka pastinya, gunakan acuan ini:
| Perangkat | Lebar layar | Sebutkan di prompt |
|---|---|---|
| 📱 HP | < 640px | di HP (di bawah 640px) |
| 📱 HP besar / tablet kecil | 640–767px | di layar sedang |
| 💻 Tablet | 768–1023px | di tablet (768–1023px) |
| 🖥️ Desktop | ≥ 1024px | di desktop (1024px ke atas) |
| 🖥️ Desktop lebar | ≥ 1280px | di layar lebar |
| Kebutuhan | Cara menulis prompt |
|---|---|
| Kunci ke desktop | halaman ini khusus desktop, tampilkan pesan "buka di komputer" kalau di HP |
| Kunci ke mobile | buat khusus HP, lebar maksimal 480px, rata tengah di desktop |
| Elemen tertentu | sembunyikan bagian statistik saat di HP |
| Menu | menu mendatar di desktop, hamburger di HP |
| Grid katalog | 4 kolom desktop, 2 tablet, 1 HP |
| Gambar | gambar menyesuaikan lebar, tidak melebihi layar |
| Font | teks judul lebih kecil di HP (24px), lebih besar di desktop (40px) |
| Orientasi | susun berdampingan saat layar mendatar (landscape) |
| Uji di HP | pastikan tidak ada yang keluar batas layar atau perlu digeser |
Contoh: dashboard desktop-only
Contoh: aplikasi mobile-only
5SEO & Berbagi di Media Sosial
Agar situs muncul di Google dan tampil menarik saat tautannya dibagikan ke WhatsApp/media sosial.
Judul & deskripsi (Google)
Pratinjau saat dibagikan (Open Graph)
Ikon tab & perangkat
Bahasa & mesin pencari
Contoh permintaan SEO lengkap
| Kebutuhan | Cara menulis prompt |
|---|---|
| Muncul di Google | optimalkan SEO agar muncul di pencarian Google, tambahkan judul dan deskripsi halaman |
| Tautan rapi di WA | buat pratinjau bagus saat tautan dibagikan ke WhatsApp dan media sosial |
| Favicon | tambahkan favicon berupa logo saya di tab browser |
| Kata kunci | sertakan kata "toko kue jakarta" dan "pesan kue online" secara alami |
| Google Maps | tambahkan lokasi toko yang terbaca Google (alamat, jam buka) |
| Multi-halaman | pastikan setiap halaman punya judul & deskripsi berbeda |
6Aksesibilitas — Mudah Dipakai Semua Orang
Membuat situs nyaman dipakai siapa saja, termasuk pengguna pembaca layar dan orang dengan gangguan penglihatan.
Gambar & teks alternatif
Kontras & keterbacaan
Bisa dipakai tanpa mouse
Form yang jelas
7Form & Validasi Input
Form yang benar menyimpan data dengan rapi dan memberi tahu pengunjung bila ada yang salah.
Form lengkap
Kolom pilihan & tanggal
Unggah berkas & gambar
Menampilkan data masuk
8Animasi & Interaksi Lanjutan
Sentuhan dinamis agar situs terasa hidup — tanpa mengganggu.
Animasi saat menggulir
Efek hover
Galeri & lightbox
Tab & akordeon
Notifikasi & toast
Mode gelap/terang
9Gambar, Media & Ikon
Cara meminta gambar, ilustrasi, peta, video, dan ikon tanpa file sendiri.
Gambar sementara (placeholder)
Ikon
Ilustrasi
Peta lokasi
Video YouTube
Ikut tampil cepat
10Navigasi & Multi-Halaman
Mengatur banyak halaman dan tautan antar-halaman dengan rapi.
tentang.html bisa dibuka lewat /tentang.
Halaman 404.html kustom juga otomatis dipakai bila ada halaman yang tidak ditemukan.
Menu navigasi
Halaman 404 sendiri
Navigasi bawah (HP)
Tautan dalam halaman
11Kinerja & Kecepatan
Situs yang cepat lebih menyenangkan dan lebih disukai mesin pencari.
Ringan & cepat
Font cepat
Gambar hemat
Indikator memuat
12Konten & Tulisan
AI bisa menulis teksnya sekaligus — beri tahu siapa pembacanya.
Nada tulisan
Sasaran pembaca
Bagian penting
Konten contoh
13Keamanan & Data Pribadi
Melindungi data pengunjung dan menjaga agar tidak disalahgunakan.
| Kebutuhan | Cara menulis prompt |
|---|---|
| Data sensitif | tandai email, nomor HP, dan alamat sebagai data privat — hanya saya yang bisa lihat |
| Form publik | pengunjung hanya boleh mengirim, tidak boleh melihat daftar kiriman orang lain |
| Anti-spam | tambahkan kolom "ketik hasil 3+2" untuk mencegah bot mengirim form |
| Data tidak hilang | simpan semua data pengunjung ke database, jangan hanya di browser |
| Kata sandi | kalau ada area pribadi, jangan simpan kata sandi di situs — pakai pemilik saja |
| API key / token | simpan token Telegram di fungsi serverless, baca dari env.TELEGRAM_TOKEN — jangan tulis di halaman |
| Harga tidak bisa diakali | hitung total pesanan di fungsi serverless, bukan di browser |
14Integrasi Pihak Ketiga (CDN & Layanan)
Menambahkan layanan populer lewat CDN/tautan — tanpa server sendiri.
| Kebutuhan | Prompt |
|---|---|
| Grafik & statistik | tampilkan grafik penjualan bulanan pakai Chart.js dari CDN |
| Peta | sematkan Google Maps untuk lokasi Jl. Merdeka 10 |
tambahkan tombol WhatsApp mengambang ke nomor 0812xxxx | |
| Instagram/sosial | tambahkan tautan ke Instagram @tokosaya dan Facebook |
| Video | sematkan video YouTube youtube.com/watch?v=xxxx secara responsif |
| Kerangka UI | pakai Bootstrap 5 dari CDN untuk tata letaknya |
| Tanggal | pakai date picker yang rapi dan mudah dipakai di HP |
| Kalender acara | tampilkan kalender bulanan untuk memilih tanggal kunjungan |
| Notifikasi Telegram | buat fungsi serverless yang mengirim pesan Telegram setiap ada pesanan baru (token di env.TELEGRAM_TOKEN) |
| API layanan lain | buat fungsi yang mengambil kurs dari API luar, simpan API key di rahasia |
| Fitur AI sendiri | buat fungsi yang meringkas ulasan pelanggan pakai ai.chat (provider default saya) |
| Laporan otomatis | buat fungsi laporan penjualan harian; saya akan atur jadwalnya tiap jam 07.00 |
15Tabel Data & Dashboard
Menampilkan banyak data dengan rapi, plus ringkasan angka dan grafik.
Tabel dengan sortir & cari
Ringkasan angka
Grafik
Tambah/ubah/hapus
16Pola Prompt Lanjutan
Teknik agar hasil makin tepat, terutama untuk situs yang kompleks.
Iterasi bertahap (dari rencana ke hasil)
Konteks + permintaan
Beri contoh
Sebut yang kamu tidak mau
Rujuk bagian spesifik
Minta perbaikan bertarget
Saat hasil kurang pas
| Masalah | Prompt perbaikan |
|---|---|
| Tata letak berantakan | rapikan tata letak bagian layanan: sejajarkan ikon, judul, dan deskripsi dengan rapi |
| Warna tidak cocok | ganti aksen kuning jadi biru muda, sisanya tetap |
| Terlalu penuh | sederhanakan: tambah jarak antarbagian, kurangi elemen |
| Fungsi error | saat tombol diklik tidak terjadi apa-apa. Periksa dan perbaiki |
| Belum responsif | di HP tata letaknya rusak. Perbaiki agar rapi di layar kecil |
| Ingin variasi | buat 3 pilihan gaya hero, saya pilih salah satu |
17Database — Simpan & Tampilkan Data
Kekuatan utama rakit: situs bisa menyimpan data tanpa server sendiri. AI akan membuat tabelnya otomatis.
fetch('/api/db/nama_tabel') — tanpa API key, tanpa CORS.
Jangan gunakan localStorage untuk data yang dikirim pengunjung, karena localStorage hanya ada di browser satu orang.
Pola umum: pilih yang sesuai kebutuhan
| Jenis situs / fitur | Prompt | Akses tabel |
|---|---|---|
| Buku tamu / komentar | Buat buku tamu: form nama & pesan, daftar pesan terbaru di bawahnya. |
publik: list, create |
| Form kontak / pendaftaran | Buat form kontak (nama, email, pesan). Kiriman hanya boleh dibaca pemilik. |
publik: create + email privat |
| Pendaftaran acara / RSVP | Form pendaftaran seminar: nama, email, instansi, jumlah peserta. |
publik: create |
| Katalog produk | Buat katalog produk (nama, harga, deskripsi, gambar) yang tampil di halaman dan bisa dilihat semua orang. |
publik: list |
| Polling / voting | Buat polling: simpan pilihan pengunjung, tampilkan hasil dalam persentase. |
publik: list, create |
| Papan skor / leaderboard | Simpan skor pemain (nama, skor) dan tampilkan peringkat tertinggi. |
publik: list, create |
| Pesanan (order) | Form pesanan: nama, telepon, alamat, item, total. Hanya pemilik yang boleh melihat daftar pesanan. |
publik: create + data privat |
| Ulasan / rating produk | Buat ulasan dengan nama, rating bintang 1–5, dan komentar. |
publik: list, create |
Sebutkan tipe kolom
Ingin melihat data sendiri?
Pengunjung anonim (belum ada akun). Jadi gunakan
update/delete sebagai khusus pemilik — kamu melihat &
mengelolanya lewat tab Database di editor.
18Interaksi & Fitur JavaScript
Perilaku dinamis: filter, pencarian, keranjang, kalkulator, dan lainnya.
Pencarian & filter
Keranjang belanja
Kalkulator
Slider / carousel
Modal / popup
Unggah & tampilkan gambar
19Contoh Prompt Lengkap (Siap Pakai)
Tinggal salin, sesuaikan nama & detail, kirim ke mode Builder.
20Memperbaiki & Mengubah
Cara mengoreksi hasil tanpa memulai dari nol.
| Situasi | Prompt |
|---|---|
| Hasil kurang pas | Perbaiki bagian hero: teksnya terlalu kecil dan tombolnya kurang menonjol. Buat lebih besar dan kontras. |
| Ganti warna | Ganti semua warna hijau menjadi biru navy, jaga sisanya. |
| Ubah isi | Ganti judul menjadi "Selamat Datang di Toko Kami" dan teksnya jadi lebih ramah. |
| Susun ulang | Pindahkan bagian testimoni ke bawah bagian harga. |
| Tambah fitur | Tambahkan tombol WhatsApp mengambang di kanan bawah. |
| Perbaiki error | Form tidak tersimpan saat dikirim. Cek dan perbaiki agar datanya masuk ke database. |
| Kurangi/ubah gaya | Terlalu ramai. Sederhanakan: kurangi warna, tambah ruang kosong. |
21Batasan & Tips Teknis
Yang perlu diketahui agar tidak membentur dinding.
| Aspek | Batas |
|---|---|
| Jenis file | .html · .css · .js + gambar yang di-upload |
| Ukuran per file kode | Maks 512 KB |
| Total per project | 20 MB & 500 file/folder (lebih besar di paket Pro/Unlimited) |
| Panjang satu prompt | Maks 20.000 karakter, maks. 3 gambar lampiran |
| Kode server | fungsi serverless JavaScript di functions/ — bukan PHP/Node.js, tanpa npm |
| Build step / npm | Tidak ada — pakai CDN untuk library |
| Akun pengunjung | Belum ada — pengunjung anonim |
| Operasi database | list · view · create · update · delete |
| Tipe kolom database | teks · angka · ya/tidak · tanggal · relasi · gambar |
| Responsive | bawaan responsif · bisa dikunci mobile/desktop saja |
| SEO & pratinjau berbagi | harus diminta — AI tidak menambah otomatis |
| Gambar/media | upload gambar · AI tidak bisa membuat gambar · video lewat YouTube |
✅ Lakukan
- Sebut tujuan & pengguna situs
- Rinci bagian per bagian
- Sebut data yang perlu disimpan
- Satu perubahan besar per prompt
- Pakai Mode Plan untuk ide yang belum matang
- Sebutkan warna & font spesifik
🚫 Hindari
- Prompt super singkat: “buat website”
- Campur 5 perubahan berbeda dalam satu prompt
- Minta PHP / Node.js / npm (pakai fungsi serverless)
- Menulis API key di file halaman
- Simpan data penting di
localStorage - Asumsi pengunjung punya akun
- Ganti-ganti gaya tanpa menyebut bagiannya
★Template Prompt Universal
Salin, isi bagian dalam [ ], lalu kirim.