<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/system-design-for-hotel-booking-apps-i-hncojtl9k" -->

---
title: System design for Hotel booking apps — I | daily.dev
description: A two-part series covering the system design of a hotel booking mobile app. Part one walks through functional requirements (1M DAU, multi-country, offline...
canonical: https://daily.dev/posts/system-design-for-hotel-booking-apps-i-hncojtl9k
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: System design for Hotel booking apps — I | daily.dev
og:description: A two-part series covering the system design of a hotel booking mobile app. Part one walks through functional requirements (1M DAU, multi-country, offline...
og:url: https://daily.dev/posts/system-design-for-hotel-booking-apps-i-hncojtl9k
og:image: https://api.daily.dev/og/posts/HnCOJTL9K.png
og:image:alt: System design for Hotel booking apps — I
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# System design for Hotel booking apps — I

**[Medium](https://daily.dev/sources/medium_js)** · 4 min read · 1 upvotes · 0 comments

## Summary

A two-part series covering the system design of a hotel booking mobile app. Part one walks through functional requirements (1M DAU, multi-country, offline support), four core screens (dashboard, search, search results, hotel detail), a high-level architecture diagram using MVVM with ViewModels and repositories, an offline-first local data sync strategy, dependency injection with Dagger Hilt, CDN for media, and API design decisions including coordinate-based location queries, cursor-based pagination, lightweight preview models, and server-side filtering to reduce client processing load.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://medium.com/@prateek775999/system-design-for-hotel-booking-apps-i-13d41d698724>

## Questions this post answers

### Should hotel booking search results use offset or cursor-based pagination at scale?

Cursor-based pagination is recommended for hotel search results at scale, such as apps targeting around 1 million daily active users. This approach handles large, frequently changing result sets more efficiently than offset pagination and pairs well with returning lightweight preview data per hotel card to reduce backend load and speed up API calls.

_daily.dev surfaces system design write-ups like this for developers weighing pagination strategies at scale._

### Where should filtering and sorting logic live in a mobile app architecture, client or server?

Filter and sort logic, such as sorting by price or distance or filtering by rating, should be handled server-side via an API query parameter rather than on the mobile client. Processing these queries on the device risks high CPU usage and excessive RAM consumption, so the backend should own this logic and return already-filtered, minimal data.

_Developers designing mobile app APIs can find similar architecture trade-offs on daily.dev._

## Similar posts on daily.dev

- [Android System Design: Designing Location-Based Apps](https://daily.dev/posts/android-system-design-designing-location-based-apps-uvwckrh7g) · Medium · 0 upvotes · 0 comments
- [The Complete Guide to Offline-First Architecture in Android](https://daily.dev/posts/the-complete-guide-to-offline-first-architecture-in-android-jhpom6lhe) · droidcon · 0 upvotes · 0 comments

---

Tags: [#career](https://daily.dev/tags/career), [#architecture](https://daily.dev/tags/architecture), [#offline-first](https://daily.dev/tags/offline-first)

[View this post on daily.dev](https://daily.dev/posts/system-design-for-hotel-booking-apps-i-hncojtl9k)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"System design for Hotel booking apps — I","url":"https://daily.dev/posts/system-design-for-hotel-booking-apps-i-hncojtl9k","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/system-design-for-hotel-booking-apps-i-hncojtl9k"},"datePublished":"2026-07-25T19:32:17.367Z","dateModified":"2026-09-14T06:26:10.407Z","description":"A two-part series covering the system design of a hotel booking mobile app. Part one walks through functional requirements (1M DAU, multi-country, offline...","image":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/0aba088531acdb6bda7eaad83dde769f?_a=AQAEuop","thumbnailUrl":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/0aba088531acdb6bda7eaad83dde769f?_a=AQAEuop","isAccessibleForFree":true,"articleSection":"Medium","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"Medium","logo":"https://media.daily.dev/image/upload/t_logo,f_auto/v1/logos/medium","url":"https://daily.dev/sources/medium_js"},"commentCount":0,"discussionUrl":"https://daily.dev/posts/system-design-for-hotel-booking-apps-i-hncojtl9k","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":1},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":0}],"keywords":"career,architecture,offline-first","timeRequired":"PT4M"}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"Medium","item":"https://daily.dev/sources/medium_js"},{"@type":"ListItem","position":3,"name":"System design for Hotel booking apps — I"}]}
{"@context":"https://schema.org","@type":"FAQPage","@id":"https://daily.dev/posts/system-design-for-hotel-booking-apps-i-hncojtl9k#faq","mainEntity":[{"@type":"Question","name":"Should hotel booking search results use offset or cursor-based pagination at scale?","acceptedAnswer":{"@type":"Answer","text":"Cursor-based pagination is recommended for hotel search results at scale, such as apps targeting around 1 million daily active users. This approach handles large, frequently changing result sets more efficiently than offset pagination and pairs well with returning lightweight preview data per hotel card to reduce backend load and speed up API calls. daily.dev surfaces system design write-ups like this for developers weighing pagination strategies at scale."}},{"@type":"Question","name":"Where should filtering and sorting logic live in a mobile app architecture, client or server?","acceptedAnswer":{"@type":"Answer","text":"Filter and sort logic, such as sorting by price or distance or filtering by rating, should be handled server-side via an API query parameter rather than on the mobile client. Processing these queries on the device risks high CPU usage and excessive RAM consumption, so the backend should own this logic and return already-filtered, minimal data. Developers designing mobile app APIs can find similar architecture trade-offs on daily.dev."}}]}
```

