Everyone has things they don't enjoy doing. You do them because you have to, but they don't bring joy. For me, one of those things is setting up new projects.
Hi, my name is Tom Smykowski. I'm a founding engineer with 19 years in software, now focused on AI-assisted development and building production systems end-to-end. On this blog I share practical engineering insights from real projects.
What I enjoy is building stuff, collaborating with great people, seeing satisfied users and growing businesses. What dragged me down over the years is that every time I had an idea for some startup I had to do the same exact repetitive steps, even though I'm a software engineer.
What you have to do when you set up a new project is:
- Buy a domain (I'll skip choosing the domain name, because it's a topic on itself) e.g. mysuperproject.com
- Create a local folder where you store your code
- Initialize Git to track changes you make to the code
- Set up a remote repository on GitHub, a place where you store your code in the cloud
- Connect these two, so that you can push changes from your computer to the cloud
- Set up a Vercel project
- Connect Vercel so it pulls code from GitHub and builds a new production release using CI/CD process
- Connect Vercel to domain provider (so that the visitor of the domain pulls the app from Vercel, aka DNS)
- Create a database in MongoDB to store data of your clients
- Create a project in Stripe to handle recurring payments
- Set up form and automation in ConvertKit (Kit) to be able to subscribe people to newsletter and send broadcasts
- Set up project in SendGrid for transactional e-mails
- Prepare other services you use
- Grab all API keys, tokens and put them into .env locally, and stage versions and production versions as secrets on Vercel
- Test if everything works
And if something doesn't work, figure out what is wrong and fix it. The whole process is not only long, but repetitive and boring. I decided to automate it completely.
