Skip to content

PI-DEV-JAVA/pi-dev-web

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

83 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Talentos Logo

πŸš€ Talentos β€” Intelligent HR & Talent Management Platform

A full-stack Symfony 6.4 web application for recruitment, training, event management, and HR operations β€” powered by AI.

Symfony PHP MySQL Bootstrap Tests PHPStan


πŸ“‹ Table of Contents


🌟 Overview

Talentos is a comprehensive talent management platform connecting candidates, recruiters (HR), and administrators in a unified ecosystem. It covers the full employee lifecycle:

πŸ” Register β†’ πŸ“ Complete Profile β†’ πŸ’Ό Apply to Jobs β†’ πŸŽ₯ Interview β†’ πŸ“Š Get Scored by AI
                                      πŸ“… Join Events β†’ πŸŽ“ Take Courses β†’ πŸ† Earn Points

Key Highlights

Feature Description
πŸ€– AI-Powered Scoring Groq LPU + OpenRouter race architecture for sub-2s candidate compatibility analysis
πŸŽ₯ Live Video Interviews WebRTC-based meeting rooms with real-time code execution
πŸŽ“ Course & Quiz System Formations with sΓ©ances, AI-generated quizzes, anti-cheat tab-switch detection
πŸ’³ Stripe Payments Points-based economy for premium courses
🌍 i18n Full French/English internationalization
πŸ“± Responsive Design Modern glassmorphism UI with dark admin panel
πŸ”” Real-time Notifications Push notifications for both candidate and admin dashboards
πŸ’¬ Messaging System Messenger-style chat widget with real-time sync

πŸ— Architecture

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                        TALENTOS PLATFORM                        β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚   FRONT OFFICE (FO)  β”‚           BACK OFFICE (BO)              β”‚
β”‚   Light Theme        β”‚           Dark Admin Panel               β”‚
β”‚                      β”‚                                          β”‚
β”‚  β€’ Home / Landing    β”‚  β€’ Dashboard (stats & charts)            β”‚
β”‚  β€’ Job Offers List   β”‚  β€’ Offer Management (CRUD)               β”‚
β”‚  β€’ Event Listing     β”‚  β€’ Application Pipeline                  β”‚
β”‚  β€’ Course Catalog    β”‚  β€’ Interview Scheduling                  β”‚
β”‚  β€’ Profile Editor    β”‚  β€’ Event CRUD + Presence + Feedback      β”‚
β”‚  β€’ Interview Room    β”‚  β€’ Course/Quiz Management                β”‚
β”‚  β€’ AI Chatbot        β”‚  β€’ Project Kanban Board                  β”‚
β”‚  β€’ Support Tickets   β”‚  β€’ Activity Leaderboard                  β”‚
β”‚  β€’ Notifications     β”‚  β€’ User Administration                   β”‚
β”‚  β€’ Messaging         β”‚  β€’ Support Ticket Resolution             β”‚
β”‚  β€’ Calendar View     β”‚  β€’ Unified Calendar                      β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                              β”‚
              β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
              β”‚               β”‚               β”‚
         β”Œβ”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”   β”Œβ”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”   β”Œβ”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”
         β”‚ MySQL   β”‚   β”‚ Groq API  β”‚   β”‚  Stripe   β”‚
         β”‚ Databaseβ”‚   β”‚ OpenRouterβ”‚   β”‚  Payments β”‚
         β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Role System

Role Access Capabilities
CANDIDATE Front Office Apply to jobs, join events, take courses, earn points, chat
RECRUITER / HR Front + Back Office Manage offers, schedule interviews, AI-analyze candidates
ADMIN Full Access User management, support tickets, all BO features

πŸ“¦ Module Breakdown

1. πŸ‘€ User & Profile (User, Profile, ProfileView)

Controllers: SecurityController, RegistrationController, ProfileController, GoogleController, ForgotPasswordController, EmailVerificationController
Subscriber: LoginSubscriber (login failure/success event handling)

πŸ” Authentication & Security

Feature Details
Registration Email/password with email verification token (OTP-style confirmation link)
Google OAuth 2.0 One-click sign-in via Google β€” auto-creates account + profile on first login
Account Lockout After 5 failed login attempts, account is automatically deactivated. User must use "Forgot Password" to unlock
Failed Attempts Tracking LoginSubscriber increments failedAttempts on each failure, shows remaining attempts warning
Auto-Reset on Success failedAttempts resets to 0 on successful login
Password Reset Token-based reset flow with expiry β€” also re-activates locked accounts
Email Verification Token sent at registration, account flagged isVerified once confirmed
Role-Based Access CANDIDATE, RECRUITER/HR, ADMIN β€” controls FO/BO access

πŸ‘€ Profile Management

Feature Details
Complete Profile First/last name, phone, location, birth date, professional title, years of experience, bio/summary
CV Upload PDF upload stored in public/uploads/cvs/ with file validation
Profile Picture + AI Face Check Upload with Cropper.js for crop/zoom, then face-api.js (TensorFlow.js) runs client-side face detection β€” validates: face present, single face, confidence score, expression analysis. Rejects photos without a clear face
Skills Autocomplete JSON array with live search from internal API (/api/skills/search) β€” 100+ tech & soft skills with tag-style UI
Profile Completeness Percentage-based completeness indicator encouraging users to fill all fields
Profile Views Track who viewed your profile (LinkedIn-style ProfileView entity)
Public Profiles View other users' profiles in the Connect network
Profile Reset Clear all profile data and uploaded files
Points Balance Gamification currency (earned/purchased) used for premium courses

πŸ€– AI Profile Photo Validation (face-api.js)

Upload Photo ──► Cropper.js (crop/zoom) ──► face-api.js (TensorFlow.js)
                                                    β”‚
                                            β”Œβ”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”
                                            β”‚ TinyFaceDetectorβ”‚
                                            β”‚ FaceExpression  β”‚
                                            β””β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜
                                                    β”‚
                                    βœ… Face detected (confidence > threshold)
                                    ❌ No face / multiple faces β†’ rejected
                                    πŸ“Š Expression analysis (smile, neutral, etc.)
  • 100% client-side β€” no API keys needed, runs in browser via TensorFlow.js
  • Models loaded from /models/face-api/ (TinyFaceDetector + FaceExpressionNet)
  • Real-time feedback with visual overlay on detected face region

🌐 Connect / Sync β€” Social Network (Sync, SyncMessage)

Feature Details
People Discovery Browse all users with completed profiles β€” LinkedIn-style network
Connection Requests Send/accept/decline connection requests (like LinkedIn invitations)
My Circle View your accepted connections
Real-time Chat Messenger-style floating widget on every page β€” chat with connections
Message Bubbles Styled sent/received messages with timestamps
Unread Badges Badge counter on chat FAB button + per-contact unread indicators
Full-screen Mode Expand chat widget to dedicated messaging page
HR Messaging Admin/HR can message candidates directly from back office
Contact List Auto-populated from accepted connections with last message preview

πŸ”” Real-time Notifications (JS Polling)

Feature Details
Notification Bell Animated bell icon with pulsing unread count badge
Dropdown Panel LinkedIn-style sliding panel with notification list
JS Polling setInterval fetches /api/notifications every 30s for real-time updates without WebSocket
Mark as Read Click individual notification or "Mark all as read" bulk action
Auto-trigger Notifications created for: new applications, interview scheduled, enrollment approved, connection request, etc.
Dual Streams Separate notification feeds for candidates (FO) and admins (BO)

🎫 Support Tickets (SupportTicket, TicketReply)

Feature Details
Ticket Creation Category, priority (LOW/MEDIUM/HIGH/URGENT), description
Status Lifecycle OPEN β†’ IN_PROGRESS β†’ RESOLVED / CLOSED
Reply Thread Back-and-forth conversation between user and admin
Admin Dashboard View/filter all tickets by status and priority

🎨 UI/UX Design System

Feature Details
Front Office Modern light theme β€” glassmorphism navbar (backdrop-filter: blur), gradient accents, card hover animations
Back Office Dark admin panel β€” slate background, sidebar navigation, glowing borders
Responsive Mobile-first breakpoints at 768px / 480px, collapsible navigation
Micro-animations Smooth transitions on all interactive elements, notification pulse, card lift on hover
Driver.js Guided Tours Interactive onboarding walkthrough on first visit β€” separate tours for FO and BO
Google Fonts Inter font family throughout
Bootstrap Icons Consistent icon system across all pages

🌍 Internationalization (FR/EN)

Feature Details
Translation Files translations/messages.fr.yaml + messages.en.yaml (~750+ keys each)
Locale Switching FR/EN flag toggle in navbar and sidebar, stored in session
LocaleSubscriber Reads _locale from session on every request (priority 20)
Template Usage All UI text uses `{{ 'key'
Flash Messages Translated success/error/warning messages

πŸ€– AI Assistant Chatbot

Feature Details
Floating Widget AI avatar bubble on bottom-left of all FO pages with green "online" pulse
Context-Aware Answers questions about the platform, offers career advice, profile tips
Groq LPU Powered by Groq API for fast inference (~1-2s responses)
Chat UI Gradient message bubbles, typing animation (bouncing dots), smooth open/close
Rate Limiting Configurable daily message limit per user
Tooltip Auto-appearing tooltip "Besoin d'aide?" on first visit

2. πŸ’Ό Offers & Applications (Offer, Application, Bookmark)

Controllers: OfferController, OfferAiController

Feature Details
Job Listing Paginated, searchable by title/location/contract type, with cover images
Apply Upload CV + motivation letter, auto-track application date
Bookmarks Save/unsave offers for later
Status Workflow Nouvelle β†’ En attente β†’ Entretien β†’ AcceptΓ©e / RefusΓ©e
AI Compatibility Groq + OpenRouter race to score candidates 0-100 based on CV + job requirements
Bulk Analysis Recruiter can AI-analyze all applicants at once with progress bar
Recruiter Response Accept/reject with feedback message

πŸ€– AI Scoring Architecture

Candidate CV (PDF) ──► smalot/pdfparser ──► Extract text (max 800 chars)
                                                    β”‚
Job Offer Data ───────────────────────────────────────
                                                    β–Ό
                                    β”Œβ”€β”€β”€β”€ Groq LPU (Primary) ────┐
                                    β”‚                            β”‚
                                    β”‚    RACE: First to respond  β”‚
                                    β”‚                            β”‚
                                    └──── OpenRouter (Fallback) β”€β”˜
                                                    β”‚
                                                    β–Ό
                                          Score: 0-100
                                          Strengths / Weaknesses
                                          Stored in Application.score

3. πŸŽ₯ Interviews & Meets (Interview, Meet)

Controllers: InterviewController, AdminInterviewController

Feature Details
Scheduling Set date, location (in-person) or meeting link (online)
Status Tracking SCHEDULED β†’ IN_PROGRESS β†’ COMPLETED / CANCELLED
Meeting Rooms WebRTC-based video rooms with unique room IDs
Meet Types GENERAL, TECHNICAL, HR β€” each with separate grading
Grading 0-10 scale per meet session
Notes Interviewer can save detailed notes per session
Code Execution Live code editor in interview room for technical assessments
Calendar Integration All interviews visible in candidate & admin calendars

4. πŸŽ“ Courses & Quiz (Formation, Seance, Quiz, Question, Choix, QuizAttempt, FormationEnrollment)

Controllers: CourseController, CertificateController

Feature Details
Formation CRUD Title, description, level (DΓ©butant/IntermΓ©diaire/AvancΓ©), duration, dates, cover image
SΓ©ances Individual lessons β€” PRESENTIEL or EN_LIGNE, with geolocation, video path, duration
Enrollment PENDING β†’ APPROVED / REJECTED β€” free or points-based
Paid Courses Stripe Checkout integration β€” buy points packages (100/250/500 pts)
Quiz System Timed quizzes with multiple-choice questions
Anti-Cheat Tab-switch counter β€” 3+ switches flags as cheated = true
Scoring Automatic percentage calculation, stored in QuizAttempt
Certificates PDF certificate generation upon course completion

πŸ’³ Stripe Points Flow

Buy Points ──► Stripe Checkout ──► Success Webhook ──► Add points to User.pointsBalance
                                                              β”‚
Enroll in Paid Course ──► Check pointsBalance >= pricePoints ──
                                                              β–Ό
                                                    Deduct points, create enrollment

5. πŸ“… Events & Participation (Event, EventParticipation, EventLike, EventComment, EventFeedback)

Controllers: EventController

Feature Details
Event Types MEETUP, CONFERENCE, WORKSHOP, HACKATHON, WEBINAR
Online/Offline In-person (with geolocation map) or online (with meeting link)
Capacity Max capacity enforcement (0 = unlimited)
Registration QR code generated per participant for check-in
QR Verification Scan QR at event entrance to confirm attendance
Status UPCOMING β†’ ONGOING β†’ COMPLETED / CANCELLED
Likes Toggle like/unlike per event
Comments Threaded comments on event pages
Feedback Post-event rating (1-5) + recommendation + comment
Presence Tracking Admin marks attendance from QR scans
Statistics Charts: participation rates, feedback averages, attendance trends

6. πŸ“Š Activities & Projects (Activity, Project)

Controllers: ActivityController, DashboardController

Feature Details
Activity Tracking Employee logs daily work: description, hours worked, date
Timer Built-in stopwatch to track work duration
Report Submission Write activity reports with status: PENDING β†’ SUBMITTED β†’ APPROVED / REJECTED
Late Detection Auto-flag late submissions with delay calculation in hours
Revision Count Track how many times a report was revised after rejection
Admin Feedback Managers can approve/reject with written feedback
Project Management CRUD with status: PLANNED β†’ IN_PROGRESS β†’ COMPLETED
Kanban Board Drag-and-drop project board (visual task management)
Leaderboard Gamified ranking of most active employees

7. πŸ’¬ Messaging & Social (Sync, SyncMessage)

Controllers: SyncController

Feature Details
Real-time Chat Messenger-style floating widget on all pages
Contact List Auto-populated from network circle
Message Bubbles Styled sent/received messages with timestamps
Unread Badges Badge counter on chat FAB button
Full-screen Mode Expand chat to dedicated page
HR Messaging Admin can message candidates directly

8. πŸ”” Notifications (Notification)

Controllers: NotificationController

Feature Details
Real-time Bell Animated notification bell with unread count
Panel Dropdown LinkedIn-style sliding notification panel
Mark as Read Individual or bulk mark-all-as-read
Auto-trigger Notifications for: new applications, interview scheduled, enrollment approved, etc.
Dual Dashboard Separate notification streams for candidates and admins

9. 🎫 Support (SupportTicket, TicketReply)

Controllers: SupportController

Feature Details
Ticket Creation Category, priority (LOW/MEDIUM/HIGH/URGENT), description
Status Tracking OPEN β†’ IN_PROGRESS β†’ RESOLVED / CLOSED
Reply Thread Back-and-forth conversation between user and admin
Admin Dashboard View all tickets, filter by status/priority

10. πŸ€– AI Chatbot

Controllers: ChatbotController

Feature Details
Floating Widget AI assistant bubble on bottom-left of all pages
Context-Aware Answers questions about the platform, job offers, profile tips
Groq-Powered Uses Groq LPU for fast inference
Rate Limited Configurable daily message limit

πŸ—ƒ Entity Diagram

User ──────┬──── Profile (1:1)
           β”‚         └──── ProfileView (1:N)
           β”‚
           β”œβ”€β”€β”€β”€ Application (1:N) ──── Offer (N:1)
           β”‚         └──── Interview (1:1)
           β”‚                   └──── Meet (1:N)
           β”‚
           β”œβ”€β”€β”€β”€ Bookmark (1:N) ──── Offer (N:1)
           β”‚
           β”œβ”€β”€β”€β”€ EventParticipation (1:N) ──── Event (N:1)
           β”‚         └──── EventFeedback (1:1)
           β”‚
           β”œβ”€β”€β”€β”€ EventLike (1:N) ──── Event (N:1)
           β”œβ”€β”€β”€β”€ EventComment (1:N) ──── Event (N:1)
           β”‚
           β”œβ”€β”€β”€β”€ FormationEnrollment (1:N) ──── Formation (N:1)
           β”‚                                       β”œβ”€β”€β”€β”€ Seance (1:N)
           β”‚                                       β”‚        └──── Quiz (1:1)
           β”‚                                       └──── Quiz (1:N)
           β”‚                                                β”œβ”€β”€β”€β”€ Question (1:N)
           β”‚                                                β”‚        └──── Choix (1:N)
           β”‚                                                └──── QuizAttempt (1:N)
           β”‚
           β”œβ”€β”€β”€β”€ Activity (1:N) ──── Project (N:1)
           β”‚
           β”œβ”€β”€β”€β”€ SupportTicket (1:N)
           β”‚         └──── TicketReply (1:N)
           β”‚
           β”œβ”€β”€β”€β”€ Notification (1:N)
           β”‚
           └──── Sync (1:N)
                    └──── SyncMessage (1:N)

Total: 27 mapped entities


βš™οΈ Tech Stack

Layer Technology
Framework Symfony 6.4 (PHP 8.1)
Database MySQL 8.0 + Doctrine ORM
Frontend Twig + Bootstrap 5.3 + Bootstrap Icons
Styling Custom CSS (glassmorphism, gradients, dark mode)
AI Groq LPU API + OpenRouter (race pattern)
Payments Stripe Checkout API
PDF smalot/pdfparser (CV extraction)
Auth Symfony Security + Google OAuth 2.0
i18n Symfony Translation (FR/EN)
Video WebRTC (interview rooms)
Testing PHPUnit 9.6 (391 tests / 617 assertions)
Static Analysis PHPStan Level 2 (0 errors)
DB Diagnostics Doctrine Doctor (ahmed-bhs/doctrine-doctor)
Onboarding Driver.js guided tours
Calendar FullCalendar.js
Charts Chart.js

πŸ€– AI Integration

Providers

Provider Use Case Model Speed
Groq Primary AI engine llama3-70b ~1-2s
OpenRouter Fallback (race pattern) google/gemini-flash ~2-4s

Environment Variables

GROQ_API_KEY=gsk_xxxxx
GEMINI_API_KEY=xxxxx          # Used for OpenRouter

Race Architecture

Both providers are called simultaneously. The first response wins β€” ensuring sub-2 second latency for the user regardless of individual provider performance.


πŸ›  Installation

Prerequisites

  • PHP 8.1+
  • Composer
  • MySQL 8.0
  • Node.js (for asset building, optional)
  • Symfony CLI (recommended)

Setup

# 1. Clone
git clone https://github.com/PI-DEV-JAVA/pi-dev-web.git
cd pi-dev-web

# 2. Install dependencies
composer install

# 3. Configure environment
cp .env .env.local
# Edit .env.local with your DATABASE_URL, API keys, etc.

# 4. Create database & run migrations
php bin/console doctrine:database:create
php bin/console doctrine:schema:update --force

# 5. Clear cache
php bin/console cache:clear

# 6. Start server
symfony server:start
# OR
php -S 127.0.0.1:8000 -t public

Environment Variables

DATABASE_URL="mysql://user:pass@127.0.0.1:3306/talentos?charset=utf8mb4"
GROQ_API_KEY="gsk_xxxxx"
GEMINI_API_KEY="xxxxx"
STRIPE_SECRET_KEY="sk_test_xxxxx"
STRIPE_PUBLIC_KEY="pk_test_xxxxx"
GOOGLE_CLIENT_ID="xxxxx.apps.googleusercontent.com"
GOOGLE_CLIENT_SECRET="xxxxx"
MAILER_DSN="smtp://localhost"

πŸ§ͺ Testing

Unit Tests (391 tests / 617 assertions)

php vendor/bin/phpunit tests/
Test File Module Tests Scenarios
UserProfileTest User & Profile 30 Auth, roles, reset tokens, profile completeness, skills
OfferApplicationTest Offers & Applications 37 Apply flow, status workflow, AI scoring, bookmarks, search
ActivityProjectTest Activities & Projects 22 Timer, reports, late detection, revisions, lifecycle
InterviewMeetTest Interviews & Meets 27 Scheduling, rooms, grading, code execution, calendar
CourseQuizTest Courses & Quiz 37 Enrollment, scoring, anti-cheat, paid/free courses
EventParticipationTest Events & Participation 39 Capacity, QR verification, likes, comments, feedback
Entity/*Test Individual entities 163 All getters/setters, defaults, relations

Static Analysis (PHPStan)

php -d memory_limit=512M vendor/bin/phpstan analyse --memory-limit=512M
# β†’ [OK] No errors

Doctrine Validation

php bin/console doctrine:mapping:info
# β†’ [OK] 27 entities mapped

php bin/console doctrine:schema:validate
# β†’ Mapping: [OK] The mapping files are correct

Doctrine Doctor

symfony server:start
# Open any page β†’ Symfony Profiler Toolbar β†’ "Doctrine Doctor" panel
# Shows: integrity issues, security warnings, configuration problems, slowest queries

πŸ”Œ API Endpoints

Public (Front Office)

Method Route Description
GET / Landing page
GET /offers Job listing with search & filters
GET /offers/{id} Job detail
POST /offers/{id}/apply Submit application
POST /offers/{id}/bookmark Toggle bookmark
GET /events Event listing
GET /events/{id} Event detail
POST /events/{id}/participate Register for event
POST /events/{id}/like Toggle like
POST /events/{id}/comment Post comment
POST /events/{id}/feedback Submit feedback
GET /courses Course catalog
GET /courses/{id} Course detail
POST /courses/{id}/apply Enroll in course
GET /courses/quiz/{id} Take quiz
POST /courses/quiz/{id}/submit Submit quiz answers
GET /interviews My interviews
GET /interviews/room/{roomId} Video meeting room
GET /activities My activities
POST /activities/{id}/report Submit report
GET /api/skills/search?q= Skills autocomplete

Admin (Back Office)

Method Route Description
GET /admin/dashboard Admin stats dashboard
GET/POST /admin/offers/* Offer CRUD
POST /admin/offers/ai/analyze AI applicant analysis
GET/POST /admin/interviews/* Interview management
GET/POST /admin/events/* Event CRUD
GET /admin/events/presence Attendance tracking
GET /admin/events/feedback Feedback management
GET /admin/events/stats Event statistics
GET/POST /admin/courses/* Formation CRUD
GET/POST /admin/projects/* Project management
GET /admin/projects/kanban Kanban board
GET /admin/activities Activity monitoring
GET /admin/leaderboard Employee ranking
GET /admin/users User administration
GET /admin/support Support tickets
GET /admin/calendar Unified calendar

πŸ“ Project Structure

talentosWeb/
β”œβ”€β”€ config/                    # Symfony configuration
β”‚   β”œβ”€β”€ bundles.php            # Registered bundles (inc. DoctrineDoctor)
β”‚   β”œβ”€β”€ packages/              # Package-specific config
β”‚   └── routes/                # Route definitions
β”‚
β”œβ”€β”€ src/
β”‚   β”œβ”€β”€ Controller/            # 22 controllers
β”‚   β”‚   β”œβ”€β”€ Admin/             # Back office controllers
β”‚   β”‚   β”œβ”€β”€ OfferController    # Job offers (FO)
β”‚   β”‚   β”œβ”€β”€ OfferAiController  # AI compatibility scoring
β”‚   β”‚   β”œβ”€β”€ EventController    # Events + participation
β”‚   β”‚   β”œβ”€β”€ CourseController   # Courses + quiz + Stripe
β”‚   β”‚   β”œβ”€β”€ InterviewController# Interviews + meeting rooms
β”‚   β”‚   β”œβ”€β”€ ActivityController # Activities + reports
β”‚   β”‚   β”œβ”€β”€ ProfileController  # Profile + skills API
β”‚   β”‚   β”œβ”€β”€ SyncController     # Messaging system
β”‚   β”‚   β”œβ”€β”€ ChatbotController  # AI chatbot
β”‚   β”‚   └── ...
β”‚   β”‚
β”‚   β”œβ”€β”€ Entity/                # 27 Doctrine entities
β”‚   β”œβ”€β”€ Repository/            # Custom query repositories
β”‚   β”œβ”€β”€ Service/               # Business logic services
β”‚   β”‚   β”œβ”€β”€ StripeService      # Payment processing
β”‚   β”‚   β”œβ”€β”€ WorkflowEngine     # Application state machine
β”‚   β”‚   β”œβ”€β”€ NotificationService# Push notification dispatch
β”‚   β”‚   └── CourseMailer       # Email notifications
β”‚   β”‚
β”‚   └── EventSubscriber/       # Symfony event listeners
β”‚       β”œβ”€β”€ LoginSubscriber    # Post-login logic
β”‚       └── LocaleSubscriber   # i18n locale switching
β”‚
β”œβ”€β”€ templates/
β”‚   β”œβ”€β”€ base.html.twig         # Root layout (fonts, vars)
β”‚   β”œβ”€β”€ front/                 # Front office templates
β”‚   β”‚   β”œβ”€β”€ _base.html.twig    # FO layout (navbar, footer, chat, AI bot)
β”‚   β”‚   β”œβ”€β”€ offers/            # Job listing & detail
β”‚   β”‚   β”œβ”€β”€ events/            # Event pages
β”‚   β”‚   β”œβ”€β”€ courses/           # Course catalog, quiz, payments
β”‚   β”‚   β”œβ”€β”€ account/           # Dashboard, profile, calendar
β”‚   β”‚   β”œβ”€β”€ meet/              # Video interview room
β”‚   β”‚   └── security/          # Login, register, password reset
β”‚   β”‚
β”‚   └── back/                  # Back office templates
β”‚       β”œβ”€β”€ _base.html.twig    # BO layout (sidebar, topbar)
β”‚       β”œβ”€β”€ dashboard.html.twig
β”‚       β”œβ”€β”€ offers/            # Offer management + AI analysis
β”‚       β”œβ”€β”€ events/            # Event CRUD + stats
β”‚       β”œβ”€β”€ courses/           # Formation management
β”‚       └── ...
β”‚
β”œβ”€β”€ tests/
β”‚   β”œβ”€β”€ Entity/                # 10 entity unit test files
β”‚   └── Module/                # 6 module integration test files
β”‚
β”œβ”€β”€ translations/              # FR/EN translation files
β”œβ”€β”€ public/                    # Web root
β”‚   β”œβ”€β”€ uploads/               # User uploads (CVs, images)
β”‚   └── images/                # Static assets
β”‚
β”œβ”€β”€ phpstan.neon               # Static analysis config
β”œβ”€β”€ phpstan-baseline.neon      # Known issue baseline
└── phpunit.xml.dist           # Test runner config

🎨 Design System

Front Office β€” Light Theme

  • Background: #ffffff / #f8fafc
  • Primary: #4f46e5 (Indigo) with gradient to #06b6d4 (Cyan)
  • Cards: 16px radius, subtle shadows, hover lift animation
  • Navbar: Glassmorphism with backdrop-filter: blur(20px)

Back Office β€” Dark Theme

  • Background: #0f172a (Slate 900)
  • Cards: #1e293b (Slate 800) with border glow on hover
  • Sidebar: Fixed 260px with icon navigation
  • Tables: Zebra-stripe with hover highlight

Shared Features

  • Bootstrap Icons throughout
  • Google Fonts (Inter)
  • Smooth transitions on all interactive elements
  • Driver.js guided onboarding tours
  • Responsive breakpoints at 768px / 480px

πŸ‘₯ Team

Project: PI-DEV Web β€” Esprit School of Engineering
Academic Year: 2025-2026
Branch: integrationFinale
Repository: github.com/PI-DEV-JAVA/pi-dev-web


Built with ❀️ using Symfony 6.4 β€” Talentos Platform Β© 2026

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages