The hiring inbox that answers everyone: applications in one place, and no machine deciding who is out
Every application lands in one register, every candidate gets a reply, and the personal data deletes itself on the date you set
Version history
Hiring is where a small business leaks the most goodwill for the least reason. This build fixes the leak with memory and manners, and deliberately keeps the machine away from the judgement — because two regulatory clocks moved in 2026, and both of them point at software that decides who's out.
The architecture
the same flow as text
│ │
└────────┬─────────┘
▼
[ n8n — intake ]
├─ save CV + letter as attachments
├─ Docling: CV → plain text (searchable, one place)
├─ local model: pull STATED facts only (no score)
└─ acknowledgement out, same day
▼
[ the hiring register — NocoDB ] one row per person
│ stage · arrived · delete-on date · scorecard
▼
[ a human scores against written criteria ] ← the decision lives here
├─ interview: candidate books own slot
├─ offer: DocuSeal, signed
└─ outcome mail to everyone, including the no's
[ n8n — the retention clock ] nightly
└─ delete-on date reached → wipe CV, name, contact
keep the anonymous line: role, criteria, score, outcome, dates
Three jobs, cleanly separated. n8n does intake and time. The register holds the truth. The person does the deciding, and the audit trail survives the deletion because it stops being personal data once the name is gone.
The problem
You post one job. Twelve people answer — some to the info@ address, some to your personal mail, one through the contact form, two as a WhatsApp voice note. Three weeks later you've hired someone, and nine people never heard back. That's not malice, it's a mailbox. The candidate you rejected in silence is also a customer, and their brother works at your biggest client.
Then there's the paperwork nobody warned you about. Since 7 June 2026 the EU Pay Transparency Directive (2023/970) has required employers of every size — no headcount threshold on this part — to give applicants the pay level or pay range in the vacancy notice or before the interview, and to stop asking candidates what they earn now. Transposition is patchy: as of late June 2026 only Italy, Slovakia, Lithuania and Malta had transposed in full, while Poland's pay-range rules had already been live since 24 December 2025. Meanwhile the file you keep on a rejected candidate is personal data with a shelf life, and the shelf life is different on each side of the Atlantic. ICO and EDPS guidance lands at 6–12 months for unsuccessful applicants; the French CNIL's default is 2 years; US employers under 29 CFR 1602.14 must keep applications for at least 1 year, and federal contractors for 2. Delete too early in Chicago and you've destroyed your own defence. Keep too long in Ghent and you're the violation.
And the obvious shortcut — let AI read the pile and rank it — is the one thing this blueprint refuses to do. More on why below, because the reason is a date, not a mood.
Tool choices — and why
Setup outline
1. Write the criteria before the ad — five to eight things the job actually needs, each scored 0–3. Everyone gets marked against the same list. This is the single highest-value step and it costs an hour.
2. Write the ad with the pay range in it. If your national law hasn't landed yet, put it in anyway: you'll be doing it soon, and candidates have already started filtering on it.
3. Build the register: one table, one row per application. Fields for role, source, stage, arrived-on, delete-on, the extracted facts, and one score column per criterion. Publish the form view as your application page.
4. Point the jobs@ mailbox at n8n over IMAP. Every message becomes a row with attachments. Nothing stays in a personal inbox.
5. Add the reading step: Docling to text, then the local model with a prompt that is allowed to return only a fixed list of fields and the value UNKNOWN. If it can't find it, UNKNOWN — never a guess.
6. Acknowledgement out within the hour: we have it, here's what happens next, here's when you'll hear. You'll know this works when candidates stop emailing to ask whether you got it.
7. Interview booking link on the shortlist mail. Offer through DocuSeal.
8. The outcome sweep: no row leaves the register without an outcome mail, including the no's. Make it a rule the workflow enforces, not one you remember.
9. The retention clock: nightly job, delete-on reached → wipe CV, name and contact details, keep the anonymous line. Set the date from your jurisdiction, and set it per role at intake, not globally.
10. Run one real vacancy end to end before you trust it, and read your own rejection mail out loud before it sends to nine people.
Pitfalls — the real ones
The moment the machine ranks, you change regulatory category. Under the EU AI Act, AI used for recruitment, CV screening, candidate ranking or targeted job ads sits in Annex III as high-risk. The Digital Omnibus entered into force on 27 July 2026 and moved those obligations from 2 August 2026 to 2 December 2027 — it moved the date and softened nothing. In New York City, Local Law 144 has been enforced since 5 July 2023: an automated employment decision tool needs an independent bias audit every year, a published summary, and 10 business days' notice to candidates, with penalties running $500–$1,500 per violation per day. The NY State Comptroller called the city's enforcement "ineffective" on 2 December 2025, which is the kind of finding that precedes stricter enforcement, not weaker. Illinois HB 3773 has been live since 1 January 2026: AI with a discriminatory effect in employment is a civil rights violation, ZIP code as a proxy is out, and notice is required. Colorado's AI Act was pushed to 30 June 2026. Extraction is not ranking. Keep the line where it is.
Article 50 already applies. The AI Act's transparency obligations took effect on 2 August 2026 and were not deferred. If you put a chatbot in front of candidates, tell them it's a machine.
Salary history is a habit, not a question. The pay-history ban is easy to comply with on the form and easy to break in the interview, where "what are you on now?" is small talk. Brief whoever interviews.
One retention number will be wrong. Delete in six months and a US discrimination charge finds you with nothing; keep for two years in the EU without a reason and you own the problem. Set it per jurisdiction, and freeze deletion on any candidate the moment a complaint or claim appears — in the US, preservation obligations override your schedule entirely.
Don't let the register become a shadow talent pool. "We'll keep you on file" needs actual consent and its own clock, or it's just an undeclared database.
The scorecard only works if it's filled in during the interview. Scored from memory on Friday afternoon, it's a rationalisation with columns.
This is a build guide, not legal advice, and transposition of the EU rules is still moving country by country — check the position where you actually employ people, and take advice before you rely on any date here.
Verified repos
NocoDB — Sustainable Use License (changed from AGPL 29/01/2026), 64.6k stars, release 2026.08.1 (19/08/2026)
Baserow — MIT open-source core, premium/enterprise dirs separate, 5.6k stars, 2.3.3 (21/07/2026)
n8n — Sustainable Use License (free internal business use), 201k stars, 2.35.4 (19/08/2026)
Docling — MIT, 65.2k stars, v2.120.3 (18/08/2026)
Ollama — MIT, 179k stars, v0.32.14 (15/08/2026)
Easy!Appointments — GPL-3.0, 4.3k stars, 1.6.0 (27/05/2026)
DocuSeal — AGPL-3.0, 18.3k stars, 3.2.1 (17/08/2026)
OpenCATS — MPL-2.0 + CATS Public License 1.1a, 728 stars, v0.10.0 (23/06/2026)
All figures checked against the GitHub API on 20/08/2026.