A chatbot that answers new-hire questions straight from a company's own HR documents — built solo in Langflow, debugged in the open, and tested against its own failure modes before being called done.
New employees ask nearly identical questions in their first weeks: how much annual leave they get, what the working hours are, who to contact when a laptop won't connect to the VPN. Answering these one-by-one costs HR time, and answers drift depending on who's asked.
Onboarding Buddy reads a company's actual onboarding documents — policy PDFs, handbooks, internal FAQs — and answers directly from them. It remembers the last few turns of a conversation, so a new hire can ask a vague follow-up like "and for that, where do I go?" and still get a correct, specific answer.
It was built past a guided course baseline, with three custom additions covering deduplication, hallucination resistance, and multi-turn memory — documented below, along with the bugs that came with each one.
Everything the assistant knows comes from these files — nothing else. If an answer isn't in here, the assistant is expected to say so.
Leave entitlements, permission rules, code of conduct.
Company vision, working hours, hybrid schedule, culture.
New-hire FAQ: leave process, IT contacts, performance reviews.
Email, Slack, Jira, and the internal HR portal, explained.
The four-week onboarding schedule, week by week.
Built in Langflow as two connected pipelines — captured here straight from the working canvas, not redrawn.
Three additions, each one made because something broke or could have.
Re-running the ingestion flow during testing kept creating duplicate chunks of the same document, quietly bloating the collection and skewing retrieval.
Fix: added logic so re-ingesting a document clears its old entries first, instead of stacking duplicates on top with each re-run.
An assistant that confidently invents a plausible-sounding HR policy is worse than one that says nothing. The default RAG setup will do exactly that when retrieval comes back weak.
Fix: raised how strictly retrieved content has to match the question before it's trusted, paired with an explicit rule — answer only from what was retrieved, and say so honestly when nothing relevant is found.
A follow-up like "and for that, where do I go?" means nothing to a vector search on its own — it needs the previous turn to make sense.
Fix: a dedicated rewriting step reads chat history and turns the vague follow-up into a specific, standalone query before it ever reaches AstraDB.
Each answer below was checked directly against the 5 source documents — not assumed correct because it sounded right.
Three factual questions in a row. The leave-balance answer is notable — it combines the process from one document with the 12-day figure from another, in a single response. "Berapa lama jam kerja standar..." · "Bagaimana cara mengajukan cuti tahunan?" · "Siapa yang bisa dihubungi jika ada kendala IT?"
Asked what documents a new hire needs on day one — a question none of the 5 source files actually answer. Confirmed by reading every source document directly: no day-one checklist exists in them. "Apa saja dokumen yang perlu disiapkan karyawan baru di hari pertama?"
The same intent, asked three different ways in the same session. All three return the same correct process. "Kalau soal cuti, kemana?" · "Bagaimana cara mengajukan cuti?" · "Kalau saya mau ambil cuti, prosesnya gimana?"
In the order it happened.
This is a working prototype, verified end-to-end on the query set above — not a production deployment. Before real use, it would still need broader query coverage testing beyond these hero cases, proper error handling for AstraDB or Gemini request failures, and some way to monitor retrieval quality as documents change over time.
It also runs on AstraDB's free tier, which hibernates after inactivity — a deliberate constraint of building this solo on free infrastructure, not a flaw in the design.