

Nice rebuild. Since you are more interested in development than media, I would reorder that list. Put Forgejo before Nextcloud: it is a single small container, trivially backed up (basically a directory plus a sqlite/postgres DB), and act_runner gives you CI to play with, which is a lot of fun for learning. Nextcloud is the opposite: the heaviest thing on your list and the most common cause of “why is my Pi4 swapping” posts. If what you mainly want is file sync and Obsidian notes, Syncthing plus a git repo (or Obsidian Livesync via CouchDB) covers 90% of it at a fraction of the resources.
Two practical notes for your exact setup, since both SSDs hang off one powered USB hub:
- USB storage on the Pi4 shares bandwidth with Ethernet (everything goes through the single USB3 controller). Fine for Navidrome, but expect large Nextcloud uploads to tank your network throughput.
- Before installing anything else, set up automated backups of both disks and actually test a restore. With everything on one hub, a hub or PSU glitch can take out both SSDs at once. Even a nightly rsync of the important directories to one of your two empty SSD slots gives you a second copy.
Keep Tailscale for SSH and expose nothing else publicly until Pi-hole and Forgejo are stable.
Running it on a couple of small sites. It is exactly what the pitch says: one Go binary or one container, a single Postgres/SQLite DB, one script tag. Points worth knowing before you commit:
For the “step counter” use case you describe, it is the best fit in this space. The moment you want cohort/behavior analytics is when Matomo or Plausible earn their resource cost.