A robust TypeScript-based core backend API built with NestJS, Prisma ORM, and PostgreSQL for the SkillSync Job Board platform.
The SkillSync Core Backend Service is the central monolithic hub of the SkillSync ecosystem. It handles primary business logic, user and company management, job postings (vacancies), applications, and real-time communications. It provides a structured RESTful API and integrates with other microservices (Payment, AI) via an asynchronous event-driven architecture using Kafka.
- Core Business Logic: Comprehensive management of users, companies, vacancies, and job applications.
- Real-time Communication: Built-in WebSockets (Socket.io) for real-time chats and system notifications.
- Database Management: PostgreSQL integration via Prisma ORM for robust, type-safe data modeling.
- Microservices Integration: Kafka messaging for event-driven asynchronous communication with AI and Payment services.
- Media Management: Cloudinary integration for handling file and image uploads.
- Authentication & Authorization: Secure JWT-based authentication and Role-Based Access Control (RBAC).
- API Documentation: Automated Swagger UI integration for clear endpoint exploration.
| Layer | Technology |
|---|---|
| Runtime | Node.js |
| Framework | NestJS 11.0.1 |
| Language | TypeScript |
| ORM | Prisma 7.4.2 |
| Database | PostgreSQL |
| Message Queue | Kafka (KafkaJS 2.2.4) |
| Real-time | Socket.io |
| Media Storage | Cloudinary |
| Build Tool | TypeScript Compiler / Nest CLI |
- Node.js (v18 or higher recommended)
- npm or yarn
- PostgreSQL database instance
- Kafka cluster
- Cloudinary account credentials
- Clone the repository:
git clone https://github.com/mildoss/skillsync-backend.git
cd skillsync-backend- Install dependencies:
npm install- Create a
.envfile in the root directory and configure the necessary variables:
PORT=3000
DATABASE_URL="postgresql://user:password@localhost:5432/skillsync?schema=public"
KAFKA_BROKER=localhost:9092
JWT_SECRET=your_jwt_secret_here
CLOUDINARY_CLOUD_NAME=your_cloud_name
CLOUDINARY_API_KEY=your_api_key
CLOUDINARY_API_SECRET=your_api_secret
NODE_ENV=development
FRONTEND_URL=your_frontend- Run database migrations and generate the Prisma client:
npx prisma generate
npx prisma migrate devStart the development server with hot reload:
npm run start:devThe service starts on http://localhost:3000 by default. API documentation (Swagger) is available at http://localhost:3000/api.
Build the application:
npm run buildStart the production server:
npm run start:prodThe API is logically divided into several domains. Full documentation is available via Swagger UI when the server is running.
| Endpoint | Description |
|---|---|
/users |
User profile and account management |
/companies |
Company profiles and employer operations |
/vacancies |
Job postings and search filters |
/applications |
Job applications and candidate tracking |
/chats |
Real-time messaging (REST & WebSockets) |
/notifications |
System and user notifications |
/media |
File and image upload handling |
/ai |
AI generate service |
/dictionaries |
Static data and dropdown values |
src/
├── auth/ # Authentication & Guards (JWT, RBAC)
├── users/ # User management module
├── companies/ # Company management module
├── vacancies/ # Vacancies module
├── applications/ # Job applications module
├── chats/ # WebSocket gateways & chat logic
├── media/ # Cloudinary uploads integration
├── notifications/ # System notifications module
├── ai/ # AI service integration logic
├── payments/ # Payment service integration logic
├── dictionaries/ # Get dictionaries
├── prisma.service.ts # Database connection service
└── main.ts # Application entry point
| Command | Description |
|---|---|
npm run start:dev |
Start development server with watch mode |
npm run build |
Compile the NestJS application |
npm run start:prod |
Start production server |
npm run lint |
Run ESLint to analyze the code |
npm run format |
Run Prettier to format the code |
npm run test |
Run unit tests |
npm run test:e2e |
Run end-to-end tests |
- Architecture: The project follows NestJS modular architecture. Keep domain logic isolated in respective modules.
- Database: All schema changes must be made via
prisma/schema.prisma. Runnpx prisma migrate devafter any changes. - Typing: Use strict typing. DTOs (Data Transfer Objects) must use
class-validatorandclass-transformerfor input validation.
Contributions are welcome! Please follow these steps:
- Fork the repository
- Create a feature branch:
git checkout -b feature/amazing-feature - Commit your changes:
git commit -m 'Add amazing feature' - Push to the branch:
git push origin feature/amazing-feature - Open a Pull Request
This project is licensed under the MIT License.
For issues, questions, or contributions, please open an issue on the GitHub repository.
This is the core service of the SkillSync platform ecosystem. Other services include:
- SkillSync Backend - AI Service
- SkillSync Backend - Payment Service
- SkillSync Backend - Auth Service
- SkillSync Frontend
- SkillSync Mobile
Last Updated: 2026-09-20