OhMyGame
OhMyGame is the open-source studio for making games with AI. Design, build, playtest, and publish games in one app, with your own model keys.
Practise chess openings move by move against the replies real Lichess players at your level play, with instant feedback.
GamesJavaScript · CSSGitHub @joeland2OnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗Three ways to practise, picked from the start page:
basics.html): how each piece moves, special moves, check and mate.index.html, the start page): in blitz or classical at your Lichess rating: as White the best-scoring openings that are played in at least 1% of games (filtered by play style if you like), as Black the White openings you meet most often. Each shows how often it is played and its win/draw/loss split. Practise them against real games.pros.html): find the move Magnus Carlsen, Hikaru Nakamura or Alireza Firouzja found in a real chess.com game, with Stockfish's explanation.Openings: pick Blitz or Classical and enter your Lichess rating for it. Lines come from games of that time control played by people within ±200 of it. Style tags (attacking, solid, positional, tricky) in styles.js are editorial; popularity is from real games. Every opponent reply played in at least 5% of games becomes its own line (up to 20), most common first. Your moves are what 2200+ players play most, preferring moves from the opening's book. Learn shows every move and the replies you can expect; Practice tests you, and a line clears when you play it without mistakes, then comes back for review. Explore lets you try any move and shows how often players at your level choose it and how it scores. At the end of a line you can play the game out: the opponent plays real players' moves while games reach that far, then (when you log in with Lichess) real games from the whole Lichess database, then Maia 3, a net trained on Lichess games to play the move people at your rating most often play; the board says which opponent plays and at what rating. Hint and Show move help there. Progress is saved in the browser, and on your Lichess account when logged in (supabase/functions/userdata).
Plain HTML, CSS and JavaScript with no build step. Move logic comes from chess.js. Real-game statistics come from the Lichess game database (CC0), counted once by tools/make_explorer.py (blitz: 8 million games, lossy counting so rare but steady lines are kept) into data/explorer-blitz.json and data/explorer-classical.json, so the site needs no Lichess call for them. Log in with Lichess (OAuth with PKCE in lichess.js, no permissions asked; the token stays in the browser) lets play-outs use the Lichess opening explorer, which needs a logged-in player. Book lines are the Lichess opening database (CC0), stored in data/. Where real games run out, the play-out opponent is Maia 3 (AGPL-3.0, CSSLab, University of Toronto): the 5M net, in the ONNX export from bqrio/maia3-onnx, is in engine/maia3/ and runs in the browser with onnxruntime-web (MIT) by maia3.js, always playing its most likely move. If it cannot load, the original Maia (GPLv3) takes over: its nine nets (1100–1900) in engine/maia/, run in plain JavaScript by maia.js (engine/maia/policy.json is lc0's policy map, GPLv3). For hints, evaluations and move badges, and as the last opponent, Stockfish 18 lite (WebAssembly, GPLv3) in engine/.
app.js – openings page: picker, line building, practiceboard.js – board drawing shared by all pagesdrill.js – the find-the-move trainer used by Basics and Prosbasics.js – the lessonspractice.html + practice.js – My practice: a training plan from your own games, linking into the trainer (?practise=, ?do=traps|mistakes)game.html + game.js – one game replayed: moves, a winning-chances graph, the deciding moves with the better move, what went well and badlyprofile.html + profile.js – a player profile from their last 500 rated Lichess games: player type, good at / work on, results, openings; any player can be looked up (?u=name)mistakes.js + mistakes.html/mistakes-page.js – mistakes from your whole Lichess games, trained as puzzlespros.js + data/pros.json – pro puzzles; rebuild with python tools/make_pros.py (needs pip install chess and Stockfish)style.css – stylingdata/*.tsv – Lichess openings (eco, name, pgn)Run locally: npx serve . and open the address shown.
Before committing a change, run tools/stamp.sh: it gives every CSS and JS reference a fresh ?v= stamp so browsers load the new files instead of cached ones.
The board uses Lichess's default look. Piece images in pieces/ are the cburnett set by Colin M.L. Burnett, licensed GPLv2+, taken from lichess-org/lila.
The site's code is free software under the GNU Affero General Public License v3.0, as Maia 3, which it runs, requires. The source is this repository.