I started ChessVision in December 2025. It's a chess diagram editor — you set up a position, export it as a high-resolution PNG or SVG, use it in a book, a blog post, a PDF. Nothing revolutionary. Tools like this exist. I built one anyway.
Seven months later: 5 GitHub stars, 7 forks, a handful of npm downloads, and roughly $13 spent on hosting. That's the honest summary.
I'm not writing this to complain. I'm writing it because I spent months reading "build in public" posts that were secretly marketing disguised as vulnerability, and I wanted to write the version I actually needed to read.
Why I built it
I compose chess problems as a hobby. Whenever I wanted to include a diagram somewhere, I had to either use a clunky desktop app, take a screenshot, or write SVG by hand. Every online tool I found either watermarked the output, required an account, or exported at 72 DPI.
So I built what I wanted: a board editor with clean exports, no account required, no watermark, no ads. Privacy-first. Free forever.
The technical stack is React 19, TypeScript, Supabase, Vite, deployed on nginx in Docker. The export pipeline renders via HTML Canvas at up to 1200 DPI with actual physical dimensions in centimeters — you set "6cm board, 600 DPI", it produces a file you can drop into InDesign without thinking.
What I got wrong early
I underestimated how hard discoverability is.
I assumed if the tool was good, people would find it. That's not how it works. GitHub doesn't have discovery. npm ranks by download count. The people who need your tool don't know it exists and aren't searching for it.
I also spent too long on features nobody asked for. The batch export pipeline (export 50 FEN positions as a ZIP), the cloud sync, the security audit trail — all real engineering, all invisible to someone landing on the repo for the first time.
The audience is narrower than I thought.
Chess composers are a small group. Chess players are large, but most don't need to export diagrams to print. The intersection of "uses chess professionally or seriously" and "wants a developer-friendly export tool" is small.
I knew this going in. I still underestimated it.
What I got right
The technical decisions held up.
Canvas rendering with OffscreenCanvas in a Web Worker for large exports was the right call. Safari has a hard GPU memory limit on canvas — if you don't reset canvas.width = 0; canvas.height = 0 after every blob operation, iOS will crash silently. I hit this bug, traced it, fixed it, documented it as an invariant in the codebase. That kind of thing matters when you care about quality.
The FEN parser I wrote handles every edge case I've found. It validates against the 93-character maximum, checks rank/file counts, catches malformed castling and en passant fields. There are co-located unit tests. The rule is: every change to the parser requires a new test case. No exceptions.
These are the things I'm actually proud of.
Extracting an npm package was a good call.
About a month ago I extracted the rendering core into @chessvision-org/chess-vision — a zero-dependency library that works in Node.js, Deno, Bun, and the browser. No DOM, no canvas, pure SVG output. The idea was that even if the web app never takes off, the package might be useful to someone building a chess blog or a server-side diagram renderer.
It's only a week old on npm, so it's too early to say. But it felt like the right thing to do — create something that can be used without the whole app.
What the numbers look like
I'm not going to pretend 5 stars is success. But here's the thing: the code is better than it's ever been, the tool works exactly as I intended, and I understand the full stack from the FEN parser to the Canvas export to the Supabase RLS policies in a way I didn't before.
If the goal was to ship a polished open-source tool and learn deeply in the process — that happened. If the goal was to build an audience — that didn't happen yet.
Both things can be true.
What's next
I'm going to keep going, but with a clearer focus:
- The npm package needs documentation and real-world usage examples
- The tool needs to reach the people who actually compose chess problems — forums, puzzle databases, annotation software communities
- I need to stop building and start talking to people who might use it
That last one is the hardest. I'm more comfortable writing a FEN validator than writing a cold message to a chess magazine.
The repo is at . The npm package is @chessvision-org/chess-vision.
If you've shipped something small and open-source and felt like you were building in a vacuum — I'd genuinely like to hear how it went for you.
SOCIAL SHARE CARD GENERATOR