212 Simulations in a Year: How the Library Grew

In early 2025 there were 40 browser simulations on this site. By March 2026 there are 212 — all ready, all with Ukrainian translations, all with complete SEO packages. Here's a candid look at the development sessions, the rendering decisions, the categories that took longest to fill, and what I'd do differently.

212
Total simulations
39
Development sessions
26
Active categories

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:

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:

🏛️ Math11 sims
🌤️ Weather7 sims
⚙️ Everyday Physics10 sims
🚀 Aerospace6 sims
🌊 Fluid Dynamics7 sims
🔐 Cryptography4 sims
⚛️ Quantum Computing6 sims
☢️ Nuclear4 sims
🤖 Robotics6 sims
🏃 Sports Science6 sims
🧬 Molecular Biology5 sims
👁️ Perception5 sims
🧠 Machine Learning5 sims
🚗 Transport8 sims
🔌 Electronics8 sims
📶 Signals12 sims
💰 Economics8 sims
🌍 Society15 sims

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:

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.