"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.
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.
- 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
- 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
git clone <your-repo>
cd fundihuru
npm install- Create a project at supabase.com
- Go to SQL Editor, paste and run
supabase_schema.sql - Copy your project URL and anon key
cp .env.example .env
# Fill in your Supabase credentials in .envnpm run devnpm run build
# Deploy the /dist folder to Vercel, Netlify, or any static host| 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 |
- 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
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
- Swahili labels throughout (fundi categories, greetings)
- TZS (Tanzanian Shilling) currency formatting
- Dar es Salaam neighborhoods
- Designed for East African market
Built for Dar es Salaam, Tanzania 🇹🇿 habari@fundihuru.co.tz
Built with ❤️ for Tanzania's informal economy