Athena — mahmoud-consultancy/requirements/requirements-moscow.md

InterimPlaza Requirements - MoSCoW Analysis

IT Recruitment Platform - GloryLabs Project: Mahmoud Consultancy B.V. Document Version: 1.0 Date: October 26, 2025


Table of Contents

  1. Executive Summary
  2. MoSCoW Requirements
  3. Functional Requirements
  4. Non-Functional Requirements
  5. Technical Requirements
  6. Implementation Status

Executive Summary

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)


MoSCoW Requirements

MUST HAVE (Critical - Cannot Launch Without)

M1: User Authentication & Account Management

  • M1.1 - User registration with email verification
  • M1.2 - Secure login with JWT authentication
  • M1.3 - Password reset functionality (forgot password flow)
  • M1.4 - Password breach checking (HaveIBeenPwned integration)
  • M1.5 - Email verification for new accounts
  • M1.6 - Profile management (view/edit personal information)
  • M1.7 - Role-based access control (USER, RECRUITER, ADMIN)

Business Rationale: Security and user trust are fundamental. Password breach checking prevents account compromises.


M2: Job Search & Browsing

  • M2.1 - Browse active job postings with pagination
  • M2.2 - View detailed job descriptions
  • M2.3 - Search jobs by keyword
  • M2.4 - Filter jobs by:
    • Location/Region (Dutch provinces)
    • Job type (Full-time, Part-time, Contract, Freelance)
    • Experience level (Junior, Mid-level, Senior)
    • Category
  • M2.5 - Sort jobs by date, relevance, salary
  • M2.6 - Mobile-responsive job listings

Business Rationale: Core value proposition - job seekers must be able to find relevant positions easily.


M3: Job Application System

  • M3.1 - Submit job applications with cover letter
  • M3.2 - CV file upload with application
  • M3.3 - View all personal applications
  • M3.4 - Track application status
  • M3.5 - Application status transitions (NEW → SUBMITTED → UNDER_REVIEW → INTERVIEW → OFFERED → ACCEPTED/REJECTED)
  • M3.6 - Withdraw application capability
  • M3.7 - Email confirmation on application submission

Business Rationale: Core business process - without applications, platform has no value.


M4: CV Builder (Professional CV Creation)

  • M4.1 - Multi-step CV builder wizard (7 steps)
  • M4.2 - Personal information step (name, contact, address)
  • M4.3 - Professional summary step
  • M4.4 - Work experience step (multiple entries with add/edit/delete)
  • M4.5 - Education step (multiple entries with add/edit/delete)
  • M4.6 - Skills step (categorized skills with proficiency levels)
  • M4.7 - Additional info step (languages, certifications, projects, publications, references)
  • M4.8 - CV preview and PDF generation
  • M4.9 - Save CV draft (auto-save)
  • M4.10 - Download CV as PDF
  • M4.11 - Multiple CV profiles per user
  • M4.12 - Set default CV profile
  • M4.13 - Form validation with error messages

Business Rationale: Major differentiator - integrated CV builder adds significant value and reduces friction for job seekers.


M5: Admin Dashboard (For Recruiters & Platform Admins)

  • M5.1 - Dashboard overview with key metrics
    • Total users, jobs, applications
    • Active jobs count
    • Pending applications count
    • New users this month
  • M5.2 - User management panel
    • List all users with pagination
    • Search users by name/email
    • Edit user roles (USER/RECRUITER/ADMIN)
    • Activate/deactivate accounts
    • Delete users (soft delete)
  • M5.3 - Application management panel
    • View all applications with filters
    • Update application status
    • Add notes to applications
    • Bulk status updates
    • Trigger email notifications
  • M5.4 - CV profile management
    • View all user CVs
    • Download CVs as PDF
    • Search CV profiles
  • ⚠️ M5.5 - Job posting management (partially implemented - reuse existing JobController)

Business Rationale: Essential for platform operations - recruiters need tools to manage candidates efficiently.


M6: Email Notification System

  • M6.1 - Welcome email after registration
  • M6.2 - Email verification emails
  • M6.3 - Password reset emails
  • M6.4 - Application confirmation emails
  • M6.5 - Application status update emails (color-coded by status)
  • M6.6 - CV generation complete notifications
  • M6.7 - HTML email templates with branding
  • M6.8 - Asynchronous email sending (@Async)
  • M6.9 - Email error handling and logging

Business Rationale: Critical for user engagement and communication - keeps candidates informed throughout the process.


SHOULD HAVE (Important - Add Significant Value)

S1: Knowledge Base & Career Resources

  • S1.1 - Browse career articles
  • S1.2 - Search articles by keyword
  • S1.3 - Filter articles by category
  • S1.4 - View article details with rich content
  • S1.5 - Rate articles (1-5 stars with comments)
  • S1.6 - Bookmark articles for later reading
  • S1.7 - View popular/trending articles
  • S1.8 - View related articles recommendations
  • S1.9 - Admin article management (create/edit/delete/publish)
  • S1.10 - Article SEO optimization (meta description, keywords)
  • S1.11 - View count tracking
  • S1.12 - Estimated reading time calculation

Business Rationale: Positions InterimPlaza as a career resource hub, not just a job board. Increases user engagement and retention.


S2: Automated Job Scraping (Multi-Source Aggregation)

  • S2.1 - Firecrawl API integration for job scraping
  • S2.2 - Flextender platform scraping implementation (Dutch job board)
  • ⚠️ S2.3 - Enable Flextender scraping with credentials PENDING - HIGH PRIORITY
  • S2.4 - Scheduled automatic job import (every 6 hours)
  • S2.5 - Manual crawl trigger for admins
  • S2.6 - Crawl job status tracking
  • S2.7 - Crawl history logging
  • S2.8 - Error handling for failed scrapes
  • ⚠️ S2.9 - Extract complete 87-source list from Sentior PENDING - HIGH PRIORITY
  • ⚠️ S2.10 - Create JobSource entity for source management PENDING
  • ⚠️ S2.11 - Implement generic SourceScraper architecture PENDING
  • ⚠️ S2.12 - Implement top 10 DAS source scrapers PENDING
  • ⚠️ S2.13 - Implement 10+ job board scrapers (Indeed, LinkedIn, Monster, etc.) PENDING
  • ⚠️ S2.14 - Source health monitoring and alerting PENDING
  • ⚠️ S2.15 - Duplicate job detection across sources PENDING

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:

  • ✅ Infrastructure ready (Flextender + Firecrawl)
  • ⚠️ Flextender disabled (needs credentials)
  • ⚠️ Only 1/87 sources active
  • Goal: 15 sources by end of Sprint 7, 50+ sources by Sprint 8, all 87 by Sprint 9

S3: Advanced Search & Filtering

  • S3.1 - Multi-criteria job search
  • S3.2 - Filters: Location, Job Type, Experience Level, Category
  • S3.3 - Dynamic filter options (auto-populated from database)
  • S3.4 - Search results pagination
  • S3.5 - Saved searches (frontend localStorage)
  • ⚠️ S3.6 - Advanced CV/candidate search for recruiters (TODO)
  • ⚠️ S3.7 - Fuzzy matching / typo tolerance (TODO)

Business Rationale: Enhanced discoverability improves user experience and job match quality.


S4: Application Tracking & Status Management

  • S4.1 - Detailed application status workflow
  • S4.2 - Application status timeline visualization (frontend)
  • S4.3 - Email notifications on status changes
  • S4.4 - Recruiter notes on applications
  • S4.5 - Bulk application status updates
  • ⚠️ S4.6 - Application history/audit log (TODO)

Business Rationale: Transparency builds trust with candidates and improves recruiter efficiency.


S5: Analytics & Reporting

  • S5.1 - Dashboard statistics (users, jobs, applications)
  • S5.2 - Application status breakdown
  • ⚠️ S5.3 - Monthly application trends (PARTIALLY IMPLEMENTED)
  • ⚠️ S5.4 - Top performing jobs ranking (PARTIALLY IMPLEMENTED)
  • ⚠️ S5.5 - User engagement metrics (TODO)
  • ⚠️ S5.6 - Conversion funnel analytics (TODO)
  • ⚠️ S5.7 - Export reports as CSV/Excel (TODO)

Business Rationale: Data-driven decision making for recruiters and platform optimization.


COULD HAVE (Nice to Have - Enhance Experience)

C1: Social Features

  • ⚠️ C1.1 - Share job postings on social media (TODO)
  • ⚠️ C1.2 - Share CV profiles (TODO)
  • ⚠️ C1.3 - Candidate profile recommendations (TODO)
  • ⚠️ C1.4 - Company profile pages (TODO)
  • ⚠️ C1.5 - Recruiter profiles (TODO)

Business Rationale: Increases viral growth and platform visibility.


C2: Advanced CV Features

  • ⚠️ C2.1 - Multiple CV templates (classic, modern, creative) - Framework exists, needs UI
  • ⚠️ C2.2 - CV color scheme customization - Framework exists, needs UI
  • ⚠️ C2.3 - Export CV to Word/DOCX format (TODO)
  • ⚠️ C2.4 - CV version history (TODO)
  • ⚠️ C2.5 - AI-powered CV improvement suggestions (TODO)
  • ⚠️ C2.6 - CV completeness score (TODO)

Business Rationale: Premium features for CV builder differentiation.


C3: Communication Features

  • ⚠️ C3.1 - In-app messaging between recruiters and candidates (TODO)
  • ⚠️ C3.2 - Interview scheduling system (TODO)
  • ⚠️ C3.3 - Video interview integration (TODO)
  • ⚠️ C3.4 - Candidate notes for recruiters (TODO - basic version exists as admin notes)
  • ⚠️ C3.5 - Email templates customization for recruiters (TODO)

Business Rationale: Streamlines communication but not critical for MVP.


C4: Advanced Admin Features

  • ⚠️ C4.1 - User activity logs (audit trail) (TODO)
  • ⚠️ C4.2 - Advanced analytics dashboard (TODO)
  • ⚠️ C4.3 - Custom report builder (TODO)
  • ⚠️ C4.4 - Data export tools (CSV/Excel) (TODO)
  • ⚠️ C4.5 - Bulk operations (delete, archive) - Basic version exists
  • ⚠️ C4.6 - Email campaign management (TODO)

Business Rationale: Admin convenience features - nice to have but not essential.


C5: Internationalization & Localization

  • ⚠️ C5.1 - Dutch language support (PARTIALLY IMPLEMENTED - UI is Dutch, backend messages mixed)
  • ⚠️ C5.2 - English language toggle (TODO)
  • ⚠️ C5.3 - Multi-language article support (TODO)
  • ⚠️ C5.4 - Currency formatting (EUR) (TODO)
  • ⚠️ C5.5 - Date/time localization (PARTIALLY IMPLEMENTED)

Business Rationale: Expands market reach but not essential for Netherlands-only launch.


C6: Gamification & Engagement

  • ⚠️ C6.1 - Profile completion progress bar (TODO)
  • ⚠️ C6.2 - Achievement badges for users (TODO)
  • ⚠️ C6.3 - Leaderboards for top candidates (TODO)
  • ⚠️ C6.4 - Referral program (TODO)
  • ⚠️ C6.5 - Job alerts and saved searches (TODO)

Business Rationale: Increases engagement but not critical for initial launch.


SHOULD HAVE - AI Candidate Funnel NEW - STRATEGIC PRIORITY

S6: AI-Powered Candidate Funnel

  • ⚠️ S6.1 - Automatic CV parsing (PDF, DOCX) PENDING
  • ⚠️ S6.2 - AI skill extraction from CVs PENDING
  • ⚠️ S6.3 - Multi-factor candidate-job matching algorithm PENDING
  • ⚠️ S6.4 - Candidate scoring system (0-100% match) PENDING
  • ⚠️ S6.5 - Automatic candidate ranking per job PENDING
  • ⚠️ S6.6 - AI funnel dashboard for recruiters PENDING
  • ⚠️ S6.7 - Conversion funnel tracking (application → hire) PENDING
  • ⚠️ S6.8 - A/B testing for algorithm optimization PENDING
  • ⚠️ S6.9 - Explainable AI (show match reasoning) PENDING

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:

  • Sprint 8-9: CV parsing and matching algorithm (Weeks 15-18)
  • Sprint 10: Full funnel dashboard and analytics (Weeks 19-20)

Technical Approach:

  • Use Apache PDFBox and POI for CV text extraction
  • Implement rule-based skill extraction (keywords + patterns)
  • Multi-factor matching: Skills (50%) + Experience (20%) + Location (15%) + Education (15%)
  • Store in CandidateProfile entity for fast matching

WON'T HAVE (Explicitly Out of Scope for Current Release)

W1: Advanced AI/ML Features (Deferred to Phase 3)

  • W1.1 - Deep learning-based CV parsing (requires training data)
  • W1.2 - Predictive analytics for hiring success (requires historical data)
  • W1.3 - Chatbot for candidate support (NLP infrastructure needed)
  • W1.4 - Natural language job search (complex NLP required)
  • W1.5 - Sentiment analysis of cover letters

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.


W2: Video & Rich Media

  • W2.1 - Video CV support
  • W2.2 - Video interviews
  • W2.3 - Virtual job fairs
  • W2.4 - Live streaming events
  • W2.5 - Company video profiles

Rationale: Requires video hosting infrastructure, bandwidth, and storage. Not essential for core recruitment flow.


W3: Payment Processing

  • W3.1 - Premium job posting fees
  • W3.2 - Featured job upgrades
  • W3.3 - Subscription plans for recruiters
  • W3.4 - Payment gateway integration (Stripe/Mollie)
  • W3.5 - Invoice generation

Rationale: Business model focused on free platform initially. Monetization in Phase 2.


W4: Mobile Native Apps

  • W4.1 - iOS native app
  • W4.2 - Android native app
  • W4.3 - Push notifications (mobile)
  • W4.4 - Offline mode
  • W4.5 - Biometric authentication (mobile)

Rationale: Responsive web app provides sufficient mobile experience. Native apps require separate development team.


W5: Advanced Integrations

  • W5.1 - LinkedIn profile import
  • W5.2 - Indeed/Glassdoor API integration
  • W5.3 - Calendar integration (Google/Outlook)
  • W5.4 - Slack notifications for recruiters
  • W5.5 - ATS (Applicant Tracking System) integrations

Rationale: These require enterprise partnerships and API approvals. Defer to future phases.



Functional Requirements

FR1: User Management

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


FR2: Job Posting Management

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


FR3: Job Search & Discovery

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


FR4: Application Submission & Tracking

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


FR5: CV Builder Functionality

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


FR6: Admin Dashboard

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


FR7: User Management (Admin)

| 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 | ❌ |


FR8: Application Management (Admin/Recruiter)

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


FR9: Knowledge Base

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


FR10: Email Notifications

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



Non-Functional Requirements

NFR1: Performance

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


NFR2: Security

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


NFR3: Usability

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


NFR4: Reliability & Availability

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


NFR5: Scalability

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


NFR6: Maintainability

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



Technical Requirements

Backend (Java Spring Boot)

  • ✅ Java 17 or higher
  • ✅ Spring Boot 3.3.5
  • ✅ Spring Security for authentication
  • ✅ Spring Data JPA for database access
  • ✅ PostgreSQL database (production)
  • ✅ H2 database (testing)
  • ✅ Maven for build management
  • ✅ JUnit for testing
  • ✅ iText 7 for PDF generation
  • ✅ Thymeleaf for email templates
  • ✅ Jackson for JSON serialization
  • ✅ Lombok for boilerplate reduction
  • ✅ SpringDoc for API documentation

Frontend (Angular)

  • ✅ Angular 18+ (standalone components)
  • ✅ TypeScript 5+
  • ✅ RxJS for reactive programming
  • ✅ Angular Router for navigation
  • ✅ Angular Forms (reactive forms)
  • ✅ Angular HTTP Client
  • ✅ Node.js 18+ for build
  • ✅ npm for package management

Infrastructure

  • ⚠️ Docker for containerization (exists)
  • ⚠️ Kubernetes for orchestration (Helm charts exist)
  • ⚠️ Nginx for web server (config exists)
  • ⚠️ Redis for caching (config exists)
  • ⚠️ Prometheus for monitoring (config exists)
  • ⚠️ CI/CD pipeline (TODO)


Implementation Status

✅ COMPLETED (95%)

  1. User Authentication & Authorization
  2. Job Posting, Search & Discovery
  3. Job Application System
  4. CV Builder (7-step wizard with full validation)
  5. Email Notification System (6 email types)
  6. Knowledge Base & Articles
  7. Admin Dashboard (statistics, user management, application management)
  8. PDF Generation
  9. Password Breach Checking
  10. Automated Job Scraping
  11. API Documentation (Swagger)

⚠️ PARTIALLY IMPLEMENTED (3%)

  1. Monthly application analytics (endpoint exists, needs query implementation)
  2. Top jobs ranking (endpoint exists, needs query implementation)
  3. CV template selection UI (backend supports, frontend incomplete)
  4. File upload for CV in applications (framework exists, needs testing)

⚠️ TODO (2%)

  1. Advanced search with fuzzy matching
  2. User activity audit logs
  3. Data export (CSV/Excel)
  4. Email preferences management
  5. Job alerts/notifications
  6. Account deletion (GDPR)
  7. Production monitoring integration (Sentry)
  8. Analytics integration (Google Analytics)

Next Steps

  1. Complete Monthly Analytics - Implement date-based grouping queries
  2. Complete Top Jobs Ranking - Add application count joins
  3. Finish CV Template UI - Enable template selection in frontend
  4. End-to-End Testing - Full user journey testing
  5. Production Deployment - Deploy to production environment
  6. Performance Testing - Load testing with realistic data
  7. Security Audit - Third-party security review
  8. User Acceptance Testing - Test with real recruiters

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

Nog geen reacties