AI-powered developer evaluation & hiring platform that assesses real GitHub code, not resumes.
Features β’ Tech Stack β’ Getting Started β’ Project Structure β’ Contributing
HexcAI transforms the developer hiring process by evaluating candidates based on their real GitHub repositories using AI-powered code analysis. The platform generates transparent Developer Scores (0-100) across multiple dimensions while respecting developer privacy and consent.
For Developers:
- π Get AI-evaluated Developer Score based on real code quality
- π Understand strengths and areas for improvement
- π Control visibility and recruiter access (opt-in only)
- πΌ Get discovered by recruiters without spam
For Recruiters:
- β‘ Find top-tier developers faster
- π See real code quality before contacting
- π― Filter by tech stack and skill levels
- π Make data-driven hiring decisions
- Code Quality (30%): Clean code practices, maintainability, complexity
- Architecture (20%): Design patterns, structure, scalability
- Security (20%): Vulnerability detection, best practices
- Git Practices (15%): Commit quality, branching, collaboration
- Documentation (15%): README quality, inline comments, API docs
- Analyze GitHub repositories with one-click
- View detailed score breakdowns with explanations
- Control recruiter visibility with "Open to Recruiters" toggle
- Manage incoming contact requests (accept/reject)
- Privacy-first: Contact info shared only after approval
- Browse high-scoring developers (β₯80 score)
- Filter by technologies, frameworks, and score ranges
- View public developer profiles with code insights
- Send personalized contact requests
- Consent-based outreach system
| Score Range | Label | Description |
|---|---|---|
| 90-100 | π Excellent | Outstanding code quality and practices |
| 80-89 | πͺ Strong | Solid developer with great fundamentals |
| 60-79 | β‘ Average | Good foundation, room for growth |
| <60 | π Needs Improvement | Focus on core skills development |
- Framework: Next.js 16.1 (App Router)
- Language: TypeScript 5.9
- Styling: Tailwind CSS 4.0
- UI Components: Radix UI, shadcn/ui
- State Management: Jotai
- Data Fetching: TanStack Query
- Forms: React Hook Form + Zod
- Animations: Motion
- Icons: Lucide React, Tabler Icons
- ORM: Drizzle ORM
- Database: Neon Serverless Postgres
- Authentication: Better Auth
- API: Elysia
- AI SDK: Vercel AI SDK
- LLM Provider: Groq
- Charts: Recharts
- Flow Diagrams: XYFlow
- Build System: Turborepo
- Package Manager: Bun
- Linting: ESLint 9
- Formatting: Prettier
- Git Hooks: Husky + lint-staged
- Node.js: >=18.0.0
- Bun: 1.2.22 or higher
- Git: Latest version
- Docker & Docker Compose: For local database and object storage
-
Clone the repository
git clone https://github.com/dev0jha/HexcAI.git cd HexcAI -
Start local infrastructure (PostgreSQL + MinIO)
cd apps/web docker-compose up -dThis starts:
- PostgreSQL on port
5432(credentials:hirexai/hirexai_password) - MinIO (Rustfs) on port
9000(console on9001)
- PostgreSQL on port
-
Install dependencies
bun install
-
Set up environment variables
The
.envfile is already configured with default values:NEXT_PUBLIC_APP_URL=http://localhost:3000 DATABASE_URL=postgresql://hirexai:hirexai_password@localhost:5432/hirexai_db NODE_ENV=development GROQ_API_KEY=your-groq-api-key OBJECT_STORAGE_ENDPOINT=http://localhost:9000
Note:
- Get a free Groq API key at groq.com
- Replace
your-groq-api-keyin.envwith your actual key
-
Run database migrations
bun run db:migrate
-
Seed the database with mock data
bun run db:seed
-
Start the development server
bun dev
-
Open your browser
Navigate to http://localhost:3000
After running bun run db:seed, you can log in with:
| Role | Password | |
|---|---|---|
| Candidate | john.doe@example.com | password123 |
| Candidate | jane.smith@example.com | password123 |
| Candidate | alex.j@example.com | password123 |
| Candidate | sarah.w@example.com | password123 |
| Candidate | michael.b@example.com | password123 |
| Recruiter | hr@techcorp.com | password123 |
| Recruiter | hiring@startupxyz.io | password123 |
| Recruiter | recruit@enterprisesol.com | password123 |
The application automatically creates the profile-pics bucket when you first upload an image. No manual setup required.
If you want to access the MinIO console:
- Open http://localhost:9001
- Login with:
rustfsadmin/rustfsadmin
# Development
bun dev # Start all apps in dev mode
bun run dev:web # Start only web app
# Building
bun build # Build all apps
bun run build:web # Build only web app
# Code Quality
bun lint # Run ESLint across all packages
bun format # Format code with Prettier
bun format:check # Check code formatting
bun check-types # Type-check all packages
# Database
bun run db:generate # Generate Drizzle migrations
bun run db:migrate # Run database migrations
bun run db:studio # Open Drizzle Studio
bun run db:seed # Seed database with mock dataTo populate the database with mock data for development:
bun run db:seedThis creates:
- 5 candidate users with profile data, scores, and tech stacks
- 3 recruiter users with company information
- Sample analysis results
- Sample contact requests (some accepted, some pending, some rejected)
All users have the password: password123
HexcAI/
βββ apps/
β βββ web/ # Next.js 16 application
β βββ app/ # App Router pages
β β βββ (auth)/ # Authentication routes
β β βββ dashboard/ # Developer dashboard
β β βββ recruiter/ # Recruiter portal
β β βββ profile/ # Public profiles
β β βββ page.tsx # Landing page
β βββ components/ # React components
β β βββ ui/ # shadcn/ui components
β β βββ layout/ # Navbar, Footer, Sidebar
β β βββ developer/ # Developer-specific UI
β β βββ recruiter/ # Recruiter-specific UI
β β βββ analysis/ # Score visualization
β βββ hooks/ # Custom React hooks
β βββ lib/ # Utilities & configs
β βββ store/ # Jotai state atoms
β βββ types/ # TypeScript definitions
β βββ public/ # Static assets
β
βββ packages/
β βββ ui/ # Shared UI components
β βββ eslint-config/ # ESLint configurations
β βββ typescript-config/ # TypeScript configs
β
βββ turbo.json # Turborepo config
βββ package.json # Root dependencies
βββ README.md # You are here!
If you get connection errors:
# Check if PostgreSQL container is running
docker ps | grep postgres
# Restart the container
docker-compose restart postgresIf image uploads fail:
# Check if MinIO container is running
docker ps | grep rustfs
# Restart the container
docker-compose restart rustfsTo completely reset and reseed:
docker-compose down -v # Remove volumes
docker-compose up -d # Restart containers
bun run db:migrate # Run migrations
bun run db:seed # Seed dataWe welcome contributions! Here's how you can help:
- Fork the repository
- Create a feature branch
git checkout -b feature/amazing-feature
- Commit your changes
git commit -m "Add some amazing feature" - Push to the branch
git push origin feature/amazing-feature
- Open a Pull Request
- Follow the existing code style (enforced by ESLint/Prettier)
- Write meaningful commit messages
- Add tests for new features
- Update documentation as needed
- Ensure
bun lintandbun check-typespass
This project is licensed under the MIT License - see the LICENSE file for details.
