TalentNext + JobNext

TalentNext is now part of JobNext

Same team, a bigger platform. TalentNext’s hiring tools now sit inside JobNext’s HR & workforce module — built for contractors and facilities-management companies running crews across GCC sites, from hire to payslip.

JobNext Punch Manager showing attendance finalisation across sites
1 Punched in — Site 4
2 Overtime approved
3 WPS file ready
4 Payslip generated

One workforce module, hire to payslip

HR, attendance, overtime, payroll and WPS compliance share the same employee record, so nothing gets re-typed between steps.

Hiring & staff records

Recruitment and site allocation feed a staff directory with twelve tabs per employee — documents, allocation, leave and training all in one place.

HR & attendance →

Attendance & camps

Punch Manager ingests biometric and mobile punches across every site, auto-fixes unpaired punches, and finalises the month before payroll runs.

HR & attendance →

Payroll & WPS

Welfare heads, statutory GCC deductions and gratuity are calculated from finalised attendance, with WPS-compliant payroll runs for the GCC.

Payroll & WPS →

See it in the product

Screens from JobNext’s own HR module — the platform TalentNext now runs on.

Punch Manager

Attendance status by month, across every site — who’s uploaded, who’s finalised, and how many punches are still outstanding before payroll can open.

JobNext Punch Manager showing monthly attendance finalisation across sites
JobNext payroll analytics report list including Gratuity, Overtime Analysis and Settlement Register

Payroll reporting

Gratuity, overtime analysis, job-wise salary allocation and settlement registers — ready the moment a payroll run finalises, no extra export step.

21→7 dayspayroll cycle
Zero errorsfirst WPS run
6,000employees, 1,200 sites

One facilities-management company moved its payroll cycle from 21 days to 7, with zero errors on its first WPS-compliant run, after standardising on JobNext’s HR and payroll module.

Read the case study on the JobNext blog →

Ready to see JobNext HR?

Book a walkthrough of the module TalentNext is now part of.

See JobNext HR Book a demo

', …), // where dollar-quote and dollar-amp are special replace tokens; and it lives in a // JS template literal that eats backslash escapes. So keep this block free of the // dollar sign and of backslash escapes: exact-match CTA texts (no regex end-anchor) // plus a space-only collapse regex. var cnxCtaTexts = ['book a demo','request a demo','get a demo','book demo','schedule a demo','talk to sales','talk to us','talk to the team','get in touch','contact us','contact sales','contact the team','contact']; function cnxIsContactCta(el){ if (el.id && el.id.indexOf('cnx-') === 0) return false; if (el.hasAttribute && el.hasAttribute('data-cnx-contact')) return true; var raw = ((el.getAttribute && el.getAttribute('href')) || '').toLowerCase(); var hh = raw.split('?')[0].split('#')[0]; if (raw === '#contact' || hh === '/contact' || hh === 'contact' || hh === 'contact.html' || (hh.length >= 8 && hh.lastIndexOf('/contact') === hh.length - 8) || (hh.length >= 13 && hh.lastIndexOf('/contact.html') === hh.length - 13)) return true; var t = (el.textContent || '').replace(/ +/g, ' ').trim().toLowerCase(); if (t.length > 24) return false; for (var k = 0; k < cnxCtaTexts.length; k++) { if (t === cnxCtaTexts[k]) return true; } return false; } document.addEventListener('click', function (e) { var el = e.target; while (el && el !== document) { if (el.tagName === 'A' || el.tagName === 'BUTTON') break; el = el.parentNode; } if (!el || el === document) return; if (cnxIsContactCta(el)) { e.preventDefault(); e.stopPropagation(); openModal(); } }, true); if (closeBtn) closeBtn.addEventListener('click', closeModal); if (scrim) scrim.addEventListener('click', function(e){ if(e.target === scrim) closeModal(); }); if (form) form.addEventListener('submit', function(e){ e.preventDefault(); var note = document.getElementById('cnx-note'), err = document.getElementById('cnx-err'), btn = document.getElementById('cnx-submit'); note.style.display='none'; err.style.display='none'; if (form.website_url && form.website_url.value){ note.style.display='block'; return; } // honeypot var payload = { name: form.name.value, email: form.email.value, company: form.company.value, phone: form.phone.value, message: form.message.value, subscribe_newsletter: form.subscribe_newsletter && form.subscribe_newsletter.checked, turnstile_token: form.turnstile_token ? form.turnstile_token.value : '', _token_ts: tsEl ? tsEl.value : tokenTs() }; if (!payload.name || !payload.email || !payload.company || !payload.phone || !payload.message){ err.textContent='Please fill in all required fields.'; err.style.display='block'; return; } if (payload.phone.replace(/[^0-9]/g, '').length < 7){ err.textContent='Please enter a valid phone number.'; err.style.display='block'; return; } btn.disabled = true; btn.textContent = 'Sending…'; post(payload).then(function(d){ if (d && d.success){ form.style.display='none'; note.style.display='block'; } else { err.textContent = (d && d.message) || 'Something went wrong — please try again.'; err.style.display='block'; btn.disabled=false; btn.textContent='Send message'; } }).catch(function(){ err.textContent='Network error — please try again.'; err.style.display='block'; btn.disabled=false; btn.textContent='Send message'; }); }); // --- Progressive enhancement: wire a site's OWN contact form to the CRM --- // Targets forms that look like contact forms (have an email field AND a // textarea/message field), aren't ours, and aren't opted out. Field mapping is // heuristic; company falls back to the entered name so the CRM never rejects. function pick(f, res){ for (var i=0;i