"Prodexa is a versatile, productivity-oriented social platform designed for organizations, educational institutions, and communities. It drives engagement and collaboration through real-time messaging, instant notifications, and interactive, gamified competitions. Users can apply for full-time or freelance jobs, manage personal todos, assign tasks, and manipulate community roles."
This repository serves as the robust core for this platform, powered by NestJS. It orchestrates real-time interactions, secure authentication, and complex community management logic to ensure a seamless experience for all users.
The following diagram illustrates the high-level flow of the Prodexa platform.
graph TD
User((User))
Auth[Authentication]
Dash[User Dashboard]
User -->|Login/Register| Auth
Auth --> Dash
subgraph Global Features
Dash --> DM["Direct Messages <br/>(Chat Gateway)"]
Dash --> Jobs["Jobs & Freelance <br/>(Apply/Post)"]
Dash --> Notif["Notifications"]
Dash --> Profile["Profile & Badges"]
Dash --> Todos["Todos & Tasks"]
end
subgraph "Community Experience"
Dash -.->|Optional: Join| Comm["Community Home"]
Comm --> Channels["Channels <br/>(Real-time Chat)"]
Comm --> Feed["Posts Feed"]
Comm --> Comp["Competitions <br/>(Gamified)"]
Comm --> Roles["Role Management <br/>(Assign/Edit)"]
end
Notif -.->|Real-time| User
style User fill:#f9f,stroke:#333
style Global Features fill:#ff9,stroke:#333
style Comm fill:#bbf,stroke:#333
The application is modularized to support scalability and maintainability:
- Auth: robust authentication and authorization strategies (
AuthController). - Users: Comprehensive user profile management, avatar handling, and settings (
UsersController). - Community: The module for creating and managing communities, roles, and memberships (
CommunityController). - Competition: Manages gamified competitions, quizzes, and live scoring via WebSockets (
CompetitionController,CompetitionGateway). - Channels: Real-time chat channels within communities (
ChannelsController). - Messages: Handling private direct messages and channel messages via (
MessageController,ChatGateway). - Posts: News feed system for communities (
PostsController). - Notifications: Real-time system alerts and user notifications (
NotificationsController). - Jobs: Job posting and application tracking system (
JobController). Access is governed by email verification and account type. - Deadline: Manages time-sensitive tasks or event deadlines (
DeadlineController). - Verification-Requests: Handling user identity verification workflows. (
VerificationRequestsController) - Badges: Gamification system awarding badges for achievements (
BadgesController). - Mail: Email notification services. (
MailService) - Cloudinary: Integration for efficient media upload and management. (
CloudinaryService) - Site Logs: Helper module for admin users to view system activities (
SiteLogsController).
Prodexa Backend enforces consistent API responses and documentation:
- Global Response Interceptor: A custom
TransformationInterceptorwraps all successful responses in a standardized format.
Standard Response Example:
{
"message": "Operation successful",
"status_code": 200,
"status": "Success",
"data": { ... },
"count": 1,
"meta": {
"page": 1,
"limit": 10,
"count": 5,
"total": 50
},
"timestamps": "2024-12-19T10:00:00.000Z",
"path": "/api/resource",
"method": "GET"
}You can view the complete Entity-Relationship (ER) Diagram for the database schema here: View Database Schema (PDF)
- Framework: NestJS (Node.js)
- Language: TypeScript
- Database: PostgreSQL (via TypeORM)
- Caching & Queues: Redis
- Event Bus: NATS
- Real-time: Socket.io
- Media Storage: Cloudinary
- Email: Nodemailer
- Node.js (v16 or higher)
- npm or yarn
- PostgreSQL (Local or Cloud-hosted e.g., Neon, Railway)
- Redis (Local or Cloud-hosted e.g., Upstash, Redis Cloud)
- NATS (Local or Cloud-hosted e.g., Synadia)
-
Clone the repository
git clone https://github.com/Ali-Said1/Prodexa_Backend.git cd Prodexa_Backend -
Install Dependencies
npm install
-
Environment Configuration Create a
.envfile in the root directory. ensure you provide valid credentials.# Application # ENV=PROD ENV=DEV PORT=3000 # JWT # JWT_ACCESS_SECRET=your_access_secret JWT_REFRESH_SECRET=your_refresh_secret JWT_TOKEN_EXPIRATION_TIME=15m JWT_REFRESH_EXPIRATION_TIME=7d # COOKIE SECRET # COOKIE_SECRET=your_cookie_secret # SERVER HOSTS FRONTEND_URL= BACKEND_URL= # POSTGRES Development DATABASE # POSTGRES_HOST_DEV= DB_URL_DEV= # POSTGRES Production DATABASE # POSTGRES_HOST_PROD= DB_URL_PROD= # COMMON POSTGRES CONFIGURATION # POSTGRES_PORT= POSTGRES_USERNAME= POSTGRES_PASSWORD= PGSSLMODE= PGCHANNELBINDING= # CLOUDINARY CONFIGURATION # CLOUDINARY_NAME= CLOUDINARY_API_KEY= CLOUDINARY_API_SECRET= # Redis REDIS_HOST= REDIS_PORT= REDIS_PASSWORD= # NATS NATS_SERVERS= NATS_CREDS_CHAT= NATS_CREDS_NOTIFICATION # Mail GMAIL_EMAIL_FROM_NAME= GMAIL_EMAIL_FROM_ADDRESS= GMAIL_SMTP_HOST= GMAIL_SMTP_PORT= GMAIL_SMTP_LOGIN= GMAIL_SMTP_PASSWORD= GMAIL_SMTP_SECURE= # Brevo BREVO_API_KEY=
-
Database Migration Once the database is running (and
.envis configured), run the migrations to seed the schema:
npm run migration:run# development
npm run start
# watch mode (recommended for dev)
npm run start:dev
# production mode
npm run start:prodSwagger API documentation is available locally when running the application:
You can find the frontend application code here: Prodexa
This project is licensed under the MIT License.
