This builds upon the abstract service ts branch.
First I separated the model types from the models.
Then I experiment a bit with zod.
It seems like using such a tool could help us a lot having good typing everywhere. I think most models can completely be replaced by zod schemas. The few methods that the models have could be helpers that you import on demand.