WorkNow is a modern, full-featured job search platform designed for the Israeli market. It connects employers and job seekers, supporting multilingualism (Russian, English, Hebrew, Arabic), premium features, and seamless integration with external services like Stripe, Clerk, and Telegram.
- Authentication via Clerk (social login, JWT, MFA)
- Job posting and management for employers
- Job seeker profiles and search
- Premium access (job boosting, hidden contacts, extra features)
- Admin panel (manage users, jobs, seekers)
- Internationalization (Russian, English, Hebrew, Arabic; RTL support)
- Telegram bot notifications
- Stripe payments & subscriptions
- SEO optimization (OpenGraph, Schema.org, meta tags)
- Responsive design (mobile-first, Bootstrap + Tailwind)
- Automated tasks (cron jobs for premium, notifications)
- Content moderation (bad words filter)
- Newsletter subscription system
- Image upload and moderation
- Candidate notification system
- React 18, Vite, React Router DOM 7
- Tailwind CSS, Bootstrap 5, Bootstrap Icons, Lucide React
- Zustand (state), React Hook Form, Zod (validation)
- i18next (internationalization), React Hot Toast, React Helmet Async
- TypeScript support
- Node.js, Express.js
- Prisma ORM, PostgreSQL
- Clerk (authentication & user management)
- Stripe (payments & subscriptions)
- Nodemailer (email), Telegram Bot API (notifications)
- Winston (logging), Node-cron (task scheduling)
- Redis for caching
- AWS S3 for file storage
- OpenAI integration for AI features
- Clerk, Stripe, Supabase, Telegram, i18next, OpenAI, AWS S3
- Clone the repository:
git clone https://github.com/MostOfLuck/job-listing.git cd job-listing
- Install dependencies:
npm install
- Configure environment variables:
- Copy
docker/env.example
todocker/.env
and fill in your database, Clerk, Stripe, and email credentials.
- Copy
- Setup the database:
npx prisma db push npx prisma generate # Or, to apply migrations: npx prisma migrate dev
- (Optional) Generate test data:
node apps/api/utils/napcep.js
- Run the project locally:
npm run dev
You can run the entire WorkNow platform locally using Docker and Docker Compose. This is the recommended way to ensure all services (backend, frontend, database) work together seamlessly.
- Docker installed
- Docker Compose (if not included with Docker Desktop)
IMPORTANT: The Docker Compose configuration reads from the root .env
file, not from docker/.env
.
# Run the setup script to create environment files
cd docker
./setup-env.sh
# This will create:
# - ../.env (root directory - used by Docker Compose)
# - docker/.env (docker directory - for reference)
Then edit the root .env
file (in the project root directory) and fill in your credentials:
- Database credentials
- Clerk API keys (REQUIRED for frontend authentication)
- Stripe API keys
- Email credentials (Gmail or Resend)
- AWS S3 credentials (if using file uploads)
- OpenAI API key (if using AI features)
From the project root, run:
# Build and start all services (frontend, backend, database)
docker-compose -f docker/docker-compose.dev.yml up --build
Note: The env_file: ../.env
directive in the Docker Compose file automatically loads all environment variables from the root .env
file.
- Frontend: Open http://localhost:3000
- Backend API: Accessible at http://localhost:3001
- Postgres Database: Exposed on port 5432 (see
docker/docker-compose.dev.yml
for credentials)
To stop all running containers:
docker-compose -f docker/docker-compose.dev.yml down
# View logs
docker-compose -f docker/docker-compose.dev.yml logs -f
# Rebuild specific service
docker-compose -f docker/docker-compose.dev.yml up --build worknow-dev
# Access database
docker exec -it worknow-db psql -U postgres -d worknow
- Frontend authentication errors: Make sure
VITE_CLERK_PUBLISHABLE_KEY
is set correctly in the root.env
file - Backend startup errors: Check that all required environment variables are set in the root
.env
file - Email service errors: Ensure either
EMAIL_USER
/EMAIL_PASS
(Gmail) orRESEND_API_KEY
is configured
You can also run WorkNow directly on your machine without Docker. This is useful for development and debugging.
- Node.js (v18+ recommended)
- npm (comes with Node.js)
- PostgreSQL (running locally or accessible remotely)
- Redis (optional, for caching)
- Copy
docker/env.example
to.env
and fill in your credentials (database, Clerk, Stripe, email, etc). - Make sure your PostgreSQL server is running and the credentials match your
.env
.
npm install
npx puppeteer browsers install chrome
npx prisma db push
npx prisma generate
# Or, to apply migrations:
npx prisma migrate dev
node prisma/seed.js
In one terminal, start the backend and frontend together:
npm run dev
- This will start both the backend (on http://localhost:3001) and the frontend (on http://localhost:3000).
Alternatively, you can run them separately:
- Backend:
npm run build:server && node apps/api/index.js
- Frontend:
npm run build:server && vite
- If you change the Prisma schema, re-run
npx prisma generate
. - Logs and errors will appear in your terminal.
- Make sure your database is running before starting the app.
- For TypeScript compilation, use
npm run build:server
.
worknow/
βββ apps/
β βββ api/ # Backend (Express, controllers, routes, services)
β β βββ controllers/ # Request handlers
β β βββ routes/ # API route definitions
β β βββ services/ # Business logic layer
β β βββ middlewares/ # Express middlewares
β β βββ utils/ # Utility functions
β β βββ index.js # Main server entry point
β βββ client/ # Frontend (React, components, pages, hooks, store)
β βββ components/ # Reusable UI components
β βββ pages/ # Page components
β βββ hooks/ # Custom React hooks
β βββ store/ # Zustand state stores
β βββ contexts/ # React contexts
β βββ css/ # Stylesheets
βββ libs/ # Shared utility libraries
βββ prisma/ # Prisma schema, migrations, seed scripts
βββ public/ # Static files, images, locales
β βββ images/ # Application images
β βββ locales/ # Translation files (ru, en, he, ar)
βββ tests/ # Test files
βββ tools/ # Development and utility scripts
βββ docker/ # Docker configuration files
β βββ Dockerfile.dev # Development Dockerfile
β βββ Dockerfile.prod # Production Dockerfile
β βββ docker-compose.dev.yml # Development compose
β βββ docker-compose.prod.yml # Production compose
β βββ env.example # Environment variables template
βββ config/ # Configuration files
βββ package.json # Project metadata and scripts
βββ README.md # Project documentation
GET /api/jobs
β List job postings (with filters, pagination)POST /api/jobs
β Create a new job (auth required)PUT /api/jobs/:id
β Update a job (auth, owner only)DELETE /api/jobs/:id
β Delete a job (auth, owner only)POST /api/jobs/:id/boost
β Boost a job (premium only)
GET /api/users
β Get user profile (auth required)- `