LWS Job Portal gives job seekers a powerful, fast discovery experience from the moment they land on the home page. A full-width search bar sits above a rich filter panel, and as you type or adjust any filter, results refresh automatically — no page reloads required. Matching jobs stream in as cards, and scrolling toward the bottom of the list loads the next batch seamlessly, letting you browse hundreds of opportunities without ever leaving the page.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/iDevRanjan/lws-ra-b4-assignment-five/llms.txt
Use this file to discover all available pages before exploring further.
Home Page Job Discovery
The home page (/) is the central hub for browsing open positions. It combines a hero banner, a search-and-filter toolbar, a live results count header, and an infinite-scroll grid of job cards. The page is powered by React Query’s useInfiniteQuery, which fetches one page of results at a time and appends more pages to the list as you request them.
Search & Filter Jobs
Use keywords and filters to narrow down the jobs that matter to you.
View Your Applications
Track every application you have submitted and monitor status updates.
Search Bar with Debounced Input
The search input accepts any keyword — job title, company name, skill, or location. Rather than firing an API call on every keystroke, theuseDebounce hook delays the network request by 300 ms after you stop typing. This prevents excessive requests and makes the experience feel smooth even on slow connections.
JobSearchAndFilter:
Filter Options
Below the search bar, the filter panel exposes five independent dropdowns. Each filter updates the query-string parameters, which are picked up byuseInfiniteQuery and used to fetch a fresh, filtered page of results.
Category
Narrow results to a specific department or functional area.| Label | Value |
|---|---|
| Engineering | Engineering |
| Design | Design |
| Product | Product |
| Marketing | Marketing |
| Sales | Sales |
| HR | HR |
| Finance | Finance |
| Other | Other |
Job Type (Employment Type)
Filter by how the position is structured.| Label | Value |
|---|---|
| Full time | Full-time |
| Part time | Part-time |
| Contract | Contract |
| Freelance | Freelance |
| Internship | Internship |
| Temporary | Temporary |
Work Mode
Filter by where the work takes place.| Label | Value |
|---|---|
| Remote | Remote |
| On-site | On-site |
| Hybrid | Hybrid |
Salary Range
Filter by expected annual compensation.| Label | Value |
|---|---|
| 50k | 0 - 50000 |
| 100k | 50000 - 100000 |
| 150k | 100000 - 150000 |
| $150k+ | 150000 |
Skills
Filter jobs that require a specific skill. The predefined skill options available in the portal are:| Skill |
|---|
| React |
| Node.js |
| Python |
| TypeScript |
The skills filter matches against the skills array stored on each job listing. A job is returned if any of the listed skills match your selected filter value.
Infinite Scroll
The home page fetches jobs one page at a time usinguseInfiniteQuery. When you reach the bottom of the current results, a Load More button appears (or the next page loads automatically) — the new batch is appended without clearing the existing cards.
fetchNextPageis called when you click Load More or reach the scroll threshold.hasNextPageisfalsewhen the last page returned an emptydataarray, hiding the Load More control automatically.- When you change any filter or search term, the query key changes and the list resets to page 1, showing only relevant results from the start.
Job Cards
Every job in the grid is rendered as a card that surfaces the most important details at a glance:Job Title & Company
The role name and the hiring company are shown prominently at the top of each card.
Location & Work Mode
Where the job is based and whether it is Remote, On-site, or Hybrid.
Employment Type & Salary
Full-time, Part-time, Contract, Freelance, Internship, or Temporary — plus the salary range.
Required Skills
A tag list of the skills the employer is looking for, so you can judge fit at a glance.
/jobs/:jobSlug for the full job details.
Job Details Page
The job details page (/jobs/:jobSlug) is fetched via GET /api/jobs/:jobSlug and is laid out in a two-column grid — the main content on the left and an action sidebar on the right.
Main Content Sections
Job Header
Job Header
Displays the job title, hiring company name, office location, and employment type badge. The company logo is shown alongside the header information.
Job Overview
Job Overview
A quick-reference panel showing:
- Number of vacancies available
- Experience level required (e.g., Entry, Mid, Senior)
- Application deadline — the date after which applications are no longer accepted
Job Description
Job Description
The full, formatted description written by the employer. This section covers the day-to-day responsibilities, team context, and any additional information about the role.
Required Skills
Required Skills
A tag cloud of skills the employer expects. Skills are stored as a string array on the job object and rendered as individual badges.
Similar Jobs
Similar Jobs
A list of jobs with related attributes, fetched from
GET /api/jobs/:id/similar. This section appears below the main job content and helps you discover comparable opportunities without returning to the home page.Sidebar Sections
The right-hand sidebar contains:- Apply Now button (or Applied / Withdraw if you have already applied)
- Company Info — a brief overview of the hiring company
- Share Job — links to share the listing
- Report this job — a flag button for inappropriate listings
Applying for a Job
Open the Job Details Page
From the home page, click on any job card. You will be taken to
/jobs/:jobSlug where you can read the full description, requirements, and company information before deciding to apply.Click Apply Now
In the right-hand sidebar, click the Apply Now button. If you are not logged in as a job seeker (role:
USER), the portal will display a toast notification and redirect you to /login before proceeding.Write Your Cover Letter
The Apply for Position dialog opens. Review your resume details displayed at the top — the portal uses the resume already uploaded to your profile. Then write a cover message (up to 500 characters) explaining why you are a great fit for the role. The character counter turns orange below 50 characters remaining and red below 10.
Submit the Application
Click Submit Application. The form data is sent to the API:On success, a toast notification confirms the submission and React Query invalidates the applications cache so status updates appear immediately.
Only authenticated users with the
USER role (job seekers) can apply for jobs. Company accounts (COMPANY role) do not see the Apply Now button.Recommended Jobs
When you are logged in as a job seeker, the dashboard (/jobseeker-dashboard) surfaces a Recommended for You section. Recommendations are personalised based on your profile skills and experience level and are fetched from: