Gatsby-Bewerbungsformular

Füge deiner Gatsby-Karriereseite ein Bewerbungsformular mit Lebenslauf-Upload hinzu, ganz ohne Backend und ohne eigene Upload-API. Die Komponente postet multipart FormData an Formpaste, sodass Bewerbungen mit Anhang in deinem Posteingang landen.

So baust du es

  1. Erstelle ein Formular in deinem Formpaste-Dashboard und kopiere den Zugangsschlüssel.
  2. Verbinde Storage im Dashboard, damit das Formular Datei-Uploads annehmen kann.
  3. Kopiere die React-Komponente oben, ergänze deinen Zugangsschlüssel, dann bauen und deployen.

Prompt für deinen KI-Coding-Agenten

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.

Oder verbinde den Formpaste-MCP-Server mit Claude Code, Codex, Cursor, Claude Desktop, VS Code oder einem beliebigen mcp-remote-Client. Zur Einrichtungsanleitung.

Gatsby-Fallstricke

Gatsby-Seiten greifen oft zu Netlify Forms, aber das ist nicht nötig. Ein Formpaste-Formular ist eine ganz normale React-Komponente, die an einen Endpunkt postet, es funktioniert also unabhängig davon, ob du auf Netlify deployst, und ganz ohne Formular-Erkennung zur Build-Zeit.

Du brauchst kein Netlify Forms

Netlify Forms bindet dein Formular an das Netlify-Hosting und dessen HTML-Parsing zur Build-Zeit. Ein Post an Formpaste aus einer Komponente heraus funktioniert auf jedem Host - Netlify, Gatsby Cloud, Cloudflare Pages, überall - und es gibt nichts, was zur Build-Zeit erkannt werden müsste.

Es ist eine normale React-Komponente

Gatsby ist React, das Formular ist also eine Komponente mit einem onSubmit, der den Formpaste-Endpunkt aufruft. Kein gatsby-spezifisches Plugin und keine eigene Serverless-Funktion.

Statischer Build, externes POST

Gatsby erzeugt statische Dateien, und das Formular postet an einen externen Endpunkt, die Seite bleibt also vollständig statisch und überall deploybar. Für das Formular sind weder SSR noch Functions erforderlich.

Verarbeite die Antwort im State

Der Endpunkt liefert JSON zurück. Warte auf den Fetch und zeige deinen eigenen Erfolgsstatus, oder hinterlege eine Redirect-URL im Dashboard für eine Danke-Seite ganz ohne JavaScript.

Worauf es ankommt

Der Lebenslauf ist ein Datei-Upload

Eine echte Bewerbung braucht den angehängten Lebenslauf, also postet das Formular Multipart-Formulardaten. Der generierte Code setzt enctype und sendet die Datei zusammen mit den übrigen Feldern.

Akzeptiere gängige Dokumenttypen

Bewerber senden PDF- und Word-Dateien. Beschränke dich nicht auf einen einzigen Typ, sonst verlierst du Bewerber.

Leite Bewerbungen an den richtigen Posteingang weiter

Sende Bewerbungen an deine Recruiting-Adresse, und reply-to wird auf den Bewerber gesetzt, damit du direkt antworten kannst.

So funktioniert es

Drei einfache Schritte, bis Formular-Einsendungen in deinem E-Mail-Posteingang landen.
Erstelle dein Formular, setze die action-URL auf den Formpaste-Endpunkt und trage deinen Zugangsschlüssel ein.

1

Formular erstellen

Melde dich an, verifiziere deine E-Mail und erstelle einen Zugangsschlüssel im Dashboard.

2

Code kopieren

Füge das Snippet oben in dein Projekt ein. Wähle CSS oder Tailwind passend zu deiner Website.

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">Vollständiger Name
    <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">E-Mail
    <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">Beworbene Stelle
    <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">Anschreiben
    <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">Lebenslauf
    <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">Bewerbung absenden</button>
    </form>
  );
}
3

Zugangsschlüssel hinzufügen

Ersetze den Platzhalter durch deinen Zugangsschlüssel, um Einsendungen zu empfangen.

<input type="hidden" name="access_key" value="YOUR_ACCESS_KEY_HERE">

Gatsby-Bewerbungsformular FAQ

Formular einfügen. Einsendungen erhalten.

Sofort, ohne Backend, Server oder Datenbanken einzurichten. 250 Einsendungen/Monat kostenlos - keine Kreditkarte.

Andere Gatsby-Formulare