A modern, full-stack job board application built with Next.js 16, TypeScript, Prisma, and PostgreSQL. JobSnap allows users to browse job listings, post jobs, and apply for positions with an intuitive and responsive interface.
- Browse Jobs: Search and filter job listings by title, company, job type (full-time, part-time, contract, internship), and location
- Apply for Jobs: One-click application process for job positions
- Application Tracking: View all your job applications and their status (Pending, Reviewing, Accepted, Rejected) from your dashboard
- User Profile: Manage your personal profile and view application history
- Post Jobs: Create detailed job listings with title, company, location, type, description, and salary information
- Manage Listings: View and manage all your posted jobs from the dashboard
- Track Applications: Monitor applications received for your job postings
- Multiple Sign-in Options:
- Email & Password authentication
- GitHub OAuth integration
- Secure Authentication: Powered by NextAuth.js v5 with JWT sessions
- Password Hashing: Bcrypt encryption for secure password storage
- Responsive Design: Fully responsive UI built with Tailwind CSS
- Real-time Notifications: Toast notifications for user actions using Sonner
- Modern UI Components: Built with Radix UI and custom components
- Server-Side Rendering: Optimized performance with Next.js App Router
- Data Caching: Efficient data fetching with Next.js unstable_cache
- Next.js 16: React framework with App Router
- React 19: Latest React features
- TypeScript: Type-safe development
- Tailwind CSS 4: Utility-first CSS framework
- Radix UI: Accessible UI components
- Lucide React: Icon library
- React Hook Form: Form management with Zod validation
- Next.js API Routes: Serverless API endpoints
- NextAuth.js v5: Authentication solution
- Prisma ORM: Type-safe database client
- PostgreSQL: Relational database (Neon serverless)
- Bcrypt: Password hashing
- ESLint: Code linting
- Git: Version control
Before you begin, ensure you have the following installed:
- Node.js (v18 or higher)
- npm or yarn or pnpm or bun
- PostgreSQL database (or a Neon account)
- GitHub OAuth App (for GitHub sign-in)
git clone https://github.com/yourusername/jobsnap.git
cd jobsnapnpm install
# or
yarn install
# or
pnpm install
# or
bun installCreate a .env file in the root directory and add the following variables:
# Database
DATABASE_URL=postgresql://username:password@host:port/database?sslmode=require
# NextAuth
NEXTAUTH_SECRET=your-secret-key-here
NEXTAUTH_URL=http://localhost:3000
# GitHub OAuth (optional, for GitHub sign-in)
AUTH_GITHUB_ID=your-github-oauth-app-id
AUTH_GITHUB_SECRET=your-github-oauth-app-secret- Go to GitHub Developer Settings
- Create a new OAuth App
- Set Authorization callback URL to:
http://localhost:3000/api/auth/callback/github - Copy the Client ID and Client Secret to your
.envfile
You can use any PostgreSQL database. For a quick setup, consider using Neon for serverless PostgreSQL.
Run Prisma migrations to set up your database schema:
npx prisma generate
npx prisma db pushPopulate your database with sample data:
npm run seednpm run dev
# or
yarn dev
# or
pnpm dev
# or
bun devOpen http://localhost:3000 with your browser to see the application.
jobsnap/
βββ app/ # Next.js App Router
β βββ about/ # About page
β βββ api/ # API routes
β β βββ auth/ # NextAuth endpoints
β β βββ jobs/ # Job-related APIs
β β βββ login/ # Login endpoint
β β βββ register/ # Registration endpoint
β βββ browsejobs/ # Browse jobs page
β βββ dashboard/ # User dashboard
β βββ postjob/ # Post job page
β βββ privacy/ # Privacy policy
β βββ profile/ # User profile
β βββ signin/ # Sign in page
β βββ signup/ # Sign up page
β βββ terms/ # Terms of service
β βββ layout.tsx # Root layout
β βββ page.tsx # Home page
βββ components/ # React components
β βββ ui/ # Reusable UI components
β βββ applications.tsx # Application listings
β βββ browse-jobs-listing.tsx
β βββ job-listing.tsx
β βββ navbar.tsx
β βββ post-job-form.tsx
β βββ posted-job.tsx
β βββ recent-jobs.tsx
β βββ signin-form.tsx
βββ lib/ # Utility functions
β βββ actions.ts # Server actions
β βββ auth.ts # NextAuth configuration
β βββ data-services.ts # Data fetching functions
β βββ helper.ts # Helper functions
β βββ prisma.ts # Prisma client
β βββ utils.ts # Utility functions
βββ prisma/ # Database
β βββ schema.prisma # Database schema
β βββ seed.ts # Database seeding
β βββ cleanup.ts # Database cleanup
βββ public/ # Static assets
βββ .env # Environment variables
βββ next.config.ts # Next.js configuration
βββ package.json # Dependencies
βββ tailwind.config.ts # Tailwind configuration
βββ tsconfig.json # TypeScript configuration
- User: User accounts with authentication
- Job: Job listings posted by users
- Application: Job applications from users
- Account: OAuth account linking (NextAuth)
- Session: User sessions (NextAuth)
- VerificationToken: Email verification tokens (NextAuth)
# Development
npm run dev # Start development server
# Production
npm run build # Build for production
npm run start # Start production server
# Database
npm run seed # Seed database with sample data
npx prisma studio # Open Prisma Studio (database GUI)
npx prisma generate # Generate Prisma Client
# Code Quality
npm run lint # Run ESLint- Sign Up: Users can create an account with email and password
- Sign In: Users can sign in with:
- Email and password
- GitHub OAuth
- Session Management: JWT-based sessions with NextAuth.js
- Protected Routes: Dashboard and profile pages require authentication
Built with:
- Radix UI: Accessible component primitives
- Tailwind CSS: Utility-first styling
- Custom Components: Button, Form, Input, Label, Spinner, Toast notifications
The easiest way to deploy your Next.js app is to use the Vercel Platform:
- Push your code to GitHub
- Import your repository in Vercel
- Add environment variables in Vercel dashboard
- Deploy!
Make sure to set all environment variables in your deployment platform:
DATABASE_URLNEXTAUTH_SECRETNEXTAUTH_URL(your production URL)AUTH_GITHUB_ID(if using GitHub OAuth)AUTH_GITHUB_SECRET(if using GitHub OAuth)
Contributions are welcome! Please feel free to submit a Pull Request.
This project is open source and available under the MIT License.
- Ensure your
DATABASE_URLis correct and the database is accessible - For Neon, make sure you're using the pooled connection string
- Verify
NEXTAUTH_SECRETis set and matches across all environments - Check that OAuth callback URLs are correctly configured
- Run
npm installto ensure all dependencies are installed - Clear
.nextfolder and rebuild:rm -rf .next && npm run build
For issues and questions:
- Open an issue on GitHub
- Check existing issues for solutions
- Built with Next.js
- UI components from Radix UI
- Authentication powered by NextAuth.js
- Database ORM by Prisma
Made with β€οΈ by the JobSnap Team