System architecture

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.

Worker & messaging AI & profile Job search & trust Applications Monitoring
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
        
Tool stack

The tools behind each step

Each group is a distinct layer in the worker-to-application journey.

WhatsApp Meta
Worker channel

WhatsApp Cloud API and Meta webhooks.

Next.js TypeScript
Application engine

Next.js API routes and TypeScript logic.

Google Gemini OpenRouter
Voice and AI

Gemini transcription; AI profile extraction.

Resend
Application routes

BoringProject, direct contact, Resend, or hand-off.

Trigger.dev GitHub ngrok
Automation and delivery

Trigger.dev watch runs, GitHub, and ngrok local demos.

Human-first input

Workers can send one text or voice note in English, Roman Urdu, Urdu, Roman Pashto, or Pashto.

Real jobs first

Live sources are filtered and ranked. Fallback matches remain visible only when clearly marked for testing.

Safe application flow

Applications use the best available route and avoid claiming a submission unless there is a real or explicit demo receipt.