Game review

SlotJS

7.5 / 10

Developer
Dani Gámez Franco
Publisher
Dani Gámez Franco (open source)
Released
1 January 2018
Platforms
Web browser (desktop and mobile)
Genre
Arcade / Reflex
Monetisation
Free, open source, no ads, no in-app purchases, and no real-money mechanic of any kind
Players
Single-player only

The short version

SlotJS looks, from a screenshot, like a generic emoji-themed slot machine, and the one paragraph that actually matters is buried in its own README: it isn't random. Every reel keeps spinning until you tap again, and the payout is decided by how well you time that second tap, not by an RNG behind the scenes. That single decision turns a genre built entirely around watching a machine decide your fate into a small, honest reflex game, and the interface built around it is as thumb-friendly as anything on this shelf — one tap starts it, one tap stops each reel, and the entire screen is the target, so there's no aiming to get wrong. It doesn't have anywhere to go after the first few spins, and the virtual "coins" and "jackpot" numbers exist purely to give the tension something to point at, but the core two-second loop is genuinely satisfying and the code confirms there's no real-money mechanic hiding behind it.

Biggest strengths

  • The entire game is one tap target — the whole screen, confirmed by testing a tap in the dead centre of a simulated phone screen, which correctly started the spin, and repeating the same tap correctly stopped each of the five reels in sequence, one at a time
  • The "not random" design is a genuine, well-reasoned twist on a stale genre: the reels only stop when tapped, so the outcome is entirely about reaction and timing rather than a hidden RNG roll, and that tension is real once you've had a spin or two
  • "Coins" and "Jackpot" are pure localStorage counters that regenerate to 100 whenever they hit zero — there is no purchase flow, no ad-gated currency, and no way to spend real money anywhere in the source, so the slot-machine skin never tips into an actual gambling mechanic

Biggest weaknesses

  • There is exactly one thing to do, and the game does not add anything to it over time — no unlocks, no new symbol sets, no second machine — so the appeal is front-loaded into the first handful of spins
  • The touch path for non-iOS devices works by relying on the browser's own synthetic mouse-event-after-touch behaviour rather than a dedicated touch listener; it was confirmed working correctly under real touch emulation in testing, but it's a more fragile mechanism than binding `touchstart` directly, and the codebase reserves the explicit touch listener for iOS specifically
  • The licence file was missing from the built `gh-pages` branch actually served to players — present on the source branch, but it had to be carried over separately before this copy could be hosted here

Who it's for: Anyone who wants a 30-second reflex-timing game for a phone, and specifically not anyone looking for an actual gambling simulator

Our recommendation: Worth a few spins — just don't expect it to hold your attention for an hour

7.5 / 10

The genre SlotJS is skinned as — spinning reels, a jackpot counter, coin icons — is one of the few where "genuinely good" and "web game shelf" don't obviously belong in the same sentence, so it's worth being direct about what this actually is before anything else: there is no real currency anywhere in it. handleUseCoin and handleGetPrice in app.component.js read and write a coins number and a jackpot number to localStorage, and when coins would hit zero the code resets it straight back to 100. It is closer to a Wordle-style daily counter than a casino, and the one genuinely clever idea buried in the README is what makes it worth a look at all.

The twist: nothing here is actually random

Most slot machine implementations, digital or otherwise, decide the outcome the moment you press spin and then spend a few seconds animating toward a result you can't influence. SlotJS's own README states the opposite design choice plainly: the reels spin continuously and a tap stops whichever one is still moving, reel by reel, and the actual symbols that land are simply whatever angle each reel happened to be at the instant you tapped. There's no roll happening behind the curtain — tick() in slot-machine.component.js just advances each spinning reel's rotation every animation frame based on elapsed time, and handleClick freezes the current reel and advances to the next one on each tap. Reading it end to end, the entire "chance" of the game is real, physical timing skill: how precisely you can call a stop against a rotation you're watching happen live. That's a legitimately different feeling from a normal slot machine, closer to a reflex-timing minigame wearing a slot machine's clothes, and the tension it produces — watching the last reel and knowing the stop is entirely on you — actually lands.

One tap, the whole screen, confirmed working

The control scheme is the entire interface: tap anywhere to insert a coin and start all five reels spinning, tap anywhere again to stop the innermost one still moving, repeat five times. touch.util.js wires this globally to document, and testing it directly on a simulated 390×844 touch phone confirmed the whole loop — a tap in the dead centre of the screen correctly started the spin (coins ticked down, the spin counter incremented), and four further taps at the same point correctly stopped four of the five reels in turn, each one visibly freezing on a symbol while the remaining rings kept moving. The same sequence, using mouse clicks instead of touch events, worked identically on the desktop profile. There's no aim required anywhere, which makes this about as accessible a touch target as a game can offer.

The one nuance worth flagging for anyone reading the source rather than just playing it: the code only attaches an explicit touchstart/touchend listener when navigator.platform matches /iPad|iPhone|iPod/, and falls back to document.onmousedown for everything else, including Android. That's the same shape of user-agent gate that failed outright on another candidate reviewed this cycle — except here it doesn't fail, because the fallback path doesn't depend on the sniff being right. A real tap on a non-iOS touchscreen still fires a synthetic mousedown through the browser's own compatibility layer, and that's exactly the path this shelf's phone profile exercised in testing, successfully. It's a more fragile design than binding touchstart directly and testing it rather than trusting it was the right call, but the fragility didn't turn into an actual bug here.

Not much to come back for

Once you've had a spin or two, watched a win light up the display, and glanced at the pay table to see how the payouts scale, there's nothing left the game hasn't already shown you. The reel symbols don't unlock or vary, there's no second machine or mode, and the jackpot number quietly resets itself once a day rather than growing meaningfully. That's a fair trade for something built, by the author's own account, as a weekend project rather than a live product, but it means the honest recommendation is "worth the thirty seconds," not "worth bookmarking."

Where that leaves it

The two things that matter most for this shelf — does it actually work with a thumb, and is there something genuinely worth sending someone — both check out. The touch implementation is thorough and tested rather than assumed, the skill-stop mechanic is a real, well-executed idea rather than a reskin, and the whole thing is honestly free of both real-money mechanics and third-party tracking. A 7.5 reflects a small, well-made reflex toy with essentially no long-term pull rather than a deeper game — recommended for a spin, not for an evening.

Pros and cons

Pros

  • The entire game is one tap target — the whole screen, confirmed by testing a tap in the dead centre of a simulated phone screen, which correctly started the spin, and repeating the same tap correctly stopped each of the five reels in sequence, one at a time
  • The "not random" design is a genuine, well-reasoned twist on a stale genre: the reels only stop when tapped, so the outcome is entirely about reaction and timing rather than a hidden RNG roll, and that tension is real once you've had a spin or two
  • "Coins" and "Jackpot" are pure localStorage counters that regenerate to 100 whenever they hit zero — there is no purchase flow, no ad-gated currency, and no way to spend real money anywhere in the source, so the slot-machine skin never tips into an actual gambling mechanic
  • Clean under the hood: zero console errors, zero failed requests, and the install scan found no third-party analytics
  • Considered, honestly-documented performance tradeoffs in the project's own README — the blur effect is disabled on Firefox specifically because `filter: blur()` isn't GPU-accelerated there, which is the kind of per-browser attention this category rarely gets

Cons

  • There is exactly one thing to do, and the game does not add anything to it over time — no unlocks, no new symbol sets, no second machine — so the appeal is front-loaded into the first handful of spins
  • The touch path for non-iOS devices works by relying on the browser's own synthetic mouse-event-after-touch behaviour rather than a dedicated touch listener; it was confirmed working correctly under real touch emulation in testing, but it's a more fragile mechanism than binding `touchstart` directly, and the codebase reserves the explicit touch listener for iOS specifically
  • The licence file was missing from the built `gh-pages` branch actually served to players — present on the source branch, but it had to be carried over separately before this copy could be hosted here
  • A slot-machine skin is always going to read as gambling iconography at a glance, even though nothing here is actually wagered; worth knowing before opening it expecting arcade action
  • No on-screen explanation of why a spin failed to pay beyond the pay table modal, so a first- time player who skips the instructions may not immediately understand the timing skill the whole game is built around

Category scores

Category scores are the reviewer's read on each area. They inform the overall score but do not average into it — the number at the top of the page is a judgement, not a calculation.

  • Gameplay 6.5 / 10
  • Visuals 7.5 / 10
  • Performance 8.5 / 10
  • Originality 7 / 10
  • Replayability 5.5 / 10