/* * 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); } } Kenyan recruitment agency for Gulf jobs · Legit Manpower
Skip to content

Recruitment agency · Nairobi

Kenyan talent.Gulf opportunities.

For over a decade, Legit Manpower has been connecting talented professionals with premier employers across the Gulf region.

  • Verified jobs
  • Trusted employers
  • End-to-end support
  • Transparent process
  • A smiling construction worker in a helmet on a building site
    Construction
  • A nurse in navy scrubs holding a clipboard
    Healthcare
  • A mechanic repairing an engine
    Technical trades
  • A smiling truck driver waving from his cab
    Driving & logistics

Placing Kenyan professionals across the Gulf

  • Qatar
  • Saudi Arabia
  • UAE
  • Kuwait
  • Oman
  • Bahrain

Our services

Everything between your applicationand your first day.

From the first match to the day you fly, we manage the recruitment, the paperwork and the preparation, so nothing is left to chance.

  1. Start here01

    Application & interview

    Submit your CV and attend interviews with potential employers.

  2. Visa in 2–4 weeks02

    Document processing

    We handle all necessary documentation and work permits.

  3. 1–2 weeks03

    Pre-departure training

    Attend our comprehensive orientation programme.

  4. Ongoing support04

    Travel & deployment

    We arrange your travel and a smooth start in your new job.

How it works

The recruitment process,step by step.

Four stages, with one team beside you from your first interview to your first day at work.

Start your application

Industry sectors

Where Kenyan talentis in demand.

From hospital wards to hotel lobbies, Gulf employers ask for Kenyan professionals by name. These are the sectors we recruit for most.

  • 01

    Healthcare

    Nurses, doctors, pharmacists and lab technicians.

  • 02

    Construction & engineering

    Engineers, surveyors and skilled labour.

  • 03

    Hospitality & tourism

    Hotel staff, chefs, waiters and guides.

  • The Dubai skyline and the Burj Khalifa at twilight

    8 sectors, one recruitment team

We also recruit for

  • Domestic & household
  • IT & technology
  • Education & training
  • Drivers & logistics
  • Retail & sales
See open jobs
A traveller walking through a terminal with a suitcase

Our approach

Ethical, transparent, successful placements.

Every recruitment process we run complies with international labour standards and local regulations.

  • Kenyan expertise

    A deep understanding of Kenyan professionals and their strengths in Gulf markets.

  • Candidate screening

    Rigorous vetting matches the right candidates with the right opportunities.

  • Long-term partnerships

    Lasting relationships with both employers and candidates.

A nurse in navy scrubs holding a clipboard

Success stories

Kenyans who found successin the Middle East.

Thanks to Legit Manpower, I got a great nursing position in Dubai. The process was smooth and professional.
SWSarah W.Nurse
Dubai
The pre-departure training was incredibly helpful in preparing me for life in Qatar. The team was supportive throughout.
JMJohn M.Construction supervisor
Doha
I was hesitant at first, but Legit Manpower made the entire process easy. The cultural training helped me adapt quickly.
GKGrace K.Hotel staff
Riyadh

Ready to startyour journey?

Join thousands of professionals who have found their dream jobs through Legit Manpower.

Prefer to talk?+254 724 574203
An aircraft overhead in a night sky
Loading