Stanky Shores
An unofficial fan site for a streamer's waterpark game, built on headless Drupal and Next.js, and hardened to answer 13,330 requests a second.

How this one came together
Stanky Shores is the waterpark CaseOh builds on stream in Waterpark Simulator. We gave it a front door: a park map you can drag and zoom, an archive of every episode, a staff ballot, 38 short stories out of the park's own records, and a Splash Wall where visitors file reviews of a place that does not exist. It is our own unofficial fan project rather than client work, which is exactly why it is where we try things before a client pays for them.
Underneath it is a headless build. Drupal holds the content and nothing else: every episode, clip, story, review and ballot entry is a structured entity with its own fields and its own editorial workflow. A FastAPI service sits between Drupal and the front end, turning JSON:API into something a page can fetch in one call instead of six, and holding a short cache so a burst of readers does not turn into a burst of database queries. Next.js renders the site.
Drupal got picked for the unglamorous reasons. Moderation is the main one. Anyone can file a review, and every filing waits for a human stamp before it hangs on the wall, which is a workflow Drupal has had for twenty years and most modern stacks still hand-roll badly. Structured fields matter too. An episode is a number, a date, a runtime, a source URL and a set of relationships rather than a blob of HTML, and that structure is what lets one record feed the archive, the map and the search index without being rewritten three times.
Next.js earns its place on the other side of that wall. Pages are server rendered, so a crawler and a visitor on a phone both get finished HTML instead of an empty shell waiting on JavaScript. Static assets carry the deploy id in their URL, which sounds like a footnote until a CDN serves a stylesheet from a build that no longer exists and the site renders naked. We learned that one in production and fixed it in the build script.
The hardest requirement was a single minute we could not schedule. The park's creator reads the Splash Wall out loud on stream sometimes, and his audience arrives all at once when he does. A site that falls over in that minute has failed at the only moment that counted.
So an nginx page cache went in front of the app, told to keep serving from cache while it refreshes underneath, so a slow origin never becomes a slow page. A per-visitor vote lookup that had been querying Drupal on every single page load moved to a small local store. The home page went from 312 requests a second, with the slowest reply landing at 377 milliseconds, to 13,330 a second with the slowest at 7.
Keeping it current is nobody's job. Watchers poll YouTube for new episodes and Twitch for fan clips, then file them into Drupal as proper entities on their own, so the archive fills itself between streams.
268 reviews have made it past moderation so far. The site pulls around 1,600 clicks a month from Google at an average position of 5, and visitors stay about five minutes, which is a long time for a waterpark that only exists inside a video game.