Files
jobtrackingapp/docs/global-jobs/00/PRODUCT_REQUIREMENTS.md
T

7.1 KiB

Product requirements — proposed, GJ-00

28 October 2026. Authority: master prompt. Implementation remains gated by entry decisions.

Product scope and journeys

Discovery serves all occupations in Norway, Sweden and the United Kingdom initially. ISO country identifiers are NO, SE, GB; UI may display “UK”. Country availability and provider availability are separate. Unavailable sources cannot turn a country into a fabricated searchable inventory.

Journey Persisted choice and resulting behavior
New resident Optional residence NO; English UI; Norwegian/English adverts; choose NO work scope. Do not request nationality to enable search.
Multi-country mover Lives in NO, searches SE + GB; separate geographic branches OR together. Residence does not restrict results.
Returning jobseeker Recover defaults across devices; load named search, override a query temporarily, explicitly update defaults only on request.
No formal occupation Search free text such as “no experience”, “weekend work”, kitchen assistant or cleaner. No required taxonomy selection, skill inventory or CV upload.
Mixed jobs/shift work Search retail and care roles, part-time/evenings, multiple towns; unknown schedule fields remain unknown. Missing filters are disclosed per provider.
Regulated occupation Nurse/electrician matches show advertised credentials against explicit profile evidence; no claim of professional authorisation or eligibility.

Preference boundaries

SearchPreference holds optional residence, desired work countries (0..N), favourite location scopes, occupation interests, explicit skills references, work arrangements, advert languages and revision. Residence, nationality, home country and work countries are distinct; do not add compulsory demographic fields. UI locale stays in existing account preferences. CV and cover-letter languages remain document-specific.

Named SavedSearch profiles capture a versioned query, rather than a pointer to mutable defaults. Discovery initializes from defaults; filter edits change draft query state only. “Save search”, “Update this search” and “Update defaults” are explicit, different actions with revision checks. Empty preferences show a country-choice invitation and usable keyword search. Changing UI language never changes advert-language filters or document content.

Language selection and qualification

Current code supports en and nb UI dictionaries; API accepts en, normalizes nb/nb-NO/no to nb-NO, and rejects other locales. This is source-verified support, not fresh linguistic acceptance. Proposed locale registry uses BCP 47, native + English labels, coverage/QA status, fallback and regional relevance. Maintain compatibility for existing stored values; do not silently rewrite document languages.

English and applicable local languages appear prominently, combining residence, selected region/work countries and explicit user preference, with stable ordering and no duplicate choices. Other qualified UI languages go under More Languages. Unsupported relevant languages appear separately as Coming Later, without an enabled switch. English fallback must be visible if a requested locale is unavailable. Do not infer language from nationality.

Context Prominent language candidates Current qualification / next work
Norway English; Norsk bokmål — Norwegian Bokmål; Norsk nynorsk — Norwegian Nynorsk; relevant Sámi language choices by region EN/Bokmål implemented. Nynorsk and specific Sámi locales require translation and native review; no ESCO labels prove neither.
Sweden English; Svenska — Swedish; regionally relevant minority-language choices Swedish is a required target, currently unimplemented. Finnish, Meänkieli, Sámi, Romani and Yiddish need separate qualification, not generic “Swedish translation”.
GB / Wales English; Cymraeg — Welsh for Wales Welsh remains Coming Later until complete and reviewed.
GB / Scotland English; Gàidhlig — Scottish Gaelic; Scots Region-aware candidates, not currently supported switches.
GB / Northern Ireland English; relevant Irish/Ulster Scots candidates Confirm local language mapping/status and BCP 47 representation at GJ01-C; no inferred blanket UK official-language list.

Language-policy evidence accessed 2026-10-28: ISOF, Welsh Government, Scottish Government. These inform prominence; they do not certify translations or impose an assumed legal duty on Jobjakt. Norway/Sámi and Northern Ireland detailed regional mappings remain explicit GJ01-C qualification work.

New controls, validation, empty/error/help text, date/number/plural forms, accessible names and alert text require EN/Bokmål coverage. Swedish cannot be advertised as a supported UI until all shipped surfaces meet the approved coverage/native review gate; a “Swedish UI” acceptance journey stays blocked until then.

Discovery experience

Retain React Router and MUI ownership: desktop filter rail, results list, in-app details; tablet adaptive panes; mobile full-screen detail with return focus/filter state. A stable in-app details URL supports full-page expansion. Preserve country/role/language/location filters on navigation and saved-query recovery.

Details show permitted original description with completeness badge (full, truncated, metadata, link-only), original title, employer, location precision, source, posted/updated/retrieved/expiry timestamps and source/apply links. Structured pay retains amount/range/currency/period plus advertised versus predicted status; unknown is not zero. Show requirements, responsibilities, qualifications, shifts/hours, arrangement and contract only when supplied. Translation is separately labelled and never replaces original text or expands licensed content.

Saved vacancy does not mean applied. Track Application enters existing reviewed application workflow; CV/letter links reuse current owners and never trigger AI or submission. Source withdrawal hides restricted content without deleting user-authored notes/status. Source alternatives remain separate and attributed after conservative dedupe.

Loading, empty, partial coverage, unavailable, stale and expired states must differ. Never label external search links as integrated search. Filters unsupported by a provider must either be applied exactly to authorised data or show the coverage exclusion; silently ignoring them is unacceptable.

Requirement ownership

Preferences/language GJ-01; hierarchy/radius GJ-02; universal terms GJ-03; rights/source lifecycle/dedupe GJ-04; panels/details/actions GJ-05; alerts/skills/tracking GJ-06; admin/privacy/resilience GJ-07; combined proof GJ-08. Acceptance scenarios are in the matrix; no part of this document authorizes implementation.