Building my personal Swiss Army Knife services
It's been a while I had the idea of building a website to centralize services that I generally go online to find. You know things like password generation, time converter, rolling dice, getting your IP, DNS lookup, and more.
Having this Swiss Army Knife website would likely save me some time, but also it would be an opportunity for me to practice my skills. And who knows, maybe I could monetize it a little as well.
To decide how I would implement it, I made a rough list of all the things I'd like to see on it.
- Password generation.
- Date, time, and timestamp conversion.
- Rolling dice, d2 to d100.
- Straight file sharing of misc free resources like pdf, or others.
- Getting IP.
- DNS resolution.
- Mirroring broken websites (like cssmatic.com).
- Maybe some math stuff like number pi decimals, random number generators, or prime numbers.
- And some more.
I considered for a moment using things like surge.sh, platform.sh, or maybe glitch.com. They are all cool, but not flexible enough. Like for getting IP, I would not reinvent the wheel and just use github.com/mpolden/echoip, and also for serving files I would need a simple web server. So nginx it is!
Behind nginx, I can plug any system I want and in a pretty flexible way. So I would go for an architecture of the sort:
Aside nginx, I also chose to:
- use go for the backend API,
- and use dart for the frontend.
My long term goals and ambitions are:
- Open source all the code
- Infrastructure as code
- Neat swagger specifications for all services, hence nice documentation
- Good sleep
- Some monetization
So yeah, something solid that can run by itself and let me sleep nicely!
Also, I guess I'll try to do a logo for the website myself at some point and document that process. To show you that sometimes as an engineer you don't need help from a designer.
In the next article of the series, I will share my first milestone. Which is a very early version of the architecture and the rolling dice service. The easiest to start with ;P