The Complete Guide

How to use every rakit.io feature — from the editor, AI Builder and database to serverless functions — plus a cheat sheet for writing instructions to the AI.

Part 1

Feature Guide

Get to know every part of the rakit.io editor: where it is, what it's for, and how to use it step by step. In the editor, the ⓘ button next to each feature also opens a short explanation.

F1Getting Started & the Editor

From signing up to knowing where every button on the screen is.

Sign up & log in

  1. Open the rakit.io home page and click Sign up. Fill in a username, email and password — or choose Continue with Google.
  2. Right after signing up, your first website is live at yourname.rakit.io and the editor opens automatically.
  3. New accounts get a one-time AI credit bonus, plus free credits every day (see Credits & Plans).
🔐 Accounts registered with email + password keep logging in with their password, even if the email matches your Google account. Accounts aren't merged automatically, for security.

Two editor layouts: Simple & Coding

Choose with the switch at the top center. Your choice is remembered in the browser.

✦ Simple

Just the AI chat and the preview. Great when you'd rather describe things to the AI and see the result without touching code.

</> Coding

The full layout: file panel, code editor, database, functions, diagrams, history and console. Features that need this layout switch you to Coding automatically.

Screen map (Coding layout)

AreaWhat's there
Top bar, leftLogo, file panel button, the website address chip (folder button = switch/create project, site link, copy URL button).
Top bar, centerThe Simple / Coding switch and the save status.
Top bar, rightPreview (show/hide), Guide, Publish (only in manual publishing mode), View site, the plan badge, and your avatar (account menu).
Left panelThe project's files & folders, new file/folder buttons, image upload, and quota usage.
Center areaTabs Code · AI · Data · Diagram · Functions · History · Console. The ⓘ button explains the open tab.
Right panelWebsite preview, screen size options, Select blocks, and Edit (text & images).

Avatar menu (top right corner)

ItemWhat it does
Open public website · Copy website URLOpens or copies the address of the active project's website.
Publishing modeChoose live instantly or manual (dev/prod) — see Publishing.
Save allSaves every open file that has unsaved changes.
SettingsLight/dark theme, language, and AI code prediction.
Bahasa Indonesia / EnglishSwitch the interface language.
Subscription & AI creditsSee plans, buy credits, or subscribe.
Log outLog out of your account in this browser.
📱 On a phone, the editor uses bottom navigation: File · Editor (or Chat AI in the Simple layout) · Preview. The project menu is in the avatar menu.

F2Projects — Many Websites in One Account

Each project is a separate website with its own address, files, database, version history and AI conversations.

Creating a new project

  1. Click the folder button in the website address chip (top left).
  2. Choose New project.
  3. Enter the website address (lowercase letters, digits, -), e.g. bakery → bakery.rakit.io.
  4. Enter a project name (optional), then Create project.

Switch, rename, delete

  • Switch project: click the folder button and pick a project from the list.
  • Rename project…: changes the display name (the address stays).
  • Delete this project…: deletes its files, database and history. Your last project can't be deleted.
ItemDetails
Number of projectsAt most 5 per account.
AI creditsBelong to the account and are shared by all projects.
File & database quotaCounted per project (size depends on your plan).
Running AI promptsOne prompt at a time per account, in any project.

F3Files, Folders & Images

Every part of your website is stored as a file in the left panel. index.html is the home page.

Creating & managing files

  • The New file / New folder buttons above the file list. Type a full path to create inside a folder, e.g. css/style.css.
  • Right-click (or the ⋯ button) on a file: Open, Preview this page, Copy public URL, Rename (F2), Delete (Del).
  • Right-click on a folder: New file, New folder, Upload images to that folder.
  • The Reload and Collapse all folders buttons are right next to them.

Uploading images

  • Click the Upload images button, right-click → Upload images…, or drag files straight into the file list.
  • Formats: .png .jpg .jpeg .gif .webp .svg .ico .avif — the file contents are checked, so other files with a renamed extension are rejected.
  • Names are tidied automatically (lowercase, spaces → -). If the name already exists: Replace, Save as new, or Skip.

Using images on a page

Click an image in the file panel to view it (pixel & file size), then copy its path, the <img> tag, or the CSS url().

index.html
<img src="/images/logo.png" alt="Bakery logo">
style.css
.hero { background-image: url('/images/hero.jpg'); }
💡 The AI knows the list of images in your project, so you can write: “use /images/hero.jpg as the hero section background”. The AI can't create or edit images — upload the images you need yourself.
LimitFreeProUnlimited
One code file512 KB (.html · .css · .js)
One image1 MB5 MB10 MB
Total storage per project20 MB100 MB250 MB
Files & folders5002,0005,000

F4Code Editor

A VS Code-style editor for changing HTML, CSS and JavaScript directly.

Saving

  • Auto-save (the switch below the editor): saves as you type, and the preview updates too.
  • Ctrl/⌘ S saves the active file · avatar menu → Save all.
  • When you close a tab with unsaved changes, you're asked: Save / Don't save / Cancel.

Code prediction (AI) — free

  • Pause typing for a moment → the AI suggests the continuation in gray text.
  • Tab accepts · Esc or keep typing to ignore.
  • Uses no credits (there's a daily limit). Turn it off in Settings.

Right-click → ✦ AI

  • Select a few lines of code, then right-click:
  • ✦ Ask AI to change this code — puts that code in the AI box.
  • ✦ Ask AI about this code — for an explanation.
  • The request isn't sent right away; you can complete it first.

Search & navigation

  • Ctrl/⌘ F finds in the file · Ctrl/⌘ B shows/hides the file panel.
  • The breadcrumb above the editor shows where the file is.
  • The bottom bar: cursor position and the file's language.

📖 Code Walkthrough — the AI explains your code (free)

The Code Walkthrough button above the editor (for .html, .css and .js files) opens an explanation panel next to the editor. The AI explains the code in the order it runs, not line by line.

  1. Open a file and click Code Walkthrough. Wait while the AI puts the steps together.
  2. Each step has a title, a kind (start, decision, loop, waiting for action, request…), the lines involved, an explanation, a real-value example, and key terms (click one to see its meaning).
  3. Click a step → its lines are highlighted in the editor. Click a line in the editor → its step opens. Use the ‹ › buttons, ▶ (autoplay), or the arrow keys.
  4. Steps that refer to another file (a page, a CSS class, an /api/fn/… function) can be clicked to open it, then ← Back.
  5. Also see the flow diagram, notes (bugs, needs checking, suggestions) and code speed. Use Ask the AI to ask about the open step.
💾 Explanations are saved per file. Reopening the same file doesn't ask the AI again. When the file changes, the panel shows a notice and a Refresh button. Free, with a daily limit per account.

F5Preview, Select Blocks & Edit

See your website the way visitors do, at different screen sizes.

ControlWhat it does
Address fieldChange the page path (e.g. /about) and press Enter to open another page. Esc cancels.
Desktop · Tablet · PhoneChanges the preview width: full, 768 px, or 390 px — to check the responsive layout.
↻ ReloadReloads the preview.
↗ Open in a new tabOpens the previewed page in a new browser tab.
DEV badgeShown in manual publishing mode: the preview shows the dev version, not the public website.
Ctrl/⌘ \Show/hide the preview panel.

🎯 Select blocks — change only specific parts

Instead of describing “the part below the second heading…”, point at it directly in the preview.

  1. Click Select blocks above the preview.
  2. Hover over the page, then click the part you want to change (max. 5 blocks, across several pages if you like — change pages with the links in the preview).
  3. Click Write instruction. The selected blocks appear above the AI box.
  4. Write the change, e.g. “make it 3 columns and add icons”, then send. The AI focuses on those blocks and leaves the rest alone.
  5. Click Done to leave selection mode.

✏️ Edit — change text & images right in the preview

For changing headings, paragraphs, button labels, list items or images without opening the code and without using AI credits.

  1. Click Edit above the preview.
  2. Hover over the page — editable text gets a blue box — then click the text and type.
  3. Press Enter or click elsewhere to save. Esc cancels.
  4. Click Done to leave edit mode.

The change is written to that page's HTML file (e.g. index.html) at exactly the same spot — formatting such as bold or links inside the text is kept. The file also opens in the Code tab, so you can undo with Ctrl/⌘ Z. Text written by JavaScript (e.g. the message 'Password must be at least 6 characters.' in script.js) can be changed too — the string is replaced in that JS file. Text assembled from data (e.g. “You've clicked 3 times”) can't: clicking it shows a red marker, so change it in the code or ask the AI. To change pages: Alt+click a link.

Replacing images: in Edit mode, click the image. Pick another image from the project, click Upload a new image…, or paste an image address (https://…). Also fill in the alt text — a short description of the image for screen readers and search engines — then Save. Only <img> images can be replaced here; CSS background images and <picture> images with several versions are changed in the code or with the AI.

F6AI Assistant (Builder & Plan)

Open the AI tab or press Ctrl/⌘ I. Prompt-writing techniques are in Part 2.

🔨 Builder

The AI writes/changes/deletes files and creates database tables directly.

  1. Choose Builder below the prompt box.
  2. Write your request and press Enter (Shift+Enter = new line).
  3. Watch the progress & the list of changed files. Click a file to see the differences.
  4. Choose Save to accept or Undo to roll everything back.

🧭 Plan

The AI only discusses & drafts a plan, without changing files.

  1. Choose Plan and describe your idea.
  2. Go back and forth until the plan is right.
  3. Press Run this plan — the AI switches to Builder and carries it out.

Prompt box features

FeatureHow to use it
📎 Attach imagesThe Image button, paste (Ctrl/⌘ V), or drag files. Max. 3 images (JPG/PNG/WEBP, max. 2 MB) — a design example, a sketch, or a screenshot of an error. Prompts with images use 2 credits.
🎯 Selected blocksFrom Select blocks. Remove one with the × button on its chip.
⏹ StopStops the AI midway. The credits are refunded.
Prompt lengthMax. 20,000 characters.

Conversations & history

⚙️ Prompts keep running even if you close the tab. Every prompt is processed on the server. Refreshing or closing the tab doesn't cancel it; when you open the editor again, the progress reconnects and the Save/Undo buttons are still there. When the AI is busy, the panel shows your position in the queue.
💰 Your credits are safe. Credits are deducted when a prompt is sent and refunded if the prompt fails, you stop it, or the queue is full. Before the AI changes files, a version is saved automatically in History.

“✦ … with AI” buttons in other features

Many features have a ✦ button that fills the AI box with a request plus its context (it isn't sent right away):

WhereExample buttons
FunctionsCreate with AI, Change, Fix with AI (from a failed log/test)
DatabaseUse the table on the website, Build a form with AI
DiagramFix findings with AI
ConsoleFix with AI on an error line
Code editorRight-click → change / ask about the selected code
Feature explanation (ⓘ)Try it now — an example prompt for that feature

F7Database (Data Tab)

Store visitor data & content permanently — like a spreadsheet, ready to use from your web pages.

Creating a table

  1. Open the Data tab and click + (New table) or + Create table.
  2. Enter a table name (e.g. messages), then add columns: a name, a type, tick Required if it must be filled, and Private if visitors must not see it.
  3. Click Create table. The id and created_at columns are created automatically.
💡 Faster: ask the AI in Builder mode — “build a guestbook with a name and message form” — and the table and its page are created together.

Column types

TypeForExample value
TextNames, messages, addresses (max. 10,000 characters)Budi
NumberPrices, quantities, scores150000
Yes/NoAttending, agreed, paidtrue / false
DateBirthdays, event schedules2026-12-31 or 2026-12-31T19:00
RelationPoints to a row in another table (e.g. order → product)12 (the target row's id)
ImageProduct photos, avatars, payment receipts/uploads/products/abc.jpg
⚠️ A column's type can't be changed after it's created. Column & table names can be changed (click the name, edit it, press Enter).

Access: who may do what

Click Settings on a table. Each operation can be Public (every visitor) or Only you (the owner, through the editor). By default everything is Only you.

OperationMeaningUsual advice
listRead a list of recordsPublic for guestbooks, catalogs, leaderboards
viewRead one recordPublic for product detail pages
createAdd recordsPublic for contact forms, RSVPs, orders
updateChange recordsOnly you (visitors are anonymous)
deleteDelete recordsOnly you

Private columns are never sent to visitors even when list is public — good for emails, phone numbers and addresses.

Managing table contents

Using the database from your website code

RequestWhat it does
GET /api/db/<table>?sort=-created_at&limit=20&offset=0List rows → { rows, total }. Add &column=value to filter.
GET /api/db/<table>/<id>One row
POST /api/db/<table>Add a row (JSON body)
PATCH /api/db/<table>/<id>Update a row
DELETE /api/db/<table>/<id>Delete a row
POST /api/db/<table>/upload?column=<column>Upload an image for an Image column → { url }
GET /api/db/<table>?expand=<relation_column>Also fetch the data from the table a relation column points to
script.jssave & show messages
// save
const res = await fetch('/api/db/messages', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({ name, message }),
});
if (!res.ok) alert((await res.json()).error);

// show the 20 newest
const { rows } = await (await fetch('/api/db/messages?sort=-created_at&limit=20')).json();
script.jsupload a photo, then save its address
const up = await fetch('/api/db/products/upload?column=image', { method: 'POST', body: fileInput.files[0] });
const { url } = await up.json();          // e.g. "/uploads/products/lx3k-9f2a.jpg"
await fetch('/api/db/products', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({ name, image: url }),
});
⚠️ Don't store images as base64 in a text column — it will be rejected. Use an Image column and upload as in the example above. Visitors can only upload if the table's create or update access is public.
Database limitsFreeProUnlimited
Size per project10 MB50 MB100 MB
Tables · columns20 tables · 30 columns per table
Requests from visitors300 reads & 60 writes per minute per visitor · max. 20 uploads / 10 minutes

F8Serverless Functions (Backend)

JavaScript code that runs on the server, not in the visitor's browser — for secret API keys, calculations that mustn't be tampered with, notifications, or calling other services.

Creating & trying a function

  1. Open the Functions tab and click + New function. Give it a name (lowercase letters, digits, - or _, max. 40), e.g. send-message.
  2. The file functions/send-message.js is created with example code. Click Open code to change it.
  3. Click Try: choose a method, fill in the query & JSON body, then run it. The result, status, time and console.log output appear right away.
  4. Call it from your web pages at /api/fn/send-message. Copy URL copies the full address.
💡 Or click ✦ Create with AI and describe the function, e.g. “send a Telegram notification for every new message from the contact form”.

What a function looks like

functions/order.js
export default async function (req, { db, env, fetch, ai }) {
  // req: { method, query, headers, body }
  const row = await db.insert('orders', {
    name: req.body.name, total: 150000,
  });
  return { ok: true, id: row.id }; // sent as JSON
}

Calling it from a page

script.js
const res = await fetch('/api/fn/order', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({ name: 'Ani' }),
});
const data = await res.json();

What's available inside a function

ObjectUse
reqmethod, query, headers, body (already parsed if JSON). For scheduled runs, req.method is "CRON".
dbThe project database as the owner (public access rules don't apply): db.list(table, { sort, limit, offset, filter }), db.get, db.insert, db.update, db.delete.
envSecret values from Secrets (env), e.g. env.TELEGRAM_TOKEN.
fetchCalls external APIs (max. 10 per execution; can't call rakit.io websites — use db).
aiUses AI with your own API key — see AI in Functions.
ResponsePlain values are sent as JSON. For full control: new Response(text, { status, headers }) or Response.json(data, { status }). A thrown error → status 500 { error }.
🧩 Functions run in a sandbox, not Node.js: there's no require, no npm packages, and no file access. Code in the functions/ folder can never be read by visitors.

Full reference

APIDetails
req.methodGET, POST, PUT, PATCH, DELETE… or CRON when run by a schedule.
req.pathThe path that was called, e.g. /api/fn/order.
req.queryObject of URL parameters (values are text): /api/fn/search?q=cake → req.query.q.
req.headersRequest headers (lowercase names). req.headers['x-client-ip'] = the visitor's IP. Cookies aren't forwarded.
req.bodyAn object when the request sends JSON (Content-Type: application/json), otherwise raw text. Max. 1 MB.
await req.text() · await req.json()The body as text / parsed as JSON.
db.list(table, { sort, limit, offset, filter })→ { rows, total }. sort: '-created_at' (- = newest first), limit max. 100, filter: { status: 'new' } = column equals value.
db.get(table, id)One row (error if it doesn't exist).
db.insert(table, data)Adds a row → the new row with its id & created_at.
db.update(table, id, data)Changes only the columns you send → the updated row.
db.delete(table, id)Deletes a row → { ok: true }.
env.NAMEProject secrets (max. 30 secrets, UPPER_CASE names). Not set → undefined.
await fetch(url, { method, headers, body })Calls an external service. An object body is sent as JSON automatically. Result: ok, status, headers.get(name), await text(), await json(). Max. 10 calls, 8 seconds & 2 MB response per call.
console.log/info/warn/errorShown in Try, the Execution log, and the Console tab (BE). Objects are printed as JSON. console.time/timeEnd, count, table and assert are available too.
return valueStatus 200 + JSON. return with no value → status 204 (empty).
Response.json(data, { status, headers })JSON with your own status, e.g. 400 for bad input.
new Response(text, { status, headers })A text/HTML/CSV response. Allowed headers: content-type, cache-control, content-disposition, location, etag, access-control-*, and x-….
Response.redirect(url, 302)Redirects the visitor to another address.
throw new Error('…')Status 500. In the dev version & tests the full message is shown; on the public website visitors only see “The function failed to run”, with details in the Log.

Ready-to-use code examples

Copy into functions/<name>.js, adjust the table/column names, then test with the Try button.

functions/contact.jsvalidate, save, send a Telegram notification
export default async function (req, { db, env, fetch }) {
  if (req.method !== 'POST') return Response.json({ error: 'Use POST' }, { status: 405 });

  const { name, email, message } = req.body || {};
  if (!name || !message) return Response.json({ error: 'Name and message are required' }, { status: 400 });

  // the "messages" table can stay "Only you": db in a function works as the owner
  const row = await db.insert('messages', { name, email, message });

  // secrets: TELEGRAM_TOKEN & TELEGRAM_CHAT_ID (Functions tab → Secrets)
  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: `New message from ${name}:\n${message}` },
  });
  if (!tg.ok) console.warn('Telegram failed', tg.status, await tg.text());

  return { ok: true, id: row.id };
}
functions/checkout.jscalculate the total on the server (prices can't be tampered with)
export default async function (req, { db }) {
  const { name, phone, items } = req.body || {};   // items: [{ id: 3, qty: 2 }, …]
  if (!Array.isArray(items) || !items.length) {
    return Response.json({ error: 'Your cart is empty' }, { status: 400 });
  }

  let total = 0;
  const lines = [];
  for (const it of items) {
    const p = await db.get('products', it.id);         // the price comes from the database, not the browser
    const qty = Math.max(1, Math.min(99, Number(it.qty) || 1));
    if (p.stock < qty) return Response.json({ error: `Not enough ${p.name} in stock` }, { status: 409 });
    total += p.price * qty;
    lines.push(`${p.name} x${qty}`);
    await db.update('products', p.id, { stock: p.stock - qty });
  }

  const order = await db.insert('orders', { name, phone, items: lines.join(', '), total, status: 'new' });
  return { ok: true, number: order.id, total };
}
functions/weather.jscall an external API without leaking the API key (GET)
export default async function (req, { env, fetch }) {
  const city = req.query.city || 'Jakarta';
  const url = `https://api.openweathermap.org/data/2.5/weather?q=${encodeURIComponent(city)}`
            + `&units=metric&lang=en&appid=${env.OWM_KEY}`;
  const res = await fetch(url);
  if (!res.ok) return Response.json({ error: 'Weather data unavailable' }, { status: 502 });

  const d = await res.json();
  return Response.json(
    { city: d.name, temp: d.main.temp, weather: d.weather[0].description },
    { headers: { 'cache-control': 'public, max-age=600' } },   // cache for 10 minutes
  );
}
// called from a page: fetch('/api/fn/weather?city=Bandung')
functions/admin-orders.jsone function, several methods + a simple key
export default async function (req, { db, env }) {
  // a simple key for a private admin page (secret ADMIN_KEY)
  if (req.headers['x-admin-key'] !== env.ADMIN_KEY) {
    return Response.json({ error: 'Not allowed' }, { status: 401 });
  }

  switch (req.method) {
    case 'GET':
      return db.list('orders', { sort: '-created_at', limit: 50, filter: req.query.status ? { status: req.query.status } : {} });
    case 'PATCH':
      return db.update('orders', req.query.id, { status: req.body.status });
    case 'DELETE':
      return db.delete('orders', req.query.id);
    default:
      return Response.json({ error: 'Method not supported' }, { status: 405 });
  }
}
// from a page: fetch('/api/fn/admin-orders?status=new', { headers: { 'X-Admin-Key': key } })
functions/daily-report.jsrun by a schedule (Pro/Unlimited)
export default async function (req, { db, env, fetch }) {
  if (req.method !== 'CRON') return Response.json({ error: 'Schedules only' }, { status: 403 });

  const since = Date.now() - 24 * 3600e3;                      // the last 24 hours (created_at is in UTC)
  const today = new Date(Date.now() + 7 * 3600e3).toISOString().slice(0, 10);   // WIB date for the title
  const { rows } = await db.list('orders', { sort: '-created_at', limit: 100 });
  const fresh = rows.filter((r) => Date.parse(r.created_at) >= since);
  const revenue = fresh.reduce((n, r) => n + (r.total || 0), 0);

  console.log(`Report ${today}: ${fresh.length} orders, Rp${revenue}`);
  await fetch('https://api.resend.com/emails', {                 // send an email via Resend
    method: 'POST',
    headers: { Authorization: `Bearer ${env.RESEND_KEY}`, 'Content-Type': 'application/json' },
    body: { from: 'shop@yourdomain.com', to: env.MY_EMAIL, subject: `Report ${today}`,
            html: `<p>${fresh.length} orders, total Rp${revenue}</p>` },
  });
}
// set it in the Functions tab → Schedule → "Every day at 21:00"
functions/download-csv.jsfile responses & redirects
export default async function (req, { db, env }) {
  if (req.query.key !== env.ADMIN_KEY) return Response.redirect('/', 302);   // not the owner → home page

  const { rows } = await db.list('signups', { sort: 'id', limit: 100 });
  const csv = ['id,name,email', ...rows.map((r) => `${r.id},"${r.name}","${r.email}"`)].join('\n');
  return new Response(csv, {
    headers: {
      'content-type': 'text/csv; charset=utf-8',
      'content-disposition': 'attachment; filename="signups.csv"',
    },
  });
}
functions/support.jsa chatbot with history (needs an AI provider)
export default async function (req, { ai }) {
  const history = (req.body?.messages || []).slice(-10);      // [{ role: 'user'|'assistant', content }]
  const { text } = await ai.chat({
    system: "You are the support agent for Sari's Bakery. Open 8 am–8 pm. Answer briefly & kindly.",
    messages: history,
    maxTokens: 400,
  });
  return { reply: text };
}
script.jsCalling a function & handling errors on a page
async function send(data) {
  const res = await fetch('/api/fn/contact', {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify(data),
  });
  const result = await res.json().catch(() => ({}));
  if (!res.ok) throw new Error(result.error || 'Sending failed');   // the message from Response.json({ error })
  return result;
}
💡 Good habits: check input first and reply 400 with a clear message · never trust prices/totals from the browser · keep every key in Secrets · use console.log and check the output in Try or the Log · the time limit is 10 seconds, so avoid many sequential fetch calls.
Other limitsValue
Requests to one website120 per minute (all visitors) · 60 per minute per visitor
Request body · fetch response1 MB · 2 MB
Console output per execution16 KB (the rest is cut off)
Dev version (manual publishing)Dev functions are called at yourname--dev.rakit.io/api/fn/… and use the dev database

Secrets, schedules and logs

🔑 Secrets (env)

Enter a name (e.g. TELEGRAM_TOKEN) and its value, then click Save. Read it in code with env.TELEGRAM_TOKEN. The value isn't shown in the editor again.

⏱ Schedules Pro / Unlimited

Click Schedule on a function: every 5/15/30 minutes, every hour, every day at a set time, every week, or a custom cron (WIB time, UTC+7). Most frequent: Pro every 15 minutes, Unlimited every 5 minutes.

📜 Execution log

The latest executions (triggered by visitors, tests or schedules) with status, duration, errors and console output. Failed executions have a ✦ Fix with AI button.

📊 Quota

The meter above the tab shows today's executions. Limits: 10 seconds & 64 MB per execution.

Executions per day (WIB)FreeProUnlimited
All functions in the account1,00020,000100,000
⚠️ Never put API keys/tokens in a page's .html or .js files — anyone can see them. Store them in Secrets (env) and use them through a function.

F9AI in Functions (AI Providers)

Build AI features into your website — chatbots, summaries, data extraction, image checks — using your own API key.

Adding a provider

  1. Functions tab → the AI providers section → add a provider.
  2. Choose a type: OpenAI, Anthropic Claude, Google Gemini, or OpenAI-compatible (with quick buttons for DeepSeek, Groq, OpenRouter, Mistral and Together).
  3. Fill in a name (used in your code), the API key, a chat model, and an embedding model (optional). Mark one as the default.
  4. Click Save & test to make sure the key and model work. Max. 10 providers per project.
functions/help.js
export default async function (req, { ai }) {
  const { text } = await ai.chat(req.body.question, { system: 'You are a bakery support agent. Answer briefly.' });
  const data = await ai.json('Extract the name & phone from: ' + req.body.message, { name: 'string', phone: 'string' });
  const check = await ai.chat('Is this a payment receipt?', { images: ['/uploads/receipts/abc.jpg'] });
  const [a, b] = await ai.embed(['chocolate cake', 'brownies']);
  return { text, data, check: check.text, similar: ai.similarity(a, b) };
}
CallResult
ai.chat(prompt, { system, images, provider, model, temperature, maxTokens }){ text, model, provider, usage }
ai.json(prompt, shape)An object in the requested shape
ai.embed(text | [text])Vectors for meaning-based search (Anthropic has no embeddings)
ai.similarity(a, b)How similar two vectors are (0–1)
ai.providers()The installed providers (without keys)
🛡️ Your API key is safe. Keys are stored on the server, never sent to the browser or to function code (the editor only shows the last 4 characters), and are deleted when the provider is removed. The provider bills your account — rakit.io doesn't deduct credits. Set a spending limit in the provider's dashboard.

Limits: max. 5 ai.* calls per execution, 60 seconds per call, max. 4 images (5 MB). Time spent waiting for the AI doesn't count toward the function's 10-second limit. Usage per provider is shown in the Functions tab.

F10AI-Drawn Diagrams

The AI draws your website's structure from its files & database — to understand the big picture, for documentation, or for coursework.

TypeShows
Use CaseThe actors and what they can do on the website
ActivityA visitor's main process flow, with decision branches
SequenceThe order of interactions Visitor → Page → API → database/external service
ClassTables and JavaScript modules with their attributes, methods and relationships
StateHow an important object's status changes (e.g. an order)
ERDTables, columns, types, required/private, and relationships
Site mapPages, links between pages, CSS/JS files — broken links & missing files are marked
Data flowWhich pages/scripts/functions use which tables — requests that will be rejected are marked
  1. Open the Diagram tab and choose a type.
  2. Click Update diagram — the AI draws it from the current state (uses 1 credit, refunded on failure). The diagram is saved and doesn't change by itself.
  3. Read the Findings panel: the AI's notes, such as tables anyone can delete or broken links.
  4. If the drawing fails to display, click Fix with AI (free, max. 2 times per diagram).
  5. Copy the Mermaid code or download it as SVG. The ⓘ button explains how to read the open diagram type.

Zoom & pan

ZoomPan
MouseScroll wheel; double-click (Shift = zoom out)Drag; Shift + scroll = horizontal
TouchpadPinch, or Ctrl/⌘ + scrollTwo-finger swipe
TouchscreenTwo-finger pinchOne-finger drag
Keyboard+ / −, 0 fit to screen, 1 actual sizeArrow keys

F11Version History

A “save point” for all your project files. Experiment without fear of breaking things.

When versions are saved

  • Automatically when you start editing (at most every 10 minutes).
  • Automatically before the AI changes files.
  • Automatically before restoring a version (so even a restore can be undone).
  • Manually: the Save version now button, with your own name, e.g. “before redesign”.

Restoring

  1. Open the History tab and choose a version.
  2. Look at the files labeled Changed, Deleted, or New file. Click View differences.
  3. Restore this file for one file, or Restore this version for the whole project.
⚠️ The database isn't included in saves/restores, so data submitted by visitors isn't lost. Restoring the whole project also deletes files created after that version.
History limits per projectFreeProUnlimited
Kept for7 days30 days90 days
Number of versions202002,000

History doesn't count toward your storage quota.

F12Console — Finding the Cause of Errors

Every message from your website in one place. A red number on the tab means new errors.

SourceWhat's in it
FE (frontend)console.log output and errors from pages in the preview
BE (backend)Logs and errors from serverless functions
NetworkRequests from pages to the server (e.g. fetch('/api/db/products')) with their status
SystemNotes such as pages being loaded
StatusMeaning
2xxSuccess
4xxRequest rejected — e.g. 403 table access isn't public yet, 404 table/page doesn't exist, 400 invalid data
5xxAn error on the server/in a function

F13Publishing: Live or Dev/Prod

Control when visitors see your changes. Open the avatar menu → Publishing mode.

⚡ Live instantly default

Every change appears on yourname.rakit.io right away. Great for learning and experimenting.

🚀 Manual publishing (dev/prod)

You edit the dev version at yourname--dev.rakit.io (you can share it to get feedback). The public website only changes when you press Publish. The dev database is separate, for testing.

Publishing changes

  1. A dot on the Publish button (top right) means there are changes that aren't live yet.
  2. Click the button — you'll see the list of new, changed and deleted files, plus database structure changes.
  3. Click Publish. Data & images submitted by visitors on the public website stay safe; dev test data isn't copied.
  4. If a table/column will be deleted, tick the confirmation first — its data will be removed from the public website.
⚠️ Switching from manual back to live instantly makes unpublished changes go live right away, and the test data in dev is replaced by the real data from the public website.

F14AI Credits, Plans & Payment

The credit badge in the AI panel shows your remaining credits. Click it, or open the avatar menu → Subscription & AI credits.

What does each feature cost?

FeatureCost
AI prompt (Builder / Plan)1 credit
Prompt with images2 credits
Update diagram1 credit
Code prediction, Code Walkthrough, diagram fixesFree (with a daily limit)
AI in functions (ai.*)Billed by the provider to your API key, not rakit.io credits
Failed / stopped prompts / full queueCredits are refunded

Where credits come from (used in this order)

  1. Subscription quota — if you subscribe to Pro/Unlimited.
  2. The welcome bonus for new accounts (one-time), then daily free credits — reset at 00:00 WIB (UTC+7); leftovers don't accumulate.
  3. Purchased credits — never expire.

Plans

FreeProUnlimited
AIDaily free creditsA credit quota every 30 daysNo monthly quota, with a daily prompt limit
File storage / project20 MB100 MB250 MB
Database / project10 MB50 MB100 MB
Files & folders5002,0005,000
Image size1 MB5 MB10 MB
Version history7 days / 2030 days / 20090 days / 2,000
Function executions / day1,00020,000100,000
Function schedules—min. 15 minutesmin. 5 minutes

Current prices and AI quotas are shown in the Subscription & AI credits menu.

Paying with QRIS

  1. Choose a credit package or a subscription, then click pay.
  2. Scan the QRIS code with any Indonesian banking or e-wallet app that supports QRIS.
  3. Keep the payment window open — the credits/plan activate automatically as soon as the payment is received.

F15Settings & Keyboard Shortcuts

Avatar menu → Settings. Settings are saved in the browser you're using.

Appearance & language

Light (cream paper) or Dark theme. The code editor and diagram colors follow along. Choose Bahasa Indonesia or English for the interface — the AI's explanations, diagrams and messages follow that language too.

Code editor

Automatic code prediction (AI) — turn the gray code suggestions on or off.

ShortcutAction
Ctrl/⌘ SSave file
⌥ ⌘ SSave all
Ctrl/⌘ FFind in file
Ctrl/⌘ BShow/hide the file panel
Ctrl/⌘ \Show/hide the preview
Ctrl/⌘ IOpen the AI Assistant
Enter · Shift EnterSend prompt · new line
Tab · EscAccept · ignore a code prediction
F2 · DelRename · delete the selected file
← →Move between steps in Code Walkthrough

F16Common Problems & Fixes

Check here first before getting stuck.

ProblemCause & fix
A form doesn't save and the Console shows 403The table's create access is still “Only you”. Open the Data tab → Settings → make it Public.
Data doesn't show up, status 404The table name in the code differs from the one in the Data tab (watch letters & underscores).
The email column doesn't show on the pageColumns marked Private are never sent to visitors. View them in the Data tab.
An image doesn't showWrong path (upper/lowercase matters). Click the image in the file panel → copy its path.
Changes don't appear on the public websiteManual publishing mode is on — press Publish. Or the file hasn't been saved.
The AI's result isn't what you wantedPress Undo, then rewrite your request more specifically, or use Select blocks. You can also go back via the History tab.
“The AI is at capacity”The queue is busy; your credits are refunded. Try again shortly.
Out of creditsWait for the 00:00 WIB (UTC+7) reset, buy credits, or subscribe.
A file/image is rejected because of the quotaDelete unused files, shrink images, or upgrade your plan.
A function errors / times outCheck the Execution log in the Functions tab, then ✦ Fix with AI. Make sure the secrets (env) it uses are set.
A button does nothing when clickedOpen the Console tab → filter FE → read the red error → ✦ Fix with AI.
Part 2

Prompt Cheat Sheet

How to write instructions for the AI Builder so the result is right on the first try — with ready-to-copy examples.

1Basics — How the AI Works

Understand the two modes & three golden rules to get it right on the first try.

🧭 Plan mode

The AI only drafts a plan — it doesn't touch files. Great for new projects or fuzzy ideas. Finish by pressing “Run this plan”.

Plan modePlan a photography portfolio website for a wedding photographer.

🔨 Builder mode

The AI creates/changes files and database tables directly. Great for building, changing or fixing.

Builder modeBuild a wedding photography portfolio website with a gallery, an about page, and a contact form.

Three golden rules

  • State the goal, not just the name. “A website for a home bakery that takes orders online” is far better than “a bakery website”.
  • List the parts one by one. Which pages, what goes in each section, what data to save.
  • One prompt = one big change. For different things, send separate prompts so they're easy to fix and save credits.
💡 A good prompt formula: [Type of site] for [who/what for], with [sections], in a [color/mood] style, and [data to save]

2Structure & Pages

Deciding the files, pages and navigation.

Full set of pagesBuild a company profile website with these pages: - index.html — hero, services, strengths, testimonials - about.html — history, vision & mission, team - services.html — the full list of services - contact.html — form + map + info Use the same navigation menu on every page.
Folder structureMove the CSS into css/style.css and the JavaScript into js/app.js. Use separate files, not inline code.

Layout from scratch

BuilderCreate a grid layout: a sticky header, responsive 3-column content, and a footer with 4 columns of links.

Adding a page

BuilderAdd a gallery.html page with the title "Gallery", a masonry photo grid, and link it in the menu.
💡 Responsiveness & accessibility are built into the AI's defaults. To be sure, write: “make sure it's responsive on phones and every image has alt text”.

3Design & Visual Style

How to describe colors, fonts and mood effectively.

Visual styleUse a modern minimalist design: - Main color dark green (#14532d), yellow accent (#facc15) - Poppins from Google Fonts for headings, Inter for body text - Rounded corners, soft shadows, plenty of white space - Light theme (light mode)
What you wantHow to write the prompt
Specific colorsmain color #2563eb, cream background #fef9f3
Overall styleclean & professional corporate style / playful & cheerful
Fontthe "Plus Jakarta Sans" font from Google Fonts
Dark themedark mode with a theme toggle button
Animationfade-in animation as the page scrolls
Iconsicons from Lucide (via CDN)

Icons & illustrations

BuilderUse Lucide icons from a CDN for the service features. Use placeholder images from picsum.photos for now.

Dark theme

BuilderAdd a light/dark theme toggle in the top right corner. Save the choice in localStorage and remember it on the next visit.
⚠️ There's no build step / npm. External libraries (Bootstrap, the Tailwind CDN, Chart.js, etc.) can only be loaded from a CDN with <script> or <link>. Say so clearly, e.g. “use Bootstrap 5 from a CDN”.

4Responsive Design — Desktop / Mobile

How to ask for different layouts on phones and desktops, or lock to one of them.

📐 The AI is responsive by default. If you don't say otherwise, the AI makes a layout that adapts by itself (desktop & mobile). This section is for when you need special behavior — say, a page that should only be used on desktop, or a mobile layout that's very different.

Choose a direction

Default

Responsive (both)

The layout adapts to the screen. No need to ask — this is the default.

Desktop

Desktop-only

The page is designed for wide screens (e.g. dashboards, data tables).

Mobile

Mobile-only

Designed specifically for phone screens (e.g. an attendance app, a calculator).

Desktop-only

The page is made for wide screens. Phone visitors see an “open on desktop” message.

BuilderThis dashboard page is desktop-only. When opened on a narrow screen (a phone), hide its content and show the message: "This page works best on a computer. Please open it on a larger screen."
BuilderCreate a desktop-only layout with a minimum width of 1200px, a fixed left sidebar, and a wide content area. Lock it so it doesn't "break" on small screens.

Mobile-only

Designed for phones: big buttons, one column, bottom navigation.

BuilderMake this page specifically for phones: - One column, big & easy-to-tap buttons - A navigation bar fixed to the bottom of the screen - Max width 480px, centered when opened on desktop - Text big enough to read while standing
BuilderOptimize specifically for phone screens: hide elements that are only useful on desktop, use a "hamburger" menu, and prioritize speed and touch targets ≥ 44px.

Different behavior per screen size

If you want elements to appear/disappear or change shape at certain sizes:

Hide on phones

BuilderHide the sidebar and wide tables on phones, but keep them fully visible on desktop.

Change shape

BuilderOn desktop the menu sits horizontally at the top. On phones, turn it into a hamburger button that opens a panel sliding in from the side.

Adaptive columns

BuilderShow the catalog in 4 columns on desktop, 2 columns on tablets, 1 column on phones.

Tables become cards

BuilderA data table on desktop that turns into a stack of cards on phones so nobody has to scroll sideways.

Screen sizes (common breakpoints)

If you want to give exact numbers, use these as a reference:

DeviceScreen widthSay in your prompt
📱 Phone< 640pxon phones (below 640px)
📱 Large phone / small tablet640–767pxon medium screens
💻 Tablet768–1023pxon tablets (768–1023px)
🖥️ Desktop≥ 1024pxon desktop (1024px and up)
🖥️ Wide desktop≥ 1280pxon wide screens
NeedHow to write the prompt
Lock to desktopthis page is desktop-only, show an "open on a computer" message on phones
Lock to mobilemake it phone-only, max width 480px, centered on desktop
Specific elementshide the statistics section on phones
Menuhorizontal menu on desktop, hamburger on phones
Catalog grid4 columns desktop, 2 tablet, 1 phone
Imagesimages scale to the width and never overflow the screen
Fontsmaller headings on phones (24px), larger on desktop (40px)
Orientationplace them side by side when the screen is horizontal (landscape)
Testing on phonesmake sure nothing overflows the screen or needs sideways scrolling

Example: desktop-only dashboard

BuilderBuild a desktop-only admin dashboard: - Fixed left sidebar + wide content - A full data table - If the screen is narrower than 1024px, replace the content with a message to open it on a computer - Hide all controls on small screens

Example: mobile-only app

BuilderBuild a phone-only attendance app: - Max width 480px, centered - Tab navigation fixed to the bottom - Big "Clock in / Clock out" buttons - A big clock at the top - Save the history to the database
💡 How to test: open your site on a phone, or on desktop press F12 and turn on device mode (the phone icon) to see the mobile layout without a real phone.
⚠️ Important: mobile-only / desktop-only means visitors on other devices can't use the site. Only do it on purpose (e.g. an internal tool for the owner). If everyone should have access, plain responsive is enough (write: “make sure it looks tidy on both phones and desktop”).

5SEO & Social Sharing

So your site shows up on Google and looks great when its link is shared on WhatsApp/social media.

🔎 The AI doesn't add SEO information automatically. Ask for it explicitly so your site is easy to find and its links look tidy when shared.

Title & description (Google)

BuilderAdd SEO information to every page: - A clear tab title (max 60 characters) - A description for Google (max 160 characters) - The brand name at the end of the title Example: "Nusantara Coffee — Hand-Picked Coffee Beans"

Share previews (Open Graph)

BuilderWhen the link is shared on WhatsApp/Facebook/ Twitter, show a preview with: - A title & short description - A preview image (1200×630) - The site name Add the Open Graph tags for that.

Tab & device icons

BuilderAdd a favicon (the icon in the browser tab) and an icon for phone home screens, then add them to every page.

Language & search engines

BuilderSet the page language to English (lang="en"), add a simple sitemap, and allow Google to index the site.

A complete SEO request

BuilderOptimize the SEO of the coffee shop website "Nusantara Coffee": - Title: "Nusantara Coffee — Hand-Picked Coffee Beans" - Description: "Buy fresh coffee beans from local farmers. The best arabica & robusta, shipped nationwide." - Preview image: the shop logo on a brown background - Favicon: a coffee bean - Language: English Add it to the product and about pages as well.
NeedHow to write the prompt
Show up on Googleoptimize SEO so it appears in Google search, add page titles and descriptions
Tidy links on WhatsAppmake a nice preview when the link is shared on WhatsApp and social media
Faviconadd my logo as the favicon in the browser tab
Keywordsnaturally include "jakarta bakery" and "order cakes online"
Google Mapsadd the shop location in a way Google can read (address, opening hours)
Multiple pagesmake sure every page has its own title & description
💡 The title & description matter most. If you only ask for one thing, ask for those — they're what shows up in Google results and when the link is shared.

6Accessibility — Easy for Everyone to Use

Making your site comfortable for anyone, including screen reader users and people with visual impairments.

Images & alt text

BuilderMake sure every image has alternative text (alt) describing it, for screen readers. Decorative images just get an empty alt.

Contrast & readability

BuilderMake sure text and background have enough contrast (dark text on a light background), fonts are at least 16px, and line spacing is comfortable.

Usable without a mouse

BuilderMake sure every button and link can be reached with the Tab key on the keyboard, with a clear marker when it's focused.

Clear forms

BuilderGive every form field a clear label (write "Name", not just an empty box), and make error messages easy to understand.
All-in-one requestTidy up the site's accessibility: - Every image has alt text - Enough color contrast - Can be navigated with the keyboard (Tab) - Forms have labels - Headings in order (H1 then H2, no skipping) - Buttons have big enough touch targets on phones
💡 Why does it matter? Accessible sites are friendlier for everyone — including people using a phone on the go, a slow connection, or reading in bright sunlight. Bonus: Google rates them better too.

7Forms & Input Validation

A good form saves data neatly and tells visitors when something's wrong.

A complete form

BuilderBuild an order form with: - Name (required), Email (required, email format) - Phone number (required, digits only) - Address (required), Notes (optional) - Validation on submit: mark wrong fields with a clear message - On success: show "Thank you, your order is in" and clear the form

Choice & date fields

BuilderAn event registration form: - Name, email - Package choice (dropdown: Regular/VIP) - Visit date (date picker) - Number of people (1-10) - A tick box "I agree to the terms & conditions" Save to the database once it's valid.

Uploading files & images

BuilderA form with an image input: - Choose a photo and show a preview before sending - Limit the size to 2 MB - Save it to an image-type column in the database - After sending, show the image in a gallery

Showing incoming data

BuilderA contact form + a list of incoming messages, showing the 10 newest with their time. Only I (the owner) can see the list.
⚠️ Data from visitor forms must not be saved only in the browser. Ask the AI to save it to the database (see the Database section) so it isn't lost when the visitor closes the page.

8Animation & Advanced Interaction

Dynamic touches that make your site feel alive — without getting in the way.

Scroll animations

BuilderMake elements appear smoothly (fade + rise) as you scroll down, staggered between cards. Don't get in the way of reading.

Hover effects

BuilderButtons grow slightly & cards lift when the cursor is over them, with smooth transitions. Keep the effect sensible on touchscreens (phones).

Gallery & lightbox

BuilderWhen a gallery image is clicked, open a large view (lightbox) with a dark background, a close button, and arrows for the next image.

Tabs & accordions

BuilderBuild an FAQ accordion: click a question to open its answer, the arrow rotates, and only one is open at a time.

Notifications & toasts

BuilderAfter the form is saved, show a small notification in the top corner ("Sent") that disappears by itself after 3 seconds.

Dark/light mode

BuilderA light/dark theme toggle that remembers the visitor's choice and follows their phone's setting automatically on the first visit.
💡 Sweet, but don't overdo it. Animation is great for guiding attention. Too much makes a site feel slow and confusing. Say: "subtle animation, not overdone".

9Images, Media & Icons

How to ask for images, illustrations, maps, videos and icons without your own files.

🖼️ Have your own photos? Upload them in the File panel (see Files & Images), then mention the path in your prompt, e.g. “use /images/hero.jpg as the hero background”. The AI can't create images, so in the meantime you can use image links from the internet. Images submitted by visitors are saved in an Image column in the database.

Temporary images (placeholders)

BuilderUse sample images from picsum.photos for all temporary photos, at suitable sizes. I'll replace them with real photos later.

Icons

BuilderUse icons from Lucide (CDN) for the service features: delivery truck, security, 24-hour support, and warranty.

Illustrations

BuilderAdd illustrations from unDraw to the "how it works" section (3 steps), in a style that matches the site's colors.

Location map

BuilderEmbed a Google Maps map of the shop's location (123 Example St., Jakarta) on the contact page and in the footer.

YouTube video

BuilderEmbed a YouTube video (link: youtube.com/watch?v=XXXX) responsively in the company profile section.

Keep it fast

BuilderLoad images progressively (lazy load) and show a gray placeholder until each image has finished loading.

Organizing many pages and the links between them neatly.

🔗 Clean URLs are automatic: the file about.html can be opened at /about. A custom 404.html page is also used automatically when a page isn't found.

Navigation menu

BuilderBuild a navigation menu with the logo on the left, page links in the middle, and a contact button on the right. The menu sticks to the top on scroll and becomes a hamburger on phones.

Your own 404 page

BuilderCreate a friendly 404.html page: a funny message, an illustration, and a "Back to home" button.

Bottom navigation (phones)

BuilderFor a phone app, create a navigation bar fixed to the bottom with home, history, and profile icons.

In-page links

BuilderCreate a menu that scrolls to sections within the page (About, Services, Contact), landing just below the header.

11Performance & Speed

A fast site is more pleasant to use and better liked by search engines.

Light & fast

BuilderMake the site as light as possible: avoid big libraries unless needed, load images progressively, and use efficient CSS.

Fast fonts

BuilderLoad only 2 font weights (regular & bold), and show text in a fallback font until the real font is ready (so it's never blank).

Lean images

BuilderUse reasonably sized images (max 1600px wide), modern formats, and set dimensions so the layout doesn't shift.

Loading indicators

BuilderWhile data is being fetched from the database, show a loading indicator (spinner), and a clear message if it fails.
💡 Every rakit.io asset is already compressed (gzip) & cached, so your site is fast from the start. Focus on image size — the most common cause of slow sites.

12Content & Writing

The AI can write the text too — tell it who's reading.

Tone of voice

BuilderWrite all the text in a friendly, warm and simple tone (no jargon), as if talking to a friend.

Target readers

BuilderWrite for stay-at-home parents aged 30-50 who are just starting an online business. Avoid technical terms and highlight how easy it is.

Key parts

BuilderWrite a catchy main headline, an explanatory subheading, and call-to-action buttons ("Order Now", "Contact Us").

Sample content

BuilderFill it with believable sample text for a home food business in Bandung: 6 menu items, 3 testimonials, and contact info.
💡 The more specific you are (who's reading, what business, where), the better the writing. Replace "a business website" with "a website for a home catering business in Yogyakarta for family events".

13Security & Personal Data

Protecting visitors' data and keeping it from being misused.

NeedHow to write the prompt
Sensitive datamark email, phone number and address as private data — only I can see them
Public formsvisitors may only submit; they can't see other people's submissions
Anti-spamadd a "type the answer to 3+2" field to stop bots from submitting the form
Don't lose datasave all visitor data to the database, not just in the browser
Passwordsif there's a private area, don't store passwords on the site — keep it owner-only
API keys / tokenskeep the Telegram token in a serverless function, read it from env.TELEGRAM_TOKEN — never write it in a page
Prices can't be tampered withcalculate the order total in a serverless function, not in the browser
⚠️ The safe rule: for personal visitor data (email, phone, address), always make it owner-only. You view & manage it in the Database tab of the editor.

14Third-Party Integrations (CDNs & Services)

Adding popular services through a CDN/link — no server of your own needed.

🔌 Add libraries or services through a link (CDN). Name them & their source clearly, e.g. "use Chart.js from a CDN".
NeedPrompt
Charts & statisticsshow a monthly sales chart with Chart.js from a CDN
Mapsembed Google Maps for the location 10 Merdeka St.
WhatsAppadd a floating WhatsApp button to the number +62812xxxx
Instagram/socialadd links to Instagram @myshop and Facebook
Videoembed the YouTube video youtube.com/watch?v=xxxx responsively
UI frameworkuse Bootstrap 5 from a CDN for the layout
Datesuse a tidy date picker that's easy to use on phones
Event calendarshow a monthly calendar for picking a visit date
Telegram notificationscreate a serverless function that sends a Telegram message for every new order (token in env.TELEGRAM_TOKEN)
Other services' APIscreate a function that fetches exchange rates from an external API, keep the API key in secrets
Your own AI featurescreate a function that summarizes customer reviews with ai.chat (my default provider)
Automatic reportscreate a daily sales report function; I'll schedule it for 07:00 every day
💡 Need secret keys or server logic? See Serverless Functions. After the AI creates the function, fill in the secrets yourself in the Functions tab → Secrets (env).

15Data Tables & Dashboards

Showing lots of data neatly, plus number summaries and charts.

Tables with sorting & search

BuilderBuild an inventory table with the columns Name, Category, Quantity, Price. It can be sorted by column, searched, and paginated (10 rows per page).

Number summaries

BuilderAbove the table, show summary cards: total items, total value (rupiah), and the number of items with low stock.

Charts

BuilderBuild a bar chart of sales over the last 6 months and a pie chart of the best-selling product categories (with Chart.js).

Add/edit/delete

BuilderAn add-data form, plus edit and delete buttons on each row with a confirmation before deleting. The table updates right away.
💡 Dashboard = desktop. Wide tables work best on big screens. Ask for: "a table layout on desktop that becomes stacked cards on phones" (see the Responsive section).

16Advanced Prompt Patterns

Techniques for more precise results, especially on complex sites.

Step-by-step iteration (from plan to result)

The best flow1. Plan mode: "Plan a point-of-sale app for a corner shop." 2. Read & adjust the plan. 3. "Run this plan." (Builder mode) 4. "Now add a receipt printing feature." 5. "Fix: stock should go down automatically after a sale."

Context + request

Give an example

BuilderMake product cards in a marketplace style, for example this layout: image on top, name, bold price, and a full-width "Buy" button at the bottom.

Say what you don't want

BuilderBuild a minimalist site. DON'T use loud colors, excessive animation, or a busy layout.

Point to a specific part

BuilderOn index.html, in the hero section: make the heading bigger and add a second button "See Menu" next to the "Order" button.

Ask for targeted fixes

BuilderThe "Send" button doesn't work. Find out why and fix it so the form saves to the database.

When the result isn't quite right

ProblemFix-up prompt
Messy layouttidy up the services section: align the icons, titles and descriptions neatly
Colors don't fitchange the yellow accent to light blue, keep everything else
Too crowdedsimplify: add space between sections, remove some elements
A feature errorsnothing happens when the button is clicked. Check and fix it
Not responsive yetthe layout breaks on phones. Fix it so it's tidy on small screens
Want variationsmake 3 hero style options, I'll pick one
💡 One message, one goal. Short & specific feedback ("the button is too small", "the heading isn't bold enough") works far better than repeating the whole request.

17Database — Save & Show Data

rakit's main strength: your site can save data without a server of your own. The AI creates the tables automatically.

🗄️ Every project has a built-in database. Your site's JavaScript reaches the data with fetch('/api/db/table_name') — no API key, no CORS. Don't use localStorage for data visitors submit, because localStorage only exists in one person's browser.

Common patterns: pick the one you need

Type of site / featurePromptTable access
Guestbook / comments Build a guestbook: a name & message form with the latest messages listed below it. public: list, create
Contact / sign-up form Build a contact form (name, email, message). Only the owner may read the submissions. public: create + private email
Event registration / RSVP A seminar registration form: name, email, organization, number of attendees. public: create
Product catalog Build a product catalog (name, price, description, image) shown on the page for everyone to see. public: list
Poll / voting Build a poll: save each visitor's choice and show the results as percentages. public: list, create
Scoreboard / leaderboard Save player scores (name, score) and show the top rankings. public: list, create
Orders An order form: name, phone, address, items, total. Only the owner may see the list of orders. public: create + private data
Product reviews / ratings Build reviews with a name, a 1–5 star rating, and a comment. public: list, create

Name the column types

BuilderSave registrations with the columns: name (text, required), email (text, required, private), phone (text, private), birth_date (date), party_size (number), agreed_terms (yes/no), photo (image). Show a confirmation after submitting.

Want to see the data yourself?

Visitors are anonymous (they have no account). So keep update/delete owner-only — you view & manage the data in the Database tab of the editor.

BuilderSave the incoming data, and set it up so only I (the owner) can view, edit and delete it.
💡 A rich combined example: “Build a simple online store: a product catalog from the database (name, price, image, stock), a cart on the page, and a checkout form that sends the order (name, phone, address, items) — only I can see the orders.”

18Interaction & JavaScript Features

Dynamic behavior: filters, search, carts, calculators and more.

Search & filters

BuilderAdd a search box and a category filter above the catalog. Results filter instantly while typing (no reload).

Shopping cart

BuilderBuild a cart: an "Add to cart" button on each product, a cart page where quantities can change with a total price, then a checkout button.

Calculator

BuilderBuild a price calculator: choose a package, the number of pages, and extra options, then show the total live.

Slider / carousel

BuilderBuild an image slider that changes automatically every 5 seconds, with arrow buttons and navigation dots.

Modal / popup

BuilderWhen a product card is clicked, open a modal with the full details and a close button.

Upload & show images

BuilderA form with an image file input, show a preview before sending, then upload it to an image column in the database.
💡 Describe the behavior, not the technique. “When the button is clicked, the total updates right away” works better than “use addEventListener”. Let the AI choose the technique.

19Complete Prompt Examples (Ready to Use)

Just copy, adjust the names & details, and send it in Builder mode.

A · Wedding invitationBuild a digital wedding invitation website for Rina & Dimas: - A cover with their names, the date, and a photo - A countdown to the big day - Event details: ceremony & reception (date, time, location + map) - A guestbook: a name & message form, with the latest wishes listed - RSVP (name, number of guests, attending/not) An elegant style in sage green & cream, with the serif font "Playfair Display".
B · Simple online storeBuild an online store for "Nusantara Coffee": - Product catalog: name, price, description, image (from the database, visible to everyone) - A product detail page with a quantity picker - A shopping cart with the total price - An order form (name, phone, address, notes) → only I can see the orders - A contact page with opening hours Coffee brown & cream colors, responsive.
C · Company profileBuild a company profile website for Maju Jaya Ltd.: - Home: hero, key numbers, featured services, clients - About: a short history, vision & mission, team structure - Services: 6 services with icons and descriptions - Portfolio: a project gallery with category filters - A simple blog: a list of articles from the database - Contact: a form (name, email, message), a map, info A corporate navy & white style, Inter font.
D · Event & registrationBuild a website for the seminar "Digital Marketing 2026": - A hero with the title, date, location, and a register button - The event agenda (hour-by-hour rundown) - Speakers: photo, name, title, bio - Registration: name, email, organization, number of attendees → only I can see it - FAQ (accordion) - A countdown to the event day A modern purple & white style.
E · Inventory system (table)Build a simple inventory app: - An items table: name, category, quantity, price, location - An add-item form - Search and filter by category - Summary: total items, total value - Show a warning when stock is below 5 (for internal use — only I can manage the table)
F · Interactive quizBuild a multiple-choice general knowledge quiz: - 10 questions, each with 4 options - A running score, with right/wrong feedback - A results page with the final score - Save the best scores to the database and show the top 5 A cheerful, colorful style with subtle animation.

20Fixing & Changing

How to correct a result without starting from scratch.

SituationPrompt
Result not quite rightFix the hero section: the text is too small and the button doesn't stand out. Make them bigger and higher-contrast.
Change colorsChange every green to navy blue, keep the rest.
Change contentChange the heading to "Welcome to Our Shop" and make the text friendlier.
RearrangeMove the testimonials section below the pricing section.
Add a featureAdd a floating WhatsApp button in the bottom right corner.
Fix an errorThe form doesn't save when submitted. Check and fix it so the data goes into the database.
Tone it downIt's too busy. Simplify: fewer colors, more white space.
💡 Fixes get more precise when you name the part. Name the page/section (“in the footer”, “on the contact page”) so the AI changes the right thing, not the whole site.
🔄 Every change can be undone. In Builder mode, changes are shown with Save / Undo buttons before they're applied. There's also the conversation history — reopen it to continue — and the History tab to go back to any version.

21Limits & Technical Tips

What to know so you don't hit a wall.

AspectLimit
File types.html · .css · .js + uploaded images
Size per code fileMax 512 KB
Total per project20 MB & 500 files/folders (more on the Pro/Unlimited plans)
Length of one promptMax 20,000 characters, max. 3 attached images
Server codeserverless functions in JavaScript in functions/ — not PHP/Node.js, no npm
Build step / npmNone — use CDNs for libraries
Visitor accountsNot yet — visitors are anonymous
Database operationslist · view · create · update · delete
Database column typestext · number · yes/no · date · relation · image
Responsiveresponsive by default · can be locked to mobile/desktop only
SEO & share previewsmust be requested — the AI doesn't add them automatically
Images/mediaimage uploads · the AI can't create images · video through YouTube

✅ Do

  • State the site's goal & users
  • Detail it section by section
  • Name the data that needs saving
  • One big change per prompt
  • Use Plan mode for half-formed ideas
  • Name specific colors & fonts

🚫 Avoid

  • Ultra-short prompts: “make a website”
  • Mixing 5 different changes into one prompt
  • Asking for PHP / Node.js / npm (use serverless functions)
  • Writing API keys in page files
  • Saving important data in localStorage
  • Assuming visitors have accounts
  • Switching styles without saying which part
⚠️ Save your AI credits. Each prompt uses credits (prompts with images use 2; new accounts get a one-time welcome bonus, then free credits every day, plus subscriptions & top-ups — see Credits & Plans). Plan first with Plan mode, then run it — so you don't go back and forth fixing things.

★Universal Prompt Template

Copy it, fill in the parts inside [ ], then send.

Build a [type] website for [who & what for]. Pages: - index.html — [section 1], [section 2], [section 3] - [other page] — [its content] Data to save: [table name + columns + who may view/save]. Style: [main] & [accent] colors, [font name] font, [modern/minimalist/elegant/cheerful]. Make sure it's responsive on phones and easy to use.