Make the demo more relevant by having a separate model

Also refactor to split classes + traits to their own files.