> ## Documentation Index
> Fetch the complete documentation index at: https://www.helius.dev/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# UI Swap yang Dipersonalisasi

> Gunakan toolkit AI Helius untuk membangun antarmuka swap yang dipersonalisasi di Solana.

## Pendahuluan

Panduan ini memandu Anda melalui alur pengembangan berbantuan AI untuk membangun UI swap token di Solana. Fitur unggulannya adalah panel yang menampilkan pasangan yang paling sering diperdagangkan oleh pengguna dan memungkinkan pengguna memilih salah satunya dengan sekali klik. Hal ini menciptakan pengalaman yang dipersonalisasi.

Setiap bagian menunjukkan prompt persis yang digunakan, output yang dihasilkan model, dan cara kami menggunakan [toolkit AI Helius](/docs/id/agents/overview).

Panduan ini menampilkan teknologi berikut:

* Integrasi dompet [Phantom](/docs/id/agents/skills/phantom)
* [DFlow](/docs/id/agents/skills/dflow) untuk kuotasi dan swap
* [Helius Sender](/docs/id/sending-transactions/sender) untuk pengiriman transaksi yang cepat
* [Helius Enhanced Transactions](/docs/id/enhanced-transactions/overview) untuk penguraian transaksi

## Hasil akhir

<Frame caption="Personalized swap UI with recent pairs panel">
  <img src="https://mintcdn.com/helius/8LUYXnaXO1N9za28/images/personalized-swap-ui/00-final-result.png?fit=max&auto=format&n=8LUYXnaXO1N9za28&q=85&s=0715a87a899d34a6d22ca8badd570f54" alt="UI swap yang dipersonalisasi dengan panel pasangan terbaru" width="1846" height="1102" data-path="images/personalized-swap-ui/00-final-result.png" />
</Frame>

## Penyiapan

Sebelum memulai, instal [plugin Helius Claude Code](/docs/id/agents/claude-code-plugin). Di dalam Claude Code, jalankan perintah berikut sebagai dua perintah terpisah:

```
/plugin marketplace add helius-labs/core-ai
```

```
/plugin install helius@helius-labs
```

Dalam panduan ini, kami akan menggunakan Opus 4.6 sebagai model. Silakan beralih model jika diperlukan.

<Warning>
  Panduan ini dimaksudkan sebagai demonstrasi. Output model bahasa besar (LLM) pada dasarnya bersifat acak, sehingga meskipun Anda menggunakan prompt yang sama persis seperti dalam panduan ini, hasilnya mungkin berbeda.
</Warning>

## Prompt awal

Gunakan prompt ini untuk menentukan seluruh UI dan perilakunya sekaligus:

<CardGroup cols={1}>
  <Card title="Prompt" icon="terminal">
    Buat antarmuka swap token yang dipersonalisasi untuk Solana.

    Tambahkan UI swap token dengan gaya umum: kotak di tengah dengan dua pemilih token dan tombol swap.

    Di sebelah kanannya, tampilkan daftar pasangan token yang dapat dipilih langsung oleh pengguna. Tampilkan logo setiap token di samping namanya.

    Untuk menghitung daftar tersebut, lakukan hal berikut: Setelah pengguna menghubungkan dompetnya, periksa riwayat swap mereka dan ambil 10 pasangan perdagangan terbaru yang mereka gunakan. Urutkan berdasarkan frekuensi swap.
  </Card>
</CardGroup>

Prompt ini menetapkan:

* Tata letak inti (kotak swap + panel pasangan terbaru)
* Aturan personalisasi (riwayat dompet)
* Strategi pemeringkatan (frekuensi berdasarkan penggunaan terbaru)

Dalam kasus kami, model mengusulkan hal berikut:

> Saya akan menyiapkan kerangka proyeknya. Saya akan membuat aplikasi Vite + React + TypeScript dengan koneksi dompet Phantom, swap DFlow melalui Helius Sender, dan riwayat swap dari Helius Wallet API.

Ini adalah tumpukan teknologi yang tepat:

* Vite + React + TypeScript untuk UI modern yang aman dari segi tipe
* Phantom untuk koneksi dompet dan penandatanganan
* DFlow untuk kuotasi terbaik
* API Helius untuk riwayat dompet
* Helius Sender untuk pengiriman transaksi

Model tersebut menginstruksikan kami untuk menambahkan file `.env` dengan kunci API Helius kami. Setelah melakukannya, kami menjalankan aplikasi dengan `npm run dev`:

<Frame caption="Initial version of the app">
  <img src="https://mintcdn.com/helius/8LUYXnaXO1N9za28/images/personalized-swap-ui/01-wallet-disconnected.png?fit=max&auto=format&n=8LUYXnaXO1N9za28&q=85&s=fec8e905c49cbbbb33a84e46e4f4805e" alt="Versi awal aplikasi" width="1860" height="1116" data-path="images/personalized-swap-ui/01-wallet-disconnected.png" />
</Frame>

## Pasangan terbaru yang tidak muncul

Setelah menghubungkan dompet, kami melihat bahwa beberapa pasangan perdagangan yang baru saja kami swap tidak muncul di panel pasangan terbaru. Karena itu, kami meminta agen untuk menyelidikinya:

<CardGroup cols={1}>
  <Card title="Prompt" icon="terminal">
    Bonk / SOL tidak ditampilkan sebagai Pasangan Terbaru meskipun memiliki swap terbaru. Bisakah Anda memeriksa penyebabnya?

    2BnyMbNYLjYorNwbPjhUBHSQBTbCTjuqouQwZiYY6auh
  </Card>
</CardGroup>

Untuk menyelesaikan masalah ini, agen perlu mengetahui riwayat transaksi dompet tersebut. Karena kami hanya memberikan alamat dompet, agen memutuskan untuk langsung menggunakan dua alat [Helius MCP](/docs/id/agents/mcp) guna memperoleh informasi tersebut: `getTransactionHistory` dan `parseTransactions`.

Hal ini memungkinkannya mengidentifikasi bug dengan cepat:

> Kode hanya mengandalkan events.swap, bukan menganalisis transfer token yang sebenarnya.

> Saya akan memperbaiki ekstraksi riwayat swap agar menggunakan tokenTransfers dan
> nativeTransfers secara langsung.

Jadi, agen memperbaiki masalah tersebut dengan mengubah cara kami mendeteksi pasangan perdagangan: Sekarang kami cukup memeriksa token mana yang ditransfer masuk dan keluar dari dompet dalam suatu transaksi.

Sekarang kami dapat melihat semua pasangan perdagangan kami di aplikasi:

<Frame caption="All trading pairs shown">
  <img src="https://mintcdn.com/helius/8LUYXnaXO1N9za28/images/personalized-swap-ui/02-connected-recent-pairs.png?fit=max&auto=format&n=8LUYXnaXO1N9za28&q=85&s=520f3dd879dd02c76735153532ab58c5" alt="Semua pasangan perdagangan ditampilkan" width="1856" height="1120" data-path="images/personalized-swap-ui/02-connected-recent-pairs.png" />
</Frame>

## Penyempurnaan UI

Meskipun desain keseluruhan aplikasi sudah baik, tata letak UI swap masih perlu disempurnakan:

<CardGroup cols={1}>
  <Card title="Prompt" icon="terminal">
    Perbaiki desain kotak pemilih token:

    Letakkan pemilih token di sebelah kanan.

    Buat lebar kolom input jumlah menjadi fleksibel agar pas dengan rapi di dalam kotak.
  </Card>
</CardGroup>

Agen segera menerapkan perubahan UI ini:

<Frame caption="New layout for the token selector box">
  <img src="https://mintcdn.com/helius/8LUYXnaXO1N9za28/images/personalized-swap-ui/09-ui-changes.png?fit=max&auto=format&n=8LUYXnaXO1N9za28&q=85&s=13ae436bff4826283a5747e321b3a8ce" alt="Tata letak baru untuk kotak pemilih token" width="1844" height="1062" data-path="images/personalized-swap-ui/09-ui-changes.png" />
</Frame>

## Tampilan kuotasi

Saat ini, jumlah token dalam UI swap harus ditetapkan secara manual. Artinya, pengguna tidak dapat melihat jumlah token yang akan mereka terima.

Akan berguna jika kolom jumlah token diisi secara otomatis berdasarkan kuotasi DFlow terbaru.

<CardGroup cols={1}>
  <Card title="Prompt" icon="terminal">
    Saat pengguna memasukkan jumlah untuk satu token, ambil kuotasi dan tampilkan jumlah output untuk token lainnya.
  </Card>
</CardGroup>

Untuk menerapkan hal ini, agen menggunakan keahlian [DFlow](/docs/id/agents/skills/dflow) untuk menemukan endpoint yang tepat guna mengambil kuotasi.

UI swap kini mengambil dan menampilkan jumlah output yang dikuotasikan secara dinamis:

<Frame caption="Quote preview showing the output amount in the receive field">
  <img src="https://mintcdn.com/helius/8LUYXnaXO1N9za28/images/personalized-swap-ui/03-quote-visible.png?fit=max&auto=format&n=8LUYXnaXO1N9za28&q=85&s=701d58c30da16de84814cf87ce486c92" alt="Pratinjau kuotasi yang menampilkan jumlah output di kolom penerimaan" width="1846" height="1102" data-path="images/personalized-swap-ui/03-quote-visible.png" />
</Frame>

## Menambahkan informasi swap

Setelah swap dikonfirmasi, pengguna tidak dapat memverifikasinya secara on-chain. Mari tambahkan kemampuan tersebut ke UI:

<CardGroup cols={1}>
  <Card title="Prompt" icon="terminal">
    Tampilkan tanda tangan transaksi lengkap setelah swap berhasil. Tambahkan juga tautan ke penjelajah blockchain.
  </Card>
</CardGroup>

Untuk pengujian, kami melakukan contoh swap:

<Frame caption="Wallet confirmation popup during swap signing">
  <img src="https://mintcdn.com/helius/8LUYXnaXO1N9za28/images/personalized-swap-ui/05-wallet-confirmation.png?fit=max&auto=format&n=8LUYXnaXO1N9za28&q=85&s=8d289e4583b5f33a24581999f66fd3e0" alt="Popup konfirmasi dompet saat penandatanganan swap" width="1852" height="1180" data-path="images/personalized-swap-ui/05-wallet-confirmation.png" />
</Frame>

Sekarang, informasinya ditampilkan di UI:

<Frame caption="Successful swap output with full signature and explorer link">
  <img src="https://mintcdn.com/helius/8LUYXnaXO1N9za28/images/personalized-swap-ui/08-send-successful.png?fit=max&auto=format&n=8LUYXnaXO1N9za28&q=85&s=d1264eb7e065b4fa6c0e8505216c6c9e" alt="Output swap yang berhasil dengan tanda tangan lengkap dan tautan penjelajah" width="1856" height="1192" data-path="images/personalized-swap-ui/08-send-successful.png" />
</Frame>
