The unbearable lightness of creating

The unbearable lightness of creating

Article name is a reference to book by Milan Kundera.

I have a regular floorball trainings, every Wednesday. We are not playing any league, it is nothing serious, but I love to go and let some steam off. First, we used emails to let rest of the team know who is coming, if we will have a goalie and so on. It was lame. Later, we tried some PHP application written by students, best I can say about it was that it usually worked. Someone had to create in advance every training, mobile version was non-existing, authentication was failing. I tried to convince my friends to use a Facebook, Google Calendar and several other tools. What we are using now is a Doodle.

I was complaining about the tools for years. I've got "write your own" response like 100 times. And reply number 104 was the last straw. I used some spare time I had on beginning of the year and created some MVP version of the tool, tested it, loved it, watched MongoDB limits like a hawk and then I decided to invest more time into this. But you are probably more interested in the technical part than the "product" part of my experience. Actually, if you are into the product development and want to ask about anything, I'd be happy to share my knowledge.

So, the techstack. I wanted to start with minimal costs and I knew that I'd need a database. Reading through documentations and trying to understand limits and differences between them, I picked MongoDB Atlas. It is a cool service that let you store some small amount of data for free and even the pricing for bigger projects is friendly. Also, I was able to ask for help on our company chat, as we are using mongodb as a part of our techstack. I considered Firebase and FaunaDB - I had some good experience with Firebase, but it went far from being easy to integrate database I knew and I didn't wanted to re-learn basically everything. Fauna is great, but I would have to learn some graphql basics and for the scope of the project I simply decided it is not worth the trouble. I am not saying that graphql is bad or anything, but given the limited amount of time I have for my projects, I need to think twice about this kind of investment. So, there is the database.

For the application itself, I kind of knew from beginning that I am going with Nextjs. It solves a huge amount of problems I'd have run into and in a combination with Vercel, you have a fullstack platform that simply works. I actually tried AWS services again, I really wanted to understand how they work as I know they are beneath of Vercel offering, but I ended in a several hours trying to figure out very basic data updating mechanism and as I mentioned - for my side projects it is either easy or dead. I also like svelte very much, I'd prefer to write it in this framework, but it would be way bigger time investment. What nextjs solves for you is an authentication, SSR/SSG, lambdas, page performance optimizations and much more, all of that with awesome documentation and examples.

I prototyped the application base don some example from MongoDB, but I quickly realized that the backend logic would not be my show-stopper, it is actually very simple to get the connections running and make a first data update. Where I was struggling was the UI. I remember CSS from the very first days and yet, I'll never understand its logic (if there is any). There are good things, like the grid helped me to make some good enough layout for the forms and so on, but I was burning a lot of time on google searches like "center div" and I hated my experience. I was on the verge of implementing some heavy component library. But, again, clicking through examples in nextjs helped, pointing me to the Tailwind. If you know Bootstrap, it is the same thing, but made for this century. It was immense relief. I even redesigned the app completely, because I liked what can I actually do on the web nowadays. I also used squoosh to minimize my backgrounds (from another great site unsplash) and avif-converter.online for this new and great image format.

Anyway, that's it for the tech-stack. It is common to describe a deployment, with tips and tricks, but with Vercel it does not make sense. You upload it to the Github, link it to your Vercel account, push...fill the correct env variables through the friendly UI...push again, and it is running. On nice address, that you can send to your friends. Yes, that's a commercial for a Vercel, it is just unpaid (yet, wink, wink?) and from bottom of my heart.

I decided to buy a domain for this new project, Get Together and surprise surprise, deploying on his new domain was a breeze on Vercel and thanks to their email autoconfiguration I found another nice service - ImprovMX (which is kinda weird name). It allows you to use your new domain email and forward all messages to any of your current email addresses. Like, in my example, I didn't wanted to have a partnership email pointing to my personal email address, so I created new alias and all emails sent there will go to my personal Gmail.

So, that's my one person startup story for a #VercelHashnode hackathon. Today I deployed version 1, hope you love it. If you don't, share some feedback with me please.