I started a business in 2016 called Odd-Stop Media, LLC. It was originally a Media-Centric Social Media Marketing company. Long story short, it wasn’t successful but it was a great learning experience. It eventually became the company I use to do freelance web development under.
What I Want To Cover
Techstack
- NextJS
- Strapi CMS
To build this website, I decided to make it with NextJS (13 when I started then updated it to 14). Back when it was just the static pages, NextJS was the only peice of tech being used. As I began working on adding blog posts, I decided to use Strapi CMS to author the post and pull in that data to be created by NextJS.
Was NextJS a good choice for this website? To be honest, no. NextJS offers so many features that are more suitable for very dynamic web applications, not a fairly standard business website. However, the decision to use NextJS was mostly to have a playground to mess with the most popular web fullstack React framework. I would never use something i’m not very familiar with for my clients, but for my own business… Oh it’s on!
I jumped on the NextJS train right before the app router came into the picture and as soon as I finished the website… NextJS’s app router came into the picture. It was fustrating to relearn the way we should write NextJS apps, but I have always been a believer in adaptability, so I went straight into learning the app router with react server components as they came out.
Strapi CMS
When I added the blog, I wanted to also pick up a CMS that I could learn and potentially use for future clients. Most of my client’s websites I have created with Framer and their CMS, but I have been interested in moving away from framer for some time now. What is currently stopping me is that I still want to give clients the ability to update their website easily without having to contact me to update it for them.
Framer makes this very easy to let them update content, and I wanted to pick up a CMS that is also simple to use for non-technical staff but that would gives me, the dev, even more flexibility compared to Framer. Which as of this writing, Framer’s CMS is very limiting and even misses certain basic features. But that’s a subject for a future blog post. So that’s why I chose to go with a headless CMS.
Why Strapi CMS?
Why Strapi and not a different CMS? Well, that’s actually because I was introduced to Strapi by a streamer/youtuber named midudev. He had a course on YouTube where he was building a simple site with NextJS and Strapi. I saw that Strapi could be self hosted, which made development easier as I didn’t have to worry about exceeding free limits while I was playing around. I also saw it could be hosted on Railway, which I already use for backend projects so I said “fuck it, i’ll use Strapi.”
To me, Strapi was just what I needed as it let’s you structure the data as you need it. I’ll admit that i’m not a fan of how the REST API requires the queries to be structured. Particularly when having to populate certain fields like images, and dynamic zones but hey, it works great and the tedius process of crafting the API call is just done once and then the data is there ready to go. No need to setup some crazy database schema and auth as Strapi handles this part for you.
I’m still new to using Strapi, so I am still exploring what’s possible. I do eventually plan on using more of those dynamic zones, and component blocks to almost make a sort of page builder. This would allow non-technical staff to rearrange entire section of a page, it’s content, and even make easily customizable navbars with nested elements if coded up properly.
Forms
For form submissions, I chose to go with Formspark. As a business owner, all I need is for potential leads to send me a message. I dont need to store these messages for any significant amount of time or for some sort of analysis. This makes Formspark an easy choice as all they do is forward the form submissions to an email, or several emails, and that’s it.
I also am using Botpoison to lower the amount of spam submissions. Thankfully Formspark has an easy integration for Botpoison. Also if you’re wondering, no, Botpoison does not require captcha’s which was another selling point for me. I really dislike captchas myself so I didn’t want to put my website’s visitors through that.
Conclusion
I don’t know what the future will bring to me and my company. I don’t want to overengineer a website that will have no traffic or profit. I would eventually like to implement a customer dashboard to allow my clients to pay their invoices on my website. But will I ever get to the point that building this out would make sense… I’ll have to wait and see. If I do get to that point, I’ll write up my experience and design choices for those updates here.