A comprehensive, production-ready full-stack web application connecting homeowners and contractors with skilled construction workers.
Similar to Uber/Fiverr but specifically designed for the construction industry
Features • Demo • Installation • Documentation • Contributing
Modern, responsive landing page showcasing platform features and call-to-action
Advanced search with skill-based filtering, location, price range, and availability
Comprehensive dashboard with booking management, projects, and quick actions
Earnings tracking, job management, and availability settings
Complete booking lifecycle management with status tracking
Smart calculator with common materials library and PDF export
Browse and order construction materials from verified hardware stores
Detailed insights and performance metrics for all user types
Complete platform management with user, booking, and transaction oversight
Wandura revolutionizes the construction labor marketplace by connecting:
| Stakeholder | Benefits |
|---|---|
| Homeowners | Easy access to verified skilled workers with transparent pricing |
| Contractors | Quick hiring of specialized labor for projects |
| Workers | Steady job opportunities with fair compensation |
| Hardware Stores | Direct sales channel to construction professionals |
- ✅ Multi-role registration (Customer, Worker, Hardware Store, Admin)
- ✅ JWT-based authentication with NextAuth.js
- ✅ Role-based access control (RBAC)
- ✅ Secure password hashing with bcrypt
- ✅ Protected API routes and pages
- ✅ Session management
- ✅ Professional profile creation with portfolio
- ✅ Skills: Mason, Welder, Carpenter, Tile Layer, Plumber, Electrician, Steel Fixer, Painter
- ✅ Daily/hourly rate setting
- ✅ Experience and certification showcase
- ✅ Location-based visibility
- ✅ Availability calendar management
- ✅ Rating and review system
- ✅ Earnings dashboard with wallet
- ✅ Job history tracking
- ✅ Accept/Reject booking requests
- ✅ Advanced worker search with multiple filters
- ✅ Skill-based filtering
- ✅ Location and price range filters
- ✅ Rating-based sorting
- ✅ Google Maps integration
- ✅ Booking by day/hour
- ✅ Project scheduling
- ✅ Real-time chat with workers
- ✅ Secure Stripe payments
- ✅ Review and rating submission
- ✅ Active project tracking
- ✅ Project creation and organization
- ✅ Worker assignment to projects
- ✅ Task list management
- ✅ Material tracking
- ✅ Budget monitoring
- ✅ Progress visualization
- ✅ Notes and documentation
- ✅ Add unlimited materials
- ✅ Quantity and unit price input
- ✅ Auto-calculation of totals
- ✅ Common materials library
- ✅ Save estimates to account
- ✅ Export to PDF
- ✅ Share estimates
- ✅ Store dashboard
- ✅ Product catalog management
- ✅ Price and stock management
- ✅ Order processing
- ✅ Delivery status tracking
- ✅ Customer ratings
- ✅ Stripe integration
- ✅ Secure checkout
- ✅ Platform commission (10%)
- ✅ Worker wallet system
- ✅ Withdrawal management
- ✅ Transaction history
- ✅ Payment webhooks
- ✅ 1-5 star rating system
- ✅ Written reviews
- ✅ Average rating calculation
- ✅ Review moderation
- ✅ Booking confirmations
- ✅ Job acceptance/rejection alerts
- ✅ Payment notifications
- ✅ Delivery updates
- ✅ System announcements
- ✅ Role-specific metrics
- ✅ Time-based filtering (7/30/90 days)
- ✅ Earnings reports
- ✅ Booking statistics
- ✅ Performance insights
| Category | Technology |
|---|---|
| Framework | Next.js 14 (App Router) |
| Language | TypeScript 5.3 |
| Styling | TailwindCSS 3.4 |
| UI Components | Radix UI + Custom Components |
| Database | PostgreSQL |
| ORM | Prisma 5.8 |
| Authentication | NextAuth.js 4.24 |
| Payments | Stripe |
| Maps | Google Maps API |
| State Management | Zustand |
| Form Validation | Zod |
| Icons | Lucide React |
| Date Handling | date-fns |
WANDURA/
├── app/ # Next.js App Router
│ ├── api/ # API Routes
│ │ ├── auth/ # Authentication endpoints
│ │ ├── workers/ # Worker CRUD operations
│ │ ├── bookings/ # Booking management
│ │ ├── projects/ # Project management
│ │ ├── products/ # Product catalog
│ │ ├── estimates/ # Cost estimates
│ │ ├── analytics/ # Analytics data
│ │ ├── chat/ # Messaging
│ │ ├── notifications/ # Notification system
│ │ ├── payments/ # Stripe integration
│ │ └── webhooks/ # External webhooks
│ ├── admin/ # Admin panel
│ ├── analytics/ # Analytics dashboard
│ ├── auth/ # Auth pages (signin/signup)
│ ├── dashboard/ # User dashboards
│ │ ├── bookings/ # Booking management
│ │ └── projects/ # Project management
│ ├── estimator/ # Cost estimator tool
│ ├── stores/ # Hardware store listing
│ └── workers/ # Worker search & profiles
├── components/ # Reusable components
│ └── ui/ # Base UI components
│ ├── button.tsx
│ ├── card.tsx
│ ├── input.tsx
│ ├── select.tsx
│ ├── toast.tsx
│ └── ...
├── lib/ # Utility libraries
│ ├── auth.ts # Auth configuration
│ ├── prisma.ts # Prisma client
│ ├── stripe.ts # Stripe configuration
│ ├── utils.ts # Helper functions
│ └── validations.ts # Zod schemas
├── prisma/ # Database
│ ├── schema.prisma # Database schema
│ └── seed.ts # Seed data
├── types/ # TypeScript types
│ ├── index.ts
│ └── next-auth.d.ts
├── docs/ # Documentation
│ └── screenshots/ # App screenshots
├── .env.example # Environment template
├── package.json # Dependencies
├── tailwind.config.ts # Tailwind configuration
└── tsconfig.json # TypeScript configuration
- Node.js 18+ and npm/yarn
- PostgreSQL database
- Stripe account (for payments)
- Google Maps API key (for location features)
- Clone the repository
git clone https://github.com/SadeeshaJayaweera/wandura.git
cd wandura- Install dependencies
npm install- Set up environment variables
Create a .env file in the root directory:
# Database
DATABASE_URL="postgresql://username:password@localhost:5432/wandura?schema=public"
# NextAuth
NEXTAUTH_URL="http://localhost:3000"
NEXTAUTH_SECRET="generate-with-openssl-rand-base64-32"
# Stripe
NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY="pk_test_your_key"
STRIPE_SECRET_KEY="sk_test_your_key"
STRIPE_WEBHOOK_SECRET="whsec_your_webhook_secret"
# Google Maps
NEXT_PUBLIC_GOOGLE_MAPS_API_KEY="your_google_maps_api_key"
# App Config
NEXT_PUBLIC_APP_URL="http://localhost:3000"
PLATFORM_COMMISSION_RATE="0.10"- Set up the database
# Generate Prisma client
npx prisma generate
# Run migrations
npx prisma migrate dev --name init
# Seed the database with sample data
npm run prisma:seed- Start the development server
npm run dev- Open your browser Navigate to http://localhost:3000
| Model | Description |
|---|---|
| User | Authentication and basic user data |
| Profile | Customer profile information |
| WorkerProfile | Worker-specific data (skills, rates, portfolio) |
| StoreProfile | Hardware store information |
| Booking | Worker booking/hiring records |
| Project | Customer project management |
| Task | Project tasks |
| Material | Project materials |
| Estimate | Cost estimates |
| Product | Hardware store products |
| Order | Material orders |
| Review | Ratings and reviews |
| Transaction | Payment records |
| Notification | User notifications |
- Role: CUSTOMER, WORKER, HARDWARE_STORE, ADMIN
- SkillType: MASON, TILE_LAYER, WELDER, STEEL_FIXER, CARPENTER, PLUMBER, ELECTRICIAN, PAINTER
- BookingStatus: PENDING, ACCEPTED, REJECTED, IN_PROGRESS, COMPLETED, CANCELLED
- PaymentStatus: PENDING, COMPLETED, FAILED, REFUNDED
After running the seed script:
| Role | Password | |
|---|---|---|
| Admin | admin@wandura.com | password123 |
| Customer | john.doe@example.com | password123 |
| Worker | mike.mason@example.com | password123 |
| Hardware Store | contact@buildersmart.com | password123 |
| Method | Endpoint | Description |
|---|---|---|
| POST | /api/auth/signup |
Register new user |
| POST | /api/auth/signin |
Sign in user |
| POST | /api/auth/signout |
Sign out user |
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/workers |
Get all workers (with filters) |
| GET | /api/workers/[id] |
Get worker by ID |
| POST | /api/workers |
Create worker profile |
| PATCH | /api/workers/[id] |
Update worker profile |
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/bookings |
Get user's bookings |
| POST | /api/bookings |
Create new booking |
| PATCH | /api/bookings/[id] |
Update booking status |
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/projects |
Get user's projects |
| POST | /api/projects |
Create new project |
| PATCH | /api/projects/[id] |
Update project |
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/estimates |
Get saved estimates |
| POST | /api/estimates |
Save new estimate |
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/analytics |
Get analytics data |
npm run dev # Start development server
npm run build # Build for production
npm run start # Start production server
npm run lint # Run ESLint
npm run prisma:generate # Generate Prisma client
npm run prisma:migrate # Run database migrations
npm run prisma:seed # Seed database with sample data
npm run prisma:studio # Open Prisma Studionpm run build
npm run start| Platform | Use Case |
|---|---|
| Vercel | Frontend hosting (recommended for Next.js) |
| Railway | PostgreSQL database |
| Neon | Serverless PostgreSQL |
| AWS | Full-stack deployment |
| DigitalOcean | VPS deployment |
Ensure all environment variables are set:
DATABASE_URL- Production database connection stringNEXTAUTH_SECRET- Strong random string (32+ characters)NEXTAUTH_URL- Production URL- Stripe production keys
- Google Maps API key with restrictions
- ✅ JWT-based authentication
- ✅ Password hashing with bcrypt
- ✅ Protected API routes
- ✅ Role-based access control
- ✅ Secure payment processing via Stripe
- ✅ SQL injection prevention via Prisma
- ✅ XSS protection
- ✅ CSRF protection
| Feature | Description |
|---|---|
| ✅ Comprehensive | Complete ecosystem for construction labor marketplace |
| ✅ Scalable | Enterprise-level architecture built for growth |
| ✅ Modern | Latest Next.js 14 with App Router |
| ✅ Type-Safe | 100% TypeScript with strict mode |
| ✅ Secure | Industry-standard security practices |
| ✅ Fast | Optimized performance and loading |
| ✅ Beautiful | Modern UI with TailwindCSS |
| ✅ Production-Ready | Deployment-ready codebase |
| Metric | Count |
|---|---|
| API Endpoints | 25+ |
| Database Models | 14 |
| UI Components | 15+ |
| Pages | 12+ |
| Features | 50+ |
Contributions are welcome! Please follow these steps:
- Fork the repository
- Create your feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'Add some AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
- Next.js - The React framework
- Prisma - Next-generation ORM
- Stripe - Payment processing
- Radix UI - Accessible components
- TailwindCSS - Utility-first CSS
- Vercel - Deployment platform
For support, open an issue in the repository.