After buying (the right to use) a VPS, I ended up self-hosting a handful of services. From a territory's point of view, I suppose that makes it a place that's more or less self-sufficient -- like a field growing its own crops.

This Site

First, obviously, the site you're on right now. Since it's a static blog, what actually gets deployed is just a handful of static files.

Those files are all open source, see here.

Code Hosting

I run a Sourcehut instance for self-hosting Git repos. Unlike today's mainstream code hosting platforms, Sourcehut doesn't use GitHub's Pull Request model -- code review and collaboration happen over mailing lists instead. Sounds strange, right? It's actually the traditional way open source used to work.

The instance isn't open for account registration right now, since I don't have the energy to manage users yet. That said, Sourcehut doesn't actually require contributors to register an account on the instance to contribute code, submit patches, or file issues. All you need is your own email address and git send-email to package commits as plain-text patches.

Curious? Visit git.cytrogen.icu.

Want to run the same setup yourself? Take a look at my config files.

RSS Aggregator

FreshRSS is a fairly well-known RSS aggregator and reader, but since all my own devices already have their own local readers, I only use it to fetch my subscriptions.

The address is here, though you'll need me to register your account manually. If you'd like to use it, feel free to reach out -- I'm still weighing whether I want to host RSS aggregation for other people.

Server and Container Monitoring

Of course a VPS needs a monitoring setup. I went with Beszel, which is nice and lightweight -- beyond hardware resources, it also shows the status and logs of every Docker container.

Email

Thanks to Stalwart Mail Server, building and running your own mail server has become genuinely simple.

Worth mentioning: most VPS providers block port 25 by default. I had to specifically call IONOS to get it opened. If your provider refuses to budge, a relay like SMTP2GO or Resend is a reasonable fallback.

For the username, the obvious move would've been cytrogen, but that turns into cytrogen@cytrogen.icu, which is just weird. In the end I leaned into one of the meanings behind the .icu TLD -- I see you -- and went with boo instead: peekaboo, I see you~

Telegram Bot

Not really a service for me... My roommate's favorite GPT-4 lineup got pulled by OpenAI, leaving only API access to GPT-4o or 4.1. On a computer that's fine -- you can still reach OpenAI's sandbox -- but on mobile, you really want a halfway-decent client. We settled on a Telegram bot. Being lazy, I went with pipedude's evi-run project, since it ships a Docker image.

Once actually deployed, a few rough edges showed up -- the big one being that the prompt was hardcoded into the source, which is not exactly elegant. So I switched it to read the prompt from a .txt file instead. Then there was the language issue: the author only shipped English and Russian, so I had to add Chinese myself.

Speaking of bots -- the second project I ever tinkered with, back when I was first learning to program, was a bot. QQ wasn't cracking down hard on third-party bots back then. Mine started out as Kami, later renamed Hoka. Once CQHttp fell out of favor I stopped messing with bots... though with QQNT around now, building one should be easier than it used to be. Maybe I'll pick bot development back up sometime.

Anyway, my modified evi-run code lives here.