Umrah hotel discovery and group inquiry prototype
HappyHome Stays
A bilingual English and Arabic prototype for discovering Makkah and Madinah hotels and sending family or group Umrah stay inquiries.
- Role
- Product research, UX/UI design and front-end development
- Platforms
- Web
- Status
- Prototype
- Timeline
- 2026
- Client
- HappyHome Realestate
- Web application
- Business system
Design prototypeOverview
HappyHome Stays is a clickable, responsive prototype of a hotel discovery and group inquiry platform for Umrah travelers staying in Makkah and Madinah. I built it as a Phase 1 concept for HappyHome Realestate, a real estate business in Riyadh.
Visitors can browse and filter hotels, compare room capacities and estimated distances to Masjid al-Haram or the Prophet's Mosque, and send one structured inquiry for a family or a large group. An admin demo shows how the operator's team would then track those inquiries and manage hotel listings.
It is a front-end prototype with no backend. Every hotel, price, star rating and distance in it is fictional sample data, and the interface labels it that way.
Built for: Umrah families, large Umrah groups, group organizers and travel agents, plus the operator's internal team who handle their inquiries.
The problem
Before designing anything, I studied more than 35 Pakistani, Saudi and global hotel and Umrah platforms. Global booking sites are built around one room and two adults booking instantly, with no way to ask for a group quote. Many Pakistani Umrah sellers collect leads over WhatsApp but offer no real way to explore hotels.
Distance to the Haram is shown inconsistently across these sites (in feet, kilometers or vague text), usually without saying whether it is a walking route or a straight line. Room occupancy is rarely visible on hotel cards, and Arabic coverage is often incomplete.
The solution
I chose an inquiry-first design instead of a booking engine. Hotel cards lead with room capacity and a clearly labeled straight-line distance, and a group can describe all its room needs in one inquiry that returns a reference number. Booking and payments are left out of the first version on purpose.
The site is natively bilingual, with full right-to-left Arabic rather than a translation layer on top of English. On the operator side, a demo dashboard shows inquiry statuses, internal notes and listing management, so the client could see the full loop from a guest's inquiry to staff follow-up before committing to a production build.
Main features
English and Arabic with full RTL
Every page lives under a language prefix (/en or /ar), and switching language flips the document direction, layout and typefaces. Dates and SAR prices are formatted for each locale, with an option for Arabic-Indic digits.
Homepage search
City tabs for Makkah and Madinah, a neighborhood selector, check-in and check-out dates and a guests and rooms picker. The homepage also shows featured hotels, destination sections and an FAQ.
Filtering and sorting
Results can be filtered by neighborhood, an indicative price range, star category, facilities and family or group suitability, then sorted by price, distance or stars. There is a grid and list toggle and a dedicated mobile filter panel.
Hotel detail pages
Each hotel has a photo gallery with a lightbox, room cards showing bedding, occupancy, size and an indicative nightly rate, an amenities list and a distance block. A sticky sidebar starts an inquiry with the dates and guest count already filled in.
Family and group inquiry
A structured form covers city, property, dates, adults and children, rooms, room configuration, traveler category and special requirements, with field-level validation. Submitting it creates a reference code and states clearly that it is not a booking and no payment is taken.
WhatsApp hand-off
Click-to-chat buttons open WhatsApp with a pre-filled message. They stay hidden until a verified WhatsApp Business number is set in the configuration.
Admin dashboard demo
Staff can search and filter inquiries by status, open an inquiry to change its status and add internal notes, and manage the hotel catalog: add bilingual listings, mark them featured, or set them to active, draft or archived.
Honest sample-data labels
Every price, star rating and distance carries a sample or indicative badge. Distances are described as straight-line map estimates, never as walking time.
Inside the product
Screens from the clickable design prototype, not a released product.
Design prototype
Design prototype
Design prototype
Design prototype
Design prototype
Design prototype
Design prototypeDevelopment and architecture
HappyHome Stays is a single-page React app written in TypeScript and built with Vite. Routing uses React Router with a language segment in every URL, and styling is Tailwind CSS with custom design tokens, self-hosted fonts and custom SVG arch and geometric pattern elements.
There is no server. All data sits in a React Context store seeded with 13 fictional hotels and a few demo inquiries, and it is saved to the browser's localStorage. An inquiry submitted on the public site appears straight away in the admin dashboard in the same browser, which makes the whole flow demonstrable without a backend.
The production build is deployed as static files under a sub-path on Apache hosting, with a rewrite rule so client-side routes resolve. I also documented which parts are simulated and what a production version would need, such as a database, email delivery, the WhatsApp Business API and authenticated admin access.
- Type-checked translations
- I wrote the copy dictionaries so that TypeScript requires the Arabic text to match the shape of the English text. A missing or misnamed Arabic string fails the type check instead of showing up blank on the page.
- Language in the URL
- Routes start with /en or /ar. The app detects the preferred language and redirects missing or invalid prefixes, so every page has a shareable address in both languages.
- Script-specific typography
- English and Arabic each get their own display and body typefaces (Marcellus with IBM Plex Sans, Reem Kufi with IBM Plex Sans Arabic), so the Arabic version is designed rather than simply mirrored.
- In-browser data store
- A React Context store persisted to localStorage stands in for the backend. It keeps the public site and the admin demo in sync and includes a reset option to restore the demo data.
- Configuration-driven features
- WhatsApp buttons and the inquiry backend only switch on when the relevant environment variables are present. The brand name sits in one config file because it was still provisional, and the deployment base path is configurable.
- Licensed image pipeline
- A Node script fetches selected Wikimedia Commons photos, converts each one to WebP at three widths with sharp and records attribution data. The site serves the images responsively and lists the credits on its own page.
Technology
- React
- TypeScript
- Vite
- Tailwind CSS
- React Router
- Node.js
- sharp
- lucide-react
- Playwright
- Apache
Related projects

Car marketplace and sales CRM
KAYANAK
Arabic-first car marketplace and sales CRM for a Riyadh car business, with installment pricing, car-wash booking and an AI sales assistant.
- Web application
- Mobile app
- E-commerce
- Business system

Home-services booking marketplace
Just Book
A home-services marketplace where customers book verified providers, with one Flutter app, a Laravel API, an admin panel and websites.
- Mobile app
- Web application
- SaaS product
- Business system

Agency website and custom CMS
Techwine Solutions
The website of my software agency, backed by a custom Laravel and Livewire CMS for services, case studies, SEO and leads.
- Web application
- Business system
Have a software idea or a business process that needs a proper system?
Tell me what you are trying to fix. I will reply with honest questions, a practical plan and a realistic estimate.