A modern web platform that connects users with verified local service providers for home repairs and maintenance.
Built with React.js, Node.js, Express.js, and MongoDB.
| Component | URL |
|---|---|
| π₯οΈ Frontend (React) | https://fixora-frontend-zeta.vercel.app/ |
| βοΈ Backend (API) | https://fixora-backend-rqej.onrender.com/ |
| ποΈ Database (MongoDB Atlas) | https://cloud.mongodb.com/v2/690a2fb38c220f45881b8199#/clusters |
Finding reliable electricians, plumbers, and repair professionals is often a challenge β especially in small towns or residential areas.
Many people rely on unverified contacts or word-of-mouth, which leads to:
- β Inconsistent service quality
- πΈ Overcharging or hidden fees
β οΈ Safety and reliability issues
Fixora provides a centralized digital platform that ensures:
β
Verified professionals
β
Transparent pricing
β
Secure bookings and reviews
- System Architecture
- Key Features
- Tech Stack
- API Overview
- Data Flow
- Local Setup Guide
- Deployment
- Future Enhancements
- Contributors
- License
| Layer | Technology |
|---|---|
| Frontend | React.js, React Router, TailwindCSS |
| Backend | Node.js, Express.js |
| Database | MongoDB |
| Authentication | JWT (JSON Web Token) |
| Hosting | Vercel (Frontend), Render (Backend), MongoDB Atlas (Database) |
| Category | Description |
|---|---|
| π§βπΌ Authentication & Authorization | Secure JWT-based login/signup for users, providers, and admins |
| π Service Listings & Search | Browse electricians, plumbers, and cleaners by location and category |
| π Verified Reviews & Ratings | Only verified users can review after completing a job |
| π° Transparent Pricing | Estimated service costs before booking to prevent overcharging |
| π§° Provider Dashboard | Manage bookings, availability, and track earnings |
| π User Dashboard | Manage bookings, view history, and download invoices |
| π¬ Community Help Forum | Ask repair-related questions and get expert or peer help |
| π Cross-Platform Hosting | Fully deployed and accessible on desktop & mobile browsers |
| Endpoint | Method | Description | Access |
|---|---|---|---|
/api/auth/signup |
POST | Register a new user (user or provider) | Public |
/api/auth/login |
POST | Login and set httpOnly JWT cookie | Public |
/api/auth/me |
GET | Get currently authenticated user | Authenticated |
/api/auth/logout |
POST | Logout and clear auth cookie | Authenticated |
| Endpoint | Method | Description | Access |
|---|---|---|---|
/api/providers |
GET | List providers (filters: q, category, city, page, pageSize, sort) |
Public |
/api/providers/:id |
GET | Get full provider profile (bio, phone, categories, location) | Public |
| Endpoint | Method | Description | Access |
|---|---|---|---|
/api/profile/me |
GET | Get my profile | Authenticated |
/api/profile/me |
PUT | Update my profile (avatar, phone, bio, location, categories) | Authenticated |
/api/profile/me |
DELETE | Delete my account | Authenticated |
/api/profile/request-provider |
POST | Request upgrade to provider role | Authenticated |
/api/profile/favorites |
GET | List my favorite providers | Authenticated |
/api/profile/favorites/:providerId |
POST | Add provider to favorites | Authenticated |
/api/profile/favorites/:providerId |
DELETE | Remove provider from favorites | Authenticated |
/api/profile/favorites/check/:providerId |
GET | Check favorite status for provider | Authenticated |
| Endpoint | Method | Description | Access |
|---|---|---|---|
/api/bookings |
POST | Create a booking (body: providerId, serviceTitle, scheduledAt, address, ...) |
Authenticated |
/api/bookings/me |
GET | Get bookings created by the logged-in user (pagination & search) | Authenticated |
/api/bookings/provider |
GET | Get bookings for the logged-in provider | Provider only |
/api/bookings/:bookingId |
GET | Get booking details by id | Authenticated (owner/provider/admin) |
/api/bookings/:bookingId/status |
PATCH | Update booking status (accept/reject/in_progress/completed/cancel) | Provider or User (cancel) |
/api/bookings/me/:masterId |
DELETE | Remove booking from user view (delete UserBooking) | Authenticated |
/api/bookings/provider/:masterId |
DELETE | Remove booking from provider view (delete ProviderBooking) | Provider only |
| Endpoint | Method | Description | Access |
|---|---|---|---|
/api/services |
GET | Get list of available service categories | Public |
| Endpoint | Method | Description | Access |
|---|---|---|---|
/api/contact |
POST | Submit contact/support message | Public |
| Endpoint | Method | Description | Access |
|---|---|---|---|
/api/faqs |
GET | Get list of frequently asked questions | Public |
| Endpoint | Method | Description | Access |
|---|---|---|---|
/api/testimonials/testimonials |
GET | Get user testimonials | Public |
The overall workflow of Fixora operates as follows:
-
π§ User Interaction (Frontend UI):
The user performs an action β such as browsing providers, updating their profile, creating a booking, or managing favorites β through the React.js interface. -
π API Request (Frontend β Backend):
The frontend sends an Axios request to the Express backend.
If the user is authenticated, the browser automatically includes the httpOnly JWT cookie with the request. -
π§ Backend Logic & Validation (Express Server):
The server receives the request and:- Validates authentication using
requireAuth - Validates input data
- Applies business logic (booking rules, provider restrictions, availability checks)
- Routes the request to the correct controller
- Validates authentication using
-
ποΈ Database Operations (MongoDB + Mongoose):
The backend interacts with the MongoDB Atlas cluster using Mongoose models:- Users
- Providers
- Bookings (Master, UserBooking, ProviderBooking)
- Favorites
- Services
- FAQs
- Testimonials
The server performs reads/writes, validates IDs, checks relationships, and ensures consistency.
-
π Response Generation:
After processing, the backend returns a structured JSON response containing the required data (profile info, providers list, booking status, favorites, etc.).
Any errors are returned with proper HTTP status codes. -
π₯οΈ Frontend Rendering (State Update):
React receives the response and updates the UI accordingly:- Updated provider list
- Success message for booking
- Updated favorites
- Live booking status changes
- Profile update confirmation
-
β Post-Booking Flow:
When a provider completes a booking and enters the price:- The booking status is updated to "completed"
- The user can then see the updated booking
- (Future-ready) The user may leave a verified rating/review to maintain quality and trust
This cycle continues smoothly for every interaction in the application.
Follow these steps to run Fixora locally π
# For Backend
git clone https://github.com/vs-code06/fixora-backend.git
npm install
# .env
PORT=5000
MONGO_URI=your_mongodb_atlas_connection_string
JWT_SECRET=your_secret_key
FRONTEND_ORIGIN=http://localhost:3000
NODE_ENV=development
# Run Backend
npm run dev
# For Frontend
git clone https://github.com/vs-code06/fixora-frontend.git
npm install
# .env
REACT_APP_API_URL=http://localhost:8080/api
# Run Frontend (in another terminal)
npm startHere are several improvements planned for future versions of Fixora:
-
π§ AI-powered service recommendations
Suggest the best provider using machine learning and user booking history. -
π¬ Real-time chat between users and providers
Allow live messaging for coordination and clarification. -
πͺͺ Provider verification system
Upload ID, certificates, and proof of experience for admin approval. -
π Live location tracking
Track provider arrival during active bookings. -
π Downloadable invoices & payment integration
Add Razorpay/Stripe for secure payments and auto-generated bills. -
π Multi-language support
Make the platform accessible to a wider audience. -
π± Mobile App (React Native)
Build Android/iOS versions for greater convenience.
| Name | Role | GitHub |
|---|---|---|
| Vipul Sharma | Full-stack Developer, Designer | https://github.com/vs-code06 |
If you'd like to contribute to Fixora, feel free to fork the repository and submit a pull request.
This project is licensed under the MIT License, which permits personal and commercial use, modification, distribution, and private use.
You are free to:
- Use
- Modify
As long as you include the original copyright notice.