

I always put all of the code in the main block. Only exception is when I am creating a multithreaded/multiprocessor application. Then I normally use the if statement as the place to setup “the plumbing” with pipes and what not. That way people are forced to realize there is no main function but two co functions working in tandem
Not trying to shill, but seems like a perfect opportunity to integrate Tailscale for network access and then use the funnel feature to connect to peers.