The problem
Smaller hotels outside Kathmandu either pay a large commission to an international platform or take bookings over the phone. This gives them their own inventory and their own reservations.
What I built
Availability over a date range is the query everything else depends on, so the room and reservation tables are indexed for it directly rather than filtered in Python after the fact.
Rates are per room type and per date, which is what lets a property price a festival weekend differently from a Tuesday in the monsoon.
Architecture
Django and PostgreSQL, with availability computed as an exclusion over the reservation date ranges rather than by iterating days.
Problems worth writing down
Overlapping reservations
Naive date comparison let two bookings share a night. Treating the stay as a half open range removed the whole class of edge case.
Timezone drift
Check in dates shifted for users in other zones. Storing the date as a plain date rather than a timestamp fixed it.