Formulario de solicitud de empleo para Next.js

Añade un formulario de solicitud de empleo con subida de currículum a tu página de empleo en Next.js, sin backend y sin API de subida que construir. Copia el código, pruébalo en vivo y las solicitudes con archivos 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 subidas de archivos.
  3. Copia el código de Next.js en un componente cliente y añade tu clave de acceso, luego despliega.

Prompt para tu agente de programación con IA

Add a Formpaste job application form to my Next.js app. Use a client component with name, email, role, cover-note and a resume file input. Because it includes a file, POST it as multipart/form-data (send the raw FormData, not URLSearchParams) to https://api.formpaste.com/submit with a hidden access_key input. Do not add an API route or an 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 Next.js

Next.js te da rutas API, pero para formularios sencillos, montar un route handler es excesivo. Formpaste se encarga del backend para que tu app de Next.js se mantenga enfocada en el frontend. Funciona tanto con App Router como con Pages Router.

Componente cliente para la versión con fetch

El fetch del onSubmit necesita ejecutarse en el navegador, así que coloca el formulario en un archivo con "use client" al principio. Un <form action> normal con una redirección también funciona en un componente de servidor si no necesitas JS.

No necesitas una ruta API

No necesitas /api/contact. Enviar el POST directamente al endpoint de Formpaste mantiene la app compatible con exportación estática y desplegable en cualquier lugar, incluido el export estático.

Las Server Actions son opcionales

Puedes conectar una Server Action, pero no es obligatorio y añade un viaje de ida y vuelta al servidor. El POST directo es más simple y funciona en hosting estático.

Edge runtime y subida de archivos

Si una ruta usa el Edge runtime, el manejo de multipart form data es distinto al de Node. Para formularios con subida de archivos, envía el POST directamente a Formpaste desde el cliente para que tu propio runtime nunca tenga que procesar la subida.

Compatible con exportación estática

Como el formulario envía el POST a un endpoint externo, output: export sigue funcionando. Ningún código de servidor tuyo se ejecuta en el momento de la petición.

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 para Next.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 Next.js