Employ Bahrain
A local-first recruitment marketplace — building the hiring infrastructure Bahrain doesn't yet have.
Project spec · 7 fields+
Overview
Employ Bahrain is a local-first recruitment marketplace that connects employers and job seekers in Bahrain through a simpler, more structured hiring experience. The platform ships fully bilingual — Arabic (RTL) and English (LTR) — with localized BHD currency and locale-aware date and number formatting throughout. Companies post vacancies, manage applicants, and surface their employer profile; job seekers build a candidate profile, browse relevant roles, and apply in one flow.
The audience is SMEs, startups, and growing companies that need a faster, cheaper alternative to informal WhatsApp networks and expensive international recruitment channels.
The brief
Hiring in Bahrain still runs largely on informal networks. The structured alternatives — global job boards and enterprise ATS systems — are either too generic for the local market or too expensive for the companies doing most of the hiring.
The brief was to build a Bahrain-first marketplace: focused enough to be the obvious place for local roles, structured enough to give employers real applicant management, and simple enough that an SME can post a job in the time it takes to write a WhatsApp message.
The long-term opportunity is bigger than a job board. If the marketplace works, it becomes hiring infrastructure — listings expand into employer branding, applicant tracking, talent pools, assessments, internships, and AI-assisted matching.
Build
The stack is Nuxt 3 + tRPC + Prisma over PostgreSQL — a typed, end-to-end TypeScript SaaS organised as a PNPM monorepo with Turbo. The web app is one consumer of nine internal packages: `auth`, `database`, `api`, `mail`, `sms`, `storage`, `i18n`, `logs`, and `utils`. Each domain concern lives in its own package so the Nuxt app stays a thin presentation layer.
The auth layer is Lucia-based with session management and five OAuth providers (GitHub, Google, LinkedIn, Microsoft, Twitter), plus multi-factor authentication via OTP over email or SMS. Authorization runs through a fine-grained abilities system layered on top of organization roles — `MEMBER` and `OWNER` at the org level, with API-side enforcement on every tRPC procedure.
The data model is multi-tenant by construction. `User → Organization → Job → Application` is the marketplace loop; `User → Profile → Skills/Experience/Education` is the talent side. Multi-tenancy here isn't just "we have organizations" — it's organizational team roles, per-org subscriptions, and abilities-based data isolation throughout the API.
The product ships fully bilingual: Arabic (RTL) and English (LTR) with proper text direction, BHD currency, and locale-aware number/date formatting throughout. RTL isn't a CSS afterthought — it's wired into the layout primitives.
Multi-gateway billing ships in v1: Stripe for international cards, Tap Payments for the MENA region, LemonSqueezy as merchant of record, and Chargebee for subscription orchestration. Payment events flow through one unified audit trail regardless of which gateway processed the charge. Webhook verification runs through our own `@xyz/webhook-verifier` package — the same one Orderly uses, and the canonical version of `@commercejs/webhook-verifier` in our open-source SDK. Tests use Cypress (E2E) and Vitest (tRPC procedures).
Direction
Employ Bahrain is early stage on the marketplace, mature on the platform. The infrastructure is live and operational — multi-tenant SaaS, MFA, multi-gateway billing, bilingual UI, abilities-based RBAC — but the marketplace work right now is supply: getting real employers posting real jobs, and real candidates building real profiles. The success metric isn't yet outcomes; it's liquidity.
The next layer is depth on top of the marketplace: AI-assisted matching, assessments, talent pools, internships, and training partnerships — the layers that turn a job board into a hiring operating system.
Market is Bahrain first, GCC next.
Have a project
in mind?
Tell us what you're building. We respond within 24 hours.