This is the 2D companion to the 3D Social Sustainability Index Simulator. The reaction model is identical: four community indicators evolve as coupled first-order ODEs, integrated with an explicit-Euler step clamped to avoid blow-ups at low frame rates:
dE/dt = k(investE − E) + 0.02·(H − 50)
dH/dt = k(investH − H) + 0.016·(E − 50) + 0.016·(W − 50)
dW/dt = k(investW − W) − shock(t)
dC/dt = k(investC − C) + 0.024·(E − 50) + 0.01·(H − 50)
k = 0.6/yr (policy attractor rate)
SSI = (E + H + W + C) / 4
Each indicator drifts toward its policy-investment target at rate k and receives cross-domain feedback around the neutral midpoint of 50: better healthcare feeds education, education and housing feed healthcare, and education plus healthcare feed civic participation. Every one of 168 households carries an individual wellbeing score sampled around the community mean with variance set by the inequality spread slider, and the Gini coefficient is computed directly from that distribution:
G = Σᵢ Σⱼ |xᵢ − xⱼ| / (2·n²·mean(x))
The 3D sim spends its rendering budget on an orbiting instanced-block city, which looks good but hides most of the 168 households behind one another and makes the index's trajectory over time hard to read. This 2D version instead lays every household out as a flat 14×12 grid you see all at once from directly above — no camera angle can hide a low-wellbeing household in the back row — and adds a genuinely 2D-native strip chart plotting the composite index and Gini coefficient against simulated time, so you can watch policy changes and the economic shock ripple through the system as a curve instead of inferring it from block heights. The economic shock button applies a sudden drop to housing affordability W that then propagates through the feedback loops into healthcare and civic participation over the following simulated years. With the same slider values the two sims track identical numbers — the underlying math is unchanged, only the view is native 2D.