Here’s where I’m at so far.
I’ve decided I am going to try and build a Komoot competitor.
I’m pretty sure that I have the skills to develop something similar to their web application for route planning.
My specific target market is cyclists with an emphasis on long distance cyclists, bike-packers and bike tourers.
Both Strava and Komoot use Mapbox as their Maps provider and I’m pretty sure Mapbox also does all of the heavy lifting when it comes to the routing algorithm as well. Essentially Komoot is just a nice UI layer over Mapbox dedicated to route planning for cyclings, runners etc with some social features built in. All of this is within my capability.
The MVP of this product is going to consist of a Next.js 13 Web application with a single route planning feature and some general settings stuff.
I’m going to create some simple UI for the whole thing taking inspiration for the Komoot web layout. I don’t think there is much innovating to be done here.
As this is a route planning app the majority of the UI needs to be taken up by the map itself. Positioning of the rest of the interface is naturally going to be at the top left as this is where a person would start to read. I obviously have no intention of directly copying Komoot but the apps are going to look similar for sure simply due to the fact that I think the Komoot web app has a somewhat optimal layout for it’s needs.
The main dilemma I’m having at the moment is my server / database solution. Ultimately, for an app like this to be successful I need to leave the option open to build a mobile application.
I do not like mobile app development. I had such a bad experience trying to build the Langchats mobile app with React-Native and Expo. The whole development process is so slow compared to web and expo can get expensive if you need to do a lot of builds. Also if you’re not paying for Expo then at peak times you might have to wait up to 2 hours for a build - which might fail - at which point you want to curl up and die.
I haven’t used MongoDB before, but I like the look of it after some research. They have a cloud DB solution called MongoDB Atlas and also MongoDB Atlas Device Sync for mobile. They also offer querying of geospatial data which may prove super useful for a route planning / map based app.
The one thing I’m not sure of yet is if I need to create an actual server using Express.js. Something that I haven’t needed to create before, as I’ve just used the built in API routes in Next.js. Basically, I’m not sure if MongoDB has suitable SDK’s / API’s that allow DB manipulation from directly within my Next.js Application and whether MongoDB Device Sync and MongoDB Realm allow for the same thing in Mobile.
The safest option might be to just build out a dedicated server. It might prove to be extra work but there are no major downsides. Besides, I haven’t used Express.js before and it will prove to possible employers that I have the skills necessary to create a production ready, highly scalable backend, using Node.js and Express.js. Instead of wasting more time researching I’m just going to go with this approach.
I want to make an application that uses a modern tech stack but also tried and tested services that are common in the world of software development so that companies know that I have the knowledge and what it takes to create a production ready, highly scalable application. Therefore, I want to make sure that my DB, deployment and infrastructure are all done via AWS, or maybe Azure, but most likely AWS, as pretty much all companies directly use Azure or AWS for these tasks.
I love Vercel (deployment) and Planetscale (DB) but I haven’t seen a single job application asking for knowledge or experience with either of these services. AWS is very complicated to use though so I think I’m going to get pretty frustrated trying to use it given I’m so used to the seamless developer experience offered by Vercel and Planetscale.
Anyways lets see how this all goes. First thing is some Figma wireframes and then setting up the project both client and server. I’m looking forward to building out the Express.js server. Let’s go.