Inspiration

Job hunting in Vietnam often feels like shouting into the void: CVs go unanswered, salaries hide behind "negotiable", and fake postings ask for deposit fees. We asked: what if a job site competed on honesty instead of volume? That became our tagline — Real jobs. Clear pay. Real replies.

What it does

JobPortal is a job marketplace for Vietnam that connects candidates, employers and admins, with transparency built into every step.

For candidates

  • Search jobs by keyword, location, industry, salary, level and experience. Search ignores Vietnamese diacritics, and you can filter to Fast responders only.
  • ⚡ One-click apply with the default CV. No CV yet? A PDF CV is generated from the profile and submitted in the same click.
  • Online CV builder: 3 templates, custom colors, live PDF preview, and save to "My CVs".
  • AI job recommendations: a match percentage, the skills you have and the ones you're missing, and a short explanation written by Claude.
  • Track every application's status in real time, chat with the recruiter, save jobs, follow companies, get job alerts, and write anonymous company reviews.

For employers

  • Create a company profile and get it verified with a business license.
  • Post jobs and move applicants through a clear pipeline: Submitted → Viewed → Shortlisted → Interview → Offer / Rejected. Interview invites and rejection letters notify the candidate automatically.
  • Message candidates, keep private notes, and invite teammates as owners or members.
  • See a dashboard with views, applications, a hiring funnel, and the company's public response score.
  • Buy plans with VietQR bank transfer to feature jobs at the top of search and unlock contact details of candidates found in "Search CVs".

For admins

  • Moderate jobs, verify companies, handle reports, approve reviews, and confirm payments.
  • Manage users, categories, site content and settings, with an audit log of every admin action.
  • Answer a customer-support inbox and maintain the FAQ that powers the chatbot.

For everyone

  • A floating support chatbot answers instantly from the FAQ (using Claude if configured) and hands the conversation to a human admin when needed.
  • Realtime notifications, mobile-friendly UI, and privacy by default: anonymized AI input, CVs only through short-lived signed links, and contact details hidden until a candidate applies or opts in.

How we built it

NestJS + TypeORM on SQL Server, React 19 + Vite + Tailwind, Server-Sent Events for realtime chat and notifications, Docker + Caddy for deployment. AI job recommendations start from a transparent score:

$$S(c,j) = 40\,s_{\text{skill}} + 15\,s_{\text{title}} + 15\,s_{\text{category}} + 10\,s_{\text{location}} + 10\,s_{\text{exp}} + 10\,s_{\text{salary}}$$

Claude then explains the top matches using an anonymized profile. Each company gets a public response score $R = \frac{\text{answered}}{\text{eligible}}$; companies with $R \ge 0.8$ and an average reply time $\bar t \le 72\,\text{h}$ earn a ⚡ Fast responder badge.

Challenges we ran into

SQL Server setup and its "multiple cascade paths" rule; a 7-hour time-zone bug between GETDATE() and UTC timestamps; diacritic-insensitive Vietnamese search; and keeping the support chatbot grounded in the FAQ, with a human handoff and a fallback when the AI is unavailable.

Accomplishments that we're proud of

  • A complete three-sided product, not a demo screen. Candidates, employers and admins each have a full workflow: apply → screen → interview → offer, job moderation, company verification, reports, reviews, plans and payments, and customer support.
  • The ⚡ Fast responder badge. It turns "will anyone ever reply?" into a number candidates can filter by. We think it is the most honest feature on the site, and it gives recruiters a reason to reply.
  • One-click apply that works even without a CV. If a candidate hasn't uploaded one, we generate a clean PDF from their profile and submit it in the same tap.
  • AI that explains itself and degrades gracefully. Job matches come with a score breakdown and missing skills, and the support bot answers only from the FAQ. With no API key, both features still work on rules alone.
  • Privacy by design. Data sent to the AI is anonymized. CVs are only reachable through 5-minute signed links. Candidate contact details stay hidden unless the candidate applies or opts in.
  • Quality we can show. 120+ unit tests, an end-to-end test of the full hiring flow against real SQL Server (11/11 passing), 307 manual test cases traced to PRD requirement IDs, CI on every push, and a one-command VPS setup with HTTPS and daily backups.
  • Built for Vietnam. Diacritic-insensitive search, VietQR payment codes, Vietnamese-first UI, and time handling we fixed carefully so that "2 hours ago" means 2 hours ago in UTC+7.

What we learned

Trust is a feature you can measure. Start with an explainable baseline before adding AI. Time zones and encodings are where "it works on my machine" lives.

What's next for job-portal

Built With

  • anthropic-api
  • caddy
  • claude
  • docker
  • github-action
  • jest
  • jwt
  • nestjs
  • nginx
  • node.js
  • pdfmake
  • react
  • react-hook-form
  • react-router
  • sever-sent-event
  • sqlsever
  • swagger
  • tailwindcss
  • tanstack-query
  • tiptap
  • typeorm
  • typescript
  • vieqr
  • vite
  • zod
Share this project:

Updates

Submission history