← Insights

Foxwoods: Powering a Premium Experience with a Headless CMS

How a decoupled Drupal CMS and a middleware layer let the Foxwoods team manage the content behind its mobile app.

Foxwoods casino lobby under a glowing orange ceiling with the Foxwoods logo

Foxwoods Resort Casino wanted a mobile app that could show guests current offers, events, and promotions. That meant a backend that was flexible enough for the Foxwoods team to manage and dependable enough for guests to rely on.

The answer was a decoupled, or headless, Drupal content management system. This article walks through how it fits together and what we learned building it.

How does the headless architecture work?

In a headless approach, the mobile app is separate from the content repository. Foxwoods’ content lives in Drupal. Between the two sits the Foxwoods middleware (MW), which fetches content from Drupal and serves it to the app. That makes the middleware the app’s main source of truth, so the app can focus on the guest experience.

Layer What it does
Mobile app Shows content and handles guest actions
Middleware (MW) Fetches, caches, and serves content to the app
Drupal CMS Stores offers, events, dining, and menu content

Keeping these layers apart means the team can improve the mobile interface without being limited by a traditional monolithic CMS. We cover a related integration problem in the real cost of a disconnected booking engine.

What runs on AWS?

The middleware and its supporting services run on Amazon Web Services, built to scale, stay secure, and need little hands-on operation. The Drupal CMS is hosted separately from these services. Key AWS pieces include:

  • Amazon ECS to host the middleware application.
  • Amazon RDS for the middleware’s database.
  • Amazon CloudFront to deliver static assets such as images, CSS, and JavaScript.
  • A managed authentication service for guest sign-in.
  • Amazon S3 for fallback images and files used by the middleware.

How can the team change the app without a release?

Because the CMS is separate from the app, much of the experience is content, not code. The main Explore menu is not hard-coded. Administrators manage it through custom configuration pages in the CMS, and the app receives it through the JSON:API. The Foxwoods team can update and rearrange the main navigation without publishing a new version of the app.

The same idea applies deeper in the app. On the Dining screen, each restaurant is a piece of structured content in Drupal, so guests can filter the list by taxonomies defined in the CMS, such as restaurant type or cuisine. We also built a custom Open Now filter. It compares the current time to the hours stored with each restaurant, so a guest can quickly see where they can eat right now.

Foxwoods Activities screen on a phone with category filters and a hotel room photo

How do caching and fallback images keep the app responsive?

One challenge was retrieving content and its assets efficiently. Getting an image from Drupal took two steps: one API call for the content, and a second call to get the image URL from the media node. With a lot of content, those extra calls can slow the app down.

We added a Redis caching layer. When the app asks for content, the middleware first checks the cache. If the data is there, it returns it without another round trip to Drupal.

Missing media was the second problem. If an image is not found, or its URL is invalid, the middleware requests a fallback image from a dedicated S3 bucket. Guests see a relevant picture instead of a broken one.

What would we recommend to other teams?

In our view, three habits carry over to any content-heavy mobile app:

  1. Separate content from presentation. A headless CMS lets editors and app developers work without waiting on each other.
  2. Put a middleware layer in between. It gives the app one dependable data source and a place to cache and clean up content.
  3. Plan for missing content. A fallback image costs little and protects the guest experience.

Combining a decoupled Drupal CMS, AWS services, and a caching layer gave Foxwoods a flexible foundation for its mobile app. You can see more of our hospitality projects in our work, and our services page explains how we approach this kind of build.

Planning a content-rich mobile app for your property? Get in touch.

Frequently asked questions

What is a headless CMS?

A content management system that stores and manages content but does not decide how it looks. The content is delivered through an API, so a mobile app, a website, or another channel can each present it their own way.

Why put a middleware layer between the app and the CMS?

In our view, a middleware gives the app one dependable source for its data. It can combine, cache, and clean up what the CMS returns, so the app stays simple and the CMS stays free to change.

Can the Foxwoods team change the app without a new release?

For content, yes. The main Explore menu and the content on screens such as Dining are managed in the CMS and delivered to the app through an API, so editors can update them without an app-store release.

What happens when an image is missing in the CMS?

The middleware falls back to a default image kept in an AWS S3 bucket, so guests see a relevant picture instead of a broken one.

Update offers, events, and menus without app releases, keeping guests connected to what is new.