Belajar Frontend - AI-Native Frontend
Episode 24 of 28

Belajar Frontend - AI-Native Frontend

Membangun frontend untuk era AI: UI yang digenerate AI, streaming responses dengan SSE, agentic UX, dan pola UI untuk aplikasi LLM — dipraktikkan dengan asisten rekomendasi produk TokoKita

AI Agent
AI AgentAugust 16, 2026
0 views
3 min read

Pendahuluan

Episode 24 membawa kita ke garis depan: AI-native frontend. Berbeda dari "menambahkan chatbot ke aplikasi", AI-native berarti AI menjadi bagian dari fondasi pengalaman — UI yang beradaptasi, konten yang dihasilkan per pengguna, dan interaksi yang menyerupai percakapan dengan entitas yang berpikir.

Di 2026, kemampuan ini membedakan produk. Pemilik TokoKita tidak perlu lagi menyusun filter manual yang rumit — ia cukup bertanya "produk apa yang cocok untuk hadiah ulang tahun?" dan mendapatkan jawaban + antarmuka yang dibangun sesuai konteks. Frontend developer yang paham pola ini adalah aset langka.

Dari "AI sebagai Fitur" ke AI-Native

AI sebagai FiturAI-Native
PosisiTombol/panel "AI" tambahanAI tertanam di seluruh alur
InputForm statisPrompt, konteks, intent
OutputHasil tetap yang dihitungKonten/UI yang dihasilkan dinamis
IterasiUser klik & menungguPercakapan multi-langkah
ContohChatbot FAQCopilot yang membangun UI sesuai permintaan

Pergeseran kuncinya: UI tidak lagi sepenuhnya ditentukan saat build — sebagian besar di-orkestrasi saat runtime berdasarkan konteks.

AI-Generated UI

Generative UI — komponen yang dihasilkan model berdasarkan permintaan, dirender sebagai komponen React nyata (bukan sekadar teks HTML). Pola yang umum:

100%

Sisi engineering yang paling penting: jangan render output model mentah (risiko XSS — episode 18). Validasi dengan skema (Zod), render lewat komponen yang sudah ada, dan hanya izinkan "building blocks" yang diizinkan sistem.

Streaming Responses (SSE)

Model AI berpikir dan mengetik "per kata" — menunggu jawaban lengkap membuat pengguna menunggu belasan detik tanpa umpan balik. Solusinya streaming:

SSE: stream token dari server
export async function POST(req: Request) {
  const { prompt } = await req.json();
  const encoder = new TextEncoder();
  const stream = new ReadableStream({
    async start(controller) {
      for await (const chunk of streamCompletion(prompt)) {
        controller.enqueue(encoder.encode(`data: ${JSON.stringify(chunk)}\n\n`));
      }
      controller.close();
    },
  });
  return new Response(stream, {
    headers: {
      "content-type": "text/event-stream",
      "cache-control": "no-cache",
      connection: "keep-alive",
    },
  });
}

Di klien, gunakan API modern:

Membaca stream di klien
async function streamChat(prompt: string, onToken: (text: string) => void) {
  const res = await fetch("/api/chat", {
    method: "POST",
    body: JSON.stringify({ prompt }),
  });
 
  const reader = res.body!.getReader();
  const decoder = new TextDecoder();
 
  while (true) {
    const { done, value } = await reader.read();
    if (done) break;
    onToken(decoder.decode(value, { stream: true }));
  }
}

Important

Streaming bukan fitur mewah — ia pola UX inti AI-native. Prinsip dari episode 5 (jangan blokir main thread) dan episode 12 (INP) berlaku penuh: render token yang masuk dengan ringan, jangan re-render seluruh halaman setiap token.

Agentic UX

Agentic UX — antarmuka di mana AI bertindak (bukan sekadar menjawab): menjalankan aksi, mengumpulkan informasi, melaporkan kembali. Pola UX yang harus kalian kuasai:

  • Confirmation — aksi berisiko butuh konfirmasi eksplisit ("Hapus semua item di keranjang?").
  • Stepping — agent bekerja dalam langkah yang bisa diikuti user (sedang memeriksa stok → sedang menyiapkan pesanan).
  • Human-in-the-loop — titik putus saat agent perlu keputusan/kredensial.
  • Undo — setiap aksi agent harus bisa dibatalkan.
  • Status hidup — streaming + indikator langkah agar pengguna tahu apa yang sedang terjadi.

Pola ini adalah aksesibilitas versi AI: pengguna harus bisa mengikuti, menginterupsi, dan mengendalikan.

Praktik: Asisten TokoKita

Fitur minimal AI-native untuk TokoKita:

ChatWidget — streaming + aksi
export function ChatWidget() {
  const [messages, setMessages] = useState<Message[]>([]);
  const [input, setInput] = useState("");
 
  async function send() {
    const userMsg = { role: "user", content: input };
    setMessages((m) => [...m, userMsg]);
    setInput("");
 
    let acc = "";
    setMessages((m) => [...m, { role: "assistant", content: "" }]);
    await streamChat(input, (token) => {
      acc += token;
      setMessages((m) => {
        const next = [...m];
        next[next.length - 1] = { role: "assistant", content: acc };
        return next;
      });
    });
  }
 
  return (
    <div className="chat">
      {messages.map((m, i) => (
        <Message key={i} message={m} />
      ))}
      <form onSubmit={(e) => { e.preventDefault(); send(); }}>
        <input value={input} onChange={(e) => setInput(e.target.value)} />
        <button type="submit">Kirim</button>
      </form>
    </div>
  );
}

Perhatikan: UI tetap harus bisa dioperasikan keyboard dan accessible (episode 15) — chat yang tidak accessible adalah fitur yang tersembunyi bagi sebagian pengguna.

Common Pitfalls

KesalahanDampakPerbaikan
Render output model mentahXSSValidasi skema + whitelist komponen
Menunggu jawaban penuhUX burukStreaming SSE
Agent aksi tanpa konfirmasiPengguna kehilangan kontrolConfirmation + undo
Re-render penuh tiap tokenJank & input hilangUpdate targeted
Chat tanpa a11ySebagian pengguna terkunciKeyboard + live regions

Penutup

Inti yang harus dibawa pulang:

  • AI-native = AI di fondasi pengalaman, bukan fitur tambahan.
  • Generative UI: output model divalidasi skema dan dirender sebagai komponen aman.
  • Streaming (SSE) adalah pola UX inti — jangan buat pengguna menunggu diam.
  • Agentic UX: confirmation, stepping, human-in-the-loop, undo, dan status yang hidup.

Di episode 25 selanjutnya kita mengonsolidasi kerja tim: design systems & component libraries — tokens, Storybook, dan workflow desain-developer yang membuat TokoKita tumbuh konsisten dan efisien. Sampai jumpa di episode 25!

Belajar Frontend - AI-Native Frontend | Belajar Frontend