> ## 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 de swaps personalizada

> Usa el kit de herramientas de IA de Helius para crear una interfaz de swaps personalizada para Solana.

## Introducción

Esta guía te muestra un flujo de desarrollo asistido por IA para crear una UI de swaps de tokens en Solana. Su función destacada es un panel que muestra los pares que el usuario intercambia con más frecuencia y le permite seleccionar uno con un solo clic. Esto crea una experiencia personalizada.

Cada sección muestra los prompts exactos que se usaron, el resultado que produjo el modelo y cómo usamos el [kit de herramientas de IA de Helius](/docs/es/agents/overview).

Esta guía presenta las siguientes tecnologías:

* Integración con la billetera [Phantom](/docs/es/agents/skills/phantom)
* [DFlow](/docs/es/agents/skills/dflow) para cotizaciones y swaps
* [Helius Sender](/docs/es/sending-transactions/sender) para enviar transacciones rápidamente
* [Helius Enhanced Transactions](/docs/es/enhanced-transactions/overview) para analizar transacciones

## Resultado final

<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 de swaps personalizada con panel de pares recientes" width="1846" height="1102" data-path="images/personalized-swap-ui/00-final-result.png" />
</Frame>

## Configuración

Antes de comenzar, instala el [plugin de Helius para Claude Code](/docs/es/agents/claude-code-plugin). Dentro de Claude Code, ejecuta estos comandos por separado:

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

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

En esta guía, usaremos Opus 4.6 como modelo. Cámbialo si es necesario.

<Warning>
  Esta guía tiene fines demostrativos. El resultado de un modelo de lenguaje grande (LLM) es inherentemente aleatorio, por lo que tus resultados pueden variar incluso si usas exactamente los mismos prompts que aparecen en esta guía.
</Warning>

## Prompt inicial

Usa este prompt para definir toda la UI y su comportamiento de una sola vez:

<CardGroup cols={1}>
  <Card title="Prompt" icon="terminal">
    Crea una interfaz personalizada para hacer swaps de tokens en Solana.

    Agrega una UI de swaps de tokens con el estilo habitual: un cuadro centrado con dos selectores de tokens y un botón de swap.

    A la derecha, muestra una lista de pares de tokens que el usuario pueda elegir directamente. Muestra el logotipo de cada token junto a su nombre.

    Para generar la lista, haz lo siguiente: después de que un usuario conecte su billetera, consulta su historial de swaps y extrae los 10 pares de trading más recientes que usó. Ordénalos según la frecuencia de los swaps.
  </Card>
</CardGroup>

Este prompt establece:

* El diseño principal (cuadro de swap + panel lateral de pares recientes)
* La regla de personalización (historial de la billetera)
* La estrategia de clasificación (frecuencia de uso reciente)

En nuestro caso, el modelo propuso lo siguiente:

> Voy a crear la estructura inicial del proyecto. Crearé una aplicación con Vite + React + TypeScript que incluya conexión con la billetera Phantom, swaps de DFlow mediante Helius Sender e historial de swaps de la API de billeteras de Helius.

Esta es una combinación de tecnologías adecuada:

* Vite + React + TypeScript para una UI moderna y con seguridad de tipos
* Phantom para conectar la billetera y firmar
* DFlow para obtener las mejores cotizaciones
* Las API de Helius para consultar el historial de la billetera
* Helius Sender para enviar transacciones

El modelo nos indicó que agregáramos un archivo `.env` con nuestra clave de API de Helius. Después, iniciamos la aplicación con `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ón inicial de la aplicación" width="1860" height="1116" data-path="images/personalized-swap-ui/01-wallet-disconnected.png" />
</Frame>

## Faltan pares recientes

Después de conectar nuestra billetera, observamos que en el panel de pares recientes faltaban algunos pares con los que habíamos hecho swaps recientemente. Por eso, le pedimos al agente que investigara:

<CardGroup cols={1}>
  <Card title="Prompt" icon="terminal">
    No muestra Bonk / SOL como par reciente, aunque tiene swaps recientes. ¿Puedes revisar por qué?

    2BnyMbNYLjYorNwbPjhUBHSQBTbCTjuqouQwZiYY6auh
  </Card>
</CardGroup>

Para resolver este problema, el agente necesitaba conocer el historial de transacciones de la billetera proporcionada. Como solo proporcionamos la dirección de la billetera, decidió usar directamente dos herramientas de [Helius MCP](/docs/es/agents/mcp) para obtener esa información: `getTransactionHistory` y `parseTransactions`.

Esto le permitió identificar rápidamente el error:

> El código depende únicamente de events.swap en lugar de analizar las transferencias reales de tokens.

> Voy a corregir la extracción del historial de swaps para que use tokenTransfers y
> nativeTransfers directamente.

Así, solucionó el problema cambiando la forma en que detectamos los pares de trading: ahora simplemente comprobamos qué tokens se transfirieron hacia y desde la billetera en una transacción.

Ahora vemos todos nuestros pares de trading en la aplicación:

<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="Se muestran todos los pares de trading" width="1856" height="1120" data-path="images/personalized-swap-ui/02-connected-recent-pairs.png" />
</Frame>

## Ajustes de la UI

Aunque el diseño general de la aplicación ya es bueno, la disposición de la UI de swaps aún necesita algunos ajustes:

<CardGroup cols={1}>
  <Card title="Prompt" icon="terminal">
    Corrige el diseño del cuadro de selección de tokens:

    Coloca el selector de tokens a la derecha.

    Haz que el ancho del campo de entrada del importe sea flexible para que encaje correctamente en el cuadro.
  </Card>
</CardGroup>

El agente implementó rápidamente estos cambios en la UI:

<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="Nuevo diseño del cuadro de selección de tokens" width="1844" height="1062" data-path="images/personalized-swap-ui/09-ui-changes.png" />
</Frame>

## Visualización de la cotización

Por el momento, los importes de los tokens en la UI de swaps deben establecerse manualmente. Esto significa que el usuario no puede ver cuántos tokens recibirá a cambio.

Sería útil completar automáticamente el campo del importe de tokens con una cotización reciente de DFlow.

<CardGroup cols={1}>
  <Card title="Prompt" icon="terminal">
    Cuando el usuario haya ingresado un importe para un token, obtén una cotización y muestra el importe de salida del otro token.
  </Card>
</CardGroup>

Para implementar esto, el agente usó su habilidad de [DFlow](/docs/es/agents/skills/dflow) para encontrar el endpoint adecuado para obtener cotizaciones.

Ahora, la UI de swaps obtiene y muestra dinámicamente el importe de salida cotizado:

<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="Vista previa de la cotización que muestra el importe de salida en el campo de recepción" width="1846" height="1102" data-path="images/personalized-swap-ui/03-quote-visible.png" />
</Frame>

## Agregar información del swap

Una vez que se confirma un swap, el usuario no tiene forma de verificarlo en la cadena. Agreguemos esta función a la UI:

<CardGroup cols={1}>
  <Card title="Prompt" icon="terminal">
    Muestra la firma completa de la transacción cuando el swap se complete correctamente. Agrega también un enlace a un explorador.
  </Card>
</CardGroup>

Para probarlo, hacemos un swap de ejemplo:

<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="Ventana emergente de confirmación de la billetera durante la firma del swap" width="1852" height="1180" data-path="images/personalized-swap-ui/05-wallet-confirmation.png" />
</Frame>

Ahora, la información se muestra en la 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="Resultado de un swap exitoso con la firma completa y un enlace al explorador" width="1856" height="1192" data-path="images/personalized-swap-ui/08-send-successful.png" />
</Frame>
