TripWays Hotels
Full-stack hotel ops platform — real-time bookings, role-based auth, and Chapa payments. Built solo.

Overview
A full-stack hotel operations platform: bookings, room inventory, staff announcements, and revenue analytics in one interface.
The Convex backend keeps every connected screen in sync in real time — confirm a booking and the availability grid updates everywhere, no refresh. Chapa handles payments for the Ethiopian market.
Mobile Companion App
To support on-the-go hotel staff (such as cleaning crew and maintenance personnel), I built a cross-platform mobile companion app using React Native and Expo.
The mobile app links directly to the same reactive Convex backend, enabling staff to scan room QR codes, check off room cleaning checklists, and receive push notifications for urgent guest requests in real time.

My Role
- Modelled the full Convex schema — rooms, bookings, guests, announcements, audit logs, analytics.
- Built role-based auth for admins, receptionists, and guests, with permissions enforced server-side.
- Implemented the booking state machine with optimistic-lock concurrency to prevent double-booking.
- Integrated Chapa for online payments, including webhook reconciliation.
- Shipped a real-time admin dashboard for revenue, occupancy, and room utilisation.
Tech Stack
Challenges & Learnings
Authorisation was the hard part. Three roles, every mutation gated server-side through a shared helper — so a forgotten frontend check could never expose an admin action. I rewrote the schema twice before it felt clean.
Chapa's webhook docs were thin, so I built defensive reconciliation that handles the payload arriving before or after the booking exists. And since Convex mutations are transactional, the state machine uses optimistic locking so a room can't be double-booked under concurrent requests.