Skip to content
Anton GoncharovAI systems developer

Web app · HR · scoring and chatbot

CV screening and an interviewer bot

A recruiter spends about five minutes per CV; across a hundred applications that’s a day of work, and by the end of it attention is no longer the same. A neural network is faster, but a “reject” decision without an explanation can’t be shown to a manager or defended under the Russian Labor Code. Here every score has a reason and a quote, mandatory requirements are separated from nice-to-haves, and whatever isn’t in the CV the bot asks the candidate itself instead of silently lowering the score.

Scenario: Trayektoriya company in Kazan — fictional: three vacancies (B2B sales manager, Python developer, warehouse worker) with 6–7 applications each, from perfect to “wrong city”.

Demo screenshot: CV screening and an interviewer bot

Open the demo

Best on a computer: the candidate list and the CV analysis are side by side.

The app runs in your browser: nothing is sent to a server.

What the demo shows

  • CV parser: name, position, city, relocation, work format, salary, employers with periods in any notation — “March 2021 — present”, “03.2019 – 11.2020”

  • Vacancy requirements: mandatory and nice-to-have, weight from 1 to 3, keywords, “N+ years” of experience and a salary ceiling — the score is recalculated instantly

  • A decision with reasons: “Invite”, “Ask the bot”, “Consider”, “Reject”; every requirement has a quote from the CV or the answer to the bot

  • Experience is counted by employer: experience in the matching role counts in full, a mention in duties counts partially

  • Flags for the recruiter: frequent job changes, a gap of more than six months, vague statements without numbers

  • Gender, age, marital status and children are cut out before scoring (Articles 3 and 64 of the Russian Labor Code) — they’re shown struck through in the CV and don’t affect the score

  • A Telegram-style interviewer bot: asks only what’s missing, follows up on “it varied”, stops at a mandatory “no”, gives a vacancy-specific case and books a free slot

  • Two bot modes: a conversation with the candidate’s prepared answers, or you answer for the candidate yourself

  • A stage funnel: new, bot interview, interview, offer, talent pool, rejected

  • Invitation, rejection and talent pool emails with a business reason; the check catches “looking for someone younger”, “no children” and rejections without a reason

  • Blind screening without names, your own CV from the clipboard, table export to CSV

How to try it

  1. Look at the analysis

    The candidate with a 100% match comes first. The “Analysis” tab has a CV quote for every requirement; the “CV” tab highlights the same places, with gender, age and family struck out.

  2. Run the bot

    Vacancy “Python” → Timur Safin, “Ask the bot” → “Bot interview”. The bot asks about SQL, tests and a case and books an interview — the score rises to an invitation.

  3. Answer for the candidate

    For another candidate, choose “Answer for the candidate” and write “it varied” — the bot follows up. Answer “no” to a mandatory question and the interview stops.

  4. Change the requirements

    “Requirements” → make CRM a nice-to-have or lower the salary ceiling. The list re-sorts instantly, and “Reset” restores the original.

  5. Check the email

    “Invite” opens an email with the slot from the conversation. Add “we’re looking for a younger candidate” — the check highlights the phrase and cites the Labor Code.

  6. Add your own CV

    “CV” → paste text from hh.ru or a template. Turn on “Blind screening” and open the “Funnel”.

No paid neural networks

There are no paid neural network requests: CV parsing, scoring and the bot run on rules, and the candidates’ answers to the bot are prepared — or you answer yourself. The parser, experience calculation, flags, bot questions and email checks work for real. In a production project the rules are replaced by a model that reads CVs in any form, but with the same checks: a quote for every decision and a ban on criteria unrelated to the job.

The demo runs without OpenAI, YandexGPT or GigaChat API keys. Wherever a production system calls a model, there’s a local stub with the same interface — so the demo is free, always available and never makes things up.

What a production project adds

  • Applications from hh.ru, SuperJob and Habr Career via API and from email, CVs in PDF and DOCX — in one database
  • CV parsing by YandexGPT, GigaChat or GPT with a structured response and quotes; code checks that each quote really is in the text
  • An interviewer bot in Telegram or in the hh.ru chat, booking interviews in the recruiter’s and manager’s calendars
  • Statuses and emails in Huntflow, Potok, amoCRM or Bitrix24; the recruiter sees the reasons and decides
  • Personal data under 152-FZ: storage in Russia, consent to processing, deletion on schedule

Stack

  • React 19
  • TypeScript
  • Zustand
  • Vite
  • Tailwind CSS

Based on

Books and university courses whose ideas are at work in this demo.

  • Book · William Arntz, Betsy Chasse, Mark Vicente

    What the Bleep Do We Know!?

    Gender, age and marital status are cut from the résumé before scoring: the decision follows the job requirements, not the filter of habitual assumptions.

Developer’s comment

Anton Goncharov

AI systems developer · Python

For business

  • A hundred applications are processed in minutes, and the recruiter starts with those who fit — and sees why.
  • What’s missing from a CV is clarified by the bot — a candidate isn’t lost just because they forgot to mention SQL.
  • The decision is defensible: every “no” has a business reason, and gender, age and family don’t enter the score.

For developers

  • Scoring is a pure function of the CV, the requirements and the answers to the bot: editing a requirement recalculates all candidates without server requests.
  • The parser understands employment periods in different notations and calculates experience by role; numbers like “Bitrix24” and “2025” aren’t mistaken for achievements or years of experience.
  • The bot is a finite state machine: the question queue is built from what wasn’t confirmed, and tests run all demo CVs and check that every question has an answer.

Tips

  • Tip 01

    Don’t trust a model’s rejection without a quote: ask it to point to the place in the CV and check in code that it’s really there.

  • Tip 02

    Remove gender, age and family from the text before the model sees it — then they certainly won’t affect the score.

Want the same for your business?

Tell me about your task — I’ll tell you what from the demo fits, how long it will take and what I’ll need from you.

Other demos in this section

All demos
  • Web app · agent diagram

    live

    AI agent builder

    A support agent is assembled from blocks: intents, a knowledge base, API calls, checks and operator handover. Send a customer message and watch its path light up on the diagram step by step.

    • React
    • TypeScript
  • Web app · question → SQL → chart · PostgreSQL in the browser

    live

    AI data analyst

    A manager asks in plain words — “revenue by channel for Q3”, “which customers stopped ordering” — and gets SQL, a chart, a table and a conclusion. The sales database is real PostgreSQL running right in the browser.

    • React
    • TypeScript
  • Web app · risks against a standard · Word with tracked changes

    live

    Contract review

    A counterparty sent their own contract — the review compares it with the company’s standard, highlights risky clauses, explains why they’re dangerous and suggests wording. The output is a Word file with tracked changes and a disagreement protocol.

    • React
    • TypeScript
  • Web app · tasks from chat · kanban · evening digest

    live

    AI agent in a team chat

    People write in the team chat as usual — “Pete, fix the price list by Friday”. The agent creates a task on the kanban board, moves it through “On it” and “Done”, reschedules and reassigns tasks, reminds about overdue work in the morning and sends a digest in the evening.

    • React
    • TypeScript
  • Web app · shared inbox · CRM · protection against bank detail fraud

    live

    AI inbox triage

    The agent reads the sales team’s shared inbox: it understands what each email is, extracts fields, creates a deal, a ticket or a task in the CRM and drafts a reply. An invoice with new bank details or a phishing email is caught before anyone pays or clicks a link.

    • React
    • TypeScript
  • Web app · marketplaces · moderation check · unit economics

    live

    Product listings for WB and Ozon

    The agent turns a supplier’s text into two listings — for Wildberries and for Ozon: a title within the marketplace limit, a description with search keywords, attributes from the reference lists. Then it checks what listings usually fail moderation on and calculates what’s left from each sale.

    • React
    • TypeScript
  • Web app · meeting transcript · minutes · kanban

    live

    Meeting minutes → kanban tasks

    The agent reads a stand-up transcript and builds the minutes: decisions, tasks with an assignee and deadline taken from live speech, risks and open questions. Tasks go to the kanban board, and at the next meeting the agent moves them through statuses itself.

    • React
    • TypeScript
  • Web app · personal data · healthcare · analytics

    live

    Anonymizing data before it reaches a neural network

    The agent finds full names in any grammatical case, phones, passports, SNILS numbers, cards, addresses and diagnoses in emails and transcripts, replaces them before sending to an external neural network, and restores its answer to the real data on your side. It anonymizes a patient table for analytics so that nobody can be identified.

    • React
    • TypeScript
  • Web app · automation · amoCRM, 1C, Telegram

    live

    An n8n-style automation pipeline

    Three working scenarios of a furniture factory on a canvas, as in n8n: website leads go to amoCRM and to managers by lead temperature, YooKassa payments go to 1C with retries and an error branch, and every morning there’s a digest for the director. Trigger an event and watch records flow from node to node; the workflow can be edited and exported to real n8n.

    • React
    • TypeScript
  • Web app · multi-agent system · content

    live

    A team of AI agents for content

    Six agents prepare a publication from a brief: the editor-in-chief plans, the researcher finds facts in the knowledge base, the writer writes, the fact-checker and editor send the draft back for revision, and the SMM agent adapts the text for Telegram, VK, a newsletter, a blog and a carousel. You see the agents’ entire conversation, every edit and what would have been published without checks.

    • React
    • TypeScript
  • Web app · RAG · neural network in the browser

    live

    Search sandbox

    How a support bot finds an answer in a knowledge base: documents are cut into fragments, search runs by keywords, by meaning or as a hybrid, and every fragment found shows why it ranks above the others.

    • React
    • TypeScript
    • In-browser neural network
  • Web app · metrics · CI thresholds

    live

    Bot quality evaluation

    Before a new bot configuration is rolled out, it’s run against control questions. Here you can see how that works: hit@1, hit@3, the share of correct refusals, a comparison with production and a red banner if CI would block the release.

    • React
    • TypeScript
    • In-browser neural network
  • Web app · AI security · vanilla JS

    live

    Prompt injection defense trainer

    Try to trick a support bot: coax out a secret promo code, extract the system prompt or get a refund without grounds. Six defense levels, direct attacks and attacks via emails, reviews and the knowledge base, and a check log based on the OWASP Top 10 for LLMs.

    • Vanilla JS
  • Web app · AI economics · vanilla JS

    live

    AI bot cost calculator

    How much a bot will cost per month on GPT, Claude, YandexGPT, GigaChat or your own model on a rented GPU. Token-based calculation, all models compared on a chart, tips on paying less, and a real o200k tokenizer right in the browser.

    • Vanilla JS