LiveReload was too hard for me to understand, so I wrote LiveRefresh.