Logo Lanfrica

hamiduhkisaakye/Final-Project_Job_Centre_Uganda

Domaine:

socioeconomic

Type de record:

software
Créateur:
ham
Hôte:
A modern recruitment platform for Uganda, enabling job discovery, applications, employer hiring, and streamlined recruitment management. # Job Centre Uganda Full-stack implementation of the platform described in the Blueprint (§1–§12) and mockups. **Phase 1** covered design system, auth/RBAC, public pages, job posting → moderation → publish, apply, basic Seeker/Company portals, and admin moderation. **Phase 2** (this update) adds real-time chat, resume/logo file uploads, drag-and-drop candidate pipeline, and pgvector-based semantic matching. ## Stack - **API** — NestJS (TypeScript), PostgreSQL via Prisma, JWT (short-lived access token in memory + httpOnly refresh cookie), argon2 password hashing. - **Web** — Next.js 14 App Router, TypeScript, Tailwind CSS using the exact tokens from Blueprint §5 (`apps/web/tailwind.config.ts`). Public pages are server components (SSR); the three portals are client-rendered behind auth. - **Matching** — deterministic rules (`matching.service.ts`: skills overlap / location / salary fit / experience) blended 50/50 with real pgvector cosine-similarity (`embeddings.service.ts`, OpenAI `text-embedding-3-small`) whenever both sides have an embedding. Falls back to rules-only if `OPENAI_API_KEY` isn't set — the app works either way. - **Chat** — Socket.IO gateway (`chat.gateway.ts`, namespace `/chat`, JWT handshake auth) for live delivery, backed by REST endpoints (`chat.controller.ts`) for history/listing so a client works even before the socket connects. - **File uploads** — resume (PDF/Word, 5MB) and company logo (PNG/JPEG/WebP, 2MB) via `multer` disk storage under `LOCAL_STORAGE_DIR`, served back at `/uploads/...` (outside the `/api/v1` prefix — see `main.ts`). - **Local infra** — Postgres, now on the `pgvector/pgvector:pg16` image (adds the `vector` extension; same PG16 data format as plain `postgres:16`), also standing in for OpenSearch via `ILIKE` search — Phase 1 substitute, see `jobs.service.ts`), Redis, both via `docker-compose.yml`. No cloud accounts needed beyond an optional OpenAI key. ## Run it ```bash cp .env.example apps/api/.env # then trim to th …