lib/desktop/endpoint.ex

defmodule Desktop.Endpoint do
  @doc false
  defmacro __using__(opts) do
    quote do
      use Phoenix.Endpoint, unquote(opts)
      defoverridable url: 0

      def url do
        url =
          Phoenix.Config.cache(
            __MODULE__,
            :__phoenix_url__,
            &Phoenix.Endpoint.Supervisor.url/1
          )

        endpoint = Module.safe_concat(__MODULE__, HTTP)
        String.replace(url, ":0", ":#{:ranch.get_port(endpoint)}")
      end
    end
  end
end