Formulario de solicitud de empleo Gatsby

Añade a tu página de empleo en Gatsby un formulario de solicitud con carga de CV, sin backend y sin API de subida propia. El componente envía el FormData multipart a Formpaste, así que las solicitudes con adjuntos llegan a tu bandeja de entrada.

Como construirlo

  1. Crea un formulario en tu panel de Formpaste y copia su clave de acceso.
  2. Conecta Storage en el panel para que el formulario pueda aceptar cargas de archivos.
  3. Copia el componente de React de arriba, añade tu clave de acceso, luego compila y despliega.

Prompt para tu agente de programación con IA

Add a Formpaste job application form to my Gatsby careers page. Use a React component with name, email, role, cover note and a resume file input that POSTs the raw FormData (multipart/form-data) to https://api.formpaste.com/submit with a hidden access_key input. No serverless function, no upload endpoint of my own.

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 Gatsby

Los sitios en Gatsby suelen recurrir a Netlify Forms, pero no lo necesitas. Un formulario de Formpaste es un componente React normal que envía el POST a un endpoint, así que funciona lo despliegues o no en Netlify, sin detección de formularios en tiempo de build.

No necesitas Netlify Forms

Netlify Forms ata tu formulario al hosting de Netlify y a su análisis de HTML en tiempo de build. Enviar el POST a Formpaste desde un componente funciona en cualquier host - Netlify, Gatsby Cloud, Cloudflare Pages, donde sea - y no hay nada que detectar en tiempo de build.

Es un componente React normal

Gatsby es React, así que el formulario es un componente con un onSubmit que hace fetch al endpoint de Formpaste. Sin plugin específico de Gatsby y sin función serverless propia.

Build estático, POST externo

Gatsby genera archivos estáticos y el formulario envía el POST a un endpoint externo, así que el sitio se mantiene completamente estático y desplegable en cualquier lugar. No se requiere SSR ni funciones para que el formulario funcione.

Maneja la respuesta en el estado

El endpoint devuelve JSON. Espera el fetch y muestra tu propio estado de éxito, o configura una URL de redirección en el panel para una página de agradecimiento sin JS.

Que debes acertar

El currículum es una subida de archivo

Una solicitud de empleo real necesita el currículum adjunto, así que el formulario envía multipart form data. El código generado configura el enctype y envía el archivo junto con el resto de los campos.

Acepta tipos de documento comunes

Los candidatos envían archivos PDF y Word. No restrinjas a un solo tipo o perderás candidatos.

Dirige las solicitudes a la bandeja correcta

Envía las solicitudes a tu dirección de contratación, y el reply-to se configura con la dirección del candidato para que puedas responder directamente.

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.

export function ContactForm() {
  async function onSubmit(e) {
    e.preventDefault();
    const form = new FormData(e.currentTarget);
    await fetch("https://api.formpaste.com/submit", { method: "POST", body: form });
  }

  return (
    <form onSubmit={onSubmit} className="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 className="flex flex-col gap-1.5 text-sm font-medium text-gray-900 dark:text-gray-100">Nombre completo
    <input type="text" name="name" required className="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 className="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" required className="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 className="flex flex-col gap-1.5 text-sm font-medium text-gray-900 dark:text-gray-100">Puesto al que aplica
    <input type="text" name="role" required className="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 className="flex flex-col gap-1.5 text-sm font-medium text-gray-900 dark:text-gray-100">Nota de presentación
    <textarea name="message" className="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>
      <label className="flex flex-col gap-1.5 text-sm font-medium text-gray-900 dark:text-gray-100">Currículum
    <input type="file" name="resume" required className="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>
      <button type="submit" className="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">Enviar solicitud</button>
    </form>
  );
}
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 solicitud de empleo Gatsby 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 Gatsby