Hireek is a full-featured SaaS recruitment platform that bridges the gap between companies and job seekers. Built with cutting-edge technologies, it delivers a seamless, secure, and lightning-fast hiring experience for both employers and candidates.
Features β’ Tech Stack β’ Getting Started β’ Documentation β’ Deployment
- Overview
- Features
- Tech Stack
- Getting Started
- Project Structure
- Database Schema
- Available Scripts
- Deployment
- Testing
- Contributing
- License
Hireek is designed to revolutionize the recruitment process by providing:
- π’ For Companies: Post jobs, manage applications, review candidates, and hire top talent
- π For Job Seekers: Discover opportunities, submit applications, track progress, and land dream jobs
- π Enterprise Security: Powered by Arcjet for bot protection and runtime security
- β‘ Blazing Fast: Built on Next.js 15 with App Router and React Server Components
- π Production Ready: Deployed on Vercel with edge performance globally
- π OAuth authentication via Google and GitHub (Auth.js v5-beta)
- π‘οΈ Enterprise-grade security with Arcjet (bot protection, rate limiting)
- π€ Role-based access control (Company vs Job Seeker)
- π Secure session management
- β Guided onboarding flow for company setup
- π Create, edit, and manage job postings (draft/active/expired states)
- π₯ Review and manage candidate applications
- β Mark favorite candidates
- π Track job post performance and expiration
- πΌ Company profile with logo, website, and social links
- π Profile creation with resume uploads via UploadThings
- π Browse and search job listings
- π€ Submit applications with cover letters
- π Track application history and status
- β Save favorite job posts
- π Receive notifications
- π¬ Background Jobs: Automated job expiration workflows via Inngest
- π³ Payments: Stripe integration for premium listings and subscriptions
- π€ File Uploads: Seamless resume and logo uploads via UploadThings
- π¨ Modern UI: Beautiful components from shadcn/ui with Tailwind CSS
- π Dark Mode: Full dark/light theme support with next-themes
- π¨ Optimized UX: Skeleton loaders and optimistic UI updates
- π± Responsive Design: Mobile-first, works flawlessly on all devices
- π§ Email Notifications: Transactional emails via Resend
| Technology | Purpose |
|---|---|
| Next.js 15 | React framework with App Router, RSC, and SSR |
| React 19 | UI library with latest features |
| TypeScript | Type-safe development |
| Tailwind CSS | Utility-first CSS framework |
| shadcn/ui | Beautiful, accessible component library |
| next-themes | Dark mode implementation |
| Lucide React | Beautiful icon library |
| Technology | Purpose |
|---|---|
| Prisma | Next-generation ORM |
| Neon PostgreSQL | Serverless Postgres database |
| Auth.js | OAuth authentication |
| Zod | TypeScript-first schema validation |
| Technology | Purpose |
|---|---|
| Vercel | Deployment and hosting |
| Arcjet | Security (bot protection, rate limiting) |
| Inngest | Background job processing |
| UploadThings | File uploads and management |
| Stripe | Payment processing |
| Resend | Transactional emails |
| Technology | Purpose |
|---|---|
| pnpm | Fast, disk space efficient package manager |
| ESLint | Code linting and quality |
| Turbopack | Next-gen bundler for faster dev |
Before you begin, ensure you have the following installed:
- Node.js 20.x or higher
- pnpm 9.x or higher
- PostgreSQL database (we recommend Neon for serverless)
- Git for version control
- Clone the repository
git clone https://github.com/ayoubhayda/hireek-platform.git
cd hireek-platform- Install dependencies
pnpm install- Create environment file
Copy the example environment file:
cp .env.exemple .env.local- Configure environment variables
Open .env.local and fill in the following variables:
# =============================================================================
# Authentication (Auth.js)
# =============================================================================
# Generate a secret: npx auth secret
AUTH_SECRET=""
# Google OAuth
# Get credentials: https://console.cloud.google.com/apis/credentials
AUTH_GOOGLE_ID=""
AUTH_GOOGLE_SECRET=""
# GitHub OAuth
# Get credentials: https://github.com/settings/developers
AUTH_GITHUB_ID=""
AUTH_GITHUB_SECRET=""
# =============================================================================
# Database (Neon PostgreSQL)
# =============================================================================
# Get your connection string: https://console.neon.tech/
DATABASE_URL=""
# =============================================================================
# File Uploads (UploadThings)
# =============================================================================
# Get your token: https://uploadthing.com/dashboard
UPLOADTHING_TOKEN=""
# =============================================================================
# Security (Arcjet)
# =============================================================================
# Get your key: https://app.arcjet.com/
ARCJET_KEY=""
# =============================================================================
# Payments (Stripe)
# =============================================================================
# Get keys: https://dashboard.stripe.com/apikeys
SECRET_STRIPE_KEY=""
STRIPE_WEBHOOK_SECRET=""
# =============================================================================
# Email (Resend)
# =============================================================================
# Get key: https://resend.com/api-keys
RESEND_API_KEY=""
# =============================================================================
# Application
# =============================================================================
# Your app URL (use http://localhost:3000 for development)
NEXT_PUBLIC_BASE_URL="http://localhost:3000"π How to Get Each API Key
npx auth secret- Go to Google Cloud Console
- Create a new project or select existing
- Enable Google+ API
- Create OAuth 2.0 credentials
- Add authorized redirect URI:
http://localhost:3000/api/auth/callback/google
- Go to GitHub Developer Settings
- Create new OAuth App
- Set callback URL:
http://localhost:3000/api/auth/callback/github
- Sign up at Neon
- Create a new project
- Copy the connection string from the dashboard
- Sign up at UploadThings
- Create a new app
- Copy the token from settings
- Sign up at Arcjet
- Create a new site
- Copy the API key
- Sign up at Stripe
- Get your secret key from the API keys page
- For webhooks, install Stripe CLI and run
stripe listen --forward-to localhost:3000/api/webhooks/stripe
- Sign up at Resend
- Create an API key from the dashboard
- Initialize the database
Push the Prisma schema to your database:
pnpm dlx prisma db push- (Optional) Open Prisma Studio
Explore your database with a visual editor:
pnpm dlx prisma studio- Start the development server
pnpm devThe application will be available at http://localhost:3000 π
hireek-platform/
βββ src/
β βββ app/ # Next.js App Router pages
β β βββ (auth)/ # Authentication routes
β β βββ (dashboard)/ # Protected dashboard routes
β β βββ api/ # API routes
β β βββ layout.tsx # Root layout
β βββ components/ # React components
β β βββ ui/ # shadcn/ui components
β β βββ forms/ # Form components
β β βββ ... # Feature components
β βββ lib/ # Utility libraries
β β βββ auth.ts # Auth.js configuration
β β βββ db.ts # Prisma client
β β βββ stripe.ts # Stripe configuration
β βββ utils/ # Helper functions
β βββ inngest/ # Background job functions
β βββ generated/ # Prisma generated client
β βββ constants/ # App constants
βββ prisma/
β βββ schema.prisma # Database schema
βββ public/ # Static assets
βββ .env.local # Environment variables (create this)
βββ .env.exemple # Environment template
βββ next.config.ts # Next.js configuration
βββ tailwind.config.ts # Tailwind configuration
βββ tsconfig.json # TypeScript configuration
βββ package.json # Dependencies
The platform uses the following core models:
model User {
id String @id @default(cuid())
email String @unique
name String?
userType UserType? (COMPANY | JOB_SEEKER)
onboardingComplete Boolean @default(false)
company Company?
jobSeeker JobSeeker?
savedJobs SavedJob[]
}
model Company {
id String @id @default(cuid())
name String
location String
about String
website String
logo String
jobs Job[]
}
model JobSeeker {
id String @id @default(cuid())
name String
about String
resume String
jobApplications JobApplication[]
}
model Job {
id String @id @default(cuid())
jobTitle String
jobDescription String
employmentType String
location String
salaryFrom Int
salaryTo Int
benefits String[]
status JobStatus (DRAFT | ACTIVE | EXPIRED)
jobApplications JobApplication[]
}
model JobApplication {
id String @id @default(cuid())
jobId String
jobSeekerId String
resume String
coverLetter String?
prevPosition String?
prevCompany String?
}For the complete schema, see prisma/schema.prisma.
| Command | Description |
|---|---|
pnpm dev |
Start development server with Turbopack |
pnpm build |
Build production bundle |
pnpm start |
Start production server |
pnpm lint |
Run ESLint for code quality |
pnpm dlx prisma studio |
Open Prisma Studio (database GUI) |
pnpm dlx prisma db push |
Push schema changes to database |
pnpm dlx prisma generate |
Generate Prisma Client |
Hireek is optimized for Vercel deployment:
- Push your code to GitHub
git add .
git commit -m "Initial commit"
git push origin main-
Import to Vercel
- Go to Vercel
- Import your GitHub repository
- Vercel will auto-detect Next.js
-
Configure Environment Variables
- Add all environment variables from
.env.local - Don't forget to update
NEXT_PUBLIC_BASE_URLto your production domain
- Add all environment variables from
-
Deploy
- Click "Deploy"
- Your app will be live in ~2 minutes! π
Hireek can be deployed to any platform that supports Next.js:
- Netlify: Use the Next.js runtime
- Railway: Deploy with PostgreSQL add-on
- AWS/DigitalOcean: Deploy as a Node.js application
- Docker: Create a Dockerfile for containerized deployment
Coming Soon: Comprehensive test suite
Planned testing tools:
- Jest: Unit and integration tests
- Playwright: End-to-end testing
- React Testing Library: Component testing
- Vitest: Fast unit tests
Contributions are welcome! 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 amazing feature" - Push to the branch
git push origin feature/amazing-feature
- Open a Pull Request
- Follow the existing code style
- Write meaningful commit messages
- Add tests for new features
- Update documentation as needed
- Ensure all tests pass before submitting PR
This project is licensed under the MIT License - see the LICENSE file for details.
Built with amazing tools and services:
- Next.js β The React Framework for the Web
- Prisma β Next-generation ORM
- Neon β Serverless Postgres
- Inngest β Background job orchestration
- Arcjet β Application security
- UploadThings β File uploads
- shadcn/ui β Beautiful components
- Tailwind CSS β Utility-first CSS
- Vercel β Deployment platform
- Author: Ayoub Hayda
- GitHub: @ayoubhayda
- Repository: hireek-platform
Made with β€οΈ by Ayoub Hayda