# Auto-feedback dla kandydatów — workflow n8n

Zbudowałem to po przeczytaniu Waszego formularza rekrutacyjnego. Jest tam zdanie:

> „Na każdym etapie dostaniesz od nas informację zwrotną — niezależnie od wyniku."

To droga obietnica. Przy stu zgłoszeniach to kilkanaście godzin pisania maili — i zwykle pierwsza rzecz, która pęka, kiedy robi się gorąco. Więc zamiast opisywać w CV, że umiem automatyzować, zautomatyzowałem to.

Bierzcie i używajcie. Też jeśli mnie nie zatrudnicie.

---

## Co robi

```
Zgłoszenie (webhook z Tally)
  → sprawdzenie sekretu           # nikt obcy nie wstrzyknie kandydata
  → zbudowanie promptu            # normalizacja pól, różne nazwy z różnych formularzy
  → Groq llama-3.3-70b            # ocena 0-100 + 3 mocne strony + luka + treść feedbacku
  → parsowanie i walidacja        # jak model zwróci śmieć, mail NIE idzie
  → rozgałęzienie                 # 75+ zaproszenie, poniżej odmowa
  → Resend                        # spersonalizowany mail
```

Czas przejścia: około 3 sekundy. Koszt: zero — Groq ma darmowy tier, który to uciągnie.

## Dlaczego akurat tak

**Feedback musi cytować konkrety kandydata, inaczej jest gorszy niż jego brak.** Pierwsza wersja promptu generowała „doceniamy Twój potencjał i zachęcamy do rozwoju". Wyrzuciłem to. W prompcie jest lista zakazanych słów (*potencjał, atut, rozwój, pasja, doceniamy, zachęcamy*) i dwa przykłady — jeden dobry, jeden zły. Few-shot zadziałał lepiej niż same instrukcje.

Efekt na prawdziwym teście, kandydat odrzucony:

> „Piotr, rok w helpdesku to dobry start. Zapier prywatnie to fajny początek, ale szukamy kogoś z doświadczeniem w Make lub n8n. Zrób kilka automatyzacji dla zewnętrznych klientów i wróć do nas."

Kandydat zaproszony:

> „Kasia, Twoje 2 lata w Make i 50 scenariuszy to duży plus. Prowadzenie wdrożeń dla 4 zewnętrznych sklepów pokazuje, że masz doświadczenie z klientem."

**Model zawodzi cicho, więc walidacja jest twarda.** Node „Parsuj ocenę" sprawdza, czy JSON się sparsował i czy są wszystkie pola. Jak nie — przepływ kończy się bez wysyłki i oznacza zgłoszenie do ręcznej obsługi. Kandydat, który dostanie bełkot od bota, to gorsza sytuacja niż kandydat, który czeka dzień dłużej.

**Próg 75 jest arbitralny i ma taki być.** To jedna liczba w Code node. Podnieście, jak lejek będzie za szeroki.

## Uruchomienie (około 10 minut)

1. **Import**: n8n → Workflows → Import from File → `nocodework-candidate-feedback.json`
2. **Credentials** — dwa, oba typu Header Auth:
   - `Groq` → `Authorization: Bearer gsk_...` (klucz z console.groq.com, darmowy)
   - `Resend` → `Authorization: Bearer re_...`
3. **Podmiana w workflow**:
   - node „Sprawdź sekret" → `REPLACE_WITH_FORM_SECRET` na własny (`openssl rand -hex 24`)
   - oba nody Resend → `DOMENA.pl` na Waszą zweryfikowaną domenę
4. **Aktywacja** → skopiujcie Production URL webhooka
5. **Tally**: Integrations → Webhooks → wklejcie URL, dodajcie nagłówek `X-Form-Secret` z sekretem z kroku 3

Po imporcie warto otworzyć każdy node i sprawdzić, czy pola się zmapowały — wersje nodów różnią się między releasami n8n.

## Test

```bash
curl -X POST https://WASZ-N8N/webhook/nocodework-candidate-feedback \
  -H 'Content-Type: application/json' \
  -H 'X-Form-Secret: WASZ_SEKRET' \
  -d '{
    "imie": "Kasia Zielinska",
    "email": "test@example.com",
    "doswiadczenie": "3 lata w e-commerce jako specjalista ds. operacji",
    "narzedzia": "Make 2 lata, 50 scenariuszy. n8n na Dockerze, 5 workflow.",
    "klient_b2b": "wdrozenia dla 4 zewnetrznych sklepow, sama ustalalam zakres",
    "motywacja": "chce robic powazniejsze wdrozenia w zespole"
  }'
```

Oczekiwane: `{"success":true,"score":80,"recommendation":"invite"}` i mail na podany adres.

Zły sekret → HTTP 403. Brak pól → model dostaje puste stringi i zwykle daje niski score; jeśli chcecie twardej walidacji wejścia, dołóżcie IF przed „Zbuduj prompt".

## Uwagi

Workflow jest napisany pod n8n — **zaimportowałem go i sprawdziłem na n8n 2.9.4**, wszystkie 10 nodów mapuje się poprawnie.

W Make ta sama rzecz to Webhook → HTTP (Groq) → Router → dwa moduły Email. Nie dołączam blueprintu Make, bo nie mam gdzie go przetestować, a nieprzetestowany scenariusz jest wart mniej niż nic.

Danych żadnego kandydata nigdzie nie zapisuję — jeśli chcecie historię ocen, dołóżcie node bazy po „Parsuj ocenę".

—
Shawn Stefaniak · shawnstefaniak@pyroxai.com
