I’m a chess player who genuinely wants to improve, but I hit the classic problem: everyone says “analyze your games,” yet after thousands of games across Blitz/Rapid/Bullet/Classical, manual analysis becomes unrealistic.
My workflow was painfully repetitive: download recent Lichess games as PGN, paste them into an LLM, and ask for patterns and recommendations. It worked—but it was tedious. KnightVision was born to automate that process and turn it into a product that any serious improver can use in seconds.
The name is a double meaning:
Knight (the chess piece) — tricky, tactical, easy to misjudge
Night vision — “seeing in the dark,” i.e., revealing hidden patterns in your games
What it does
KnightVision connects to your Lichess account and turns your recent games into a structured coaching experience:
Coach report from your last N games (1–50): playstyle, recurring weaknesses, strengths, and actionable recommendations
Recurring themes: aggregates tags across reports so you can see what’s consistently holding you back
Across formats: compares patterns between Bullet/Blitz/Rapid/Classical
Ratings + goals: pulls your current ratings and lets you set a target (e.g., 1650 → 1900)
Training plan: generates a structured weekly plan based on your actual patterns and your goal
The idea is simple: less reading, more direction—turn analysis into a repeatable improvement loop.
How I built it
Frontend
React + TypeScript + Vite + Tailwind for a fast, responsive UI
Markdown rendering for coach reports
GA4 events to measure activation and engagement (analysis_started / success / failed)
Backend
Node.js + Express + TypeScript
Backend-proxy pattern so the Gemini API key never touches the browser
Input validation and structured error handling
Auth & Data
Lichess OAuth2 + PKCE for secure sign-in
Supabase Postgres + Prisma ORM for persistence:
saved reports (full markdown)
extracted tags/themes
rating snapshots
goals and training plans
usage tracking
AI
Gemini for coaching-style analysis + structured outputs
Tag extraction to power recurring themes and summaries
Challenges I ran into
API cost control: LLM calls can get expensive fast, so I implemented server-side usage limits and only count successful analyses.
Reliability: handling rate limits and failures gracefully (Lichess and AI providers) while keeping the UX smooth.
Turning text into insight: a long report is useful, but users need fast summaries—so I structured outputs, extracted tags, and built “themes” and “plan” views to make it actionable.
Security: ensuring tokens/keys are not exposed, using HTTP-only cookies, strict CORS, and secure OAuth (PKCE).
What I learned
A good “AI app” isn’t the model—it’s product design + guardrails + repeatable user outcomes.
The real value is not a one-off report; it’s trend detection + a training loop that keeps improving as the user improves.
Building with real constraints (rate limits, quotas, cold starts, analytics) forces you to build like production—even during a hackathon.
What’s next
A lightweight progress dashboard (rating trend + top weaknesses over time)
Weekly coaching reviews (email + in-app)
Better evidence linking (examples from games tied directly to each recurring theme)
Premium tier experimentation once retention is proven
Built With
- express.js
- google-analytics-4
- google-gemini-api
- lichess-api
- lichess-oauth2-(pkce)
- node.js
- prisma
- react
- render
- supabase-(postgresql)
- tailwind-css
- typescript
- vite

Log in or sign up for Devpost to join the conversation.