TalentFlow is an AI-assisted recruiting platform for small and medium businesses. It helps teams manage jobs, upload resumes, evaluate candidate-job fit, and move applicants through a pipeline from application to interview.
- Manage job postings and hiring requirements
- Upload candidate resumes (PDF/DOCX) with server-side parsing
- Use Gemini-powered analysis to extract candidate profile insights
- Score candidate-job match with explainable AI reasoning
- Track applications across pipeline stages (Applied, Screening, Interview, Offer, etc.)
- View interview schedules and hiring metrics in a dashboard
- Frontend: React, TypeScript, Vite, Tailwind CSS, Radix UI, TanStack Query, Wouter
- Backend: Node.js, Express, TypeScript
- Database: PostgreSQL (Neon) with Drizzle ORM
- AI: Google Gemini (
gemini-2.5-flash) - File processing: Multer,
pdf-parse,mammoth
TalentFlow/
client/ # React frontend
server/ # Express API and app server
shared/ # Shared schema/types (Drizzle + Zod)
uploads/ # Uploaded resume files
drizzle.config.ts # Drizzle configuration
- Node.js 20+
- npm 10+
- PostgreSQL database (Neon recommended)
- Gemini API key
Create a .env file in the repository root:
DATABASE_URL=postgresql://<user>:<password>@<host>/<db>?sslmode=require
GEMINI_API_KEY=your_gemini_api_key
PORT=5000
NODE_ENV=developmentNotes:
DATABASE_URLis required by both runtime and Drizzle config.GEMINI_API_KEYenables resume analysis and match scoring.- If
PORTis not set, the server defaults to5000.
- Install dependencies:
npm install- Push schema to your database:
npm run db:push- Start development server:
npm run devApp and API are served from the same server process.
npm run dev: Start development server (Express + Vite middleware)npm run build: Build frontend and bundle backend intodist/npm run start: Run production build fromdist/index.jsnpm run check: Type-check TypeScriptnpm run db:push: Push Drizzle schema changes to database
Frontend pages:
/Dashboard/jobsJobs list/jobs/newCreate job/candidatesCandidates list/candidates/uploadResume upload/applications/:idApplication details/pipelineKanban pipeline/scheduleInterview schedule/settingsSettings
API endpoints (selected):
GET /api/statsGET /api/jobsGET /api/jobs/:idPOST /api/jobsGET /api/candidatesGET /api/candidates/:idPOST /api/candidates/uploadGET /api/applicationsGET /api/applications/recentGET /api/applications/pipelineGET /api/applications/:idPATCH /api/applications/:id/statusGET /api/interviewsGET /uploads/:filename
- Allowed file types:
.pdf,.docx - Max file size: 10 MB
- Uploaded files are stored in
uploads/ - Server extracts text and runs AI analysis before creating/updating candidate records
npm run build
npm run startThis creates:
- Frontend static assets (Vite output)
- Backend bundle at
dist/index.js
DATABASE_URL must be set: ensure.envexists and is loaded.- AI analysis failures: verify
GEMINI_API_KEYand quota; upload still completes with limited fallback data in some cases. - File upload errors: confirm the file is PDF or DOCX and under 10 MB.
MIT