A modern job board application built with Next.js and Express, allowing users to browse jobs, submit applications, and admins to manage listings.
- Frontend: https://quick-hire-web-delta.vercel.app
- Backend: https://quick-hire-dr7g.onrender.com
- TypeScript - For type safety and improved developer experience
- Next.js - Full-stack React framework
- TailwindCSS - Utility-first CSS for rapid UI development
- shadcn/ui - Reusable UI components
- Express - Fast, unopinionated web framework
- Node.js - Runtime environment
- Prisma - TypeScript-first ORM
- MongoDB - Database engine
- Husky - Git hooks for code quality
- Turborepo - Optimized monorepo build system
- Job Listings: Browse, search, and filter jobs by category/location
- Job Details: View full job descriptions with company info
- Application System: Submit applications with resume and cover letter
- Admin Panel: Create and delete job listings
- Authentication: User signup and login
- Responsive Design: Mobile-friendly UI based on Figma design
quick-hire/
├── apps/
│ ├── web/ # Next.js frontend (port 3001)
│ └── server/ # Express backend (port 3000)
├── packages/
│ ├── db/ # Prisma schema & client
│ └── env/ # Environment validation (Zod)
└── package.json # Monorepo root (Turborepo)
- Node.js 18+
- MongoDB database
- npm 10.9.4
-
Clone the repository
git clone <your-repo-url> cd quick-hire
-
Install dependencies
npm install
-
Setup environment files
Backend (apps/server/.env):
cp apps/server/.env.example apps/server/.env # Then generate JWT secret: openssl rand -base64 32Frontend (apps/web/.env):
cp apps/web/.env.example apps/web/.env
-
Run database migrations
npm run db:generate npm run db:push
-
Start development servers
npm run dev
-
Open in browser
- Frontend: http://localhost:3001
- Backend API: http://localhost:3000
GET /api/jobs- List all jobsGET /api/jobs/:id- Get job detailsPOST /api/jobs- Create job (Admin)DELETE /api/jobs/:id- Delete job (Admin)
POST /api/applications- Submit application
POST /api/auth/signup- Register userPOST /api/auth/login- Login userGET /api/auth/me- Get current user
| Variable | Description | Example |
|---|---|---|
DATABASE_URL |
MongoDB connection string | mongodb+srv://user:pass@cluster/db |
CORS_ORIGIN |
Frontend URL for CORS | http://localhost:3001 |
JWT_SECRET |
Secret for JWT tokens | Generate with: openssl rand -base64 32 |
NEXT_PUBLIC_API_URL |
Backend API URL | http://localhost:3000 |
npm run dev- Start all appsnpm run build- Build all appsnpm run dev:web- Start frontend onlynpm run dev:server- Start backend onlynpm run check-types- Type check all appsnpm run db:push- Push schema to databasenpm run db:generate- Generate Prisma clientnpm run db:studio- Open Prisma Studio