A modern, full-stack job board application built with Next.js 14, Neon Postgres, Prisma ORM, and NextAuth.js.
- User Authentication: Email/password and OAuth (Google) login
- Role-based Access: Job seekers and employers with different permissions
- Job Listings: Browse, search, and filter job postings
- Job Applications: Apply for jobs with resume uploads
- User Dashboard: Personalized dashboard for managing applications and profile
- Employer Features: Post, edit, and manage job listings
- Responsive Design: Mobile-friendly and accessible UI
- Next.js 14 with App Router for SSR and SSG
- Neon Postgres serverless database with connection pooling
- Prisma ORM for type-safe database operations
- NextAuth.js for secure authentication
- Tailwind CSS for modern, responsive styling
- TypeScript for type safety
- Zod for runtime validation
- React Hook Form for form handling
- Frontend: Next.js 14, React, TypeScript, Tailwind CSS
- Backend: Next.js API Routes, Prisma ORM
- Database: Neon Postgres (Serverless PostgreSQL)
- Authentication: NextAuth.js
- UI Components: Radix UI, Lucide React
- Form Handling: React Hook Form, Zod validation
- State Management: Zustand, React Context
- Deployment: Vercel
jobpulse/
├── prisma/
│ └── schema.prisma # Database schema
├── src/
│ ├── app/ # Next.js App Router
│ │ ├── api/ # API routes
│ │ ├── auth/ # Authentication pages
│ │ ├── dashboard/ # User dashboards
│ │ ├── jobs/ # Job listing pages
│ │ └── layout.tsx # Root layout
│ ├── components/ # Reusable components
│ │ └── ui/ # UI component library
│ ├── lib/ # Utilities and configurations
│ │ ├── auth.ts # NextAuth configuration
│ │ ├── prisma.ts # Prisma client
│ │ ├── utils.ts # Utility functions
│ │ └── validations.ts # Zod schemas
│ └── types/ # TypeScript type definitions
└── public/ # Static assets
- Node.js 18+
- npm or yarn
- A Neon Postgres database (free tier available)
git clone <repository-url>
cd jobpulse
npm install-
Create a Neon Database:
- Visit neon.tech and create a free account
- Create a new project and database
- Copy the connection string from the dashboard
-
Environment Variables:
- Copy
.env.exampleto.env - Fill in your database credentials:
- Copy
# Database (Neon Postgres)
DATABASE_URL="postgresql://username:password@your-neon-hostname/your-database?sslmode=require"
DIRECT_URL="postgresql://username:password@your-neon-hostname/your-database?sslmode=require"
# NextAuth.js
NEXTAUTH_SECRET="your-nextauth-secret-key"
NEXTAUTH_URL="http://localhost:3000"
# OAuth Providers (Optional)
GOOGLE_CLIENT_ID="your-google-client-id"
GOOGLE_CLIENT_SECRET="your-google-client-secret"- Initialize Database:
npx prisma generate
npx prisma db pushnpm run devVisit http://localhost:3000 to see the application.
- User: User profiles with role-based access (Job Seeker/Employer)
- Job: Job postings with company details and requirements
- Application: Job applications linking users to jobs
- SavedJob: Saved jobs for later viewing
- UserRole:
JOB_SEEKER,EMPLOYER,ADMIN - JobType:
FULL_TIME,PART_TIME,CONTRACT,INTERNSHIP,FREELANCE - WorkType:
ON_SITE,REMOTE,HYBRID - ApplicationStatus:
PENDING,REVIEWED,INTERVIEW,REJECTED,ACCEPTED
- Users can sign up as either Job Seekers or Employers
- Email/password authentication with bcrypt hashing
- Optional Google OAuth integration
- JWT-based sessions with NextAuth.js
- Role-based redirects after login
- Prepare for Deployment:
npm run build-
Deploy to Vercel:
- Connect your GitHub repository to Vercel
- Set environment variables in Vercel dashboard
- Deploy automatically on push to main branch
-
Environment Variables (Vercel):
- Copy all variables from
.envto Vercel settings - Update
NEXTAUTH_URLto your production domain
- Copy all variables from
JobPulse - Connecting talent with opportunity in the modern workforce.