Quizzja screen atlas · 5 of 10 · Web player — React 19 + Vite · apps/web
Web player — loading, empty, error and overlays
The states a screen passes through before it has anything to show, the two ways it can have nothing to show, and the overlays that sit on top of a screen rather than replacing it. Every destination carries its own version of the first three; drawn here on Today, Puzzles and Ranks, where they read most clearly.
Splash · first paint index.html #splash · splash.ts · .pf-splash in index.css Shipped in the HTML document itself, not by React, so a cold visit is never a blank page. Four cells drop into a crossword and the red Q lands last; the reveal is allowed to finish rather than being cut off, and it covers the app until the session has settled — including when bootstrap failed, which is what hands the screen to the service notice.
3 hints

Ready to play?

Saturday, August 22, 2026 · English

More from today

Quick minis

Loading PuzzleSkeleton.tsx · PuzzleListSkeleton.tsx · .pf-skel Skeletons in the shape of what is coming, so the page does not reflow when it arrives. Each list announces itself once to assistive technology rather than per row, and Solve's board skeleton holds the real grid's geometry — the cells are already the right size before the payload lands.
3 days 3 hints

Ready to play?

Saturday, August 22, 2026 · Japanese

No crosswords scheduled for today.

Quick minis

Explore packs

Empty Today.tsx · today.empty, catalog.empty A language with no daily scheduled for the date — the reason the CMS's Daily grid exists. Genuinely empty only when the day produced nothing at all: a day can carry archive variants without a scheduled daily, and those are still today's puzzles, so the hero goes and the lists below stay.
Something went wrong. Please try again.

Puzzles

Aug 17 – Aug 23

Too many requests — try again in a moment.

The rest of the error vocabulary

OfflineYou appear to be offline. Your progress is saved on this device.
Session expiredYour session expired. Reload to continue.
Sync failedCouldn't sync your progress — we'll retry.
Not foundThat's not available.
Permission deniedYou don't have access to that.
Error format.ts errorKey() · ServiceNotice.tsx Every RPC failure is mapped from its Connect code to one translated sentence — nothing ever surfaces a status number or a stack. A whole-service outage takes the notice at the top; a single failed call takes the coral line in place of the list it was going to fill.

Ranks

Sign in to compete on the leaderboard.

  • 1MMarguerite38,910 pts
  • 2Kkasia_w34,205 pts
  • 3TTomasz29,640 pts
  • 4SSofia R.27,118 pts
  • 5Ddmitri8824,902 pts
  • 6IIngrid21,447 pts

And for a signed-in newcomer

Solve a puzzle to join the ranking.

Ranks — guest & unranked Ranks.tsx · leaderboard.signInToCompete, notRankedYet Two different absences with two different sentences: a guest has no account to rank, a registered player with no solves has nothing to rank yet. The board itself stays visible in both, because it is worth reading before you are on it.

Monday MiniEasy · 5×5 · English

4:32
1H
2E
3A
4R
5T
6E
7A
8
9

Reveal the whole solution?

This fills in every answer and spends hints. You can't undo it.

Reveal confirmation Solve.tsx · play.revealAllTitle The one destructive action inside a puzzle, so it asks first — and says what it costs, because revealing spends hints. Cancel takes focus when the dialog opens; the whole grid is filled server-side, which is also what marks the puzzle solved.

Monday MiniEasy · 5×5 · English

4:32
1H
2E
3A
4R
5T
6E
7A
8
9
Download blank · PDF
Include solved words
Save for offline
Share crossword
Solve overflow Solve.tsx moreItems · the ··· action Four actions that do not earn a permanent button: the printable PDF and its answers toggle, keeping the puzzle on the device, and sharing. A bottom sheet on the phone and a popover hanging off the action row on the desktop — same items, and Meadow moved them here so Check, Hint and Reveal never wrap.
Y Your accountSynced across your devices

Report a bug

Tell us what happened and how we can reproduce it.

The clue bar covers the bottom row of a 15×15 on a small phone. Open Sunday Standard, tap a cell in the last row, and the clue bar sits over it.
Optional
Optional

Your submission and any contact details are sent to our private GitHub issue tracker.

Feedback components/FeedbackLinks.tsx (FeedbackDialog) · About.tsx Report a bug and Request a feature share one dialog with two headings. Name and e-mail are optional and the disclosure says plainly where the text goes — a private GitHub issue, which is also what the CMS's Feedback inbox reads. It renders inside the browser's modal top layer so About's own dialog cannot trap it behind itself.
0 hints

Ready to play?

Saturday, August 22, 2026 · English

When the hint balance is zero

And in You → Privacy

No ads are requested for paid ad-free accounts, and none at all until the advertising consent is granted.

Advertising surfaces ads/AdCard.tsx · ads/RewardedHintButton.tsx · ads/runtime.ts The web's three ad surfaces: an in-feed AdSense card, a post-solve interstitial, and a rewarded button that appears only when the balance is actually zero. All three are gated on consent, a paid ad-free account, and a configured AdSense client — which this repo does not set, so nothing renders today. The card has no styling in index.css either; this frame draws its structure, not a shipped look.

Puzzles

Saturday, August 22, 2026

3 crosswords
Monday MiniEasy · 5×5 · English28% · 4:32
Saturday StandardMedium · 11×11 · English41% · 2:08
Saved on this device
Toast ui/Toast.tsx · store.say() The one transient channel: an offline save confirmed, a link copied, a PDF downloaded, a setting that failed and was rolled back. It sits above the tab bar, announces itself politely rather than stealing focus, and never carries an action — anything you can act on gets a dialog or an inline message instead.