IT Recruitment Platform - GloryLabs Project: Mahmoud Consultancy B.V. Document Version: 1.0 Date: October 26, 2025
InterimPlaza is a comprehensive IT recruitment platform designed to connect IT professionals with employers in the Netherlands. The platform provides job seekers with tools to create professional CVs, search and apply for positions, and track their applications. Employers and recruiters can post jobs, review applications, and manage candidates efficiently.
Current Status: 95% Complete Target Completion: 1-2 weeks Primary Users: IT Professionals, Recruiters, Administrators Platform Type: Web Application (Angular + Spring Boot)
Business Rationale: Security and user trust are fundamental. Password breach checking prevents account compromises.
Business Rationale: Core value proposition - job seekers must be able to find relevant positions easily.
Business Rationale: Core business process - without applications, platform has no value.
Business Rationale: Major differentiator - integrated CV builder adds significant value and reduces friction for job seekers.
Business Rationale: Essential for platform operations - recruiters need tools to manage candidates efficiently.
Business Rationale: Critical for user engagement and communication - keeps candidates informed throughout the process.
Business Rationale: Positions InterimPlaza as a career resource hub, not just a job board. Increases user engagement and retention.
Business Rationale: Automates job listing collection from 87 sources, reduces manual data entry by 80%, ensures fresh content, and provides comprehensive job coverage. Target: 5000+ jobs from automated scraping.
Implementation Status:
Business Rationale: Enhanced discoverability improves user experience and job match quality.
Business Rationale: Transparency builds trust with candidates and improves recruiter efficiency.
Business Rationale: Data-driven decision making for recruiters and platform optimization.
Business Rationale: Increases viral growth and platform visibility.
Business Rationale: Premium features for CV builder differentiation.
Business Rationale: Streamlines communication but not critical for MVP.
Business Rationale: Admin convenience features - nice to have but not essential.
Business Rationale: Expands market reach but not essential for Netherlands-only launch.
Business Rationale: Increases engagement but not critical for initial launch.
Business Rationale: AI funnel dramatically improves recruiter efficiency and reduces time-to-hire by 40%. Major competitive differentiator that provides measurable ROI. Expected savings: €120,000/year in recruiter time + 30% better placement quality.
Implementation Timeline:
Technical Approach:
Rationale: These advanced AI features require extensive ML infrastructure, training data, and ongoing model maintenance. AI funnel (S6) provides 80% of the value with 20% of the complexity.
Rationale: Requires video hosting infrastructure, bandwidth, and storage. Not essential for core recruitment flow.
Rationale: Business model focused on free platform initially. Monetization in Phase 2.
Rationale: Responsive web app provides sufficient mobile experience. Native apps require separate development team.
Rationale: These require enterprise partnerships and API approvals. Defer to future phases.
| ID | Requirement | Priority | Status | |----|-------------|----------|--------| | FR1.1 | User can register with email, first name, last name, and password | MUST | ✅ DONE | | FR1.2 | System sends email verification link (24h expiry) | MUST | ✅ DONE | | FR1.3 | User can verify email via link | MUST | ✅ DONE | | FR1.4 | User can login with email and password | MUST | ✅ DONE | | FR1.5 | System checks password against 850M+ breached passwords | MUST | ✅ DONE | | FR1.6 | System warns if password found in breach database | MUST | ✅ DONE | | FR1.7 | User can reset password via email | MUST | ✅ DONE | | FR1.8 | User can view personal profile | MUST | ✅ DONE | | FR1.9 | User can edit profile information | MUST | ✅ DONE | | FR1.10 | User can change password | MUST | ✅ DONE | | FR1.11 | User can delete account | SHOULD | ⚠️ TODO | | FR1.12 | User can download personal data (GDPR) | SHOULD | ⚠️ TODO |
| ID | Requirement | Priority | Status | |----|-------------|----------|--------| | FR2.1 | Admin can create job posting with full details | MUST | ✅ DONE | | FR2.2 | Job posting includes: title, company, location, description | MUST | ✅ DONE | | FR2.3 | Job posting includes: requirements, benefits, salary range | MUST | ✅ DONE | | FR2.4 | Job posting has type: Full-time/Part-time/Contract/Freelance | MUST | ✅ DONE | | FR2.5 | Job posting has experience level: Junior/Mid/Senior | MUST | ✅ DONE | | FR2.6 | Job posting can be set to active/inactive | MUST | ✅ DONE | | FR2.7 | Job posting has expiration date | MUST | ✅ DONE | | FR2.8 | Admin can edit existing job postings | MUST | ✅ DONE | | FR2.9 | Admin can delete job postings | MUST | ✅ DONE | | FR2.10 | System automatically deactivates expired jobs | SHOULD | ⚠️ TODO | | FR2.11 | Admin can duplicate job postings | COULD | ⚠️ TODO | | FR2.12 | System tracks job view counts | SHOULD | ✅ DONE |
| ID | Requirement | Priority | Status | |----|-------------|----------|--------| | FR3.1 | User can browse all active jobs | MUST | ✅ DONE | | FR3.2 | Jobs are paginated (20 per page) | MUST | ✅ DONE | | FR3.3 | User can search jobs by keyword | MUST | ✅ DONE | | FR3.4 | User can filter jobs by location | MUST | ✅ DONE | | FR3.5 | User can filter jobs by type | MUST | ✅ DONE | | FR3.6 | User can filter jobs by experience level | MUST | ✅ DONE | | FR3.7 | User can sort jobs (date, relevance) | MUST | ✅ DONE | | FR3.8 | User can view job details | MUST | ✅ DONE | | FR3.9 | System shows number of applicants | SHOULD | ⚠️ TODO | | FR3.10 | User can save favorite jobs | COULD | ⚠️ TODO | | FR3.11 | User receives job alert notifications | COULD | ⚠️ TODO |
| ID | Requirement | Priority | Status | |----|-------------|----------|--------| | FR4.1 | User can apply to job with application form | MUST | ✅ DONE | | FR4.2 | Application form includes: name, email, phone, cover letter | MUST | ✅ DONE | | FR4.3 | User can upload CV file (PDF/DOC) | MUST | ⚠️ PARTIAL | | FR4.4 | User can attach CV from CV Builder | MUST | ✅ DONE | | FR4.5 | User can add LinkedIn profile link | SHOULD | ✅ DONE | | FR4.6 | User can add portfolio URL | SHOULD | ✅ DONE | | FR4.7 | User receives email confirmation after submission | MUST | ✅ DONE | | FR4.8 | User can view all personal applications | MUST | ✅ DONE | | FR4.9 | User can track application status | MUST | ✅ DONE | | FR4.10 | User can withdraw application | MUST | ✅ DONE | | FR4.11 | User receives email when status changes | MUST | ✅ DONE | | FR4.12 | User can save application as draft | COULD | ⚠️ TODO | | FR4.13 | User can edit submitted application | COULD | ❌ WON'T HAVE |
| ID | Requirement | Priority | Status | |----|-------------|----------|--------| | FR5.1 | User can create new CV profile | MUST | ✅ DONE | | FR5.2 | Multi-step wizard with 7 steps | MUST | ✅ DONE | | FR5.3 | Step 1: Personal information (name, contact, address) | MUST | ✅ DONE | | FR5.4 | Step 2: Professional summary and objective | SHOULD | ✅ DONE | | FR5.5 | Step 3: Work experience (add/edit/delete multiple entries) | MUST | ✅ DONE | | FR5.6 | Step 4: Education (add/edit/delete multiple entries) | MUST | ✅ DONE | | FR5.7 | Step 5: Skills with proficiency levels | MUST | ✅ DONE | | FR5.8 | Step 6: Additional info (languages, certs, projects, publications) | SHOULD | ✅ DONE | | FR5.9 | Step 7: Preview and generate PDF | MUST | ✅ DONE | | FR5.10 | Form validation with real-time error messages | MUST | ✅ DONE | | FR5.11 | Auto-save draft to localStorage | SHOULD | ✅ DONE | | FR5.12 | Auto-save draft to backend | SHOULD | ✅ DONE | | FR5.13 | User can navigate between steps freely | MUST | ✅ DONE | | FR5.14 | User can download CV as PDF | MUST | ✅ DONE | | FR5.15 | User can view CV preview before download | MUST | ✅ DONE | | FR5.16 | User can create multiple CV profiles | SHOULD | ✅ DONE | | FR5.17 | User can set default CV profile | SHOULD | ✅ DONE | | FR5.18 | User can duplicate existing CV | SHOULD | ✅ DONE | | FR5.19 | User can select CV template (modern/classic) | COULD | ⚠️ PARTIAL | | FR5.20 | User can customize CV colors | COULD | ⚠️ PARTIAL | | FR5.21 | System validates required fields | MUST | ✅ DONE | | FR5.22 | System validates date ranges (start < end) | MUST | ✅ DONE | | FR5.23 | System validates URLs, phone numbers, postal codes | SHOULD | ✅ DONE | | FR5.24 | System validates minimum age (16 years) | MUST | ✅ DONE |
| ID | Requirement | Priority | Status | |----|-------------|----------|--------| | FR6.1 | Admin can view dashboard with key metrics | MUST | ✅ DONE | | FR6.2 | Dashboard shows: total users, jobs, applications | MUST | ✅ DONE | | FR6.3 | Dashboard shows: new users this month | MUST | ✅ DONE | | FR6.4 | Dashboard shows: active jobs count | MUST | ✅ DONE | | FR6.5 | Dashboard shows: pending applications | MUST | ✅ DONE | | FR6.6 | Dashboard shows applications by status breakdown | SHOULD | ✅ DONE | | FR6.7 | Admin can view monthly application trends | SHOULD | ⚠️ PARTIAL | | FR6.8 | Admin can view top performing jobs | SHOULD | ⚠️ PARTIAL | | FR6.9 | Admin can view recent platform activity | SHOULD | ✅ DONE | | FR6.10 | Admin can view system health status | SHOULD | ✅ DONE |
| ID | Requirement | Priority | Status | |----|-------------|----------|--------| | FR7.1 | Admin can view all users with pagination | MUST | ✅ DONE | | FR7.2 | Admin can search users by name or email | MUST | ✅ DONE | | FR7.3 | Admin can filter users by role | SHOULD | ✅ DONE | | FR7.4 | Admin can filter users by status (active/inactive) | SHOULD | ✅ DONE | | FR7.5 | Admin can update user roles | MUST | ✅ DONE | | FR7.6 | Admin can activate/deactivate user accounts | MUST | ✅ DONE | | FR7.7 | Admin can delete users (soft delete) | MUST | ✅ DONE | | FR7.8 | Admin can view user details | SHOULD | ✅ DONE | | FR7.9 | Admin can view recently registered users | SHOULD | ✅ DONE | | FR7.10 | Admin can reset user passwords | COULD | ⚠️ TODO | | FR7.11 | Admin can impersonate users (for support) | WON'T HAVE | ❌ |
| ID | Requirement | Priority | Status | |----|-------------|----------|--------| | FR8.1 | Recruiter can view all applications | MUST | ✅ DONE | | FR8.2 | Recruiter can filter applications by status | MUST | ✅ DONE | | FR8.3 | Recruiter can filter applications by job | MUST | ✅ DONE | | FR8.4 | Recruiter can search applications | SHOULD | ✅ DONE | | FR8.5 | Recruiter can view application details | MUST | ✅ DONE | | FR8.6 | Recruiter can update application status | MUST | ✅ DONE | | FR8.7 | System sends email to candidate when status changes | MUST | ✅ DONE | | FR8.8 | Recruiter can add notes to applications | MUST | ✅ DONE | | FR8.9 | Recruiter can bulk update application statuses | SHOULD | ✅ DONE | | FR8.10 | Recruiter can download candidate CV | MUST | ⚠️ PARTIAL | | FR8.11 | Recruiter can export applications to CSV | COULD | ⚠️ TODO | | FR8.12 | Recruiter can assign applications to team members | COULD | ⚠️ TODO |
| ID | Requirement | Priority | Status | |----|-------------|----------|--------| | FR9.1 | User can browse career articles | SHOULD | ✅ DONE | | FR9.2 | User can view article details | SHOULD | ✅ DONE | | FR9.3 | User can search articles | SHOULD | ✅ DONE | | FR9.4 | User can filter articles by category | SHOULD | ✅ DONE | | FR9.5 | User can rate articles (1-5 stars) | SHOULD | ✅ DONE | | FR9.6 | User can bookmark articles | SHOULD | ✅ DONE | | FR9.7 | System shows estimated reading time | SHOULD | ✅ DONE | | FR9.8 | System shows view count | SHOULD | ✅ DONE | | FR9.9 | System shows related articles | SHOULD | ✅ DONE | | FR9.10 | Admin can create/edit/delete articles | SHOULD | ✅ DONE | | FR9.11 | Admin can publish/unpublish articles | SHOULD | ✅ DONE | | FR9.12 | Articles support SEO optimization | SHOULD | ✅ DONE |
| ID | Requirement | Priority | Status | |----|-------------|----------|--------| | FR10.1 | System sends welcome email after registration | MUST | ✅ DONE | | FR10.2 | System sends email verification link | MUST | ✅ DONE | | FR10.3 | System sends password reset emails | MUST | ✅ DONE | | FR10.4 | System sends application confirmation emails | MUST | ✅ DONE | | FR10.5 | System sends application status update emails | MUST | ✅ DONE | | FR10.6 | System sends CV generation complete emails | SHOULD | ✅ DONE | | FR10.7 | Emails are HTML-formatted with branding | SHOULD | ✅ DONE | | FR10.8 | Emails include relevant action links | MUST | ✅ DONE | | FR10.9 | Email sending is asynchronous (non-blocking) | MUST | ✅ DONE | | FR10.10 | Failed emails are logged | MUST | ✅ DONE | | FR10.11 | Users can unsubscribe from emails | COULD | ⚠️ TODO | | FR10.12 | Admin can customize email templates | COULD | ⚠️ TODO |
| ID | Requirement | Priority | Status | |----|-------------|----------|--------| | NFR1.1 | Job list page loads in < 2 seconds | MUST | ✅ DONE | | NFR1.2 | Search results return in < 1 second | MUST | ✅ DONE | | NFR1.3 | PDF generation completes in < 5 seconds | MUST | ✅ DONE | | NFR1.4 | API response time < 500ms (95th percentile) | SHOULD | ⚠️ NEEDS TESTING | | NFR1.5 | Support 1000 concurrent users | SHOULD | ⚠️ NEEDS TESTING | | NFR1.6 | Database queries optimized with indexing | MUST | ✅ DONE | | NFR1.7 | Caching implemented for frequently accessed data | SHOULD | ✅ DONE |
| ID | Requirement | Priority | Status | |----|-------------|----------|--------| | NFR2.1 | All passwords encrypted with BCrypt | MUST | ✅ DONE | | NFR2.2 | JWT tokens expire after 24 hours | MUST | ✅ DONE | | NFR2.3 | Refresh tokens expire after 7 days | MUST | ✅ DONE | | NFR2.4 | Password must be 8+ characters | MUST | ✅ DONE | | NFR2.5 | Password breach checking enabled | MUST | ✅ DONE | | NFR2.6 | HTTPS enforced in production | MUST | ⚠️ PRODUCTION | | NFR2.7 | CORS properly configured | MUST | ✅ DONE | | NFR2.8 | SQL injection prevention | MUST | ✅ DONE | | NFR2.9 | XSS prevention | MUST | ✅ DONE | | NFR2.10 | Rate limiting to prevent DDoS | SHOULD | ✅ DONE | | NFR2.11 | Regular security audits | SHOULD | ⚠️ TODO | | NFR2.12 | Dependency vulnerability scanning | SHOULD | ✅ DONE |
| ID | Requirement | Priority | Status | |----|-------------|----------|--------| | NFR3.1 | Platform is mobile-responsive | MUST | ✅ DONE | | NFR3.2 | Forms have clear validation messages | MUST | ✅ DONE | | NFR3.3 | Loading states shown for async operations | MUST | ✅ DONE | | NFR3.4 | Error messages are user-friendly | MUST | ✅ DONE | | NFR3.5 | Success confirmations shown | MUST | ✅ DONE | | NFR3.6 | Platform supports Dutch language | MUST | ✅ DONE | | NFR3.7 | Platform supports English language | COULD | ⚠️ TODO | | NFR3.8 | Keyboard navigation supported | SHOULD | ⚠️ PARTIAL | | NFR3.9 | WCAG 2.1 AA accessibility | SHOULD | ⚠️ TODO |
| ID | Requirement | Priority | Status | |----|-------------|----------|--------| | NFR4.1 | System uptime > 99% | MUST | ⚠️ PRODUCTION | | NFR4.2 | Automated database backups daily | MUST | ⚠️ PRODUCTION | | NFR4.3 | Error logging and monitoring | MUST | ✅ DONE | | NFR4.4 | Health check endpoints | MUST | ✅ DONE | | NFR4.5 | Graceful degradation on service failures | SHOULD | ⚠️ PARTIAL | | NFR4.6 | Email service fallback if primary fails | SHOULD | ⚠️ TODO |
| ID | Requirement | Priority | Status | |----|-------------|----------|--------| | NFR5.1 | Stateless backend for horizontal scaling | MUST | ✅ DONE | | NFR5.2 | Database connection pooling | MUST | ✅ DONE | | NFR5.3 | Caching layer (Redis/Caffeine) | SHOULD | ✅ DONE | | NFR5.4 | CDN for static assets | SHOULD | ⚠️ PRODUCTION | | NFR5.5 | Load balancing ready | SHOULD | ✅ DONE |
| ID | Requirement | Priority | Status | |----|-------------|----------|--------| | NFR6.1 | Code coverage > 70% | SHOULD | ✅ DONE | | NFR6.2 | Code style guide enforced (Checkstyle) | MUST | ✅ DONE | | NFR6.3 | API documentation (Swagger/OpenAPI) | MUST | ✅ DONE | | NFR6.4 | Inline code documentation | SHOULD | ✅ DONE | | NFR6.5 | README files for setup | MUST | ⚠️ PARTIAL | | NFR6.6 | Architecture documentation | SHOULD | ⚠️ TODO |
Document Status: ✅ Complete Last Updated: October 26, 2025 Maintained By: GloryLabs Development Team Contact: support@glorylabs.nl
© 2025 InterimPlaza - Developed by GloryLabs Part of Mahmoud Consultancy B.V.
Reacties