Recompia
Pokémon Pokopia (Switch 2) recompiled to run natively on Windows with Linux/Handheld support. Multiplayer included, modding, feature enhancements and more! Join the discord community as well
翻訳待ち
No updates detected yet. GitHub releases will appear here.
Strict chess opening memory training — Learn & Practice modes, animated board, free Scotch Gambit + premium packs
翻訳待ち
Loading the full README. The saved excerpt is shown below.
Strict chess opening memory training — Practice & Test modes, animated board, and £1.99 drill packs.
• React 19 + TypeScript + Vite 8
• TanStack Start / Router
• Tailwind CSS v4
• chess.js
• CBurnett piece SVGs (public/pieces/)
Demo unlocks use localStorage (src/lib/unlocks.ts).
On Vercel, set RESEND_API_KEY so Opening Lab can send:
• Welcome after someone creates an email account
• Lab+ welcome after they subscribe
• Pack confirmation after they buy a pack
From: Opening Lab.
Without the key the site still works; emails are skipped.Read the full README ↗Strict chess opening memory training — Practice & Test modes, animated board, and £1.99 drill packs.
public/pieces/)| Tier | Price |
|---|---|
| Paid drill packs | £1.99 |
| Opening Traps | 6 lines free, then £1.99 |
| Caro-Kann for Black | 3 lines free, then £1.99 |
| Scotch Gambit lessons | £2.99 (parked, not on sale) |
| Opening Lab+ | £4.99 / month or £29.99 / year (not on sale) |
| Pay as you go | £1.99 per pack |
| Buy all | £10.99 one-time. Every drill pack now and any future drill packs. Not Lessons. Not a subscription. Not lifetime access. |
Demo unlocks use localStorage (src/lib/unlocks.ts).
On Vercel, set RESEND_API_KEY so Opening Lab can send:
From: Opening Lab <[email protected]>.
Without the key the site still works; emails are skipped.
Optional fallback if you already have a mailbox: SMTP_HOST, SMTP_USER, SMTP_PASS.
One-click import (recommended):
https://vercel.com/new/clone?repository-url=https://github.com/TangoCash38/opening-lab
Or:
TangoCash38/opening-lab.vercel/output via npm run build)npm run buildCLI (if you have a token):
npx vercel login
npx vercel --prod
src/
components/opening-lab/
app-shell.tsx # Native-style header + views
pack-list.tsx # Packs, locks, prices
unlock-modal.tsx # Pay as you go / Lab+
train-view.tsx # Practice / Test
chess-board.tsx # Sliding pieces
chess-pieces.tsx
guide-view.tsx
mini-board.tsx
data/
packs.ts # Lines + isFree / isPremium / price
pricing.ts # £1.99 drill packs / lessons £2.99 / Lab+ £4.99 mo · £29.99 yr
hooks/use-unlocks.ts
lib/unlocks.ts
routes/
styles.css # Tokens, board, touch CSS
public/
pieces/
manifest.webmanifest
favicon.svg
og.jpg
Website-only authoring: pick Black or White, play both sides on a Book
board, then Remember this line. The locked SAN is stored in
localStorage (src/lib/gym-line.ts) and trains with the same Practice →
Test loop as a curated pack. Test unlocks after a clean Practice.
The authoring board shows a local opening chip (Italian Game · C50)
from src/lib/opening-identity.ts — deepest SAN-from-start / FEN match,
or Opening… when unknown. It never invents a pack name.
While authoring, the board POSTs /api/practice-review-eval (depth: 12,
~400ms debounce) and paints full Engine chrome: thin eval bar, MultiPV-2
rows, and soft green hints from each PV first move. Status copy is
Engine · suggesting… only — never “SF cloud”, “Stockfish cloud”, or
“Lichess”. Fail-soft { ok: false } hides the bar, MultiPV, and greens.
Practice and Test never show Engine / MultiPV chrome.
The Remembered sheet body is the full line SAN, e.g.
Remembered — 1.e4 e5 2.Nf3 Nc6 — locked as your gym line. Train it like a pack.
Play wrap hides this entry (!isPlayApp()).
POST /api/practice-review-eval is a short MultiPV-2 Engine eval (default
depth 14, hard cap 16, wall ~2.5s). Create-your-own authoring reuses it at
depth 12. Never mid-drill in Practice or Test.
Vercel has no Stockfish binary. Leave STOCKFISH_PATH unset on
Vercel; the handler fail-softs { ok: false } (HTTP 200). Live eval comes
later via a small worker that sets STOCKFISH_PATH (e.g. /usr/games/stockfish
or /usr/bin/stockfish) and is reached as PRACTICE_REVIEW_EVAL_URL
(same POST contract). Do not ship WASM Stockfish (or any GPL engine
net) to the client or the Play WebView bundle.
Product copy should say Engine, not “Lichess / Stockfish cloud”.
npm install
npm run dev # 0.0.0.0:8080
npm run build
npm run typecheck
https://github.com/TangoCash38/opening-lab
The Play app is a raw System WebView (not Chrome TWA). Path B billing is
one-time packs (pack_<pack_id_with_underscores>) and buy_all_packs via
POST /api/play/subscribe and the Android Publisher products API. No Lab+.
Set GOOGLE_PLAY_SERVICE_ACCOUNT_JSON on the host or subscribe returns 503
without granting. Project and build steps: android/README.md.