Qasim Hassan
Work

2021–2022/Mobile/Completed

BSchedule

Staff and customer booking apps on one scheduling API.

Two React Native clients — staff/admin and customer — against a single Laravel REST API: appointments, calendar/timeline, job cards, notices, and garage-style service categories. One schedule source of truth for both audiences.

  • Two apps, one API
  • Staff + customer portals
  • Production booking system
BSchedule

The Problem

A business client needed scheduling for two audiences — staff managing availability and jobs, and customers booking appointments — without two backends that would drift apart.

What I Built

BSchedule is two React Native apps (staff/admin and customer) against one Laravel REST API / MySQL:

  • Appointments create/edit/search; calendar and timeline (notes, reminders).
  • Staff and customer management; job cards; notice board.
  • Garage-style service categories (Service, Repair, MOT, Tyres, Diagnostic).
  • Google Sign-in; admin demo mode for UI without a live backend.

Product host: bscheduled.co.uk.

Major Features

  • Dual portals — staff depth vs customer booking surface on the same schedule.
  • Calendar + jobs — day views, job cards, notices, vehicle reminders.
  • Single API — availability and bookings live in one place.
  • Auth — Google Sign-in for real accounts; demo path for review builds.

Key Challenges

One REST API had to serve different permissions and shapes of the same schedule: staff needed broad read/write; customers needed a narrow booking surface. Endpoint design up front mattered more than shipping two “almost the same” APIs.

Results

BSchedule shipped as a production booking system — staff and customer apps on one shared API — so scheduling data couldn’t fork.

Stack Decisions

A single Laravel API was chosen specifically to avoid the classic failure mode of staff/customer systems: two stacks, two truths. React Native + Redux kept both clients shippable on the same design language without a web-only compromise.

Screens

BSchedule — view 2
BSchedule — view 3