Thanks for the feedback @john-kelly & @joakin! 
Yup, I guess I did go overboard with the number of files
. I’m used to React/Redux conventions, where having separate files for actions/reducers/components/etc is typical.
I do feel like the “hard to read” problem mostly goes away with an editor or IDE, as definitions are then all a single-click away. But it would certainly be nicer if it were readable without the help of tools like that 
If I collapse pages down to a single module each, I’ll have to re-think how transitions between them work. With the current approach, one page can import another page’s Init module, which it can use to transition to that page. E.g. Setup.Update calls Pathfinding.Init to kick off pathfinding, and Pathfinding.Update calls Finished.Init when it successfully finds a path.
This approach allows the top-level update function to be trivial, as it doesn’t have to worry about transitions between pages. When I consolidate the pages down to one module each, I’ll have to add transition logic to the top-level to avoid circular dependencies between pages?
And pages will also need a way of notifying the top-level when they wish to initiate a transition.
I’ll have more of a think about that…would bringing in a proper routing library solve this problem? I haven’t looked into routing much yet.
And thanks for the API etiquette link @joakin, there’s definitely some improvements I can make there! Requesting multiple articles in a single call (instead of n separate calls) is on the to-do list for example.