As mentioned, I am trying to 'level up' my business and development skills as part of building a side hustle software-as-a-service business.
For my first 'skill up' exercise I have decided to build and host a simple front-end only website using a 'modern' JavaScript stack.
The website is https://howmuchisthismeetingcosting.com and it was inspired by the large amounts of seemingly unnecessary meetings that infest cubicle life. The website simply lets you enter the number of participants in the meeting and an average cost per hour for each participate, then it calculates the running total of how much money is being wasted by corporate blather.
(There are lots of other sites out there that do the same thing, but I like this idea for a skill up project because it is simple and achievable while providing enough complexity to make it a useful learning exercise for a new tech stack, but still make something somewhat 'useful')
This article will explain the technical stack I chose. In later articles I'll try and capture some of the things that I learned from building the site.
Side Hustle Technology Stack - Front End - Version 1
Note: technology caveat #1- choosing a technology stack is inherently an opinionated exercise. There is rarely 'one true choice' for which technology set to use to solve a problem and there are always non-functional trade offs, skill set dependencies and personal biases that will come into play. A choice that makes sense in one set of circumstances will often be a choice that would not make sense in a different environment or for different people. The technology choices I present here are just the ones that I chose that make sense to me. There are certainly other options that would make more sense to other people in other circumstances. The key is to try and understand the pros and cons of each choice and make an informed decision.
For this project, the technology stack I ended up with is as follows:
- JavaScript Framework: VueJS + Typescript
- CSS Framework: Vuetify
- JS Tooling/Runner: Vite
- JS Package Manager: npm
- IDE: Visual Studio Code
- VCS: Github
- Host: CloudFlare
This stack will probably make some people seethe, and maybe a few people nod wisely but I'll try and justify the choices below.
Vue.JS and Typescript.
Why Vue? This is as much a personal choice as anything I can justify technically. I want to use a current JavaScript framework and I've played with Angular and React enough in the past to want to try something different. In my part of the world Angular is still the 'corporate' choice and would be the smart framework to dive into to build employability...but to be honest I wanted to try something fresher. Similarly I didn't really enjoy React when I last tried it (admittedly that was years ago). After playing with Vue a little it seemed like a great balance between Angular's heavyweight approach and React's skinny approach to JS development. I also really like the SFC component way of separating HTML, CSS and script concerns while keeping everything related to single UX component in the same file.
OK, so why TypeScript? I am used to coding in strongly typed languages and prefer the compiler to catching stupid errors before they hit runtime. Learning Typescript seems to add some initial overhead but should pay off by helping to avoid runtime issues in the future. When I build my SAAS I want it to be robust, and Typescript seems to be an appropriate choice to make that happen.
Vuetify
I suck at web UX, so I need a lot of help. I have had previous experience with Bootstrap and even (gasp) JQuery but that's about it.
Vuetify seems like a robust a UX framework that works well out of the box with Vue and it seems easy enough to use for a UX novice. The documentation and examples also seems complete and easy to follow. I particularly like the fact that each example has a live code option that you can use to experiment with. The alternatives out there seem to be either less supported, or more low level approaches like Tailwind, which seems a step too far at the moment. Vuetify seems to have the features that I need and to work enough 'out of the box' to get started with.
Vite
Since I landed on Vue and Vuetify, I decided to bootstrap the project using the Vuetify 'getting started' example project:
https://vuetifyjs.com/en/getting-started/installation/. The first recommended tooling option there is Vite, and after looking into it it seems to dovetail nicely with Vue and Vuetify. In fact the three technologies seem to form a nicely integrated set for front-end development.
NPM
I stuck with NPM as a package manager because I am familiar with it and it seems to work well enough. It also still seems to be mainstream enough to be well supported. The major downside that I can see is the potential duplication of node modules in each project, but I can live with that for now.
VSCode
VSCode seems like a no-brainer for Typescript and Vue development. It is free, highly customizable and works well on multiple Operating Systems. I've being using it for years - and it seems to still be improving. Eventually I may move to a cloud based IDE, but for now it seems to do everything I need.
GitHub
Every project needs a version control system. GitHub also seems like a no-brainer here. I can't think of a reason not to use it or a viable alternative that offers better features.
CloudFlare
I ended up using CloudFlare as a free hosting option. I used CloudFlare to register the DNS name for the site and using the same provider to host the site for free seemed to make sense. I'll probably post more about this in a future article.
That's probably enough to introduce the project. In future posts I'll look at some of the things I learned and how this project contributed to my side hustle journey.