Play StudioEngineering·9 min read

Ghosts in the Machine: The Halloween Arcade

Five arcade games, a token wallet, a prize counter, and a ghost that might be hiding behind the button you are about to click. Here is how we built Halloween 2026, and what we did to keep it fair.

By

a high-quality isometric 3D illustration capturing a miniature, cinematic Halloween world. It highlights the tiny arcade machine displaying a jack-o’-lantern, a pile of glinting gold tokens, and multiple translucent ghosts hiding throughout. Warm orange and purple neon shadows set the scene

Five arcade games, a token wallet, a prize counter, and a ghost that might be hiding behind the button you are about to click. Here is how we built Halloween 2026, and what we did to keep it fair.

Every October we ask ourselves the same question: what would make Halloween feel like ours? This year the answer turned into two projects that grew into each other. One is an arcade, five small games with a wallet, leaderboards and a prize counter. The other is a haunting. Ghosts are loose across the Jah and Co Universe, and the only way to capture them is to be on watch.

This is the behind-the-scenes story of both: what they are, how they work, and the decisions we made to keep them fun and fair. Have a seat and relax. It gets a little technical, and we will try to keep the ghosts friendly.

Our Halloween event runs from October 16 through the end of October 31 (EST). If you are reading this inside that window, the ghosts are active now!

The arcade: small games, one account

The Halloween arcade lives on the Play site under /event. It has five built-in games, each designed to be understood in about ten seconds and to be hard to put down:

  • Spook Pop. A pumpkin lights up. Hit it before it fades. Every hit in a row adds a point to the next one, a miss or a fade resets your chain, and the pumpkins fade faster the longer you survive.
  • Haunted Memory. Four ghosts light up in order. Repeat the sequence. Every round adds one more ghost, and later rounds are worth more per press. One wrong ghost, or waiting too long, ends the game.
  • Bat Dodge. Three lanes, three lives. Bats cost a life, candy scores points, things fall faster as the clock runs, and surviving longer scores too.
  • Pumpkin Patch Sweep. A minesweeper with jack-o-lanterns. Ten bombs hide in the patch, your first cell is always safe, and clearing the whole patch fast earns a big bonus.
  • Crypt Runner. You run on your own and speed up. Jump the gravestones, catch the souls floating above them, and try not to hit anything. One hit ends the run.

These games are completely out of scope of what the Play Studio is currently working on, but we decided to go with a real arcade game style feel.

Why?

Well if I’m going to be honest, we were in a time crunch! I would like to say we had an immersive and pretty epic Halloween event planned, but we’re humans and sometimes real life occurrences happen. That led us to be delayed in the development process, we lost a lot of time and found ourselves working on a Halloween event in October! There was no way we would have made our projected launch day.

We still wanted to do something however, so we decided to develop the Halloween arcade, it might not be that great, but we still wanted to put out something you can still enjoy. The games can be fun to play, plus with the added challenges we decided to launch also, we wanted to really make playing in the Halloween arcade rewarding.

Tokens, tickets and the prize counter

An arcade needs an economy. Ours has two currencies.

Tokens are how you play. Each round deducts from your balance. New players get a welcome bundle, and everyone gets a daily top-up reward. We want the event to reward coming back.

Tickets are what you earn. Play well and the tickets will accumulate, and you get to spend them at the prize counter. Some prizes top up your tokens. Others are codes. Every change to a wallet writes an entry to a ledger, so if a balance ever looks wrong we can trace exactly how it got there.

The part nobody sees: your score is not taken on faith

Here is the problem every online game with a leaderboard has. If the browser tells the server “I scored 9,999”, the server has to decide whether to believe it. A browser is a place anyone can open the developer tools.

Our arcade isn’t built that way. When you start a round, the server hands you a random seed and records the round. Every game is built to be deterministic: given the same seed and the same sequence of player inputs, it plays out exactly the same way every time. While you play, your browser quietly keeps an input log, which key or tap happened, and when.

When the round ends, the browser sends that log to the server. The server does not read a score from it. It replays the whole round from the seed and the log, runs the game logic itself, and works out the score on its own. If the log is impossible, the round is rejected and does not count. For example, inputs that arrive faster than a human could press, a log that claims to be ahead of the server’s own clock, or moves that break the game’s rules.

The practical result is that nothing a client sends is trusted. The leaderboard is made of rounds the server actually watched play out, and that is the only way we know how to keep a leaderboard honest.

Starting a round is also guarded. Taking the token and opening the run happen together in one batch of statements, so two requests racing to spend your last token cannot both succeed. There is a short cooldown between starts too, so a script cannot hammer the endpoint.

Then we decided to haunt the whole ecosystem

The arcade was supposed to be the only event. Then somebody decided to somehow release ghosts and the start of our second project began: what if the ghosts were not in the games at all?

The Ghost Hunt works like this. While you are signed in, ghosts can appear on pages across the Jah and Co applications, Play, Hub, Blog, Support and Accounts. They could be anywhere. You are not told where to look.

If you are not signed in, then you may not spot any ghost. They’re not hidden, not faded. Nothing is drawn, and the server will not tell a signed-out browser that any exist. We encourage you to create a Jah and Co account, that way you can always be a part of whatever we decide to offer.

Four kinds of ghost

We wanted each ghost to feel like a different kind of surprise.

  • Hidden ghosts sit somewhere on the page, drawn in nearly the same color as whatever is behind them. They are not invisible, just quiet. Move your mouse across the right spot, or tab through the page with a keyboard, and one will glow.
  • Peek-a-boos are tucked behind cards on the page, with only a sliver showing past the edge. If you have ever noticed something peeking at you from behind a panel and decided you were imagining it: you were not.
  • Possessed are the mean ones. These like to take over the buttons on your screen, a purple glow and a tiny ghost floating over its corner. So if you notice a button that looks fairly odd, Click it! You just caught a ghost.
  • The special ghost is rare and worth the most. While one is loose on a page, you’ll notice a page you’re on pulses with a ghostly flash until somebody finds it. FYI You can set your system to reduce motion and flashes, it will become a calm static tint instead.

Ghosts all have different values.

Finders Keepers

This was a last minute design decision, and it is simple: you all see the same ghost. A ghost is in one place, the same place for everybody. When you catch it, it is gone for everyone else. The first person to find a ghost catches it.

That turned a scavenger hunt into a race. It also solved a problem. If each person got their own private ghosts, nothing would stop someone from claiming finds from a script. With shared ghosts, there is a single moment of truth.

Levels, and what you win

Your catches add up. We kept them internal, so we know your catches but you don’t, unless you’ve been keeping track. At a certain threshold you unlock a discount code to use at Jah and Co Apparel. You can see your unlocked codes in your Apparel Studio profile.

How it works under the hood

For our fellow geeks!

The server decides where ghosts go. A scheduled job runs every five minutes and tops each site back up to its target number of live ghosts: more on Play, fewer on quieter sites. It picks a page and a kind of ghost at random, weighted so that common kinds show up often and the special ghost is rare. There is never more than one special loose at a time, and no page holds two ghosts of the same kind. Ghosts fade after a few hours whether or not anyone finds them, then the job spawns fresh ones.

Clients draw, the server judges. Your browser asks for the ghosts on the page you are on and renders them. It never decides what is real. Catching a ghost is a single database statement that only succeeds if the ghost is still unclaimed. Two players clicking at the same instant cannot both win, because the database lets exactly one of them through. The loser gets a polite “too slow”.

There is a cooldown between finds, so a script cannot sweep a page in a fraction of a second.

Honesty about limits. A browser has to know where a ghost is in order to draw it, so a determined person reading the page’s code can find ghosts faster than someone browsing normally. We are not pretending otherwise. The shared race, the single-claim rule and the cooldown keep that from becoming a flood, but we would rather tell you than claim something we cannot back up.

Accessibility. Ghosts are real buttons with labels, so they can be reached by keyboard. Animations respect your reduced-motion setting. We removed a small jitter we had first put on possessed buttons after realising a moving click target is a poor experience for plenty of people.

What we learned

Building the Ghost Hunt taught us two things worth passing along.

First, the best fairness decisions are structural. We did not bolt on cheat detection. We chose designs where cheating has nowhere to stand: the server replays rounds, and one shared ghost can only be claimed once.

Second, the sites are better when they have a little mischief in them. We spend most of the year making things clear and calm. It turns out that for two weeks, making a button look slightly haunted is a very good way to remind people there are humans behind the screen.

Go find some ghosts

The arcade is open at play.jahandco.com/event. Sign in, claim your tokens, and have a go at a few rounds. Then close the arcade tab and just browse. Read a post, check a help article, click around the shop. Look at the edges of cards. Look at the buttons that are a little too purple.

And if you find one before we do, well done. Tell us about it.

Stay tuned as we may still have more to release this month.

Happy Haunting!

Comments

Sign in with your Jah and Co account to like this post and join the conversation.

Sign in