26 KiB
Jobjakt roadmap TODO
Updated 10 November 2026. This is the cross-phase work list. The source prompts, linked registers and acceptance criteria remain authoritative. Update the relevant row and latest checkpoint after each verified increment. A checked item means its stated scope is complete. Partial means evidence or implementation exists. Gated means the named predecessor, permission or environment is required. Earlier test evidence is source-bound.
Phase 10 · Cleanup and acceptance
- P10-00 Audit legacy UI, routes, CV/document paths, services, configuration and dependencies. Nominate only proven obsolete code.
- P10-01 Remove the approved unimported
App.cssunder CLEAN-20 and publish its targeted verification. Any additional removal needs its own evidence and approval. - P10-02/03 Review compatibility and backend/configuration retention. Keep legacy/frozen documents, import/export, renderers, old links, migrations and SQLite where still required.
- P10-04 Finish applicable data and document integrity, historical CV/letter revision compatibility, MariaDB and migration/recovery evidence. Partial. Keep SQLite retirement separate.
- P10-05 Independent source/evidence review matched 34 routes, 57 preservation groups, and native receipts for 1,448 backend and 1,031 frontend cases. Complete browser contract, human/device, sidecar/security and environment applicability and qualification. Reuse accepted PDF evidence for unchanged inputs.
- Record Phase 10, redesign development and Product Review readiness decisions with the post-redesign handoff. Track production separately. See P10-05.
PRODUCT-REVIEW-01 · Independent product review
- Gated by accepted Phase 10. Review real end-to-end use across jobseekers, occupations, desktop and mobile. Audit onboarding, discoverability, friction, accessibility, account/trust, workflow gaps, reliability and release blockers before assessing planned features.
- Evaluate LinkedIn permission, career-history/application import and user-export fallback. Keep Career Profile canonical and require review before applying imports.
- Evaluate FINN URL import and official API rights, NAV feed, saved search, alerts and tracker integration. Coordinate with Global Jobs.
- Evaluate AI-P5-13 grounded CV rewriting and user accept/reject controls. Compare local model/engine and specialised pipeline feasibility for EN/NB, accuracy, latency, cost/licence and existing hardware. Live inference and production cutover stay gated.
- Rank Android options for login, dashboard, applications, Kanban/timeline, CV/PDF, EN/NB and themes against web/mobile benefit and cost.
- Rank Prometheus/Grafana and host/container, disk, DB, API, AI/GPU, availability and backup monitoring separately from product analytics.
- Rank onboarding, trial, pricing, subscriptions, retention, education, feedback, privacy, export and deletion. Determine what belongs in each release.
- Deliver independent findings, evidence and ranked TODO with effort, impact, risk, dependencies, phased delivery, production gaps and machine-readable backlog. Record executive recommendations and owner decisions before implementing protected product scope.
A3 · Application modernisation and addendum
- Complete five application concepts, A3 selection and design handoff. A1 dashboard, B1 tracking, D1 styling, hybrid mobile navigation, editor-left/preview-right and application context right.
- IM01–09 milestone gates. Foundation/navigation, dashboard/onboarding, applications, discovery presentation, Career Profile/CV/letter, calendar/mail/documents, AI/settings and account/admin have scoped checkpoint evidence and progression approvals.
- IM10. Review all 34 routes and 57 preservation groups, secondary routes and connected workflows against A3. Finish open discrepancies, flatter visual hierarchy, density, reusable interactions and loading/empty/error/success states on desktop/tablet/phone, EN/NB and light/dark. Run affected regression and collect real screenshots, keyboard, device, assistive technology and native language review. Obtain final owner visual acceptance.
- Discover. Search-first layout shipped for existing NAV. Continue mobile filter drawer, results/detail usability, attribution and accessible disclosure. New search skills, radius, tree/map and provider capabilities belong to GJ/EUROPE with qualified data and rights.
- Applications. Title-first rows, explicit selection and preparation wording shipped. Consolidate secondary actions without removing functions, finish table/board/detail states and check status, selection and follow-up.
- Calendar. Recorded closing dates and follow-ups are covered. Resolve genuine interview scheduling, original precision/timezone and provider/ICS qualification as applicable. Preserve agenda/month toggle and preference.
- Career, CV, letter and documents. Finish connected overview-to-document reuse and create/import-to-edit/preview/export evidence. Preserve revisions, null-as-inherit, canonical profile ownership, frozen packages, import review and RD21.
- Correspondence. Improve inbox, mailbox state, relevant job context and review. Scope explicit consent, provider permissions, multi-mailbox storage and retention separately. Preserve conflict, attachment and confirmed-send flows.
- Admin Users compact actions. One keyboard menu retains existing role, reset and delete paths. Published
327d99dfwith 14 tests and 72 controlled browser states. - Admin Users. Continue server-backed creation/role/reset/deletion and native error/device coverage. Gated MFA recovery design approval and authorisation for factor changes.
- Audit recent search. Search the existing admin response by user, type, application ID/title or company. The limit and no-match state are explicit. Published
49e79875with 10 selected tests and 72 browser states. - Recent Audit filters and details. Exact event type and inclusive local dates combine with recent search. Keyboard disclosure uses already permitted values. Published
fd524a4bwith 11 tests and 108 controlled browser states. - Audit and privacy. Mail-subject redaction shipped. Historical search, additional supported filters, safe event history and isolation across remaining delivery paths remain open. Gated private support access proposal, consent, expiry and revocation.
- System Status. Last successful browser refresh shipped. Qualify actual worker/queue/task/provider/mail/enrichment/error/timing signals with honest stale/unavailable states. Design exists for isolated allowlisted diagnostics. Gated execution, audit and isolation approval. Retain CV benchmark evidence.
- Settings and automation. Qualify individual rules and explanatory states, remaining recovery cases and per-user Ghosted pause contract. Keep model/provider execution and real mutations separately authorised.
- Bookmarklet and terminology. Finish EN/NB terminology and display review. Retain bookmarklet until device parity for URL paste, extension and PWA sharing, then seek retirement approval.
- Test full journeys: discovery→detail→save/track, CV create/import→edit→preview→export, application→status→follow-up, Career Profile→document reuse. Use route evidence and discrepancies on the A3 branch.
INT-GLOBAL-JOBS-01 · International discovery
- GJ-00 Publish feasibility, rights, architecture, taxonomy, geography and acceptance plan at
0ec9f98e. Reconfirm provider/legal evidence when entering implementation. - GJ-01 Country and independent language preferences, locale prominence, defaults, persistence and migration. Gated by Phase 10, Product Review and initiative approval.
- GJ-02 Canonical location IDs, hierarchy, exact parent/child selection semantics, country switching, radius where supported and consistent map/tree state.
- GJ-03 Universal occupations and skills, multilingual suggestions, aliases, mapping/ranking and cross-industry fixtures.
- GJ-04 Authorised Norway, Sweden and UK providers, rights before fetch/display, attribution, source redirects, expiry/deletion, rate limits and provider reliability. Licence and permissions gate each capability.
- GJ-05 Responsive search/filter/detail, truthful geographic and source coverage, deduplication, permitted descriptions and tracker integration.
- GJ-06 Saved searches, matching, alerts, preferences and owner isolation. Qualify lifecycle and delivery.
- GJ-07 Provider monitoring, admin operations, reliability, limits, security, privacy and operational playbooks.
- GJ-08 Cross-provider integration, realistic EN/local-language and occupation journeys, accessibility, rollback, and final acceptance. No restricted scraping or invented results.
I18N-01 · European localisation
- I18N-00 Close full surface and catalogue inventory and locale priorities. All 188 historical dynamic call reviews are accounted for. Full visible text and locale acceptance remain open.
- I18N-01 Locale registry, locale aliases/legacy NB, persisted user choice, fallback/negotiation, formatting and migration. Keep UI, job and document languages independent.
- I18N-02 All React copy, navigation, form/dialog/error/loading states, accessibility, responsive text expansion and language switch continuity. Mobile salary formatting and Admin metric formatting are published independently at
af33e455and4c12f769. A3 integration and native/browser coverage remain open. - I18N-03 API error codes, validation, mail, notifications, background/operational messages, locale persistence and fallbacks.
- I18N-04 Career Profile, Docling/import review, CV and letter editors, generated content, templates and PDF. Preserve document language and revision fidelity.
- I18N-05 Multilingual discovery, occupation names, aliases, matching, provider languages and regional formatting. Coordinate with GJ.
- I18N-06 Locale catalogues, glossary, extraction/CI, missing/plural/placeholder validation, native reviews and per-locale release gate. Preserve established terminology.
- I18N-07 Locale-aware public homepage, content and metadata, market/language URLs, canonical/hreflang and SEO with LAUNCH-SITE.
- I18N-08 European QA, linguistic/native review, fallback, accessibility and document/export regressions. Publish locale-by-locale acceptance.
EUROPE-READY-01 · Mandatory market coverage
- Define final geographic scope and qualify each of the 59 candidate codes in the existing coverage matrix. Track provider/data rights, catalogue, geography/map, native/device and release statuses separately.
- Persist residence, search countries/regions, UI locale, job-ad languages and per-document languages independently. Preserve compatible saved searches and filters when switching countries.
- Qualify licensed geographic data, canonical IDs/hierarchies, aliases, boundaries and attribution. Provide country-aware map and accessible tree with equivalent selection behaviour and keyboard alternatives. Parent covers area, descendants refine the branch, independent branches combine.
- Qualify cross-country providers and occupations, supported radius, location coverage, multilingual search, regional copy, date/time/number/currency/address formats and Unicode/PDF output.
- Translate the whole product and public experience. Validate layouts, selection, error/fallback behaviour and source availability across countries and languages. Publish country and cross-country test matrices and release decisions. Reuse GJ/I18N/A3/Launch owners.
LAUNCH-SITE-01 · Public launch site
- LAUNCH-00 Close research, registration/degraded-auth, performance and asset-rights audit inputs. Existing 12 rendered states and raw SEO findings published at
98483b80. - LAUNCH-01 Four high-fidelity desktop/mobile concept pairs published at
ccb11494, with synthetic product captures and 20 scoped browser checks. - LAUNCH-02 Owner selects or mixes minimalist, premium SaaS, friendly/human and editorial directions. Refine selected elements and obtain explicit final design approval. Gated.
- LAUNCH-03 Build public foundation and responsive accessible hero/navigation without disturbing auth/signup or protected return routes.
- LAUNCH-04 Validate product screenshots, photography rights and optimisation. Use synthetic data, truthful captions, responsive assets and alternatives.
- LAUNCH-05 Implement reviewed hero, workflow, feature, trust, plans, FAQ and conversion content. Confirm legal/privacy links, signup and honest feature/price claims.
- LAUNCH-06 Localised copy, language selection, persistence and fallback, independent from in-app job and document language.
- LAUNCH-07 Locale/market routing, country page readiness, modular content and market-specific provider claims.
- LAUNCH-08 Crawlable HTML, metadata, canonical/alternates, sitemap and index rules, performance, device/accessibility, conversion and privacy checks.
- LAUNCH-09 Integration, native-language, marketing claim, signup and release acceptance. Publish evidence, assets, SEO and handoff docs. Separate launch approval.
SECURITY-AUDIT-01 · Offline work and formal security phases
Bounded offline fixes and root security policy exist. Formal integrated scope, target, costs and staging activity remain gated.
- 00 Authorisation, isolation, rules of engagement, baseline and evidence register.
- 01 Asset inventory, threat model, trust boundaries and attack surface.
- 02 Secret/credential, crypto and history review.
- 03 Static code, dependency, framework, advisory and supply-chain baseline scans.
- 04 Auth, session, MFA/recovery and OAuth. Review and approve protected recovery design separately.
- 05 Authorisation, tenant and object-level isolation. Reuse bounded audit/notification/processing evidence where applicable.
- 06 API abuse, business logic, rates, integrations and rights.
- 07 CV upload, parsing, export and malicious document boundaries.
- 08 Python/AI/Docling/Ollama, prompt injection, egress and sensitive content.
- 09 Browser isolation, frontend XSS, CSP and CSRF.
- 10 Database security, privacy, retention, integrity and backups.
- 11 Nginx, Docker, Ubuntu, host and network configuration.
- 12 CI/CD, Git, build provenance, credentials and supply chain.
- 13 Controlled adversarial staging testing after explicit scope and isolation approval.
- 14 Remediate verified findings with permanent regression tests. Record risk decisions and verify on the final affected baseline.
- 15 Independent retest, release security gate and final report. No formal integrated scan credit for offline tests.
- 16 Detection, incident response, owners, alert/runbook exercises and continuous security handoff.
RELEASE-READINESS-01 · Qualification and production decision
- Stage 1 Close discovery, prior blockers and baseline scope. Endpoint/environment census and RR-11 parser are published. RR-12 handler tests and RR-13 failure guards for off-host transfers and monthly completion markers are published through
24a62997. Runtime rollback and recovery remain open. - Stage 2 Freeze exact candidate, environment, image/digest, migration/config/dependency identities, CI and evidence provenance.
- Stage 3 · Functional Accounts/auth, jobs/tracking, dashboard, career/CV/documents, AI, correspondence, integrations, notifications, admin, billing and exports. Qualify real browser, sidecar and MariaDB lanes separately.
- Stage 3 · UX Responsive/visual and keyboard/AT/accessibility, EN/NB and launched locales, reflow/contrast, physical devices and representative workflows.
- Stage 3 · Data/PDF Tenant and revision integrity, historical compatibility, migrations and data protection, source-bound PDF fidelity, physical print where required.
- Stage 3 · Security and infrastructure Complete security gate, verify proxy/TLS, hosts, containers, networking, secrets, permissions, pinned reproducible builds and hosted CI.
- Stage 3 · Operations Performance, load/failure recovery, health and metrics, alerts/runbooks, logging privacy, docs/compliance and support.
- Stage 4 Fix verified blockers, record impact and risk, add regressions and update the release acceptance matrix.
- Stage 5 Requalify the final candidate and affected suites, record actual results and unresolved risks.
- Stage 6 Rehearse isolated upgrade, image rollback and data rollback, database/files/keys/tombstones restore, encrypted off-host retrieval, validation, RPO/RTO and operational recovery.
- Stage 7 Publish final matrix, evidence, risk/owner decisions and GO/NO-GO. Production deployment requires a separate explicit decision.
PERF-01 · Performance and scalability
Source: owner PERF-01 prompt and Full-Roadmap-Autonomy Addendum, 10 November 2026. Performance item numbers below are the owner's stable IDs. Priority is provisional until comparable measurements exist. The performance baseline records export bytes and historical MariaDB evidence separately. Record source, environment, fixture sizes, repetitions and before/after values together.
| ID | Status, priority and effort | Next action and acceptance boundary |
|---|---|---|
| PERF-BASE | PARTIAL · high · medium | Export inventory measured on isolated Next.js source 4c12f769. Freeze the exact A3 runtime and synthetic workloads. Capture actual transfer, route and interaction timings, API latency/bytes/error/throughput, query plans/counts and resource/queue signals where runnable. |
| PERF-01 | PARTIAL · high · medium | 21db35d2 fixes stale Companies completions after invalidation/relogin and correctly shares one GET across two pending consumers. Integrated in A3 at 6bfdbd9d with 37 selected tests. RulesEngine 30-second owner cache and post-save invalidation remain separate. Avoid shared authenticated caching. |
| PERF-02 | GATED topology · low · high | Nginx and compose use a singleton backend. Liveness/readiness and leased user operations exist, while other workers and session dependencies are local. Keep singleton until measured capacity warrants change. Compare one and two replicas in an isolated environment with one migration, backup and scheduler owner. Require cross-node auth, failover and no duplicate jobs. |
| PERF-03 | PARTIAL · high · high | JobTrackerContext indexes tenant jobs, follow-ups, documents, revisions, queues, notifications and saved searches. Check actual MariaDB plans for default application sorting, agenda, Audit timestamp and due operations on representative tenants. Compare rows examined, p95 and write cost. Migration gates remain. |
| PERF-04 | PARTIAL · medium · medium | app/layout.tsx and public/ ship a 147,708-byte ICO and PWA icons. Measure requested assets before changing icon variants. CV thumbnails already viewport-gate sandboxed iframes. Qualify responsive launch image sizes, layout and rights with the Launch gate. Preserve original uploads and evidence. |
| PERF-05 | PARTIAL · medium · medium | ViewStateNotice and PageLoader mostly use spinners. Editor, Career, checklist and some Settings already use skeletons. Test slow dashboard/discovery/list/detail/document/mail/Admin reads. Add layout-matching skeletons only where perceived loading improves. Check reduced motion, CLS, focus and empty/error separation. |
| PERF-06 | PARTIAL · high · medium | AnalyticsService already projects counts, date groups and bounded inputs. Measure serial counts and group scans before combining SQL or caching. Career completeness is computed from the current profile. Preserve null/deleted/stage/date semantics and mutation consistency. |
| PERF-07 | PARTIAL · high · medium | Ordinary application paging published at bca75044. The correspondence aggregate now returns 15 groups for a 15-row page, down from 250 and 2,500 in the fixtures. 36 tests passed. Users fixed two readers at 75 rows, Documents has count/page SQL, and Audit/Processing batch projections. Profile MariaDB plans and remaining query growth. |
| PERF-08 | PARTIAL · high · low | JobTable/Kanban already debounce 250 ms, CV preview 300 ms with sequence protection, Discover submits explicitly. The isolated Jobs fix 97d06180 reduced the extra locale-switch GET from one to zero. Review A3 integration and measure other repeated reads. Keep Audit search local and writes immediate. |
| PERF-09 | PARTIAL · high · medium | Isolated JobTable split 85ebbd9f removed 241,317 raw JS bytes on Landing and Login (12.0% each) while adding 29,311 bytes on Jobs. 74 tests and route guards passed. Review exact A3 integration and repeat throttled mobile checks before broader splitting. |
| PERF-10 | GATED external service · low · medium | No CDN in inspected source. Measure isolated proxy cache headers and European public TTFB before proposing a CDN. Compare static immutable origin caching, asset purge and revalidation. Keep HTML revalidatable and API/documents private. DNS, cost and topology require approval. |
| PERF-11 | PARTIAL · high · high | Applications, Documents, Correspondence and Processing have paged paths, with some application filters materialised first. Users is full-fetch, Audit is bounded, and board's full array is contractual. Prioritise ordinary table query/bytes, then stable Users paging or Audit timestamp/ID cursor. Preserve last-admin count, filtering, ordering, mutations and keyboard. |
| PERF-12 | OPEN · medium · medium | No compression middleware/directive found in inspected app/NGINX source. External ingress unknown. Compare payloads raw/gzip/Brotli and CPU on isolated responses. Prefer projection and paging. Verify one encoding layer, Vary and side-channel boundaries. |
| PERF-13 | PARTIAL · high · medium | JobTable and Dashboard already memoise specific row/chart computations. Profile list typing, dashboard, editor and navigation commits before changing dependencies. Prioritise confirmed duplicate reads. Preserve drafts, history, context and revisions. |
| PERF-14 | ACTIVE mechanism · low · low | Next.js 16.4.1/Turbopack emits compact assets and zero export source maps in the isolated baseline. Retain bundler minification. Compare exact A3 reproducible sizes and deployed source-map exposure during release. |
| PERF-15 | PARTIAL · high · medium | Route/editor/Admin, nested Kanban and viewport-gated CV thumbnails are already lazy in part. Current landing SVGs load eagerly. Defer measured offscreen assets only. Protect critical content, focus, preview sandbox and state. |
| PERF-16 | PARTIAL · medium · medium | app/layout.tsx starts the external Archivo stylesheet and the theme bootstrap. Google Sign-In and Turnstile already load conditionally. Measure blocked/offline font and startup waterfall, then compare a licence-cleared delivery option. Preserve auth, theme, provider and CSP ordering. |
| PERF-17 | GATED removal · low · medium | P10-03 found no proven safe dependency removal. Inventory frontend, .NET and Python reflection, build, sidecar and runtime consumers. Require exact candidate approval, locked restore and compatibility evidence before removal. |
| PERF-18 | PARTIAL · medium · medium | Scoped EF contexts use Pomelo 9 and MySqlConnector 2.4, whose connection pooling is enabled by default. No source override found. Measure driver pool wait/usage/timeouts, cancellation and DB headroom in a disposable environment. Separate context pooling from connection pooling. Tune only with capacity and rollback evidence. |
Separately gated or excluded
- Optional P7-06F follow-mode composer: retain deferral pending action/fallback decision. P7-12 completed conditionally. Preserve its native/provider/release limits.
- Carry forward Phase 8 dashboard and Phase 9 qualification gaps: real device/AT, performance, hosted runner isolation/lifecycle and provider/physical-print review. Reuse qualified Linux/Windows PDF fidelity and scoped RD21 evidence. Refresh Python/advisory evidence at the applicable security baseline.
- Legacy Job/JobApplication data cutover and migration/startup ownership: verify compatibility, backup/restore and observation release before removal of duplicate columns or legacy bootstraps.
- Stripe activation and account deletion: verify commercial configuration, portal/webhooks and supported operations. Obtain approval and rehearse retention, legal hold, deletion tombstones, provider cleanup and restore handling.
- Operational debt: qualify proxy/client-IP/firewall and mail/AI durability. Gate multi-replica work on worker leasing and containment. Assess log aggregation, tag/attachment storage and checklist-read separation only when justified.
- SQLite retirement: qualified MariaDB parity, migration, rollback, restore and retention before any removal.
- Live model, provider, mail, market claims, native/device, hosted CI, staging and production decisions stay separate.
- Deferred CV-import engine overhaul and personal portfolio are outside this execution.
Source index: Phase 10 and Product Review prompts 5–6, Global Jobs prompt 7 and docs/planning/global-jobs-prompts/, complete I18N/ and jobjakt-security/ packs, homepage prompt 10, release readiness prompt 11, the approved A3 implementation/visual requirements and additional/# Jobjakt — A3 refinement+EUJOBS.txt. Earlier items come from the historical TODO, known issues and technical debt. The status register and latest checkpoint identify current evidence and branches.