Skip to content
Mulenga Chitundu edited this page Jul 10, 2025 · 2 revisions

Welcome to the HandyHire Wiki!

This Wiki provides comprehensive documentation for the HandyHire project. HandyHire is a social impact-driven multi-role application specifically designed to empower semi-skilled labor in developing countries. It connects homeowners and businesses with a readily available, local workforce, aiming to formalize informal job markets and reduce reliance on traditional, often limited, job-seeking methods.


Table of Contents


Mission & Vision

Mission: To empower semi-skilled laborers in developing countries by providing an accessible, transparent, and efficient digital platform for job discovery, skill showcasing, and reputation building.

Vision: To foster economic growth and reduce unemployment in underserved communities by formalizing informal labor markets and creating direct pathways to dignified work opportunities.


Getting Started

If you're new to the project, start by following the installation instructions in the README. This will help you get the development environment set up.


Project Architecture

High-Level Overview

HandyHire is a robust Django-based web application built with a focus on accessibility, efficiency, and scalability, even in environments with limited internet access or older devices. Its design prioritizes clear user flows for different roles and a lightweight frontend (Tailwind CSS) to ensure quick loading times.

Key Django Apps

The application is structured into several core Django apps, each serving a critical function in facilitating the platform's social and economic goals:

  • users: Manages the custom user model (CustomUser) including the role field (homeowner/client, tradesperson/laborer, admin). Focuses on simplified registration and profile management.
  • jobs: Handles all aspects of service requests by homeowners/clients, including detailed job descriptions, categories relevant to local semi-skilled trades, and clear status updates.
  • quotes: Manages bids submitted by tradespeople in response to job postings, facilitating clear communication and negotiation.
  • reviews: Enables homeowners/clients to provide verifiable ratings and comments on completed jobs, building a crucial reputation system for tradespeople.
  • profiles: Dedicated to tradesperson profiles, allowing them to showcase their skills, experience, and a portfolio of completed work (even photos taken with basic phones).
  • admin_dashboard: Provides administrative oversight, crucial for ensuring fair practices, verifying new users (especially tradespeople), and resolving disputes.
  • core: Contains foundational elements like base templates and shared utilities, with an emphasis on optimizing for low-bandwidth environments.

Database Schema Highlights

The data model is designed to support direct connections and transparent transactions:

  • CustomUser: The central user entity, with role-based permissions tailored for various interactions.
  • Job: Detailed service request, often including location data to facilitate local matching.
  • JobMedia: Stores visual proof of job requirements, supporting users who prefer visual communication over extensive text.
  • Quote: Formalized offer from a tradesperson, encouraging competitive and transparent bidding.
  • RatingAndComment: Builds social proof and trust, vital for tradespeople without formal certifications.
  • TradespersonProfile: A digital CV and portfolio for semi-skilled workers, showcasing their practical experience.
  • PastWork: Captures details and images of completed projects for the tradesperson's portfolio.

Core Features & Impact

HandyHire delivers targeted features to create real-world impact for semi-skilled laborers:

  • For Tradespeople (Laborers):

    • Access to a Wider Market: No longer limited to word-of-mouth or fixed locations; find jobs across their service area.
    • Professional Identity: Create a digital profile and verifiable work history, enhancing their professional standing.
    • Fairer Compensation: Transparent bidding encourages competitive pricing, potentially leading to better wages than informal arrangements.
    • Skill Recognition: Portfolio feature allows demonstration of practical skills, overcoming challenges of formal qualifications.
    • Reduced Waiting Time: Actively seek jobs rather than waiting to be found, improving income consistency.
  • For Homeowners/Clients:

    • Reliable Workforce: Access a wider pool of semi-skilled labor with verifiable reviews.
    • Convenience: Easily post jobs and receive bids without extensive searching.
    • Transparency: Clear quotes and feedback mechanisms provide peace of mind.
    • Support Local Economy: Directly contribute to local employment and skill development.
  • For Administrators:

    • Platform Integrity: Tools for user verification and dispute resolution build trust.
    • Data for Development: Insights into local job demand and labor supply can inform community development initiatives.
    • Scalability: A robust backend ready for expansion to more communities or service categories.

User Roles & Their Benefits

  • Homeowner/Client: Individuals or small businesses needing various services (e.g., plumbing, carpentry, cleaning, basic construction).
    • Benefit: Easy access to reliable, local, and often more affordable semi-skilled labor.
  • Tradesperson/Laborer: Semi-skilled individuals in various trades, often working informally, seeking consistent work.
    • Benefit: A direct channel to find new jobs, build a reputation, and formalize their income streams.
  • Admin: Oversees platform operations, user verification, content moderation, and potentially community outreach for onboarding.
    • Benefit: Ensures the platform's credibility and supports its social mission.

Development Guidelines

Coding Standards

  • Python (PEP 8 & Black): Strict adherence to PEP 8 for readability and consistency. Use Black for automated formatting.
  • Django Best Practices: Follow Django's conventions for app design, ORM usage, and security.
  • Frontend (Tailwind CSS): Prioritize utility-first CSS for efficiency and to minimize custom CSS, which is faster to load.
  • Mobile-First Design: Ensure all new features are designed with mobile users (who may have limited data plans or older devices) in mind first.

Branching Strategy

We use a GitHub Flow-like strategy with main as the stable branch. Feature branches (feature/descriptive-name) for new work, merged via Pull Requests after review.

Commit Messages

Use clear, descriptive commit messages. Aim for the Conventional Commits style to clearly convey the purpose of each change.

Running Tests Locally

python manage.py test