Formulario de encuesta en Svelte
Crea un formulario de encuesta en Svelte sin backend. Usa menús desplegables para respuestas rápidas y un campo abierto, vinculado con bind:value, y envía el POST a Formpaste. Copia el componente y añade tu clave de acceso: las respuestas llegan a tu bandeja de entrada.
Como construirlo
- Crea un formulario en tu panel de Formpaste y copia su clave de acceso.
- Copia el componente de Svelte de arriba y elige tu estilo.
- Reemplaza YOUR_ACCESS_KEY_HERE con tu clave de acceso y despliega.
Prompt para tu agente de programación con IA
Add a Formpaste survey form to my Svelte app. Use a single-file component with a couple of select dropdowns and a textarea, bound with bind:value, that POSTs as application/x-www-form-urlencoded (URLSearchParams) to https://api.formpaste.com/submit with a hidden access_key input. 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.
Puntos claves de Svelte
Un formulario de contacto en Svelte es un componente de un solo archivo con bind:value en los campos y un manejador on:submit|preventDefault que hace POST a Formpaste. No hay backend ni una API propia. Coloca el fetch en el componente y ya está.
Es un componente de un solo archivo
El formulario vive en un componente .svelte con un bloque <script>. Vincula los campos con bind:value o lee un FormData del elemento form al enviar, y luego haz POST al endpoint de Formpaste. No se requiere store ni librería para un formulario sencillo.
Sin una API propia
No haces proxy a través de tu propio servidor. El componente hace POST directamente al endpoint de Formpaste, lo que elimina un mailer y un almacén de envíos que de otra forma tendrías que construir.
Maneja la respuesta con una variable de estado reactiva
El endpoint devuelve JSON (success, message, id). Espera el fetch y asigna una variable de estado reactiva para mostrar tu propio estado de éxito o error, o configura una URL de redirección en el dashboard y evita el manejo del lado del cliente.
Svelte 4 o Svelte 5, ambas funcionan
Los ejemplos usan un bloque <script> con una variable status normal, que funciona en cualquier versión de Svelte. En Svelte 5 puedes usar runes como $state en su lugar, pero el mismo fetch y el mismo POST son todo lo que Formpaste necesita.
Que debes acertar
Mantenla corta para conservar una alta tasa de finalización
Cada pregunta adicional pierde respuestas. Un par de listas desplegables y un campo de comentario abierto suele reunir lo que necesitas sin generar fatiga.
Las listas desplegables superan al texto libre para el análisis
Las opciones fijas (campos select) son fáciles de contar después. Reserva el textarea para la única pregunta abierta que realmente lo necesite.
Haz que el correo sea opcional para respuestas más honestas
Las respuestas anónimas suelen ser más sinceras. Pide el correo solo si necesitas dar seguimiento, y márcalo como opcional.
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.
Crea tu formulario
Regístrate, verifica tu correo y crea una clave de acceso en tu panel.
Copia el código
Pega el fragmento de arriba en tu proyecto. Elige CSS o Tailwind para que combine con tu sitio.
<script lang="ts">
let status: "idle" | "sending" | "ok" | "error" = "idle";
async function onSubmit(e: SubmitEvent) {
status = "sending";
const form = new FormData(e.target as HTMLFormElement);
const res = await fetch("https://api.formpaste.com/submit", { method: "POST", body: new URLSearchParams(form as any) });
status = res.ok ? "ok" : "error";
}
</script>
{#if status === "ok"}
<p>Thanks - your message was sent.</p>
{:else}
<form on:submit|preventDefault={onSubmit} 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">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">¿Qué te describe mejor?
<select name="role" 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>Desarrollador</option>
<option>Diseñador</option>
<option>Fundador</option>
<option>Otro</option>
</select>
</label>
<label class="flex flex-col gap-1.5 text-sm font-medium text-gray-900 dark:text-gray-100">¿Qué tan satisfecho estás?
<select name="satisfaction" 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>Muy satisfecho</option>
<option>Satisfecho</option>
<option>Neutral</option>
<option>Insatisfecho</option>
</select>
</label>
<label class="flex flex-col gap-1.5 text-sm font-medium text-gray-900 dark:text-gray-100">¿Algo más?
<textarea name="comments" 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={status === "sending"}>Enviar encuesta</button>
{#if status === "error"}<p>Something went wrong. Please try again.</p>{/if}
</form>
{/if}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 encuesta en Svelte 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.