My consultancy stack
• Published:If you don't know yet, I've started my own IT consultancy! Yay!
The most interesting part, from a builder's perspective of course, was thinking about what new services I'll likely need to spin up in my homelab.
Let's take a look at a few areas we need to cover in our one-man-consultancy.
Tracking opportunities and getting clients
Before you start working for a client, you first have to find them and then negotiate with them and convince them you're the one to help solve their problem, whatever that might be. Since you're likely not talking with just one client, you'll want to track this process for each client separately. So what you'll need is a CRM system.
I've looked at a few and the one I've decided to self-host is EspoCRM.
You can self-host it on your own server for free, it integrates with your email and supports OIDC authentication!
I like its simplicity and ease of use.
One thing I dislike about it is that its built-in calendar and meeting tracking system does not expose or integrate with CalDAV natively. Which brings us to the next thing you'll need.
Calendar
You'll have lots and lots of meetings with clients. So having a calendar is essential.
I used to use NextCloud for that, but recently I switched over to Rustical, so this is now my calendar and contacts server.
I use Thunderbird for interacting with my calendar on my laptop and on the mobile I use Etar via DAVx5. All of this works great.
Bonus point, Rustical works great with OIDC.
Task management
Even before opening your consultancy you'll have a lot of tasks to do. For example, you'll need to actually register your consultancy, open a bank account, manage your insurance and so on. You'll want to track these things!
The winner in this category for me was Vikunja.
This one was easy to choose because it's a mature service and ticks all the boxes for me. The most important being OIDC authentication.
I like that it's not bloated and is very snappy.
So far, I have no complaints about this one.
Time tracking
Doing a project for a paying client means they would (generally) like to know where your time has gone, so you'll need to have a way of showing that to the client. Most of the projects are also paid by-the-hour, so knowing how many hours a project took is important.
For this Kimai was chosen.
It's a very mature project and it has been great so far. There are also a lot of community developed apps like kimai-clock (macOS menu bar app).
Feels polished and has many knobs you can turn to get it tuned just right.
One thing that almost turned me towards other solutions was a lack of OIDC login. Luckily for me it does support LDAP login, which is what my OIDC provider (Authelia) uses as the user store.
Invoicing
While Kimai can also do invoicing, this is something that I decided not to self-host, due to future regulatory requirements.
For this I'm using a local service Cebelca. It's used by a lot of Slovenian entrepreneurs and is a kind of go-to for invoicing.
It's free for up to 15 invoices per month and is just a joy to use.
I love its simple interface.
If I had to critique something, I'd point out that the invoice customization with a logo could be a bit better, since the size of the logo you upload (in pixels) is the size you'll see on the PDF.
Development environment
At first I thought I'll have to buy a beefy MacBook Pro for me to develop on, but since it's not cheap, and I already have a beefy server, I decided I'll just use the server for development and I bought a MacBook Air instead.
I have Incus running on the server (see Declarative Incus on NixOS with SSO), so my current workflow is that whenever I get a new client, I spin up a new VM just for that client and work on their projects in that VM exclusively.
So each morning I SSH into the VM of the client whose project I'll work on. Zellij (a terminal multiplexer) auto-attaches and I'm presented with the exact state that I left yesterday on. I usually run Emacs in one tab, then I have multiple other tabs open for running shell commands, following logs and driving Claude Code. All of this works just as it would on my laptop!
Even testing out web apps is not an issue.
SSH supports port forwarding, so opening localhost:1234 is forwarded to the VM to the same (or a different) port, allowing inspection and quick iteration.
There are a few benefits to this VM development approach:
- no cross contamination: git credentials, SSH keys, API keys; all of these are scoped per client, so I just can't accidentally commit with a wrong identity
- persistent environment: you can update/restart your Mac without closing your editor or stopping a long running test or a compilation
- declarative: each VM has its own NixOS configuration, with client-specific setup
- not a macOS: macOS is great, but sometimes it just adds friction, e.g. ARM vs x86 docker containers
- close to deployment environment: it's a Linux VM and you can make it as close as you want to the actual target deployment environment for the service
What about cons?
- file access: if you want to send something to the client (e.g. a parsed CSV), you first have to
rsyncit to your laptop - you need the server: if your server isn't online, you can't work
- no offline work: if you're not online, you can't work either
- no clipboard: copying text is a bit more involved than it would be on your laptop
Try it out, it's been great for me so far.
Email and website
This is something that I already had before starting a consultancy and I think it's a must-have.
Running a website is simple, you can just chuck an HTML file and point Caddy to it.
As for emails, they are quite important, and I've read all sorts of horror stories about self-hosting this on residential ISPs that I'm letting Migadu take care of that one for me. I do use Thunderbird for this as well on my Mac and I bought Fairmail for my phone. Recommend both!
Conclusion
Running a consultancy is not easy, but having great open-source projects that you can rely on, makes it a bit easier.
Looking back at the list, it's apparent how much OIDC drove my choices.
If you're running your own consultancy on a different set of tools, I'd love to hear about it, feel free to email me.