Skip to content

Repository files navigation

🔧 FundiHuru — Dar es Salaam's Fundi Marketplace

"Fundi Huru" = Independent Tradesperson (Swahili)

A production-grade web platform connecting Dar es Salaam residents with verified skilled tradespeople (fundis) — electricians, plumbers, carpenters, painters, AC technicians, and more.

🎯 Problem Solved

Over 94% of Tanzania's workforce is informal. When something breaks in your home in Dar es Salaam, you spend hours on WhatsApp begging for referrals. There's no trust layer, no verified reviews, no price transparency, no payment protection. FundiHuru solves all of this.

✨ Features

  • Search & Filter — Browse fundis by category, neighborhood, availability, rating, price
  • Verified Profiles — ID check + VETA certificate verification + background check
  • Secure Escrow Payments — Funds held until client confirms job complete (6-digit code)
  • Real Reviews — Only verified clients can review
  • Two-sided Dashboard — Separate dashboards for clients and fundis
  • Job Posting Board — Clients post jobs, fundis bid on them
  • In-App Messaging — Direct communication between parties
  • Dispute Resolution — Report system with admin oversight
  • Mobile Responsive — Works on all screen sizes

🛠 Tech Stack

  • Frontend: React 18 + Vite + React Router
  • Backend: Supabase (PostgreSQL + Auth + Realtime + Storage)
  • Security: PKCE auth flow, Row Level Security, input sanitization, rate limiting, escrow model
  • Design: Syne + DM Sans fonts, saffron/ocean coastal palette

🚀 Setup

1. Clone & Install

git clone <your-repo>
cd fundihuru
npm install

2. Supabase Setup

  1. Create a project at supabase.com
  2. Go to SQL Editor, paste and run supabase_schema.sql
  3. Copy your project URL and anon key

3. Environment Variables

cp .env.example .env
# Fill in your Supabase credentials in .env

4. Run Development Server

npm run dev

5. Deploy

npm run build
# Deploy the /dist folder to Vercel, Netlify, or any static host

📊 Database Schema

Table Purpose
profiles All users (extends Supabase auth)
fundi_profiles Extra data for fundi accounts
jobs Job postings by clients
bids Fundi bids on jobs
bookings Confirmed bookings with escrow
reviews Verified post-job reviews
messages In-app chat
reports Dispute reports
notifications User notifications

🔒 Security Features

  • Row Level Security (RLS) on ALL tables
  • PKCE OAuth flow
  • XSS prevention via input sanitization
  • Client-side rate limiting (5 auth attempts / minute)
  • Escrow payment protection
  • 6-digit job completion codes
  • No PII in logs or URLs

📁 Project Structure

src/
├── components/
│   ├── Layout.jsx       # App wrapper with Navbar + Footer
│   └── shared.jsx       # Navbar, Footer, FundiCard, Stars, Toast
├── contexts/
│   └── AuthContext.jsx  # Global auth state
├── lib/
│   ├── supabase.js      # Supabase client + security utilities
│   ├── constants.js     # Categories, neighborhoods, etc.
│   └── demoData.js      # Demo fundis for development
└── pages/
    ├── HomePage.jsx     # Hero, categories, featured fundis
    ├── SearchPage.jsx   # Search with multi-filters
    ├── FundiProfilePage.jsx  # Full profile + booking
    ├── PostJobPage.jsx  # Multi-step job posting
    ├── DashboardPage.jsx    # Client + fundi dashboards
    └── AuthPage.jsx     # Sign in / sign up

🌍 Localization

  • Swahili labels throughout (fundi categories, greetings)
  • TZS (Tanzanian Shilling) currency formatting
  • Dar es Salaam neighborhoods
  • Designed for East African market

📞 Contact

Built for Dar es Salaam, Tanzania 🇹🇿 habari@fundihuru.co.tz


Built with ❤️ for Tanzania's informal economy

About

Service marketplace connecting clients with verified local professionals.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages