Build1 distinct publisher3 min readUpdated
A 40-move review costs 160 core-seconds that nobody can cache. Compiling Stockfish to WebAssembly takes that off the server ledger and puts it on hardware you cannot measure.
The Engineer · Build desk

Compiled by The EngineerSomething wrong?How this is made
The arithmetic in the post is rounded generously. Eighty positions at two seconds each is 160 seconds, not quite the three minutes claimed [1], and a thousand daily reviewers therefore cost about 44 core-hours a day rather than 50 [2]. The quibble is worth making because of where it lands: the entire free tier for a thousand people fits inside two cores running flat out around the clock [3]. That is one small instance. Nobody writes a quota policy to protect one small instance.
The cap is priced for the day the free tier works. The same 160 seconds across a hundred thousand daily reviewers is roughly 4,440 core-hours a day, about 185 cores that exist purely to give something away [4]. And because each position belongs to one player's game, none of that work is reusable across users [4], so the bill scales with headcount in a straight line with no cache to bend it.
Putting Stockfish in a Web Worker does delete the line item. The server ships static files and never sees a chess position [7], and with no per-user cost there is nothing to meter and therefore nothing to cap [8]. What it does not delete is the 160 seconds. Those are still spent, now in one browser tab, by a person watching a progress bar on a machine whose speed you did not choose. On chessdream.app that spend is also the worst version of itself: the author checked while writing the post and found the site does not send the cross-origin isolation headers, so every analysis runs single threaded and the depth 15 default is doing more work than the strength it returns [15]. Threads are the obvious lever, and they need SharedArrayBuffer, which since Spectre browsers only hand to a cross-origin isolated page carrying `Cross-Origin-Opener-Policy: same-origin` and `Cross-Origin-Embedder-Policy: require-corp` [14].
The quieter trade is observability. Server-side metering is also server-side logging, and the browser gives you neither. Every failure mode described in the post returns a plausible number instead of an error. Read the wrong `info` line and a depth 4 evaluation is presented as depth 15 [9]. Pass `score mate 3` through the same divide-by-100 as a centipawn score and a forced win renders as 0.03, dead level on the graph [10]. Forget `removeEventListener` and every position after the first carries listeners from all its predecessors, resolving promises that already resolved, silently, without throwing [12]. Forget to terminate the Worker and you leak one per analysis on the visitor's machine rather than yours [13].
None of that argues for keeping the quota. It argues that the two costs are not the same shape. A CPU budget is a number you can see going up. A client-side engine converts it into wrong evaluations on other people's hardware and a wait time you learn about from complaints. The trade is still good at a hundred thousand users, where the alternative is 185 cores [4]. At a thousand, where the alternative is two [3], the honest reason to move the engine into the browser is that you no longer have to defend a quota, not that you saved the money.
Follow any of these and your For You feed starts watching them — no settings page required.
Ranked by verification strength, evidence, and original report placement.
Reviewing a 40 move game means evaluating about 80 positions.
Giving the engine two seconds per position on an 80 position review spends close to three minutes of CPU.
Multi-threaded WASM needs SharedArrayBuffer, and since Spectre browsers only provide it on a cross origin isolated page, which requires the headers Cross-Origin-Opener-Policy: same-origin and Cross-Origin-Embedder-Policy: require-corp.
None of the analysis work is cacheable, because one user's game is not anyone else's game.
Stockfish compiles to WebAssembly; run in a Web Worker, the visitor's own processor spends the analysis time while the server ships static files and never sees a chess position.
UCI info lines stream continuously as the search deepens and only the last one before bestmove reflects the requested depth; reading the wrong line yields an evaluation from a depth 4 search.
Evidence-backed comparisons of source perspectives and observed adoption signals. Read the methodology
Which Builder, Operator, and Investor concerns the observed source mix emphasized—not a truth score.
Evidence, demonstrated adoption, hype gap, incentives, and confidence are assessed independently, each on its own current evidence. How these are measured.
Verifiable engineering detail, unsourced economics
The technical core is strong for a single source: concrete code, a real UCI transcript, named browser security headers, and specific failure modes a reader can reproduce. The economic core is weak: the market-wide cap claim carries no citation, the cost model rests on the author's own assumptions, and the post's two cost figures disagree by about 11 percent. One publisher, one article, no corroboration.
One self-reported hobby deployment
Adoption evidence is limited to the author's own site, disclosed by the author, plus an uncited characterization of other providers' free-tier limits. No user counts, traffic, download figures, third-party implementations, or provider confirmations appear anywhere in the cluster.
Mildly overstated cost framing, candid engineering
The framing that the cost is deleted and there is 'nothing to meter, so nothing to cap' overstates what a client-side engine achieves - the compute is transferred to user hardware, as the post itself later concedes - and the headline cost number is rounded up beyond the post's own arithmetic. Against that, the article is unusually candid: it admits the missing headers on its own site, admits the move-label thresholds are judgment rather than mathematics, and states plainly that nothing here is free. Net overstatement is small.
Author promotes the site he is describing
The post is written by the operator of chessdream.app, the product used as the worked example, and it frames a competitor practice (capped free review) as an economic necessity his own architecture escapes. The site's ad script and analytics tags are named as the reason he will not enable cross-origin isolation, which discloses a monetization dependency. The incentive is visible and partly self-critical rather than concealed.
Single-source, high on mechanics, low on economics
Confidence is moderate for the engineering claims, which are specific, internally consistent, and checkable against browser and UCI behaviour, and low for the cost and market claims, which come from one self-interested author with an internal numerical inconsistency and no external corroboration. Only one publisher is present, so cross-source triangulation is unavailable.
build
FFmpeg.wasm ships, but budget for a watchdog: one in ten heavy jobs deadlocked in silence1 distinct publisher
build
A build-tool swap that took 70 days and 166 files, and the build was the easy part1 distinct publisher
build
796 pages of semantic search with no vector database, and what it cost to skip one1 distinct publisher
build
An exact byte budget is a search problem, and 18 encodes is the wrong way to run it1 distinct publisher
Distinct publishers with included, body-backed reporting in this cluster.
dev.to
1 article · August 22, 2026