Over the past months, I’ve been building WorqNow, a WhatsApp-based AI Job Assistant that helps users find jobs, build CVs, get personalised recommendations, and learn career skills — all through simple natural-language chat.
What started as a small idea has grown into a system handling thousands of messages, real-time job searches across multiple APIs, personalised recommendations, and automated CV generation.
This article breaks down the engineering decisions, system architecture, scaling challenges, and technical lessons behind building a modern WhatsApp automation platform.
1. The Problem: Job Search is Broken for Millions
Most job seekers especially in Africa and emerging markets rely on:
- Slow job websites
- Fake job groups
- Cluttered Telegram channels
- Manual searches
- Outdated listings
But almost everyone already uses WhatsApp, making it the perfect channel for:
- Instant job alerts
- Natural language search
- Personalised recommendations
- CV building
- No sign-up, no app download
The challenge was building a system that feels like a human assistant but scales like a cloud platform.
2. High-Level Architecture Overview
Below is the simplified architecture that powers WorqNow:
User (WhatsApp)
↓
Meta WhatsApp Cloud API (Webhook)
↓
FastAPI Backend (Python)
├── Intent Recognition Engine
├── Job Aggregation Service
├── CV Builder Workflow
├── MongoDB User Store
└── APScheduler (Background Jobs)
↓
External APIs:
├── Remotive API
├── JSearch API (RapidAPI)
├── AI Models for CV Drafting
↓
Response Sent Back to WhatsApp
This event-driven architecture allows WorqNow to remain fast, scalable, and modular.
3. Intelligent Intent Recognition
Real users don’t type commands like developers.
They type:
- “find me backend jobs in london”
- “I need a cv”
- “my location is lagos”
- “show me recommended jobs”
To support flexible language, I built a lightweight intent engine combining:
- ✓ Keyword extraction
- ✓ Fuzzy matching
- ✓ Context memory
- ✓ User profile learning
Example:
if fuzzy_match(["search", "find", "job"], message):
intent = "keyword_search"
elif "location" in message or "in " in message:
intent = "set_location"
elif fuzzy_match(["make cv", "build cv", "resume"], message):
intent = "cv_builder"
This allows the bot to understand human language, not just strict commands.
4. Real-Time Job Aggregation Layer
WorqNow fetches live job data from two major APIs:
1. Remotive API
Fast and clean for remote-friendly jobs.
2. JSearch API (RapidAPI)
Great for country-specific searches.
To avoid hitting rate limits and to speed up response times, I built a combined aggregator:
async def search_jobs(keyword, location):
remotive = fetch_remotive(keyword, location)
jsearch = fetch_jsearch(keyword, location)
results = merge_and_dedupe(remotive + jsearch)
return results[:10]
This ensures:
- Up to 10 high-quality jobs returned instantly
- Duplicates removed
- Faster response times
📍 5. Persistent User Profiles (MongoDB)
Every user has a personal profile stored in MongoDB:
{
"wa_id": "234916XXXXXXX",
"name": "John Doe",
"preferred_location": "London",
"search_history": ["backend developer", "ui/ux"],
"subscription": true,
"cv_state": {}
}
This allows WorqNow to:
- Offer personalised job recommendations
- Save preferred locations
- Continue CV-building sessions
- Send scheduled job alerts
MongoDB was chosen because:
- It’s flexible
- Schema-less
- Great for user-driven apps
- Handles rapid iteration
6. Background Schedulers for Job Alerts
I used APScheduler to run background tasks like:
- Daily personalised job recommendations
- CV reminder follow-ups
- Category-specific job alerts
- Admin broadcast messages
Example:
scheduler.add_job(
send_daily_jobs,
trigger="cron",
hour=9,
)
This ensures users receive fresh jobs every morning without interacting manually.
7. CV Builder Workflow (Q&A Flow + PDF Generation)
The CV builder works through a guided WhatsApp conversation:
- Ask for name
- Ask for education
- Ask for work experience
- Ask for skills
- Ask for projects
- Auto-generate a professional CV using WeasyPrint
- Send the final PDF back to the user
Template is powered by Jinja2 + HTML/CSS → PDF.
The workflow state is saved per user so they can continue anytime.
8. Scaling Challenges & Solutions
Challenge 1: Meta API Rate Limits
Solution: Message queue + retry logic
Challenge 2: FastAPI concurrency
Solution: Uvicorn with workers + async handlers
Challenge 3: Large job API responses
Solution: In-memory caching + deduping
Challenge 4: Natural language variability
Solution: Hybrid intent engine (keywords + fuzzy + context)
Challenge 5: User spikes during broadcasts
Solution: Batch sending + exponential backoff
💡 9. Key Technical Decisions That Made the System Scalable
- Event-driven architecture (webhooks → handlers)
- Async FastAPI instead of blocking frameworks
- MongoDB for flexible user schemas
- Scheduler for automation
- Modular design for adding new features easily
- Reusable message templates to keep responses consistent
WorqNow is now structured like a mini SaaS backend, not just a chatbot.
10. The Future of WorqNow
Upcoming features:
- Machine-learning job recommendations
- Voice message understanding
- More APIs for job aggregation
- AI-powered interview preparation
- Gamified learning roadmap system
- University admission advisor module (paused temporarily)
My long-term goal is to build a career ecosystem inside WhatsApp.
Conclusion
WorqNow started as a simple automation experiment and evolved into a full job–career assistant powered by:
- Clean architecture
- Modular services
- Real-time APIs
- Async processing
- Smart language understanding
- Scalable cloud infrastructure
This project taught me how to design systems that are:
- User-friendly
- Resilient
- Modular
- Fast
- Easy to extend
And most importantly how to build real products people actually use every day

Top comments (0)