Job placement
Verified roles with vetted Gulf employers.
/* * Tier 1: the palette. Every colour the Legit Manpower brand uses, named once. Only the roles in * roles.css read these; components and apps never do. Rebranding edits a value here. */ :root { /* Violet: the logo mark. Seeds: #5f1ad7 (the mark), #b79bf5 (light violet), #eee9fe (lavender). */ --legit-violet-50: #f3efff; --legit-violet-60: #efecfb; --legit-violet-100: #eee9fe; --legit-violet-110: #ede9ff; --legit-violet-200: #e4daff; --legit-violet-250: #d6cdff; --legit-violet-300: #c4b0ff; --legit-violet-350: #b79bf5; --legit-violet-400: #b794ff; --legit-violet-500: #8e5bff; --legit-violet-600: #6b2be3; --legit-violet-700: #5f1ad7; --legit-violet-750: #5a22c4; --legit-violet-800: #4c14b4; --legit-violet-900: #2a0d78; /* Plum: deep violets for the portal nav and dark tinted surfaces. */ --legit-plum-600: #35226a; --legit-plum-700: #2a2350; --legit-plum-750: #251a4a; --legit-plum-800: #25144f; --legit-plum-850: #241f42; --legit-plum-860: #20213f; --legit-plum-900: #241f30; --legit-plum-950: #160d33; /* Blue: the logo lettering. Seed: #003ecf. */ --legit-blue-50: #e9effd; --legit-blue-100: #e0ebfc; --legit-blue-200: #c0d6f8; --legit-blue-300: #9fc0f3; --legit-blue-350: #9db8ff; --legit-blue-400: #8aaeff; --legit-blue-450: #7aa6f5; --legit-blue-500: #6f9af0; --legit-blue-700: #003ecf; --legit-blue-800: #002e9e; --legit-blue-950: #18253d; /* Navy: the ink of body text and the footer. Seed: #1f2a44. */ --legit-navy-50: #f4f5f7; --legit-navy-300: #b8c3e3; --legit-navy-400: #a0a8bb; --legit-navy-500: #3d465c; --legit-navy-600: #5a6378; --legit-navy-700: #1f2a44; --legit-navy-750: #142862; --legit-navy-800: #0b1a4a; --legit-navy-850: #222a40; --legit-navy-870: #1d2439; --legit-navy-900: #171e31; --legit-navy-950: #0f1424; --legit-navy-990: #0a0e1a; /* Mist: light greys with a trace of violet, for light surfaces and lines. */ --legit-mist-50: #f5f4fa; --legit-mist-200: #e5e3f0; --legit-mist-300: #dcd9e8; /* Zinc: the neutral near-black of dark mode. */ --legit-zinc-50: #f4f4f5; --legit-zinc-200: #d4d4d8; --legit-zinc-300: #b8b8c0; --legit-zinc-400: #a8a8b2; --legit-zinc-700: #26262c; --legit-zinc-750: #232329; --legit-zinc-775: #222228; --legit-zinc-800: #1c1c21; --legit-zinc-805: #1c1c20; --legit-zinc-850: #151519; --legit-zinc-870: #141417; --legit-zinc-880: #131316; --legit-zinc-900: #121215; --legit-zinc-920: #111114; --legit-zinc-950: #0c0c0e; --legit-zinc-990: #09090b; /* Grey: plain neutrals, for the chart tooltip. Slate is the ink of things printed on paper. */ --legit-slate-900: #0f172a; --legit-grey-0: oklch(1 0 0); --legit-grey-300: oklch(0.87 0 0); --legit-grey-800: oklch(0.3 0 0); /* White and black, and the translucent overlays drawn from them. */ --legit-white: #ffffff; --legit-black: #000000; --legit-white-a4: rgba(255, 255, 255, 0.04); --legit-white-a6: rgba(255, 255, 255, 0.06); --legit-white-a8: rgba(255, 255, 255, 0.08); --legit-white-a10: rgba(255, 255, 255, 0.1); --legit-white-a12: rgba(255, 255, 255, 0.12); --legit-white-a16: rgba(255, 255, 255, 0.16); --legit-white-a18: rgba(255, 255, 255, 0.18); --legit-white-a20: rgba(255, 255, 255, 0.2); --legit-white-a22: rgba(255, 255, 255, 0.22); --legit-white-a28: rgba(255, 255, 255, 0.28); --legit-white-a30: rgba(255, 255, 255, 0.3); --legit-white-a35: rgba(255, 255, 255, 0.35); --legit-white-a45: rgba(255, 255, 255, 0.45); --legit-white-o10: oklch(1 0 0 / 10%); --legit-white-o15: oklch(1 0 0 / 15%); --legit-white-o22: oklch(1 0 0 / 22%); --legit-black-a8: rgba(0, 0, 0, 0.08); --legit-black-a18: rgba(0, 0, 0, 0.18); --legit-black-a20: rgb(0 0 0 / 0.2); --legit-black-a28: rgb(0 0 0 / 0.28); --legit-black-a32: rgba(0, 0, 0, 0.32); --legit-black-a35: rgba(0, 0, 0, 0.35); /* Feedback: green, amber, red and an info blue. Never brand. */ --legit-red-600: oklch(0.577 0.245 27.325); --legit-red-400: oklch(0.704 0.191 22.216); --legit-red-990: #250606; --legit-green-600: #059669; --legit-green-400: #34d399; --legit-amber-600: #d97706; --legit-amber-400: #fbbf24; --legit-info-600: #2563eb; --legit-info-400: #60a5fa; /* The tinted grounds, lines and text of toasts. */ --legit-green-50: #f0fdf4; --legit-green-200: #bbf7d0; --legit-green-700: #15803d; --legit-info-50: #f0f6fe; --legit-info-800: #054199; --legit-amber-50: #fffbeb; --legit-amber-200: #fde68a; --legit-amber-700: #b45309; --legit-red-50: #fef2f2; --legit-red-200: #fbcaca; --legit-red-700: #b42318; /* Social networks, in their own colours. */ --legit-whatsapp: #25d366; --legit-facebook: #1877f2; --legit-linkedin: #0a66c2; } /* * The boot loader: eight boxes fly in and stack, the ground rises under them, and they drop away * to start again. Shown in index.html while the app's code loads, before any stylesheet of the * app exists, so it is plain CSS: Vite inlines the palette from @doitrix/tokens ahead of it, and it reads the * theme's roles with palette fallbacks. * * Adapted from "Isometric boxes" by InfinityLoopGames on Uiverse.io (MIT): recoloured to the brand * violet, the shine made solid, the masks made theme-aware, and a still frame for reduced motion. */ .boot-loader { --bl-bg: var(--background, var(--legit-white)); --bl-box: var(--brand-strong, var(--legit-violet-700)); --bl-ground: var(--legit-violet-200); --bl-ground-light: var(--legit-violet-100); --bl-label: var(--muted-foreground, var(--legit-navy-600)); --duration: 2.4s; position: fixed; inset: 0; z-index: 100; display: grid; place-items: center; overflow: hidden; background: var(--bl-bg); transition: opacity 320ms cubic-bezier(0.2, 0, 0, 1); } /* lib/boot-loader.ts adds this once the stack is complete and the app is ready beneath. */ .boot-loader--out { opacity: 0; pointer-events: none; font-family: "Inter", ui-sans-serif, system-ui, sans-serif; } /* Palette colours, not roles: the app's stylesheet defines the light tokens before the app has had a chance to switch to dark, so reading them here would paint a light loader on a dark screen. */ @media (prefers-color-scheme: dark) { .boot-loader { --bl-bg: var(--legit-navy-950); --bl-box: var(--legit-violet-500); --bl-ground: var(--legit-plum-850); --bl-ground-light: var(--legit-plum-700); --bl-label: var(--legit-navy-400); } } .boot-loader__inner { display: grid; justify-items: center; gap: 8px; } .boot-loader__label { font-size: 14px; font-weight: 500; letter-spacing: 0.02em; color: var(--bl-label); } .boot-loader__stage { width: 200px; height: 320px; position: relative; transform-style: preserve-3d; zoom: 0.5; } @media (max-width: 480px) { .boot-loader__stage { zoom: 0.4; } } /* Two slabs in the page colour hide the boxes as they fall through the floor. */ .boot-loader__stage::before, .boot-loader__stage::after { --r: 20.5deg; content: ""; width: 320px; height: 140px; position: absolute; right: 32%; bottom: -11px; background: var(--bl-bg); transform: translateZ(200px) rotate(var(--r)); animation: bl-mask var(--duration) linear forwards infinite; } .boot-loader__stage::after { --r: -20.5deg; right: auto; left: 32%; } .boot-loader__ground { position: absolute; left: -50px; bottom: -120px; transform-style: preserve-3d; transform: rotateY(-47deg) rotateX(-15deg) rotateZ(15deg) scale(1); } .boot-loader__ground div { width: 200px; height: 200px; background: linear-gradient(45deg, var(--bl-ground) 0 50%, var(--bl-ground-light) 50% 100%); transform-style: preserve-3d; transform: rotateX(90deg) rotateY(0deg) translate(-48px, -120px) translateZ(100px) scale(0); animation: bl-ground var(--duration) linear forwards infinite; } /* The glint the ground throws when the stack lands: solid violet at low opacity. */ .boot-loader__ground div::before, .boot-loader__ground div::after { --rx: 90deg; --ry: 0deg; --x: 44px; --y: 162px; --z: -50px; content: ""; width: 156px; height: 300px; opacity: 0; background: var(--bl-box); position: absolute; transform: rotateX(var(--rx)) rotateY(var(--ry)) translate(var(--x), var(--y)) translateZ(var(--z)); animation: bl-shine var(--duration) linear forwards infinite; } .boot-loader__ground div::after { --ry: 90deg; --x: 0; --y: 177px; --z: 150px; } .boot-loader__box { --x: 0; --y: 0; position: absolute; transform: translate(var(--x), var(--y)); animation: var(--duration) linear forwards infinite; } .boot-loader__box div { width: 48px; height: 48px; position: relative; background-color: var(--bl-box); transform-style: preserve-3d; transform: rotateY(-47deg) rotateX(-15deg) rotateZ(15deg) scale(0); animation: var(--duration) ease forwards infinite; } /* The two lit faces of each box: the same violet, brighter. */ .boot-loader__box div::before, .boot-loader__box div::after { --rx: 90deg; --ry: 0deg; --z: 24px; --y: -24px; --x: 0; content: ""; position: absolute; inset: 0; background-color: inherit; transform: rotateX(var(--rx)) rotateY(var(--ry)) translate(var(--x), var(--y)) translateZ(var(--z)); filter: brightness(var(--b, 1.25)); } .boot-loader__box div::after { --rx: 0deg; --ry: 90deg; --x: 24px; --y: 0; --b: 1.5; } .boot-loader__box:nth-child(2) { --x: -220px; --y: -120px; left: 58px; top: 108px; animation-name: bl-move0; } .boot-loader__box:nth-child(2) div { animation-name: bl-scale0; } @keyframes bl-move0 { 12% { transform: translate(var(--x), var(--y)); } 25%, 52% { transform: translate(0, 0); } 80% { transform: translate(0, -32px); } 90%, 100% { transform: translate(0, 188px); } } @keyframes bl-scale0 { 6% { transform: rotateY(-47deg) rotateX(-15deg) rotateZ(15deg) scale(0); } 14%, 100% { transform: rotateY(-47deg) rotateX(-15deg) rotateZ(15deg) scale(1); } } .boot-loader__box:nth-child(3) { --x: -260px; --y: 120px; left: 25px; top: 120px; animation-name: bl-move1; } .boot-loader__box:nth-child(3) div { animation-name: bl-scale1; } @keyframes bl-move1 { 16% { transform: translate(var(--x), var(--y)); } 29%, 52% { transform: translate(0, 0); } 80% { transform: translate(0, -32px); } 90%, 100% { transform: translate(0, 188px); } } @keyframes bl-scale1 { 10% { transform: rotateY(-47deg) rotateX(-15deg) rotateZ(15deg) scale(0); } 18%, 100% { transform: rotateY(-47deg) rotateX(-15deg) rotateZ(15deg) scale(1); } } .boot-loader__box:nth-child(4) { --x: 120px; --y: -190px; left: 58px; top: 64px; animation-name: bl-move2; } .boot-loader__box:nth-child(4) div { animation-name: bl-scale2; } @keyframes bl-move2 { 20% { transform: translate(var(--x), var(--y)); } 33%, 52% { transform: translate(0, 0); } 80% { transform: translate(0, -32px); } 90%, 100% { transform: translate(0, 188px); } } @keyframes bl-scale2 { 14% { transform: rotateY(-47deg) rotateX(-15deg) rotateZ(15deg) scale(0); } 22%, 100% { transform: rotateY(-47deg) rotateX(-15deg) rotateZ(15deg) scale(1); } } .boot-loader__box:nth-child(5) { --x: 280px; --y: -40px; left: 91px; top: 120px; animation-name: bl-move3; } .boot-loader__box:nth-child(5) div { animation-name: bl-scale3; } @keyframes bl-move3 { 24% { transform: translate(var(--x), var(--y)); } 37%, 52% { transform: translate(0, 0); } 80% { transform: translate(0, -32px); } 90%, 100% { transform: translate(0, 188px); } } @keyframes bl-scale3 { 18% { transform: rotateY(-47deg) rotateX(-15deg) rotateZ(15deg) scale(0); } 26%, 100% { transform: rotateY(-47deg) rotateX(-15deg) rotateZ(15deg) scale(1); } } .boot-loader__box:nth-child(6) { --x: 60px; --y: 200px; left: 58px; top: 132px; animation-name: bl-move4; } .boot-loader__box:nth-child(6) div { animation-name: bl-scale4; } @keyframes bl-move4 { 28% { transform: translate(var(--x), var(--y)); } 41%, 52% { transform: translate(0, 0); } 80% { transform: translate(0, -32px); } 90%, 100% { transform: translate(0, 188px); } } @keyframes bl-scale4 { 22% { transform: rotateY(-47deg) rotateX(-15deg) rotateZ(15deg) scale(0); } 30%, 100% { transform: rotateY(-47deg) rotateX(-15deg) rotateZ(15deg) scale(1); } } .boot-loader__box:nth-child(7) { --x: -220px; --y: -120px; left: 25px; top: 76px; animation-name: bl-move5; } .boot-loader__box:nth-child(7) div { animation-name: bl-scale5; } @keyframes bl-move5 { 32% { transform: translate(var(--x), var(--y)); } 45%, 52% { transform: translate(0, 0); } 80% { transform: translate(0, -32px); } 90%, 100% { transform: translate(0, 188px); } } @keyframes bl-scale5 { 26% { transform: rotateY(-47deg) rotateX(-15deg) rotateZ(15deg) scale(0); } 34%, 100% { transform: rotateY(-47deg) rotateX(-15deg) rotateZ(15deg) scale(1); } } .boot-loader__box:nth-child(8) { --x: -260px; --y: 120px; left: 91px; top: 76px; animation-name: bl-move6; } .boot-loader__box:nth-child(8) div { animation-name: bl-scale6; } @keyframes bl-move6 { 36% { transform: translate(var(--x), var(--y)); } 49%, 52% { transform: translate(0, 0); } 80% { transform: translate(0, -32px); } 90%, 100% { transform: translate(0, 188px); } } @keyframes bl-scale6 { 30% { transform: rotateY(-47deg) rotateX(-15deg) rotateZ(15deg) scale(0); } 38%, 100% { transform: rotateY(-47deg) rotateX(-15deg) rotateZ(15deg) scale(1); } } .boot-loader__box:nth-child(9) { --x: -240px; --y: 200px; left: 58px; top: 87px; animation-name: bl-move7; } .boot-loader__box:nth-child(9) div { animation-name: bl-scale7; } @keyframes bl-move7 { 40% { transform: translate(var(--x), var(--y)); } 52%, 52% { transform: translate(0, 0); } 80% { transform: translate(0, -32px); } 90%, 100% { transform: translate(0, 188px); } } @keyframes bl-scale7 { 34% { transform: rotateY(-47deg) rotateX(-15deg) rotateZ(15deg) scale(0); } 42%, 100% { transform: rotateY(-47deg) rotateX(-15deg) rotateZ(15deg) scale(1); } } @keyframes bl-ground { 0%, 65% { transform: rotateX(90deg) rotateY(0deg) translate(-48px, -120px) translateZ(100px) scale(0); } 75%, 90% { transform: rotateX(90deg) rotateY(0deg) translate(-48px, -120px) translateZ(100px) scale(1); } 100% { transform: rotateX(90deg) rotateY(0deg) translate(-48px, -120px) translateZ(100px) scale(0); } } @keyframes bl-shine { 0%, 70% { opacity: 0; } 75%, 87% { opacity: 0.12; } 100% { opacity: 0; } } @keyframes bl-mask { 0%, 65% { opacity: 0; } 66%, 100% { opacity: 1; } } /* Reduced motion: the finished stack, standing still on its ground. */ @media (prefers-reduced-motion: reduce) { .boot-loader__stage::before, .boot-loader__stage::after, .boot-loader__ground div::before, .boot-loader__ground div::after { animation: none; opacity: 0; } .boot-loader__ground div { animation: none; transform: rotateX(90deg) rotateY(0deg) translate(-48px, -120px) translateZ(100px) scale(1); } .boot-loader__box { animation: none; transform: none; } .boot-loader__box div { animation: none; transform: rotateY(-47deg) rotateX(-15deg) rotateZ(15deg) scale(1); } }
Recruitment agency · Nairobi
For over a decade, Legit Manpower has been connecting talented professionals with premier employers across the Gulf region.




Placing Kenyan professionals across the Gulf
Our services
From the first match to the day you fly, we manage the recruitment, the paperwork and the preparation, so nothing is left to chance.
Verified roles with vetted Gulf employers.
Visas and work permits, filed and tracked.
Passports, attestation and clearances, in order.
Culture, language and workplace, ready for day one.
Submit your CV and attend interviews with potential employers.
We handle all necessary documentation and work permits.
Attend our comprehensive orientation programme.
We arrange your travel and a smooth start in your new job.
How it works
Four stages, with one team beside you from your first interview to your first day at work.
Start your applicationIndustry sectors
From hospital wards to hotel lobbies, Gulf employers ask for Kenyan professionals by name. These are the sectors we recruit for most.
Nurses, doctors, pharmacists and lab technicians.
Engineers, surveyors and skilled labour.
Hotel staff, chefs, waiters and guides.

8 sectors, one recruitment team

Our approach
Every recruitment process we run complies with international labour standards and local regulations.
A deep understanding of Kenyan professionals and their strengths in Gulf markets.
Rigorous vetting matches the right candidates with the right opportunities.
Lasting relationships with both employers and candidates.

Success stories
Thanks to Legit Manpower, I got a great nursing position in Dubai. The process was smooth and professional.
The pre-departure training was incredibly helpful in preparing me for life in Qatar. The team was supportive throughout.
I was hesitant at first, but Legit Manpower made the entire process easy. The cultural training helped me adapt quickly.
Join thousands of professionals who have found their dream jobs through Legit Manpower.
