Formularios de contacto para Alpine.js

Añade un formulario de contacto a cualquier página con Alpine.js y sin backend. Un script tag, x-data en el formulario, y un manejador @submit.prevent que hace POST a Formpaste. No hay paso de compilación. Pruébalo en vivo, copia el código, y los envíos llegan a tu bandeja de entrada, con filtrado de spam.

Cómo crear un formulario en Alpine.js

  1. 1

    Crea un formulario en tu panel de Formpaste y copia su clave de acceso.

  2. 2

    Añade el script tag de Alpine y el markup del formulario de arriba a tu página.

  3. 3

    Reemplaza YOUR_ACCESS_KEY_HERE con tu clave de acceso y publica.

Prompt para tu agente de programación con IA

Add a Formpaste contact form to my page with Alpine.js. Use a real form with action set to https://api.formpaste.com/submit and a hidden access_key input, plus x-data for state and an @submit.prevent handler that POSTs new URLSearchParams(new FormData($el)) with fetch and then shows a thank-you message. No build step, no backend.

O conecta el servidor MCP de Formpaste con Claude Code, Codex, Cursor, Claude Desktop, VS Code o cualquier cliente mcp-remote. Ver la guía de configuración.

Un script tag y x-data

Alpine añade comportamiento al markup que ya tienes. Lo incluyes con un script tag diferido, colocas x-data en el formulario para guardar un poco de estado, y manejas @submit.prevent haciendo POST de los campos a Formpaste. No hay paso de compilación, ni bundler, ni componentes que configurar: encaja en un sitio estático, una plantilla de CMS o una página escrita a mano.

El formulario sigue funcionando sin él

Como el markup conserva un action real que apunta a Formpaste, el navegador puede enviarlo incluso cuando Alpine no ha cargado. Eso convierte a las directivas en una mejora en lugar de una dependencia, y es la razón por la que el formulario se degrada con elegancia en una conexión inestable.

El estado se queda en el elemento

x-data guarda el estado junto al markup que lo usa, así que un mensaje de agradecimiento es un booleano y un x-show. Para un formulario de contacto, esa es toda la máquina de estados: sin store, sin librería adicional, nada que conectar.

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
    <input type="text" name="name" placeholder="Tu nombre" 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" />
  </label>
  <label class="flex flex-col gap-1.5 text-sm font-medium text-gray-900 dark:text-gray-100">Correo electrónico
    <input type="email" name="email" placeholder="tu@ejemplo.com" 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" />
  </label>
  <label class="flex flex-col gap-1.5 text-sm font-medium text-gray-900 dark:text-gray-100">Mensaje
    <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</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">

Formularios de contacto para 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.

Lo que obtienes con Formpaste

Sin servidor, sin DNS

Apunta tu formulario a Formpaste: sin backend, sin DNS, sin servidor de correo que mantener.

Spam filtrado automáticamente

Heurísticas más una carpeta de cuarentena que tú controlas. Los mensajes reales siempre llegan.

Cuarentena que tú controlas

Los envíos sospechosos llegan a una carpeta que revisas: nada se descarta en silencio.

Creado para agentes de IA

Un servidor MCP que tu agente de código llama para crear un formulario y configurarlo.

Componentes para copiar y pegar

Código de formulario accesible para copiar y pegar en HTML, React, TypeScript, JavaScript y Astro.

Panel sencillo

Gestiona formularios, bandeja de entrada, cuarentena y entrega desde un solo lugar.

Mas formularios de Alpine.js

Otras plataformas