Skip to content

WorkNow is a platform that helps employers find employees and job seekers find work. It allows users to post job listings, browse job offers, and contact employers.

License

Notifications You must be signed in to change notification settings

symonbaikov/worknow

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

WorkNow – Job Search Platform for Israel πŸ’Ό

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.

WorkNow


✨ Features

  • 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

πŸ› οΈ Technology Stack

Frontend

  • 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

Backend

  • 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

Integrations

  • Clerk, Stripe, Supabase, Telegram, i18next, OpenAI, AWS S3

πŸ“¦ Installation & Setup

  1. Clone the repository:
    git clone https://github.com/MostOfLuck/job-listing.git
    cd job-listing
  2. Install dependencies:
    npm install
  3. Configure environment variables:
    • Copy docker/env.example to docker/.env and fill in your database, Clerk, Stripe, and email credentials.
  4. Setup the database:
    npx prisma db push
    npx prisma generate
    # Or, to apply migrations:
    npx prisma migrate dev
  5. (Optional) Generate test data:
    node apps/api/utils/napcep.js
  6. Run the project locally:
    npm run dev

🐳 Running Locally with Docker

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.

Prerequisites

1. Configure Environment Variables

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)

2. Build and Start the Services

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.

3. Access the Application

4. Stopping the Services

To stop all running containers:

docker-compose -f docker/docker-compose.dev.yml down

5. Useful Docker Commands

# 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

6. Troubleshooting

  • 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) or RESEND_API_KEY is configured

πŸ–₯️ Running Locally Without Docker

You can also run WorkNow directly on your machine without Docker. This is useful for development and debugging.

Prerequisites

  • Node.js (v18+ recommended)
  • npm (comes with Node.js)
  • PostgreSQL (running locally or accessible remotely)
  • Redis (optional, for caching)

1. Configure Environment Variables

  • 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.

2. Install Dependencies

npm install

3. Install the missing Puppeteer dependencies

npx puppeteer browsers install chrome

4. Set Up the Database

npx prisma db push
npx prisma generate
# Or, to apply migrations:
npx prisma migrate dev

5. (Optional) Seed Test Data

node prisma/seed.js

6. Run the Application

In one terminal, start the backend and frontend together:

npm run dev

Alternatively, you can run them separately:

  • Backend:
    npm run build:server && node apps/api/index.js
  • Frontend:
    npm run build:server && vite

6. Useful Tips

  • 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.

πŸ—‚ Project Structure

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

πŸ”Œ API Endpoints

Job Management

  • 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)

User Management

  • GET /api/users – Get user profile (auth required)
  • `

About

WorkNow is a platform that helps employers find employees and job seekers find work. It allows users to post job listings, browse job offers, and contact employers.

Topics

Resources

License

Security policy

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages