The platform
The platform brings several kinds of business together under one customer account. A customer can buy from a store, order food from a restaurant or reserve a table, book a hotel room, book an appointment at a salon, spa or other service provider, and apply for a job, all with the same login, the same cart and the same order history.
Each of those businesses is a vendor on the platform, and each needs different tools: a store manages products and stock, a hotel manages rooms and dates, a spa manages staff and time slots, an employer manages job posts and applicants. The operator in turn needs to approve vendors, set commissions and see everything that happens across all of them.
What it had to do
- Let new vendors sign up, describe their business and wait for approval before they can sell.
- Give every vendor one panel, but only the tools that fit their kind of business.
- Let the operator set commission rates per type of business, and override them for single vendors.
- Show the operator every order and every booking on the platform, with a way to handle disputes and refunds.
- Check room dates, table slots and staff time slots before a booking is taken.
- Work in English and Arabic, including right-to-left layout, and in more than one currency.
What was built
Admin panel: vendors and approvals
Vendors move through pending, approved, rejected and suspended, and the dashboard lists the ones waiting for review. The vendor list filters by status and business type and shows each vendor's owner and commission. Customer accounts can be searched and banned or unbanned.
Admin panel: commissions
A commission rate is set for each business type: stores, restaurants, hotels, services and employers. A single vendor can be given its own rate, and every rule carries the date it takes effect.
Admin panel: orders, bookings and disputes
One orders list covers shopping, food delivery, table bookings, room bookings and appointments from every vendor, filtered by business type, vendor, payment status and date. Any order can be flagged and given an internal note, then force-completed or refunded. A separate bookings list shows room stays, table reservations and appointments together, with their status.
Admin panel: reports and the rest of the platform
Reports show revenue, orders, bookings and new customers for any date range, with revenue by day, the top vendors and orders by type. The admin also manages categories for each business type, reviews, platform coupons and prize deals, email broadcasts to customers, the about, privacy, terms and FAQ pages in both languages, the site footer, countries and cities, languages, currencies and platform settings such as the VAT rate, payment keys and maintenance mode.
Vendor panel: shared tools
Every vendor gets a dashboard, orders with status updates, their own coupons, reports with a revenue chart and CSV export, a business profile with logo, banner, description in both languages and a map position, and SEO settings for their public page, with a Google preview.
One vendor panel, five kinds of business
The vendor panel reads the vendor's type and shows only the sections that fit it.
- Stores manage products in English and Arabic, with category, brand, price, sale price, warranty, stock and up to ten photos each.
- Restaurants manage a menu with categories and an availability switch, and table sections such as indoor and outdoor, each with seats, a booking fee and time slots for every day of the week.
- Hotels manage room types with bed type, guests, nightly price, number of rooms, amenities, photos and blocked dates.
- Service providers manage services with price and duration, and staff with a photo, the services they perform and weekly working hours with breaks. Bookable slots are built from those hours, skipping breaks and existing appointments.
- Employers post jobs with type, city, experience and salary ranges and an expiry date, then move each applicant through pending, reviewing, shortlisted, interview, rejected or hired.
Restaurants, hotels and service providers also get a bookings list where they confirm, complete or cancel each booking; confirming sends the customer an email.
The customer side
Customers browse each kind of business, search across all of them or use a nearby map that sorts vendors by distance and filters them by radius and type. One cart holds products, food, rooms, tables and appointments; checkout takes a coupon, adds VAT and shipping, and is paid through Razorpay or on delivery or at the venue. Room dates, table slots and appointment slots are checked for availability before they go into the cart. Customers can sign in with Google or Facebook, keep an address book and a wishlist, follow their orders and bookings, leave reviews, see their coupons, enter deals and track job applications.
The screenshots on this page were taken from a local copy of the project running on demo data, with the client's name and logo removed.
Technology
Laravel 10 on PHP with MySQL and server-rendered Blade pages. The admin panel is built on a Bootstrap 5 admin theme; the vendor panel and the storefront use Bootstrap with their own styles. Payments go through Razorpay, social login through Laravel Socialite, and the nearby map uses Leaflet with OpenStreetMap. Uploaded images are converted to WebP in three sizes with Intervention Image, slugs come from Spatie's sluggable package, and vendor reports draw their charts with Chart.js. Interface text lives in English and Arabic translation files, and the language switcher sets the page direction.
- Laravel 10
- PHP
- MySQL
- Blade
- Bootstrap 5
- Razorpay
- Intervention Image
- Laravel Socialite
- Leaflet and OpenStreetMap
- Chart.js