The Starting Point
The project began in January 2024 with a handful of Three.js experiments — SPH fluid, tectonic plates, the galaxy renderer. By early 2025 there were roughly 40 simulations with a rough category structure in place. Most were 3D WebGL; most covered classic physics. The gaps were obvious: no chemistry, no biology, no economics, no electronics, no signal processing.
The year from March 2025 to March 2026 changed that. Working in focused development sessions — each adding 2–5 simulations at a time — the library grew from 40 to 212. The pattern was deliberate: finish a category completely before moving to the next. No permanent "coming soon" cards. Either a simulation is live or it doesn't appear in the category.
The Rendering Decision
The biggest architectural shift of the year was moving away from defaulting to Three.js for everything. Three.js is powerful — but it carries setup overhead and is genuinely only necessary for 3D geometry.
The turning point was building the epidemic simulator (SEIR model). It was a pure Canvas 2D simulation of 2D agents on a flat plane. The Three.js version would have been 200 lines of boilerplate scene setup for zero visual benefit. The Canvas 2D version was 40 lines and ran at 60 FPS with 500 agents.
After that, the rule became simple:
- Three.js — when the simulation lives in genuine 3D space (galaxy, orbital mechanics, Bloch sphere, geodesic domes)
- Canvas 2D — everything else: agent models, signal plots, cellular automata, traffic flows, reaction-diffusion, phase diagrams
- WebGL directly — only for GPU-bound simulations (reaction-diffusion ping-pong buffers, ray marching SDFs, path tracing)
Roughly 70% of the 212 simulations are Canvas 2D. That surprises
people. The library looks like a WebGL project but most
simulations are drawn with ctx.fillRect and
ctx.arc.
Categories Completed — In Order
Here's every category that reached "zero coming-soon cards" status during the year, in the order it was completed:
The Hardest Categories
Signal Processing (12 simulations)
Signals became the largest single category. Digital filters, OFDM modulation, phase-locked loops, FFT spectrum analysers, antenna radiation patterns — each one required understanding genuinely complex engineering mathematics. The digital filter designer alone involved implementing Butterworth and Chebyshev filter design, Bode plots, and pole-zero diagrams in the Z-plane. Getting the DSP maths right took longer than any other category.
Cryptography (4 simulations)
Cryptography presented a different challenge: the maths is exact. You
can't approximate modular exponentiation. The RSA key exchange
simulator uses JavaScript's BigInt for all modular
arithmetic — critical, because RSA primes are hundreds of bits long
and ordinary floating-point numbers lose precision spectacularly.
// Safe modular exponentiation with BigInt
function modpow(base, exp, mod) {
let result = 1n;
base = base % mod;
while (exp > 0n) {
if (exp % 2n === 1n) result = (result * base) % mod;
exp = exp >> 1n;
base = (base * base) % mod;
}
return result;
}
Quantum Computing (6 simulations)
Quantum computing has the unusual property of being both conceptually deep and visually abstract. The Bloch sphere (Three.js, true 3D) was the most intuitive — you can literally watch the qubit state vector rotate as gates are applied. Grover's algorithm and quantum entanglement were Canvas 2D, showing amplitude histograms and Bell state probability distributions respectively.
The CHSH inequality test in the entanglement simulator was a particular point of pride: it computes S = 2√2 ≈ 2.828 > 2, demonstrating that quantum mechanics violates classical hidden-variable limits.
The Ukrainian Translation Decision
Every simulation on this site has two versions: English
(/sim-name/) and Ukrainian (/uk/sim-name/).
This was a deliberate choice made early and never reversed, despite
the significant overhead.
The Ukrainian versions aren't machine translations — they're full
rewrites of the UI labels, simulation descriptions, educational
content, and metadata in natural Ukrainian. The
hreflang links, og:locale tags and JSON-LD
inLanguage properties are all correct for both versions.
For a solo project this is a substantial commitment per simulation.
The reason is straightforward: Ukraine has a large population of technically educated people, Ukrainian-language educational content for interactive physics is genuinely rare, and the site name is already mysimulator.uk — the TLD is a statement of intent.
What I'd Do Differently
1. Start with Canvas 2D earlier
The first 30 simulations defaulted to Three.js even when 2D was sufficient. Refactoring some of them later to Canvas 2D revealed how much simpler the code could be. On a fresh start I'd establish the "Three.js only for real 3D" rule from day one.
2. Build the content articles in parallel
The site has 502 content articles (251 EN + 251 UK) explaining the maths behind each simulation. Most were generated in bulk rather than written alongside each simulation. Writing them contemporaneously would have produced deeper articles — the intellectual context is freshest right after finishing the implementation.
3. Plan categories before building simulations
Several early simulations didn't belong to any category and had to be retrofitted. Eight simulations were invisibly orphaned — not linked from any category page — and were only rediscovered during a navigation audit months later. A category plan before building would have prevented this entirely.
What's Next
At 212, the library has good coverage across physics, biology, computer science, economics and engineering. The obvious gaps are:
- Chemistry — molecular dynamics, reaction kinetics, the periodic table visualised
- Medicine — pharmacokinetics, blood flow, EEG/ECG dynamics beyond the existing single simulation
- Game theory — more interactive multi-player game-theoretic scenarios
- Polish translations — the third language target, currently at zero simulations
The goal for the next year isn't necessarily more simulations — it's better simulations. Some of the early ones, built when the project was young, deserve a second look. Higher-fidelity physics, richer UIs, more educational depth.
Current state (March 2026): 212 simulations · 26 active categories · 502 content articles · EN + UK versions throughout · zero-orphan navigation · full SEO on every page.