Changes made in each update. Newest first.
1.7.0
A clearer front door
2026-06-03
The most common feedback was that newcomers
didn't get the concept without someone
explaining it. The landing is rebuilt around a
single idea you can grasp in a few seconds:
a real before/after, a three-step loop, and one
obvious button. The chromatic wheel stays, just
one scroll down.
highlights
- New hero: a real contributor's flat RAW next to their edited result, the 3-step loop (download · edit · compare), and a primary "Try it — solo" call to action
- The first-visit popup is gone — the explanation now lives on the page, always visible
- The "support" button moved up into the top bar, reachable from every page
- Session duration is now a draggable wheel that goes up to 120 min (was capped at 60)
cleanup
- Removed the background-music widget entirely — it took up space for something nobody used
- Hero images are heavily optimised so the new landing still loads fast
- All new copy translated in EN / FR / IT / ES
1.6.0
Email sign-up · third login option
2026-05-31
Discord and Google were the only sign-in
options until now — not great if you
don't have either, or just don't want to
connect a social account. The login modal
picks up a full email + password flow with
confirmation email, password reset, and the
same nickname picker the OAuth flow uses.
highlights
- Create an account with email + password + nickname — a confirmation link arrives in your inbox to activate
- "Forgot password?" sends a reset link that drops you straight into your profile to pick a new one
- Modal is fully translated in EN / FR / IT / ES, including all validation and error messages
- Inline checks: nickname availability is validated against the server before the form is submitted — no more cryptic SQL conflict errors
behind the scenes
- Same SQL trigger as Discord OAuth seeds the profile from the nickname you pick — no schema change required
- Common Supabase errors (email taken, invalid creds, rate-limit, not confirmed) get translated into readable messages instead of stack traces
1.5.2
Profile mobile, dynamic version & live count
2026-05-29
Three small but visible polish items: the
profile page joins the responsive layout,
the top-bar version tag updates itself when
we release, and mobile users finally get to
see how many other players are online.
highlights
- Profile page is now fully mobile-friendly — avatar, stats grid and account actions all stack into a single readable column with thumb-friendly buttons
- Live "X online" count moved into the mobile footer alongside info / legal — was previously hidden under 800 px because the top-bar was too cramped
- The "v…" pill in the top-bar now reads itself from a single
SITE_VERSION constant in chrome.js — bumping it in one place propagates everywhere
fixes
- Top-bar version was stuck on "v0.1" since launch; it now matches the latest patch note (this one)
- Sitemap was missing
info.html — Google Search Console will pick it up on the next crawl
Fixes from testing on actual phones — HTTPS gets
enforced, music goes away on mobile, the gallery
becomes a scrollable list, and signing in finally
survives the browser back button.
highlights
- Gallery cards on mobile collapse to compact rows (small thumb + id inline) — 12 challenges per screen instead of 1
- Contributors cards now show "challenges · 004, 005, 006…" on a single line — much shorter cards on desktop too
- info / legal pills moved below the donate button on mobile so the top bar isn't fighting for space
- HTTPS enforced site-wide via HSTS + inline redirect; the next visit goes straight to
https:// automatically
fixes
- Brave / Safari "Not secure" warning gone on the apex domain
- No more background music or audio widget on mobile (was eating top-bar real estate and data)
- Browser back button no longer signs you out — the bfcache auth state now re-syncs with localStorage and reloads if stale
- multi.html "create room" modal button finally renders with its accent border (setup.css wasn't loaded on that page)
Every page now has a real responsive mobile
layout. The grading workflow itself is feasible
from a phone thanks to Lightroom Mobile, Snapseed,
VSCO & co. — the "desktop only" gate is gone
for everything except the grading session screen.
highlights
- Landing page on mobile gets a real hero card (H1 + tagline + 5 stacked nav cards) instead of the gate — huge SEO unlock
- Solo flow (setup → game → result) and multi flow (lobby → room with its 4 states) all stack vertically with tap-friendly targets
- Content pages (gallery, contributors, about, info, legal) all responsive — TOC stacks, grids collapse, form inputs use 16 px font to suppress iOS Safari focus-zoom
- Mobile-first indexing now sees real, keyword-rich HTML (RAW, color grading, Lightroom, Capture One, anonymous voting) instead of "Desktop only"
fixes
- Landing donate button no longer floats with a tall empty gap above it (menu-stage was inheriting
flex: 1 from desktop)
- game.html / room.html brand wordmark hidden on mobile when the live pill row is dense — was wrapping onto a second line
- multi.html create-room modal goes full-screen on mobile with radios that wrap gracefully
- Mobile-gate opt-in via
class="mobile-friendly" — pages that are still desktop-only (none, currently) would just leave the class off
1.4.1
Security: stats lockdown
2026-05-28
The profile_stats view was returning
every signed-in player's aggregated stats to
anyone with the publishable key. Closed the leak
on both the view and the underlying profiles
table.
highlights
- Profile stats are now strictly self-only (security-invoker view with an explicit
WHERE id = auth.uid() filter — belt + suspenders)
- Profiles table SELECT restricted to authenticated users — anonymous can no longer enumerate nicknames
- New
is_nickname_available(text) RPC returns only a boolean so signup / rename never needs direct SELECT on profiles
fixes
- Closed the
GET /rest/v1/profile_stats?select=* endpoint that previously dumped all players' stats to anon
- Closed the
GET /rest/v1/profiles?select=* endpoint that previously dumped all profile rows to anon
1.4.0
Category filter & discovery mode
2026-05-28
Pick analog or digital before you start. Signed-in players
stop replaying photos they've already nailed.
highlights
- Category dropdown in solo & multi setup (random · negative · digital)
- Hosts now lock a category at room creation — every player sees it in the lobby
- Discovery mode: signed-in random picks skip photos you've already unlocked, then re-open the pool for replay once you've done them all
- Specific-challenge replay from the solo dropdown for everything in your gallery
fixes
- Active solo session now stores the category so F5 doesn't widen the pool mid-round
- Challenge dropdown resets to "random pick" when you switch categories instead of keeping a stale id
1.3.0
Legal page, Discord login & contribution form
2026-05-27
Sign in with Discord, see who's online, and submit your
photos to the contributors pool without leaving the site.
highlights
- Discord OAuth added as a second sign-in option next to Google
- New "legal" link in the top bar — full Terms / Privacy / Copyright page, GDPR-compliant
- Inline contribution form on the Contributors page (Supabase + Formspree)
- Online presence pill in the bottom-right corner showing live player count
fixes
- Provider-choice modal no longer flickers on first open
- Login disclaimer links now point to the legal page sections directly
1.2.0
Pokédex gallery & solo session lock
2026-05-25
Your unlocked photos now live in a personal gallery — and
F5 stops being a re-roll cheat.
highlights
- Pokédex-style gallery showing every challenge with locked / unlocked state
- Per-challenge selector on the solo setup so you can replay any photo you've completed
- Solo session is now persisted in sessionStorage — refresh resumes the same challenge with the timer where you left off
fixes
- F5 during an active solo no longer rerolls the photo or restarts the timer
- "Start session" button explicitly clears the active-solo lock so a new round always picks fresh
- Black screen on back navigation (bfcache) fixed
1.1.0
Cloudflare + R2 migration
2026-05-22
Big infra move: source files now live on Cloudflare R2 so
downloading a 60 MB RAW costs us nothing and stays fast
worldwide.
highlights
- RAW / scan sources moved to Cloudflare R2 (
sources.grading-game.com) — no more 25 MB Pages limit
- Background music streams from R2 too — faster first play
- Site hosted on Cloudflare Pages with privacy-friendly analytics (no cookies)
fixes
- Auth widget no longer flickers between page navigations
- Profile page no longer shows the anonymous AND authenticated sections at once
- Bypassed Supabase SDK getSession on boot — fixes navigation hangs that some users were seeing
- Added timeout protection to Supabase boot so a slow API never freezes the page
grading-game goes public. Solo training, multiplayer rounds
with anonymous voting, and optional Google sign-in to keep
track of your runs.
highlights
- Solo training mode — download a RAW, grade it externally, upload your JPEG, compare with the reference
- Multiplayer rooms — same photo, same timer, anonymous voting, podium at the end
- Google OAuth + profile page with editable nickname and short bio
- Game history tracked per user (challenges played, scores, ranks)
- Real-time lobby and room state via Supabase Realtime
- Auto-generated challenge manifest from the photos folder