Excellent! Sounds like you are well on your way.
One thing to note:
Realm is very memory friendly - as long as code uses Realm based calls, all of the objects are lazily loaded with very low memory impact. However, as soon as Realm objects are moved to Arrays or high-level Swift functions are used, that lazy-loading-ness goes out the window and all objects are loaded into memory.
This can not only bog down an app, but can actually overwhelm the devices memory.
It doesn’t sound like this will be an issue based on your dataset but just be aware to stick with Realm functions as much as possible; List vs Array for example, and .where vs .filter. Imagine a Person with a List of Dog objects:
let dogList = person.dogList //lazy-loading niceness
let foundDogList = dogList.where { $0.name == "Spot" } //memory friendly
let dogArray = Array(dogList) //gobble up memory
let foundDogArray = dogArray.filter { $0.name == "Spot" } //gobble up more memory
I mention it because of the Swift .sorted vs Realms .sorted(byKeyPath: in your code. Just a thought!