Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

36 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ibl.ai

RecruitAI

AI-powered recruiting that screens and chats with candidates so your team can focus on the right candidates.

Next.js TypeScript Tailwind CSS Claude Code


What is RecruitAI

Demo URL: recruit-o7t0i052w-shinji1.vercel.app

A video demo of RecruitAI can be found here:

Demo Video Thumbnail.

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

Who this is for

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's TWENTY_API_KEY (and TWENTY_API_URL for self-hosted) per deployment in .env.local and Vercel env var in iblai.env. Two tenants must never share a workspace.

AGENTS.md / CLAUDE.md

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.)

Quick Start

Prerequisites

  • Node.js 18+
  • iblai CLI (Check Installing the iblai CLI section as an installation guide)
  • An iblai.env with your platform configuration (template)
  • Setup an agent on your platform with the system prompt in docs/agent-system-prompt.md and copy the agent's unique id (a UUID string).

Install & Run

pnpm install
cp .env.example .env.local
pnpm dev

If iblai.env does not yet exist, create it (see AGENTS.mdRunning the AppStep 3 for the full template).

After copying the env files, update them with your platform credentials:

  • iblai.env: Set PLATFORM to your platform key and TOKEN to your platform API token
  • .env.local: Set NEXT_PUBLIC_MAIN_TENANT_KEY to your platform key, IBLAI_API_KEY to your platform API token, and NEXT_PUBLIC_DEFAULT_AGENT_ID to 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.mdRunning the App for the exact flow.

Build

pnpm build
pnpm start

Test

pnpm test:e2e         # Playwright E2E (headless)
pnpm test:e2e:ui      # Playwright E2E (UI mode)
pnpm test:e2e:headed  # Playwright E2E (headed browser)

Deploy to Vercel

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.

  1. Add your Vercel token to iblai.env — create one at vercel.com/account/tokens:

    echo 'VERCEL_TOKEN=<token>' >> iblai.env
  2. Deploy:

    iblai deploy vercel

    This single command:

    1. Auto-detects "server" mode (no output: 'export' in next.config)
    2. Deploys the repo root to Vercel (--prod); Vercel runs pnpm build
    3. Disables Vercel authentication and password protection
    4. Uploads env vars from .env.local to the Vercel project (production + preview). Sensitive keys are stored encrypted; NEXT_PUBLIC_* as plain. Placeholders (your-...) and reserved keys (VERCEL_*, NODE_ENV) are skipped.
    5. If env vars changed, automatically reruns the deploy with --force and VERCEL_FORCE_NO_BUILD_CACHE=1 so NEXT_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
    6. Prints the final deployment URL

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 on vercel.com and select "Manage Domains".

Native builds (iOS, Android, macOS, Linux, Surface)

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.

iOS

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 workflow

Android

Requires 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 workflow

macOS

Requires 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 workflow

Surface (Windows)

Requires 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 workflow

Linux

Debian / 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 workflow

Generate 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 device to discover targets, pick a sensible default, and start the dev build.

Releasing

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 major

One-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.

Project Structure

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)

Built With

Contributing

Setup

  1. Fork the repo and clone it
  2. Install dependencies: pnpm install
  3. Copy environment files: cp .env.example .env.local
  4. Ensure iblai.env exists and fill in your platform credentials (see AGENTS.md)
  5. Start the dev server: pnpm dev

Installing the iblai CLI

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

Development Workflow

  1. Create a branch from main: git checkout -b feat/my-feature
  2. Make your changes
  3. Run pnpm build to verify the build passes
  4. Run pnpm test:e2e to verify tests pass
  5. Commit and push your branch
  6. Open a pull request against main

Guidelines

  • 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-hidden so they render correctly on the gray page background
  • Responsive width — use w-full px-4 on mobile, md:w-[75vw] md:px-0 on desktop
  • Use pnpm as the package manager
  • Do not edit .env.local for platform config — update iblai.env and re-run a CLI command

Adding Features

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 bell

See AGENTS.md for the full list of skills and component priority rules.

Resources

About

Manage your enrollments. Created with github.com/iblai/vibe

Resources

Stars

4 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages