Prototypes — not a released product

Happy Hour Gaming

These are drawings that run. Nothing here is connected to a real account, no money moves, and anything you type is forgotten when you close the tab.

Open one on your phone and use it the way you would use a real app. If something feels wrong — too small, too slow, confusing, ugly — tap the ⚑ flag at the top right and send us what you saw. On a laptop the flag is not there; use ⚑ Report a problem in the panel beside the phone instead. Either one opens a message to [email protected] with the build and the screen already filled in, so all you have to write is what happened.

What changed in this build

So you are not re-testing things that have not moved. If you looked at this before, start here.

2026-08-26this is the build you are looking at

first-60-seconds 8ff40cb · arcade b9517e5

2026-08-25

first-60-seconds 6d632d9 · arcade 8d5d77d

What to actually do

Please work through these rather than just having a look. A general impression is hard to act on; a step that did the wrong thing is easy to fix. You do not need to know the design intent — each step says what should happen, so you can tell when it does not.

The first 60 secondsv0.8 · 8ff40cb

What we are trying to learn: Whether a stranger who taps a link stays long enough to play one round, and whether they understand what they have joined. About 4 minutes.

  1. 1

    Open the link cold, the way you would from a WhatsApp forward. Stop at the first screen and read it once.

    Should happen: Within about five seconds you can say out loud what this is and what it will cost you.

    Flag it if: You cannot tell what the app is, or you are unsure whether it will ask for money.

  2. 2

    Play the trivia round at your natural speed. Do not study it — answer the way you would on a matatu.

    Should happen: Each question is readable in one glance and the answer buttons are easy to hit with a thumb.

    Flag it if: You mis-tap an answer, or you have to pinch, scroll or squint to read a question.

  3. 3

    Look at the reveal after each answer.

    Should happen: You can tell right away whether you were right, without relying on the colour alone.

    Flag it if: You are unsure whether you got it right, or you only know from the colour.

  4. 4

    Reach the end and read the ask to keep your score.

    Should happen: It is obvious what you get by continuing and that nothing is being charged.

    Flag it if: It reads like a paywall, a sign-up wall, or a trick.

The arcadev0.8 · b9517e5

What we are trying to learn: Whether the core loop — pick, lock, watch, place — is self-explanatory to someone who has never played fantasy. About 5 minutes.

  1. 1

    Read the contest screen before tapping anything. Decide whether you would enter.

    Should happen: You know it is free, you know when it starts, and you know what you are competing for.

    Flag it if: You think it costs money, or you cannot find when it kicks off.

  2. 2

    Pick five players. Try to do it without reading any instructions.

    Should happen: Each row is legible — the player's name and their club are clearly separate — and the number beside each name reads as a projection, not a promise.

    Flag it if: A name runs into its club with no gap, a row is cut off, or you think the number is a guaranteed score.

  3. 3

    Lock your five in and read the confirmation.

    Should happen: It is unmistakable that your picks are frozen and that nobody — including us — can change them.

    Flag it if: You are unsure whether the picks saved, or you think you can still edit them.

  4. 4

    Watch it score. Let it run without tapping.

    Should happen: You can tell which points are still provisional and which are settled, from the words, not the shading.

    Flag it if: You cannot tell whether a score is final, or a negative score is only marked by colour.

  5. 5

    Land on the leaderboard and find your own position.

    Should happen: You find yourself quickly, and if two players are level you can see what broke the tie.

    Flag it if: You cannot find your own row, or a tie looks arbitrary.

Before you close the tab

One step that belongs to no screen. Please do it even if everything worked.

  1. ⚑

    Before you close the tab, send one report even though nothing is wrong. Write “test, ignore this” and send it. On a phone that is the ⚑ at the top right; on a laptop it is ⚑ Report a problem in the panel beside the phone.

    Should happen: A message opens already addressed to [email protected], already carrying the build number and the screen you were on. The only thing missing is your sentence.

    Flag it if: Nothing opens, or it opens blank, or with no address, or without saying which screen you were on. Tell us by any other means — this is the one fault that hides all the others.

Whatever you are testing on

Built, but nothing to tap yet

So you know what exists behind the drawings. These are finished and merged, and none of them has a screen — there is nothing here for you to test, and that is expected, not a gap in the list.

Wallet and double-entry ledgerEvery balance is derived from an append-only journal; money cannot be created or destroyed by any code path.Automated tests against a real Postgres, run on every push.
M-Pesa deposit (Daraja STK Push)Funds are credited only on Safaricom's confirmation, never on the acknowledgement, and a repeated callback cannot double-credit.Automated tests with a faked Daraja client. No real API is ever called.
Contest entry — hold and settleAn entry fee is reserved when you join and only moves when the contest commits, so the same shillings cannot be spent twice.Automated tests, including concurrent duplicate joins under a race detector.
Concurrent-join hardeningTwo taps at the same instant produce exactly one entry and one hold.Automated tests that provoke the race twenty-five times per run.
Prize distributionPayouts reconcile exactly against the pool: prizes plus rake must equal what was collected, enforced in both the code and the database.Automated tests, including a forced mid-payout failure that must leave nothing partially paid.
M-Pesa withdrawal (Daraja B2C)A payout is reserved before it is requested and released untouched if it fails, so a failed withdrawal never leaves money missing.Automated tests with a faked B2C client. No real payment is ever sent.
Scoring engineMatch facts become fantasy points deterministically, in whole centipoints, against a pinned rule version — the same facts always produce the same score, in any order.Automated tests, including shuffled event orders and a from-scratch recompute compared against the cache.
Match-data ingestionLive feed snapshots become scoring facts; a correction is recorded as a new entry that supersedes the old one, never an edit.Automated tests with a fake feed provider, including crash-mid-write recovery.
Account taxonomyPrize credit and real cash are separated by the database itself, so no single transaction can turn one into the other.Automated tests that attempt the illegal transaction and require it to be rejected.

All nine are merged and run on every push. None has a screen yet, because there is no API server or app in front of them — that is a separate piece of work, not a setting. Until it exists, these are verified by machine, and the prototypes above are verified by you.

Not here yet

Things you might go looking for and not find. None of these is a bug, so please do not spend a report on them.

Head-to-head duelsChallenging one other person directly, rather than racing a whole leaderboard. There is no screen for it.nothing to open yet
Signing in as yourselfEvery prototype forgets you the moment you close the tab. That is the design today, not a fault — do not report it.not started
Trivia that keeps your scoreThe trivia round you play is a drawing. It does not save anything and no leaderboard is watching.not started
Anything to do with moneyNo deposits, no withdrawals, no prizes, no card, no M-Pesa prompt. If a prototype ever asks you for money, that is a bug worth phoning about.deliberately absent