Formulario de feedback en Alpine.js

Añade un widget de feedback a cualquier página con Alpine.js y sin backend. Un script tag, x-data para el estado, y las respuestas llegan a tu bandeja de entrada. Copia el markup y añade tu clave de acceso.

Como construirlo

  1. Crea un formulario en tu panel de Formpaste y copia su clave de acceso.
  2. Añade el script tag de Alpine y el markup de arriba a tu página.
  3. Reemplaza YOUR_ACCESS_KEY_HERE con tu clave de acceso y publica.

Puntos claves de Alpine.js

Alpine añade comportamiento al markup que ya tienes. Añade el script tag, pon x-data en el formulario, y un manejador de envío hace POST a Formpaste. No hay paso de compilación, ni componentes, ni backend propio.

Es un script tag, no un paso de compilación

Alpine se carga desde un CDN con un script tag diferido. No hay nada que compilar ni bundler que configurar, así que el mismo formulario funciona en un sitio estático, una plantilla de CMS o una página escrita a mano.

Conserva el atributo action real

Deja action apuntando al endpoint de Formpaste. Si Alpine no llega a cargar, el navegador sigue enviando el formulario de la forma habitual, así que las directivas son una mejora en lugar de un requisito.

x-data guarda el estado

Pon las pequeñas piezas de estado en el propio formulario con x-data, luego usa @submit.prevent para hacer POST y x-show para mostrar un mensaje de agradecimiento. No hace falta store ni librería adicional para un formulario.

Conserva el access_key oculto

Deja en su lugar el input oculto access_key generado, para que Formpaste sepa a qué formulario pertenece el envío. Alpine no lo toca.

Que debes acertar

Una calificación más un comentario es el punto óptimo

Un select para la puntuación y un textarea para el porqué te da tanto un número que rastrear como el contexto detrás de él, sin un formulario largo.

Deja que la gente permanezca anónima

Marca el nombre y el correo como opcionales. Los comentarios son más honestos cuando no están ligados a una identidad, y de todas formas filtras el spam automáticamente.

Dirige los comentarios adonde los verás

Reenvía los envíos a una bandeja compartida o a un webhook hacia tu sistema de seguimiento para que nada quede sin leer.

Cómo funciona

Tres pasos simples para que los envíos de formularios lleguen a tu bandeja de entrada.
Crea tu formulario, apunta la URL de action al endpoint de Formpaste y añade tu clave de acceso.

1

Crea tu formulario

Regístrate, verifica tu correo y crea una clave de acceso en tu panel.

2

Copia el código

Pega el fragmento de arriba en tu proyecto. Elige CSS o Tailwind para que combine con tu sitio.

<script src="https://cdn.jsdelivr.net/npm/alpinejs@3/dist/cdn.min.js" defer></script>
<style>[x-cloak] { display: none !important; }</style>

<div x-data="{ sending: false, sent: false }">
  <form
    action="https://api.formpaste.com/submit"
    method="POST"
    x-show="!sent"
    @submit.prevent="sending = true; await fetch($el.action, { method: 'POST', body: new URLSearchParams(new FormData($el)) }); sending = false; sent = true" class="mx-auto flex w-full max-w-md flex-col gap-4 rounded-xl border border-gray-200 bg-white p-6 shadow-sm dark:border-gray-800 dark:bg-gray-950"
  >
  <input type="hidden" name="access_key" value="YOUR_ACCESS_KEY_HERE">
  <label class="flex flex-col gap-1.5 text-sm font-medium text-gray-900 dark:text-gray-100">Nombre (opcional)
    <input type="text" name="name" class="rounded-md border border-gray-300 bg-white px-3 py-2 text-sm text-gray-900 shadow-sm outline-none focus-visible:ring-2 focus-visible:ring-gray-900 dark:border-gray-700 dark:bg-gray-900 dark:text-gray-100 dark:focus-visible:ring-gray-100" />
  </label>
  <label class="flex flex-col gap-1.5 text-sm font-medium text-gray-900 dark:text-gray-100">Correo electrónico (opcional)
    <input type="email" name="email" placeholder="tu@ejemplo.com" class="rounded-md border border-gray-300 bg-white px-3 py-2 text-sm text-gray-900 shadow-sm outline-none focus-visible:ring-2 focus-visible:ring-gray-900 dark:border-gray-700 dark:bg-gray-900 dark:text-gray-100 dark:focus-visible:ring-gray-100" />
  </label>
  <label class="flex flex-col gap-1.5 text-sm font-medium text-gray-900 dark:text-gray-100">Calificación
    <select name="rating" required class="rounded-md border border-gray-300 bg-white px-3 py-2 text-sm text-gray-900 shadow-sm outline-none focus-visible:ring-2 focus-visible:ring-gray-900 dark:border-gray-700 dark:bg-gray-900 dark:text-gray-100 dark:focus-visible:ring-gray-100">
      <option>5 - Excelente</option>
      <option>4 - Bueno</option>
      <option>3 - Aceptable</option>
      <option>2 - Malo</option>
      <option>1 - Muy malo</option>
    </select>
  </label>
  <label class="flex flex-col gap-1.5 text-sm font-medium text-gray-900 dark:text-gray-100">Tu comentario
    <textarea name="message" required class="min-h-28 rounded-md border border-gray-300 bg-white px-3 py-2 text-sm text-gray-900 shadow-sm outline-none focus-visible:ring-2 focus-visible:ring-gray-900 dark:border-gray-700 dark:bg-gray-900 dark:text-gray-100 dark:focus-visible:ring-gray-100"></textarea>
  </label>
  <button type="submit" class="w-full rounded-md bg-gray-900 px-4 py-2 text-sm font-medium text-white shadow-sm transition-colors hover:bg-gray-800 disabled:opacity-60 dark:bg-white dark:text-gray-900 dark:hover:bg-gray-200" :disabled="sending">Enviar comentario</button>
  </form>
  <p x-show="sent" x-cloak>Thanks - your message was sent.</p>
</div>
3

Añade tu clave de acceso

Reemplaza el marcador por tu clave de acceso para empezar a recibir envíos.

<input type="hidden" name="access_key" value="YOUR_ACCESS_KEY_HERE">

Formulario de feedback en Alpine.js FAQ

Pega un formulario. Recibe envíos.

Al instante, sin configurar ningún backend, servidor ni base de datos. 250 envíos/mes gratis, sin tarjeta de crédito.

Otros formularios de Alpine.js