Now replacing the logic exactly as specified:
Let's confirm the sidebar's "Experience Required" row is untouched:
Confirmed unchanged — still uses raw `job.experience_years` for the visible sidebar row. Now running the checks.
Both pass. Now computing the exact `monthsOfExperience` for all five test inputs using the real function:
## Done — both checks pass
**`npx tsc --noEmit`** — clean, exit code 0.
**`npm run build`** — succeeded, exit code 0, same 135-page route table.
### Change in [app/job/[slug]/page.tsx](app/job/%5Bslug%5D/page.tsx)
- `parseExperienceMonths()` added near the top, outside the component, alongside `EMPLOYMENT_TYPE_MAP`
- `experienceMonths` computed exactly as specified
- JSON-LD now emits the structured `OccupationalExperienceRequirements` object with `monthsOfExperience` only when `experienceMonths !== null`
- Confirmed the sidebar's "Experience Required" row still reads `job.experience_years` directly — unaffected by this change
### Requested test values (`monthsOfExperience`)
| `experience_years` input | Output |
|---|---|
| `"5"` | `60` |
| `"2 Years"` | `24` |
| `"No experience"` | `0` |
| `"10+ years"` | `120` |
| `""` / `null` | `null` → field omitted entirely |
Not committed/pushed yet — let me know when you want that.
Full-TimeMarketing5 years
📍 deira, sharjah16 Sept 2026