Formularios de contacto para SvelteKit
Añade un formulario de contacto a tu app de SvelteKit sin ruta de servidor y sin backend propio. Es un componente de Svelte que hace POST a Formpaste, así que no hay una acción +page.server.ts que escribir. 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 SvelteKit
- 1
Crea un formulario en tu panel de Formpaste y copia su clave de acceso.
- 2
Copia el componente de Svelte de arriba en una página o componente de SvelteKit.
- 3
Reemplaza YOUR_ACCESS_KEY_HERE con tu clave de acceso y despliega.
Prompt para tu agente de programación con IA
Add a Formpaste contact form to my SvelteKit app. Use a Svelte component with a <script> block, bind:value, and an on:submit|preventDefault handler that POSTs as application/x-www-form-urlencoded (URLSearchParams) to https://api.formpaste.com/submit with a hidden access_key input. Do not add a +page.server.ts action or a +server.ts route.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.
Sin ruta de servidor
SvelteKit te da acciones de formulario en +page.server.ts y endpoints
+server.ts, pero un formulario de contacto no los necesita. El formulario es
un componente de Svelte con on:submit|preventDefault que hace POST
directamente al endpoint de Formpaste, así que no hay una acción de servidor
que escribir ni nada del lado del servidor propio que mantener. Funciona con
SSR o con una compilación totalmente estática con adapter-static.
Es solo un componente de Svelte
SvelteKit es Svelte, así que el formulario es un componente de un solo
archivo con bind:value y un manejador de envío: el mismo código que usarías
en una app de Svelte plana. Copia la versión de Svelte del selector de arriba
y colócala en una página o componente.
Form actions solo si las quieres
Para un formulario que hace POST a Formpaste, un simple fetch con
on:submit|preventDefault es todo lo que necesitas. Las form actions de
SvelteKit con use:enhance valen la pena cuando el POST va a tu propio
endpoint, pero el paso final igual hace POST una sola vez a Formpaste de
cualquier forma.
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">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={status === "sending"}>Enviar</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">Formularios de contacto para SvelteKit 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.