I started with one domain at webfaction com, years ago. It was a good start for me. Now, I have 40 domains spread out over 4 registrars, on 6 different hosts. I was going crazy trying to keep track of where a given domain was being hosted, and with which registrar it was bought from, and most importantly, when do I need to renew it!? Yes, it's a crazy hobby!
I tried an Excel spreadsheet, but it was clunky, and the file would get misplaced when I would clean up. I tried a mindmap, using nodes as a Domain Registrar and connecting domains under that registrar in their own bubbles. But that wasn't easy to then add the hosts (including their IP), nor was there an easy way to include their due date that could notify me if it was due.
If only I could find something that I could look at a glance to see where the domain is, when it expires, and with which registar. And maybe even include some additional info and notes about what I've done with it.
Then, I found Vikunja on the Cloudron store. Hmmm, a project management app. With Tasks, Lists, Labels, due dates, color coding, and the visual that ties it all together - Kanban boards! Here is what I've done.
I made Labels and color-coded them. The Labels cover every possible detail: Registrar, Host, IP, software, status. So, there are color-coded Labels for each registrar, and each VPS host. IPs are color-coded to the VPS. For example, I have a Label, "NameCheap", which is orange (using the html code for the main color on their website), and another Label, "SSDNodes", which is a green-ish color, as examples.

Next, I made a Namespace and called it MAIN. So, in the sidebar of Vikunja this Namespace appears at the top for quick access. Then I made a List called Domains (it retrospect another, more general name would work better). So, when I open Vikunja, I can see MAIN, and under it the first List, "Domains". When I click on Domains it opens in Kanban view.

Under MAIN-> Domains-> are another set of lists. Now, I made these Lists using Kanban view so that I could visually, at-a-glance, see the info. Each List is the name of VPS and its IP.
Under each List (Main->Domains-VPS+IP) are the Tasks. And each Task is simply the domain name. Using the previously set up Labels, I can make a Task, example.com, add an orange Label so I can easily see it is with NameCheap, and also (because this is a PM app) add a Due Date. The Due Date is, of course, the expiry date of the domain, and acts as a reminder for me. In the Kanban view I can see thus the List of VPS and which domains I'm hosting on it, along with small text saying "Due in 3 months", or, "Due in 1 week", helping me keep track of their expiry/renewal dates.

So, under the Namespace, Main, I can see in Kanban view all the VPSs I have, and at glance see how many domains are on each one. Because it is in Kanban view I have to scroll horizontally to see all the Lists of the VPS with their Tasks (domains), but as I said, it is so nice to be able to do this at-a-glance.
Some other benefits are that each Task has a place for Description and Comments. These are super handy for noting down what the purpose or goal of a domain was, and what software I've installed on it, along with other details.
Now, I still needed a way to keep track of the VPS service renewals, so I made another Namespace, called it Servers, and made a List for each host. Because a List doesn't have a Due Date assigned to it, under each List I made a Task with basically the same name, but here I could include the Due Date of the service renewal. And again, in Kanban view, I can see, with just a few clicks, when that VPS will expire.
One final need was to be able to see, at-a-glance, how many, and which, domains I have with the Registrars. I have them each as a Label, and a Task under each host List under the Main namespace, but it wasn't convenient counting how many orange Labels I could see to have a quick idea of how many domains I have with NameCheap.
So, I made one more Namespace and called it "Domain Hosts", and under this Namespace made a List for each Registrar, and used the same HTML code to color-code it (from the initial Labels), and under each List was able to show the related domains. But HOW? I was worried I'd have to make another whole list of Tasks using the names of the domains, but that would get messy. Thankfully, Vikunja allows something called "Task Relations". So, to repeat myself, I made a Namespace, and under that made a List for each Registrar, and under each List made 1 Task called basically the same as the List (So the List is "NameCheap" and the first and only Task is called "NameCheap List"), and then under that 1 Task I could "Add Task Relation". This would show a text box which would automatically find the domain name in question as I typed it, and then I could choose SubTask. Now, when I look at the Domain Hosts->NameCheap->NameCheap List-Domains (as Subtask).

This was a lengthy read, but I hope it can help you if you need help with your own records management. Vikunja has a mobile app too, which has come in handy if I'm not in front of the laptop and need to make a note or check a detail.