ESP32-S3 Bench Guide
ESP32‑S3 N16R8 벤치 가이드: 실시간 핀아웃, 강의, 시뮬레이터 및 벤치 로그
영상·연구·승률·연습 도구와 함께 12,000개 이상의 체스 오프닝을 탐색해 스타일에 맞는 오프닝을 찾습니다
Explore 12,000+ chess openings with videos, studies, win rates, and practice tools. Find the perfect opening for your style.
교육JavaScript · TypeScriptGitHub @Freddiekinns온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
A chess learning platform for exploring and practising openings: 12,377 opening
positions in 31 families, with AI-written strategic content, win rates from
Lichess, curated YouTube videos and Lichess studies, and a move trainer.README 전문 보기 ↗Live at openingbook.xyz
A chess learning platform for exploring and practising openings: 12,377 opening positions in 31 families, with AI-written strategic content, win rates from Lichess, curated YouTube videos and Lichess studies, and a move trainer.
Discover (the landing page)
Opening pages
Analyse (your own games)
npm install # all workspace dependencies, and the git hooks
npm run dev # API on 3010 + frontend on 3000
Requires Node.js 22 or newer (CI runs Node 24). The opening data is committed in
api/data/, so no download step is needed, and no environment variables are
needed to run the app locally. They are only required for the data pipelines and
live Lichess stats.
Create a .env in the repo root. Every variable is optional; each unlocks a
specific feature.
| Variable | Needed for |
|---|---|
LICHESS_EXPLORER_TOKEN | Live win rates via the /api/explorer proxy |
YOUTUBE_API_KEY | Video pipeline (full mode and metadata enrichment) |
JEV_API_KEY | Video pipeline's relevance filter (see below) |
GOOGLE_AI_API_KEY | LLM enrichment via Gemini |
GOOGLE_APPLICATION_CREDENTIALS_JSON | Vertex AI service-account credentials |
VERTEX_AI_PROJECT_ID | Vertex AI project |
VERTEX_AI_LOCATION | Vertex AI region |
LICHESS_EXPLORER_TOKEN is a zero-scope Lichess personal access token. Lichess
has required authentication on the opening explorer since March 2026; without
the token the proxy returns 503 and the win-rate panel falls back to snapshot
statistics. It must also be set in the Vercel project environment for
production.
JEV_API_KEY comes from console.typesafe.ai. Without it the video pipeline
still applies cached answers but leaves new videos unfiltered.
chess-opening-explorer/
├── packages/
│ ├── api/ # Express API: business logic, source of truth
│ ├── web/ # React 19 + TypeScript frontend (Vite)
│ └── shared/ # Shared utilities and types
├── api/ # Vercel serverless wrappers (thin, import packages/api)
├── api/data/ # Canonical generated data consumed by the API
├── middleware.ts # Vercel edge middleware: pre-renders opening pages
├── config/ # Pipeline configuration (channels, matcher, pins)
├── data/ # Source data, including the opening families
├── design-system/ # Warm Editorial Dark reference bundle
├── docs/ # Proposals, reviews, backlog
├── scripts/ # Build, SEO, audit and data-maintenance scripts
├── tools/
│ ├── analysis/ # Python: Lichess popularity pipeline
│ ├── course-discovery/ # Node: Lichess study import pipeline
│ ├── family-taxonomy/ # Node: assigns every position to a family
│ ├── llm-enrichment/ # Node: AI content generation
│ ├── sample-reports/ # Node: the Analyse page's sample reports
│ └── video-pipeline/ # Node: YouTube video discovery and matching
├── tests/ # Backend tests (Jest) + Playwright e2e
└── .github/memory-bank/ # Project context and current state
npm run test:all # backend + frontend: the check that matters
npm run test:backend # Jest
npm run test:frontend # Vitest
npm run test:e2e # Playwright end-to-end
npm run test:coverage # backend coverage
npm run build # type errors surface here, not in the test suites
Jest collects from tests/** and tools/**/tests/**. packages/*/tests/ is in
testPathIgnorePatterns, so a Jest test placed inside a package silently never
runs. Put backend tests in the root tests/ directory. Frontend tests live
beside their components in packages/web/src/**/__tests__/.
Coverage reports: coverage/lcov-report/index.html (backend),
packages/web/coverage/index.html (frontend).
Husky installs these on npm install:
packages/ and blocks the commit on errorsEach pipeline has a detailed README in its directory.
npm run pipeline # incremental: RSS discovery, free, the default
npm run pipeline:full # full catalogue rebuild via the YouTube API
npm run pipeline:rematch # re-score existing videos, zero API cost
Every mode ends with two steps. First it drops videos that the Jev model
confidently says are not about the page they matched. Then it adds the
hand-verified videos in config/video_pins.json. Run
node tools/video-pipeline/scripts/backfill-views.js before a rematch, or view
counts and thumbnails go stale. Verify any scorer change with
node scripts/audit-video-matches.js.
npm run course:discover # find popular Lichess studies (500+ likes)
npm run course:import # fetch studies into the cache, rebuild courses.json
npm run course:rematch # rebuild from the cache only: offline, seconds
courses.json is a full rebuild each run; never hand-edit it. Verify with
node scripts/audit-study-matches.js.
npm run enrich
Generates strategic descriptions with Gemini 2.5 Pro on Vertex AI. Supports batch processing, dry runs, and resumable runs.
python tools/analysis/run_pipeline.py --incremental
Downloads monthly Lichess rated-game dumps and aggregates opening statistics. Needs substantial free disk: a busy month can approach 50 GB.
node tools/family-taxonomy/build-family-index.js
Re-resolves every position's family from data/family-overrides.json and
rewrites the ECO files. Run it after changing a family or a rule, and read
tools/family-taxonomy/README.md first: a family also decides which videos a
page shows when it has none of its own.
Unified codebase. Development and production run identical business logic.
The Vercel functions in api/ are thin wrappers that import from
packages/api.
Pre-processed data. Pipelines generate JSON into api/data/, which is the
canonical data location in every environment. Search is served from the API, not
by shipping the dataset to the client.
Opening pages are pre-rendered at the edge. middleware.ts puts each
opening's title, description, win rates and internal links into the HTML before
React loads, so crawlers see the content without running JavaScript. Sitemaps
and the lookup shards it reads are generated at build time
(npm run build:vercel).
Edge caching is load-bearing. Crawlers index 12,000+ pages, so every route
declares a Cache-Control policy. Most are in vercel.json; /api/explorer
sets per-band TTLs in the route itself.
Analytics. Page views come from Vercel Web Analytics; product events go to PostHog (EU), from the production host only.
Warm Editorial Dark design system. CSS Modules for component styles, with
design tokens for surfaces, typography, data-viz and accents. Production imports
the tokens from packages/web/src/styles/simplified.css; design-system/ is
the reference bundle, and the two are kept in sync.
CLAUDE.md; scoped rules live in packages/*/AGENTS.md, and the deeper
subsystems have skills in .claude/skills/.Data: 12,377 openings in 31 families; 1,452 videos across 68% of positions; 17,079 study chapters from 444 studies across 4,500 positions.
See LICENSE.