Yes, I think you are right, that is where it needs to go. Its not after init
its after the first view.
Using a port to signal when all necessary effects are completed is one way to do it. Means each SSR framework needs to define which port to use. So I guess this could be another built-in that the Elm runtime could provide.
module SSR exposing (..)
{-| Once this command has been run the `onViewComplete` event
will have the `settled` flag set to true.
-}
settled : Cmd msg