Skip to content
This repository was archived by the owner on Mar 9, 2026. It is now read-only.

ayoubhayda/hireek-platform

Repository files navigation

πŸš€ Hireek β€” Modern SaaS Recruitment Platform

Connect Companies with Top Talent Seamlessly

Next.js TypeScript Prisma TailwindCSS License

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


πŸ“– Table of Contents


🌟 Overview

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

✨ Features

πŸ” Authentication & Security

  • πŸ”‘ 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

🏒 Company Dashboard

  • βœ… 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

πŸ‘” Job Seeker Dashboard

  • πŸ“„ 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

βš™οΈ Power Features

  • πŸ“¬ 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

πŸ›  Tech Stack

Frontend

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

Backend & Database

Technology Purpose
Prisma Next-generation ORM
Neon PostgreSQL Serverless Postgres database
Auth.js OAuth authentication
Zod TypeScript-first schema validation

Infrastructure & Services

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

Development Tools

Technology Purpose
pnpm Fast, disk space efficient package manager
ESLint Code linting and quality
Turbopack Next-gen bundler for faster dev

πŸš€ Getting Started

Prerequisites

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

Installation

  1. Clone the repository
git clone https://github.com/ayoubhayda/hireek-platform.git
cd hireek-platform
  1. Install dependencies
pnpm install

Environment Configuration

  1. Create environment file

Copy the example environment file:

cp .env.exemple .env.local
  1. 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

Auth.js Secret

npx auth secret

Google OAuth

  1. Go to Google Cloud Console
  2. Create a new project or select existing
  3. Enable Google+ API
  4. Create OAuth 2.0 credentials
  5. Add authorized redirect URI: http://localhost:3000/api/auth/callback/google

GitHub OAuth

  1. Go to GitHub Developer Settings
  2. Create new OAuth App
  3. Set callback URL: http://localhost:3000/api/auth/callback/github

Neon PostgreSQL

  1. Sign up at Neon
  2. Create a new project
  3. Copy the connection string from the dashboard

UploadThings

  1. Sign up at UploadThings
  2. Create a new app
  3. Copy the token from settings

Arcjet

  1. Sign up at Arcjet
  2. Create a new site
  3. Copy the API key

Stripe

  1. Sign up at Stripe
  2. Get your secret key from the API keys page
  3. For webhooks, install Stripe CLI and run stripe listen --forward-to localhost:3000/api/webhooks/stripe

Resend

  1. Sign up at Resend
  2. Create an API key from the dashboard

Database Setup

  1. Initialize the database

Push the Prisma schema to your database:

pnpm dlx prisma db push
  1. (Optional) Open Prisma Studio

Explore your database with a visual editor:

pnpm dlx prisma studio

Running the Application

  1. Start the development server
pnpm dev

The application will be available at http://localhost:3000 πŸŽ‰


πŸ“ Project Structure

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

πŸ—„ Database Schema

The platform uses the following core models:

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.


πŸ“œ Available Scripts

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

🌐 Deployment

Deploy to Vercel (Recommended)

Hireek is optimized for Vercel deployment:

  1. Push your code to GitHub
git add .
git commit -m "Initial commit"
git push origin main
  1. Import to Vercel

    • Go to Vercel
    • Import your GitHub repository
    • Vercel will auto-detect Next.js
  2. Configure Environment Variables

    • Add all environment variables from .env.local
    • Don't forget to update NEXT_PUBLIC_BASE_URL to your production domain
  3. Deploy

    • Click "Deploy"
    • Your app will be live in ~2 minutes! πŸš€

Other Platforms

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

πŸ§ͺ Testing

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

🀝 Contributing

Contributions are welcome! Here's how you can help:

  1. Fork the repository
  2. Create a feature branch
    git checkout -b feature/amazing-feature
  3. Commit your changes
    git commit -m "Add amazing feature"
  4. Push to the branch
    git push origin feature/amazing-feature
  5. Open a Pull Request

Development Guidelines

  • 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

πŸ“„ License

This project is licensed under the MIT License - see the LICENSE file for details.


πŸ™ Acknowledgments

Built with amazing tools and services:


πŸ“§ Contact & Support


⭐ Star this repo if you find it helpful!

Made with ❀️ by Ayoub Hayda

Releases

No releases published

Packages

 
 
 

Contributors