Hi Rich,
I'm not aware of a broadly used convention. However, you can add auxiliary data to each route, and also, you can traverse the router using code. Knowing those 2 things enable you to create a NAV component that had the router injected, and build out the needed layout from the router itself.
For most of my projects, I found that I had to do both, a part that's generated from the router, and a 'static' part. Other projects have a more dynamic need and use a service to add/remove things from the navigation.
Regards
Sander