One gym cannot see another gym’s data
Separation is enforced at the database layer, on every collection, by a rule the query has to pass through, not by a filter each screen remembers to add. Each collection has an automated test that fails the build if it could ever return another gym’s rows.