AI-powered recruiting that screens and chats with candidates so your team can focus on the right candidates.
Demo URL: recruit-o7t0i052w-shinji1.vercel.app
A video demo of RecruitAI can be found here:
RecruitAI is a recruiting app built on the ibl.ai platform. Its AI agent chats with candidates in real time — screening, answering questions, and qualifying applicants — so recruiters can focus on the candidates who matter. It is powered by the @iblai/iblai-js SDK and connects to iblai.app.
| Feature | Description |
|---|---|
| AI Chat | Conversational AI agent that screens candidates and answers their questions |
| Applicants | Review, filter, and manage candidate submissions |
| Profile | View and edit your profile, avatar, experience, and security settings |
| Account | Organization settings, team management, integrations, and billing |
| Analytics | Recruiting funnel, candidate activity, conversation insights, and reports |
| Notifications | In-app notification center for candidate events and team activity |
| SSO Authentication | Login via iblai.app — no tokens to manage |
Trying it out. Sign up at the login page and you get a free trial of the candidate chat — a real conversation with the recruitment manager agent on the home page, capped to a set message limit. Nothing to deploy, no Twenty workspace to provision. The applicants list, analytics, and admin tools aren't part of the trial.
Running it for your team. Create your own ibl.ai platform at iblai.app and pair it with a dedicated Twenty workspace — either self-hosted with Docker or hosted at twenty.com. Plug that workspace's TWENTY_API_KEY into iblai.env, run iblai deploy vercel, and every feature in the table above is live.
One Twenty workspace per tenant. Applicant data lives in Twenty, not in RecruitAI's own database. Every platform on ibl.ai needs its own Twenty workspace — either self-hosted with
docker compose(see Twenty's self-hosting docs) or registered on twenty.com. Set that workspace'sTWENTY_API_KEY(andTWENTY_API_URLfor self-hosted) per deployment in.env.localand Vercel env var iniblai.env. Two tenants must never share a workspace.
Please refer to the CLAUDE.md at the repository root for more information. Please always read the CLAUDE.md at this repository root when you are reading this file. (CLAUDE.md is a symlink to AGENTS.md — they are the same file.)
- Node.js 18+
- iblai CLI (Check
Installing the iblai CLIsection as an installation guide) - An
iblai.envwith your platform configuration (template) - Setup an agent on your platform with the system prompt in
docs/agent-system-prompt.mdand copy the agent's unique id (a UUID string).
pnpm install
cp .env.example .env.local
pnpm devIf iblai.env does not yet exist, create it (see AGENTS.md → Running the App → Step 3 for the full template).
After copying the env files, update them with your platform credentials:
iblai.env: SetPLATFORMto your platform key andTOKENto your platform API token.env.local: SetNEXT_PUBLIC_MAIN_TENANT_KEYto your platform key,IBLAI_API_KEYto your platform API token, andNEXT_PUBLIC_DEFAULT_AGENT_IDto the ibl.ai agent that should power the candidate chat on the home page
Open http://localhost:3000. You'll be redirected to login.iblai.app for login.
Tip: If you are working with Claude Code, just say "start the app" or "start the app locally" — Claude will walk through the dependency check, env setup, credential prompts, and start the dev server for you. See
AGENTS.md→ Running the App for the exact flow.
pnpm build
pnpm startpnpm test:e2e # Playwright E2E (headless)
pnpm test:e2e:ui # Playwright E2E (UI mode)
pnpm test:e2e:headed # Playwright E2E (headed browser)RecruitAI is a server-rendered Next.js app (server actions, dynamic routes, server-only TWENTY_API_KEY / IBLAI_API_KEY). The iblai CLI auto-detects this and deploys the repo to Vercel as a regular Next.js app — Vercel runs the build remotely and provisions serverless functions for everything dynamic.
-
Add your Vercel token to
iblai.env— create one at vercel.com/account/tokens:echo 'VERCEL_TOKEN=<token>' >> iblai.env
-
Deploy:
iblai deploy vercel
This single command:
- Auto-detects "server" mode (no
output: 'export'innext.config) - Deploys the repo root to Vercel (
--prod); Vercel runspnpm build - Disables Vercel authentication and password protection
- Uploads env vars from
.env.localto the Vercel project (production + preview). Sensitive keys are stored encrypted;NEXT_PUBLIC_*as plain. Placeholders (your-...) and reserved keys (VERCEL_*,NODE_ENV) are skipped. - If env vars changed, automatically reruns the deploy with
--forceandVERCEL_FORCE_NO_BUILD_CACHE=1soNEXT_PUBLIC_*values (inlined into the client bundle at build time) are picked up by a clean rebuild — without the no-cache hint, Vercel reuses the previous build's compiled bundle - Prints the final deployment URL
- Auto-detects "server" mode (no
When to deploy:
- After frontend changes you want live
- Before running dev mobile builds (
iblai builds dev,iblai builds ios dev,iblai builds android dev) so the WebView loads from a network URL - When sharing a preview URL with the team
Tip 1: If you are working with Claude Code, after installing the vibe skills, just say "deploy to Vercel" — Claude will check for
VERCEL_TOKEN, prompt for it if missing, and run the deploy. Tip 2: You can change the vercel domain name by clicking on the three-dot button on your Vercel project onvercel.comand select "Manage Domains".
Wrap RecruitAI in a native shell with Tauri v2 using the iblai builds family of commands (full guide: /iblai-ops-build).
Prerequisites (one-time):
iblai add builds # adds src-tauri/, build scripts, deep-link wiring
pnpm install
rustup default stable # https://rustup.rs
iblai builds iconography path/to/logo.png # generate platform icons (optional)iblai add builds writes src-tauri/, registers pnpm tauri:* scripts, and adds the mobile deep-link plugin. For mobile SSO, set TAURI_CUSTOM_SCHEME=recruitai in iblai.env so the auth SPA can return to the app via recruitai://.
Stop pnpm dev (port 3000 must be free) before running any of the dev builds below.
Requires macOS + Xcode + Command Line Tools (xcode-select --install).
rustup target add aarch64-apple-ios aarch64-apple-ios-sim
iblai builds ios init # one-time
iblai builds device # list simulators — never guess
iblai builds ios dev "iPhone 16 Pro Max" # run on simulator (or --device for a real iPhone)
iblai builds ios build # produce .ipa
iblai builds ci-workflow --ios # generate App Store CI workflowRequires Android Studio with SDK + NDK installed.
rustup target add aarch64-linux-android armv7-linux-androideabi i686-linux-android x86_64-linux-android
iblai builds android init # one-time
iblai builds device # list emulators — never guess
iblai builds android dev "Pixel_9" # run on emulator (or --device for USB)
iblai builds android build # produce APK
iblai builds ci-workflow --android # generate Play Store CI workflowRequires Xcode Command Line Tools.
iblai builds dev # run dev build on the host Mac
iblai builds build # produce .dmg / .app
iblai builds ci-workflow --mac # generate notarized macOS CI workflowRequires Visual Studio Build Tools (C++ workload) + WebView2 (bundled on Windows 11).
iblai builds dev # run dev build on Windows
iblai builds build # produce .msi / .exe
iblai builds ci-workflow --windows # generate signed Windows CI workflowDebian / Ubuntu system deps:
sudo apt install libwebkit2gtk-4.1-dev build-essential libssl-dev libgtk-3-dev libayatana-appindicator3-dev librsvg2-dev
iblai builds dev # run dev build
iblai builds build # produce .deb / .AppImage
iblai builds ci-workflow --linux # generate Linux CI workflowGenerate every CI workflow at once with iblai builds ci-workflow --all.
Mobile WebView source. Run iblai deploy vercel first — the CLI deploys to Vercel and writes the deployment URL to src-tauri/tauri.conf.json devUrl so the WebView loads from the network instead. Remove devUrl to go back to local files.
Tip: If you are working with Claude Code, after installing the vibe skills, just say "build for iOS" / "build for Android" / "build the desktop app" — Claude will run
iblai builds deviceto discover targets, pick a sensible default, and start the dev build.
Releases are automated via release-it + GitHub Actions. Every push to main triggers .github/workflows/release.yml, which runs pnpm release --ci to bump the version, write a chore(release): v${version} commit, push the tag, and cut a GitHub Release. Release commits are skipped by the workflow itself to avoid infinite loops.
Before merging a notable change, edit CHANGELOG.md — add bullets to the ## [Unreleased] section in Keep a Changelog style. When the release runs, the version header is what gets cut into the GitHub Release.
Manual release (from a clean working tree on main):
pnpm release # interactive — choose patch / minor / major
pnpm release patch # or specify directly
pnpm release minor
pnpm release majorOne-time setup: add a GIT_TOKEN repo secret with a GitHub PAT that has contents: write + workflows: write so the workflow can push tags and create releases.
src/
├── app/
│ ├── layout.tsx # Root layout (fonts, providers, metadata)
│ ├── globals.css # Global styles + mobile safe-area padding
│ ├── iblai-styles.css # SDK design tokens
│ ├── sso-login-complete/ # SSO callback route
│ └── (app)/
│ ├── layout.tsx # App shell with navbar
│ ├── page.tsx # Home — candidate AI chat widget
│ ├── applicants/ # Applicant list & management
│ ├── profile/ # User profile page
│ ├── account/ # Organization & account settings
│ ├── analytics/ # Recruiting analytics dashboard
│ └── notifications/ # Notifications center
├── components/
│ ├── iblai/ # RecruitAI-specific SDK wrappers (chat widget)
│ ├── navbar/ # App shell, navbar, drawer, logo, profile button
│ └── ui/ # shadcn/ui primitives
├── lib/
│ ├── iblai/ # SDK config, tenant resolution, auth utils
│ └── utils.ts # cn() helper and misc
├── providers/
│ └── iblai-providers.tsx # Auth & SDK providers
└── store/ # Redux store (data layer)
- Next.js — App Router, React Server Components
- @iblai/iblai-js — SDK for auth, UI components, and data
- @iblai/agent-ai —
<agent-ai>chat web component - Tailwind CSS — utility-first styling with ibl.ai design tokens
- shadcn/ui — accessible UI primitives
- Redux Toolkit — data layer state
- Tauri v2 — native shells for iOS, Android, macOS, Linux, and Surface
- Playwright — end-to-end testing
- iblai.app — production backend for auth, AI agents, and analytics
- Fork the repo and clone it
- Install dependencies:
pnpm install - Copy environment files:
cp .env.example .env.local - Ensure
iblai.envexists and fill in your platform credentials (seeAGENTS.md) - Start the dev server:
pnpm dev
From source (latest): Enter a virtualenv first. Then run:
git clone https://github.com/iblai/iblai-app-cli.git
cd iblai-app-cli/
make -C .iblai install-dev- Create a branch from
main:git checkout -b feat/my-feature - Make your changes
- Run
pnpm buildto verify the build passes - Run
pnpm test:e2eto verify tests pass - Commit and push your branch
- Open a pull request against
main
- Use ibl.ai SDK components first — do not build custom components when an SDK equivalent exists
- Use shadcn/ui for custom UI — install via
npx shadcn@latest add <component>, not raw HTML or third-party libraries - Do not override SDK styles — SDK components ship with their own styling
- Use SDK design tokens — reference CSS variables like
var(--primary-color),var(--border-color),var(--text-secondary)instead of hardcoded colors - Wrap SDK components in a white container — use
bg-white rounded-lg border border-[var(--border-color)] overflow-hiddenso they render correctly on the gray page background - Responsive width — use
w-full px-4on mobile,md:w-[75vw] md:px-0on desktop - Use
pnpmas the package manager - Do not edit
.env.localfor platform config — updateiblai.envand re-run a CLI command
Use the iblai CLI and Claude Code skills to add new features:
iblai add auth # SSO authentication (required first)
iblai add chat # AI chat widget
iblai add profile # User profile
iblai add account # Account/org settings
iblai add analytics # Analytics dashboard
iblai add notification # Notification bellSee AGENTS.md for the full list of skills and component priority rules.
- ibl.ai Documentation
- iblai-app-cli — CLI for scaffolding ibl.ai apps
- @iblai/mcp — MCP server for AI-assisted development
- Vibe — developer toolkit for building with ibl.ai