The simulation runs
The ecosystem service ticks: populations, predation, food coupling and migration between regions, on a fifteen-minute cycle.
The service that makes this game different from the others is the first one we built past the schema. It holds a population per species per region, applies logistic growth against a carrying capacity, resolves predation with a saturating response, and moves animals across region borders when a region stops being able to feed them.
The saturating response is the part that matters. A naive predation term scales without limit and the model runs away inside a few ticks; with a handling time, predation saturates and the populations settle instead of oscillating into the safety cap. Every dial in the model is a row in the database, not a constant in the code, so tuning the world does not require a deployment.
The world data — species, the food chain, region borders, starting populations — lives in one file that both the service and the database seed read. It used to live in two, they drifted, and the copy in the seed ended up with predation rates a thousand times too large. One copy now.