Skip to content

Epic 02: Job Request Viewing, Drafting and Posting

Overview

The Job Request Viewing, Drafting and Posting Epic defines and implements functionality for enabling client companies to create, manage, and publish job vacancies to attract flexworkers. This epic serves as the core recruitment interface, allowing clients to efficiently post job opportunities with detailed requirements, manage draft versions, and leverage AI assistance for creating compelling job descriptions. This Epic supports the entire job posting lifecycle from initial creation through publication and archival. It provides tools for managing job visibility, setting requirements, and maintaining consistency through templates and CAO-based defaults.

Business Value

  • To reduce time-to-post through auto-save functionality and reusable templates
  • To ensure compliance with CAO requirements through automated prefills and validation
  • To maintain operational efficiency with organized job status management
  • To improve job quality and attractiveness through AI-generated descriptions
  • To streamline the job posting process with intuitive forms and AI-powered assistance By delivering a comprehensive job management system, this Epic contributes to faster vacancy fulfillment, improved candidate attraction, and reduced administrative overhead.

Solution Concept

To support effective recruitment, the system must provide an intuitive job posting interface. Users should be able to create jobs quickly using templates or from scratch, leverage AI for compelling descriptions, and manage multiple job statuses efficiently. The solution should guide users through required fields, automatically save progress, and integrate with CAO data for compliance. Job visibility controls and status management should be clear and accessible.

Features and User Stories

2.1 Jobs List View (не MVP)

User Story:

As a client user I want to view all my job postings organized by status So that I can manage active vacancies, continue working on drafts, and reference archived positions

Описание: The Jobs List View serves as the central hub for job management, displaying all job postings with filtering and search capabilities. UI Structure: Based on Figma designs , the page contains: Header Section Company/Location identifier (e.g., "LogiTech Warehouse") User profile section with name and role Search bar for quick navigation Notification bell icon Ask Cruits AI button Top Section Page title: "Jobs" Descriptive text “Central hub for job management” "Create New Job" button (primary action) Metrics Cards (info cards) Total Unprocessed Applications (would be ”19" in our case) Total Filled Positions (sum of filled positions of all jobs) Total Open Positions (total throughout of all jobs, “60" for the screen above) Tab Navigation Active - shows published jobs Draft - shows unpublished drafts Archived - shows closed/archived jobs Filter Controls Search by Job Position Status filter (Active / Draft / Archived) Data Table for Active Jobs Job ID Job Position - job common name (changed on Jan 22nd due to new field available) Location Start Date Filled positions (count) Open positions (count) Applications (count) Unprocessed (count) Declines (Rejected) (count) Actions menu button Data Table for Draft Jobs Job ID Job Position - job common name (changed on Jan 22nd due to new field available) Location Start Date End Date Saved Date & Time (timestamp) Actions menu button Data Table for Archived Jobs Job ID Job Position - job common name (changed on Jan 22nd due to new field available) Location Start Date Filled positions (count) Actions menu button Actions Menu Options: "Edit", "Archive", "Use as a draft" for Active Jobs "Restore", "Delete", "Use as a Draft" for Archived Jobs "Edit", "Discard", "Publish" for Drafts

Критерии приёмки: - Table loads with pagination (default 10 rows) - Click on a line opens the Job Posting: - “Applications” tab for Active Jobs - “Job Details” tab Archived Jobs - “Edit Job Request” for Draft - Default sorting: - By Start Date (reverse chronological, from latest to oldest) - for Active and Archived Jobs - By Saved Date and Time (reverse chronological, from latest to oldest) - for Drafts - Search filters results in real-time - Tab counts reflect actual job numbers - Show full text (like location) over hower - Table can be sorted by every column (ascending / descending) - Status badges use consistent color coding - Archive confirmation dialog prevents accidental archival - Delete confirmation dialog prevents accidental entry deletion - Success toast after archiving and deletion: "Job archived / deleted successfully!" - Bulk actions are our of scope - Responsive design for mobile devices - not MVP

2.2 Create New Job Form

User Story:

As a client user I want to create job postings through a guided form So that I can provide all necessary information and attract qualified candidates

Описание: A comprehensive form for creating new job postings with validation and helpful guidance. Form Fields, based on Figma designs : Back to Jobs button New Job Request title with text description Add “All changes of any field are saved automatically” Basic Information Job ID (text field) Info text "Name a job request for easy identification, e.g. JOB2541, Forklift_1, or ASSIST-Rott-005. This won't be visible for candidates" Location (dropdown) - from Company Profile Job Role (dropdown) TMR-203: [FE] Swap Location and Job Role Dropdowns in Create New Job Form In Review Preview - from CAO related to the location chosen Position (dropdown) - from the list of job positions, sheet 4 Info text “The candidates will see this name while discovering jobs” Schedule Type (dropdown) If “Fixed Schedule” selected: Working days: weekday picker Block for each weekday selected Weekday name Start Time End Time (may be earlier than end time to allow crossing midnight) “Add block” button (add another time block for the very same day) “Copy to…” button (copy time slots to another weekday selected) If “Shift-based” selected: Number of Shifts per Day ( min 2 - max 4 ) Salesforce “Shifts” mapping: If Number of shifts == 2 → 2 == 3 → 3 >= 4 → 3+ Block for each shift from a value above Shift %i Start Time End Time (may be earlier than end time to allow crossing midnight) Working days (weekday picker) Total hour per week (%d, up to 60) with info “ ⓘ Not auto-calculated; enter contract hours” Start Date (date picker) with “Flexible Start Date” checkbox. If it is marked, nothing changes except matching engine will also consider flexworkers with availability within 2 weeks after job start date End Date (date picker) with “No End Date” checkbox. If it is marked, end date is open and this picker is ignored

Критерии приёмки: - Form validates all fields before submission - Invalidated fields are highlighted red if attempting to publish - Scroll up to the invalid field on publish attempt - nice to have - Date/time pickers prevent invalid selections - The draft is created once the “Create new Job” button is clicked - Success page shows after posting: "Job Posted Successfully! - It is now live and visible for flexworkers. - You’ll be notified when matching candidates apply"

2.1 (не MVP)

2.3 Draft Auto-Save

User Story:

As a client user I want my job draft to be saved automatically So that I don't lose progress if interrupted, if my session expires or if I click a back button

Описание: Automatic saving mechanism that prevents data loss during job creation. Implementation: The draft is created once the “Create new Job” button is clicked Drafts accessible from Draft tab Timestamp of last save displayed

Критерии приёмки: - Every field state is saved once the focus changed - "Draft saved" confirmation after successful save - Drafts retain all entered data - No data loss on browser refresh - Network error handling with retry

2.4 Publish/Unpublish Workflow

User Story:

As a client user I want to control when jobs are visible to candidates So that I can manage recruitment timing and pause applications when needed

Описание: Workflow for transitioning jobs between draft, active, and archived states. State Transitions : Draft → Active (Publish) Active → Draft (Unpublished with empty dates) Active → Archived (Archive) Archived → Active (Restore before job start date OR open a draft with empty dates after job start day) Archived → Draft (Unpublished with empty dates) Validation Rules: Form is validated once “Preview” or “Publish” button clicked Required fields must be complete for publishing Confirmation dialog for state changes

Критерии приёмки: - Field validation rules applied - Status changes reflect immediately in UI - Published jobs appear in flexworker search - Unpublished jobs hidden from candidates - Status history tracked with timestamps

2.5 CAO Prefill Integration

User Story:

As a client user I want job fields to prefill based on CAO selection So that I can ensure compliance and save time on data entry

Описание: Integration with MySolution CAO data to automatically get the options for the following dropdowns, as well as to populate fields, once Job Role is chosen. Prefilled data: Hourly Rate (decimal) Some other fields, like “Benefits Information”, to be defined later

Критерии приёмки: - CAO selection triggers immediate prefill - Prefilled data is not editable - Updates when CAO selection changes

2.6 Contact Person Section

User Story:

As a client user I want to add or select contact person details to job postings and reuse them across multiple jobs So that candidates know who to contact and I don't have to re-enter the same information repeatedly

Описание: A dedicated section within the job posting form that allows users to select \ add \ edit contact person information, with the ability to save and reuse contact persons across different job postings. Acceptance Criteria 1) Selection & Inline Card Dropdown: "Select contact" lists previously saved company contacts (Name). Includes typeahead (autocomplete) by name. Contacts = company-level entities; reusable across all jobs. Inline card: When a contact is selected, a card appears in the form showing: Avatar, Name, Position, Email, Phone. Edit button: If a contact is selected, a “Edit Contact” button appears on the card. Change selection: Changing the dropdown selection updates the card instantly. 2) Create / Edit Modal Modal Activation : Add New Contact → opens modal in Create mode (all fields are empty). Edit Contact → opens modal in Edit mode with prefilled fields. Fields (both modes): Avatar preview, (upload, delete buttons) Name (required) Position (nice to have) Email (required) Phone (required) Buttons: [ Save] , [ Cancel] . Close icon = cancel. On save, the contact becomes selected in the dropdown and the card updates accordingly, the modal window is closed. On Cancel - just close the modal window. Validation: Inline per field, Save disabled until required fields valid Avatar: jpg/png ≤ 2 MB; Name: non-empty; trims whitespace; Title selection ( nice to have ): optional. Email: valid email format; stored lowercase; Phone: digits, spaces, +, parentheses allowed.

Критерии приёмки: - 1) Selection & Inline Card - Dropdown: "Select contact" lists previously saved company contacts (Name). Includes typeahead (autocomplete) by name. - Contacts = company-level entities; reusable across all jobs. - Inline card: - When a contact is selected, a card appears in the form showing: - Avatar, - Position, - Email, - Phone. - Edit button: - If a contact is selected, a “Edit Contact” button appears on the card. - Change selection: - Changing the dropdown selection updates the card instantly. - 2) Create / Edit Modal - Modal Activation : - Add New Contact → opens modal in Create mode (all fields are empty). - Edit Contact → opens modal in Edit mode with prefilled fields. - Fields (both modes): - Avatar preview, (upload, delete buttons) - Name (required) - Position (nice to have) - Email (required) - Phone (required) - Buttons: [ Save] , [ Cancel] . Close icon = cancel. - On save, the contact becomes selected in the dropdown and the card updates accordingly, the modal window is closed. - On Cancel - just close the modal window. - Validation: - Inline per field, Save disabled until required fields valid - Avatar: jpg/png ≤ 2 MB; - Name: non-empty; trims whitespace; - Title selection ( nice to have ): optional. - Email: valid email format; stored lowercase; - Phone: digits, spaces, +, parentheses allowed.

2.7 Job Attachments

User Story:

As a client user I want to want to attach photos and videos to jobs So that the applicants can better understand the work environment

Описание: File upload system for adding supporting materials to job postings. Supported Files: Images: JPG, PNG Videos: MOV, MP4 Maximum 10 files per job posting 100 MB file size limit Upload Interface: Drag-and-drop zone Upload button fallback Progress indicators Preview thumbnails Delete option for each file

Критерии приёмки: - Files upload with progress bar - Validation for file type - Optimization and resizing for more efficient data storage - Error messages for invalid files - Uploaded files as thumbnails with delete / change order options - Files deleted from storage when job deleted

2.8 Matching Criteria Builder

User Story:

As a client user I want to specify requirements and their importance and see how many matching candidates there are So that candidate matching accurately reflects my needs, and I can adjust matching criteria to find enough flexworkers

Описание: Interface for defining job requirements with varying importance levels, with the matching suggestion info box that shows how many candidates may be a good fit for this role. Add Requirement dropdown: Language Skills Select Skill dropdown English Dutch German Polish Romanian Ukrainian Portuguese Czech Russian Slovakian Hungarian Select Level dropdown - mapped from Mysolution as percentage Basic Conversational Advanced Fluent Native Technical Requirements types: Technical Small Repairs Machine Maintenance Production Cutting Machine Operations Line Work Agriculture Harvesting Greenhouse Work Flower Sorting Soft Skills Physical Strength Communication Team Lead Logistics (De)palletizing Reachtruck Driving Forklift Driving (Un)loading Trucks Order Picking Packing Working Conditions Repetitive Work Standing for a Long Time High Temperatures Working on Height Physically Heavy Low Temperatures Select Skill dropdown: subtype list depending on type (see list above) Select Level dropdown Novice Basic Intermediate Advanced Certified Operator Importance Levels: Must have (mandatory) Important (strongly preferred) Nice to have (beneficial) UI Components: Add requirement button Requirement type dropdown Importance level slidebar “+” button in a criteria card to add another requirement of this language or technical skill Remove requirement button Visual indicators for importance (in color, nice to have) Matching suggestion: Text “%i candidates may meet your requirements” in a frame %i is the number of flexworker that satisfy at least 80% of “must have” criteria Must Have - workers who satisfy at least 80% of criteria Important and Nice to have - don’t affect the numbers of suitable candidates, but affect their ranking in “Candidates” list

Критерии приёмки: - Multiple requirements can be added - Each requirement has clear importance level - Visual hierarchy reflects importance - Requirements affect candidate matching - Validation prevents duplicate requirements

2.9 AI Job Description Assistant

User Story:

As a client user I want to use AI to generate job descriptions So that I can create compelling content quickly without starting from scratch

Описание: s So that I can create compelling content quickly without starting from scratch Feature Description: AI-powered assistant that generates contextual job descriptions based on job name and requirements. Functionality: Button triggers AI generation of job description within the text area AI considers: Job role Job Position Location Schedule type Any entered requirements Generated text appears right in the Job Description editor User can edit AI-generated content Technical Implementation: Integration with LLM API (GPT-4o-mini or Gemini Flash or similar) Context-aware prompts based on job type Response time < 3 seconds

Критерии приёмки: - AI generates relevant descriptions for common roles - Loading state during generation - Error handling for API failures - Character count displayed

2.10 Job Details Page (не MVP)

User Story:

As a client user I want to view complete job details and access management actions from a single page So that I can review job information and take quick actions without navigating to multiple screens

Описание: A comprehensive view page for individual job postings that displays all job information and provides quick access to management actions. UI Structure: Based on the design, the page contains: Header Section Back to Jobs Page link Job Role and Job ID as page header Status label (Active/Draft/Archived) to the right Date posted Filled Positions bar chart that shows hired/total position opened Action Buttons “Find More Candidates” button -> Matching Candidates List ( epic 3 ) Edit Job -> edit form Archive Job -> confirmation dialog Post Job Request (if it is a Preview) → job posting becomes visible for candidates Duplicate (for Active status only) → draft page with the same data but empty start & end dates Find More Candidates -> candidate matching (for Active status only) Job Information Display All fields from the job creation form in read-only format: Job ID Job Position Location Start Date / End Date Schedule type with details Hourly Rate Job description (full text) Contact person section with photo name and contact info Preview of photos/videos Matching Criteria list with importance levels

Критерии приёмки: - Page loads with all job details populated - Edit button opens a pre-filled job posting form with current data with empty dates - Archive button with confirmation dialog: "Are you sure you want to archive this job?" - Status-appropriate actions displayed (e.g., Publish for drafts, Archive for active) - “Find More Candidates” links to candidate search with job pre-selected ( epic 3 ) - Responsive layout maintains readability on different screen sizes - Navigation breadcrumbs show current location - Loading states for action buttons during processing - Technical Considerations - Performance Requirements - Form load time < 3 seconds - Auto-save on lost focus - Search/filter response < 1 second - Support for 1000+ jobs per company - Data Integration - Real-time sync with MySolution - Integration with AI service for descriptions - File storage service for attachments - Notification service for job status updates - Security & Access Control - Role-based permissions - not MVP - Company-scoped data isolation - Secure file upload with virus scanning - not MVP - Audit logging for all job modifications - Browser Compatibility - Edge (latest 2 versions) - Chrome (latest 2 versions) - Safari (latest 2 versions) - Mobile browsers (iOS Safari, Chrome Mobile) - not MVP - Related content - More info - g(p.length) css-6cu6fo" role=listitem> - Worker Registration and Onboarding - Worker Registration and Onboarding - Nadia Albul - g(p.length) css-6cu6fo" role=listitem> - Job Application, Offer and Placement - Job Application, Offer and Placement - Nadia Albul - g(p.length) css-6cu6fo" role=listitem> - Candidate Profile and Job Discovery - Candidate Profile and Job Discovery - Nadia Albul - g(p.length) css-6cu6fo" role=listitem> - Test Report: - Worker Registration and Onboardin (06/11/2025) - Test Report: - Worker Registration and Onboardin (06/11/2025) - Mykhailo Virych - g(p.length) css-6cu6fo" role=listitem> - Candidates Selection & Offer Sending - Candidates Selection & Offer Sending - Nadia Albul - g(p.length) css-6cu6fo" role=listitem> - Test Case (3: - Candidates Selection & Offer Sending) - Test Case (3: - Candidates Selection & Offer Sending) - Mykhailo Virych