WhatsApp Cloud API and Meta webhooks.
A WhatsApp-native job agent, from first message to application.
Kaamyaabi turns an informal text or voice note into a worker profile, ranks job opportunities, and guides safe applications while keeping the worker informed in WhatsApp.
flowchart LR
subgraph W["Worker experience"]
direction TB
U(["Worker"]):::worker
WA["WhatsApp"]:::channel
U <--> WA
end
subgraph C["Kaamyaabi conversation platform"]
direction TB
WH["Meta webhook<br/>/api/whatsapp/webhook"]:::channel
ORCH["Conversation agent<br/>session · language · profile state"]:::platform
CARD["Interactive job cards<br/>Approve · Learn more"]:::channel
WH --> ORCH --> CARD
end
subgraph AI["AI and profile intelligence"]
direction TB
MEDIA["Download WhatsApp audio"]:::ai
STT["Gemini transcription"]:::ai
PROF["Profile extraction<br/>Gemini / OpenRouter"]:::ai
WORKER["Worker profile<br/>role · location · experience<br/>salary · skills · availability"]:::ai
MEDIA --> STT --> PROF --> WORKER
end
subgraph J["Job search, matching and trust"]
direction TB
HUNT["Job-hunting agent"]:::jobs
EXA["Exa live search"]:::jobs
SOURCES["Job boards · ATS<br/>company careers pages"]:::jobs
RANK["Filter and rank<br/>role · area · salary · dedupe"]:::jobs
TRUST["Trust checks<br/>worker safety · job safety"]:::trust
FALLBACK["Clearly labelled<br/>fallback matches"]:::jobs
HUNT --> EXA --> SOURCES --> RANK --> TRUST
HUNT -. "no live results" .-> FALLBACK
end
subgraph A["Application and hand-off"]
direction TB
APPLY["Application agent"]:::app
AUTO["BoringProject<br/>auto-apply"]:::app
ROUTES["Official apply link<br/>email · phone · WhatsApp"]:::app
DISCOVER["Company-contact discovery"]:::app
EMAIL["Resend email<br/>or mock receipt"]:::app
MANUAL["Manual hand-off<br/>ready-to-send application"]:::app
STATUS["Application status<br/>receipt · DONE confirmation"]:::app
APPLY --> AUTO --> STATUS
APPLY --> ROUTES --> STATUS
APPLY --> DISCOVER --> EMAIL --> STATUS
APPLY --> MANUAL --> STATUS
end
subgraph M["Proactive job watch"]
direction TB
SCHEDULE["Trigger.dev / cron"]:::watch
WATCH["Watch runner<br/>/api/watch/run"]:::watch
ALERT["New-match alert"]:::watch
SCHEDULE --> WATCH --> ALERT
end
ENV[("Environment configuration<br/>WhatsApp · AI · Exa · apply · watch secrets")]:::config
WA --> WH
WH --> MEDIA
ORCH --> PROF
ORCH --> HUNT
WORKER --> HUNT
TRUST --> CARD
FALLBACK --> CARD
CARD --> WA
ORCH --> APPLY
STATUS --> WA
WATCH --> HUNT
ALERT --> WA
ENV -. "configures" .-> WH
ENV -. "configures" .-> PROF
ENV -. "configures" .-> EXA
ENV -. "configures" .-> APPLY
ENV -. "configures" .-> WATCH
classDef worker fill:#dff3e4,stroke:#258a55,color:#123b25,stroke-width:2px
classDef channel fill:#dbeafe,stroke:#2276a8,color:#10354e,stroke-width:2px
classDef platform fill:#ece5ff,stroke:#7657b8,color:#321c63,stroke-width:2px
classDef ai fill:#fef3c7,stroke:#b87900,color:#593900,stroke-width:2px
classDef jobs fill:#dff7f5,stroke:#168b84,color:#0d4542,stroke-width:2px
classDef trust fill:#ffe4e0,stroke:#b9483c,color:#5c211a,stroke-width:2px
classDef app fill:#e8edff,stroke:#526bc1,color:#20346f,stroke-width:2px
classDef watch fill:#f9e4ff,stroke:#a64bb7,color:#54215d,stroke-width:2px
classDef config fill:#f2f2f2,stroke:#666,color:#222,stroke-width:2px
The tools behind each step
Each group is a distinct layer in the worker-to-application journey.
Next.js API routes and TypeScript logic.
Gemini transcription; AI profile extraction.
Exa searches job boards, ATSs, and career pages.
BoringProject, direct contact, Resend, or hand-off.
Trigger.dev watch runs, GitHub, and ngrok local demos.
Workers can send one text or voice note in English, Roman Urdu, Urdu, Roman Pashto, or Pashto.
Live sources are filtered and ranked. Fallback matches remain visible only when clearly marked for testing.
Applications use the best available route and avoid claiming a submission unless there is a real or explicit demo receipt.