One AI chat, two BD needslabour law cited like statute · a job hunt centred on BD talent
jobXlaw is a bilingual (English / Bangla) chat over the Bangladesh Labour Act 2006 and its amendments, paired with an AI-ranked job market and a tailored CV / cover-letter studio. Web today; Telegram, WhatsApp and Discord — agentic — on deck.

Image gallery
A closer look at the active jobXlaw surfaces: the public homepage, job portal, labour-law chat, CV studio, and member dashboard.
The problem
Why this is harder than chatMost BD workers, HR managers and SMEs have no affordable way to ask “is this legal?” or “what does the Act say about X?” — and no clean way to produce a professional CV / cover letter in either language. The corpus is statute, not blog posts: every claim has to cite a section, every section comes with sub-sections, amendments and sectoral carve-outs.
Citations, not vibes
A labour-law answer that doesn’t point to a section, sub-section or amendment is worse than no answer — it’s a liability. Every reply has to cite the exact provision it pulled from.
Statute structure is not a PDF
The Bangladesh Labour Act 2006 is parts → chapters → sections → sub-sections → clauses, with amendments stacked on top. Naïve page-chunk RAG flattens that hierarchy and citations rot.
Bilingual on both ends
A worker asks in Bangla; the gazette is partially English; the amendment text mixes scripts. The retriever has to span both languages — and the answer has to come back in whichever the user used.
Sensitive surface area
Termination, wages, maternity, gratuity, retrenchment, provident fund — the queries that drive traffic are the same queries where a hallucination causes real harm. Confidence has to be earned, not asserted.
Labour-law chat that reads like a statute, talks like a colleague.
Ask in English or Bangla. Get a structured answer with scope, current operative language, amendments, and a References footer pointing back to the exact section. Follow-ups, summarise, translate, copy, share — all in one message panel.
- Section / sub-section / amendment indexing — citations survive re-ranking.
- “References” chip on every answer links to the cited Act provision.
- You-might-also-ask suggestions generated from the retrieved context.
- Per-message actions: summarise, translate, vote, bookmark, copy, share, email.
- File panel: drop a termination notice or appointment letter and ask about it inline.

A job market that ranks against your profile, not against the algorithm.
Aggregated postings from BD and global sources — BDJobs, LinkedIn-BD, Adzuna, Ashby, Greenhouse, Lever, Workable, RemoteOK, We Work Remotely, plus user-submitted roles. The “For you” feed scores every role against the candidate’s professional profile and emails subscribers when fresh matches land.
- 8 ingest workers running on cron, normalised into one schema.
- “For you” ranking from skills, seniority, location preferences, language.
- Subscriber emails — opt-in, only when a match crosses the score threshold.
- Paste-link flow: drop any job URL, get it parsed and added to your shortlist.
- One click on a posting opens the tailored CV + cover-letter flow for that role.

A tailored CV and cover letter for the role on the screen.
Click a posting → the studio opens with the role and company pre-filled. Choose a template (Classic, Corporate, Creative, Tech, Academic), pick an accent colour, walk the 4-step wizard — Template → Tailor → Preview → Save — and ship a PDF. Cover letters use the same context.
- Template gallery grouped by tone — Terminal, Blueprint, Stack, Scholar, Thesis…
- Accent picker + free-form hex, mapped through every template consistently.
- 4-step flow: Template → Tailor → Preview → Save. Resume editing later.
- JD-aware tailoring: pulls the role description into the rewrite layer.
- Server-side PDF export, version history, shareable preview links.

Challenges & overcomes
6 hard partsSection-aware chunking
Problem
Raw page chunks shred the hierarchy — a sub-clause loses its parent section and the citation breaks.
Fix
Custom ingester walks the Act tree (parts → chapters → sections → sub-sections), stores hierarchy alongside the vector, and re-attaches the canonical citation at retrieval time.
Bilingual retrieval
Problem
Bangla queries against an EN+BN mixed corpus consistently under-recalled relevant amendments.
Fix
BGE-M3 multilingual embeddings + a per-chunk language tag. Query in Bangla, retrieve across both, answer in the language the user used.
No-citation = no-answer
Problem
Models will gladly answer without grounding. On a labour-law surface that’s how you ship harm.
Fix
Hard gate in the prompt + response schema: if the retrieved context cannot support a claim, the answer says so. Every claim renders with the cited section in a References footer.
Content-gap curator loop
Problem
Real questions out-paced the indexed corpus — leave entitlements, recent amendments, niche sectors.
Fix
Every low-confidence or unresolved answer becomes a curation ticket in the admin console. Curators add the source; the next ingest pass closes the gap.
Eight job feeds, one schema
Problem
BDJobs HTML, LinkedIn-BD RSS, Adzuna JSON, Greenhouse / Lever / Ashby / Workable APIs, RemoteOK / WWR — every shape different, every cadence different.
Fix
A shared normaliser + per-source workers under `ingest/`, with cron coordination and a single Postgres schema. New source = new worker, same downstream.
Personal-relevance email
Problem
A daily job blast is noise. People unsubscribe by week two.
Fix
Match score (skills × seniority × location × language) gates the email. Only roles above the threshold ship — most subscribers get 0–3 emails a week, but every one is on point.
Same brain, every phone
Multi-channel roadmapThe chat, jobs and CV pipelines are exposed as one service. The web app is just the first surface. Telegram and WhatsApp wrap the same endpoints; the Discord build adds agentic actions — slash commands that book screenings, post to channels, and watch queries for new matches.
Web
Live build
jobxlaw.com — chat, jobs, CV studio, blog, resources, account, billing.
Telegram
Bot endpoint drafted
Same brain at `/api/telegram`. Text + file in, answer + PDF out. History syncs to the web account.
Cloud API · personal number
Personal-number tier via WhatsApp Cloud API while pre-launch. Group + DM support. Upload a JD, get a tailored CV back as a PDF inside the thread. Verified-business upgrade waits until volume justifies it.
Discord (agentic, soon)
Designing
Slash commands for chat / jobs / tailor. Agentic mode — book a screening, post to a server channel, watch a query for new matches.
Stack
ProductionHow this stays profitable
Cost notesA bilingual labour-law RAG with multi-channel surfaces could burn money fast on the wrong infra. Every line below is a margin choice — what isn't here (managed PaaS, retail SMTP, per-invocation serverless on background work) is on purpose.
Lightsail + Coolify
Flat monthly host. Coolify ships Docker without managed-PaaS pricing — same delivery surface as Vercel, none of the per-invocation cliff.
Cloudflare for the front door
DNS, WAF and CDN at near-zero marginal cost. Bot traffic is filtered before it ever hits origin, so the host plan stays predictable as traffic scales.
AWS SES for outbound, Cloudflare for inbound
SES sends transactional mail at $0.10 / 1k — an order of magnitude under retail providers. Cloudflare Email Routing terminates inbound mail and fans it into the worker without a paid mailbox.
EC2 for 24/7 agents + cron
Long-running agentic workers and scheduled jobs live on a single EC2 host, off the request path. No serverless cold-starts, no per-invocation bill for background work.
Hybrid inference routing
Light, latency-sensitive calls go direct to pay-per-use APIs. Heavy scoped tasks (curation, evals, batch CV generation) route through RedClaw subscription seats. Margin lives in the routing layer.
WhatsApp Cloud (personal) until it earns the upgrade
Pre-launch volume runs on the free Cloud API personal tier. Verified-business + WABA only when conversation volume actually justifies the verification + per-conversation cost.
Need a bilingual RAG product?
Domain corpus, multi-channel, citations, curator workflow, best-fit ranking — every piece on jobXlaw is reusable on a new corpus and a new language pair.