The USSD Job Board is a platform designed to connect job seekers and employers in Kenya through a simple, accessible USSD interface. By leveraging USSD technology, the platform enables users without smartphones or internet access to search and apply for jobs, and for employers to post job opportunities, all via basic mobile phones.
- USSD Job Search: Job seekers can search and apply for jobs using a USSD menu on any mobile phone.
- Employer Portal: Employers can post job listings and manage applications.
- Location-Based Matching: Jobs are matched to seekers based on their location (county, sub-county, ward).
- Application Management: Track job applications and statuses.
- Payment Integration: Supports mobile payments (e.g., M-Pesa) for premium job postings.
- User Types: Supports both job seekers and employers with tailored experiences.
- Job Seekers:
- Dial a USSD code (e.g., *123#) to access the job board menu.
- Browse or search for jobs by category or location.
- Apply for jobs directly from the USSD menu.
- Employers:
- Register and post job opportunities via the web API or USSD.
- Manage job listings and view applications.
- Matching:
- The system matches job seekers to jobs based on their profile and location.
- Backend: FastAPI (Python)
- Database: PostgreSQL (with SQLAlchemy ORM)
- Task Queue: Celery with Redis
- USSD Integration: Africa's Talking API
- Payments: M-Pesa integration
- Containerization: Docker & Docker Compose
app/- Main application codeapi/- API endpoints (USSD, jobs, applications, payments, users, employers)models/- Database models (Job, User, Application, etc.)services/- Business logic and integrationsschemas/- Pydantic schemas for data validationcore/- Configuration, database, and securityutils/- Utility functions
scripts/- Utility scripts (e.g., loading Kenya locations)
- USSD Endpoint:
/api/v1/ussd/callback(POST)- Handles USSD requests from Africa's Talking.
- Jobs API:
/api/v1/jobs/GET /nearby- Find jobs near a location (requires authentication)POST /- Create a new job (employers only)
- Other APIs: Applications, Payments, Users, Employers (see code for details)
- User:
id,phone_number,full_name,age,education_level,skills,county,user_type, etc.
- Job:
id,employer_id,title,description,category,requirements,salary_range,location,status, etc.
- Application:
- Job applications linking users to jobs.
- Docker & Docker Compose
- (Optional) Python 3.8+ and pip for local development
- Clone the repository:
git clone <repo-url> cd ussd_job
- Copy and configure your
.envfile with the required environment variables (see below). - Start the services:
docker-compose up --build
- The API will be available at
http://localhost:8000.
- Install dependencies:
pip install -r requirements.txt
- Set up PostgreSQL and Redis (see
docker-compose.ymlfor configuration). - Run database migrations (if any).
- Start the FastAPI server:
uvicorn app.main:app --reload
To load location data (counties, sub-counties, wards):
python scripts/load_kenya_locations.pySet these in your .env file:
DATABASE_URL- PostgreSQL connection stringREDIS_URL- Redis connection stringMPESA_CONSUMER_KEY,MPESA_CONSUMER_SECRET,MPESA_SHORTCODE,MPESA_PASSKEY- M-Pesa API credentialsAFRICAS_TALKING_API_KEY,AFRICAS_TALKING_USERNAME- Africa's Talking API credentialsSECRET_KEY- JWT secretALGORITHM- JWT algorithm (default: HS256)ACCESS_TOKEN_EXPIRE_MINUTES- Token expiry (default: 30)
- FastAPI, SQLAlchemy, Alembic
- PostgreSQL, Redis, Celery
- Africa's Talking, M-Pesa
- Docker, Docker Compose
- Nelson Njihia — nelsonnjihia2006@gmail.com
- Elizabeth Julius — bethjulius08@gmail.com
- Fork the repository
- Create a new branch (
git checkout -b feature/your-feature) - Commit your changes (
git commit -am 'Add new feature') - Push to the branch (
git push origin feature/your-feature) - Open a Pull Request
For questions or support, please contact the maintainers at