Forgejo - actively developed open source. It's what powers Codeberg. Easy to set up and manage with Docker. I moved to it from Gogs and skipped Gitea after reading about the forks.
+1 for Uptime Kuma. I use it in conjunction with a tiny Go endpoint that exposes memory, disk and cpu. And, like @iii I use ntfy for notifications. I went down the Grafana/Influx etc route - and had a heap of fun making a dashboard, but then never looked at it. With my two Kuma instances (one on a VPS and one in my homelab) in browser tabs, and ntfy for notifications on my watch, I feel confidently across the regular things that can go wrong.
You can be logged into a website in one container, but in all the other containers you appear logged out. So you might want to have a Facebook container where you use Facebook, but then they're not able to track your activity in the other containers.
It is only resolving for devices in the Tailnet. Kuma is checking they are all up, and this Ansible playbook is checking they have all their updates. I wouldn't have thought that was an unusual arrangement - and it's worked perfectly for about a year till about three weeks ago.
Is there a reason not to use Tailscale for this?