System & Database Design (Day 1) - Creating a SaaS Startup in 30 Days
From Failure to Innovation: Launching a New SaaS Venture in 30 Days
Table of contents
After my first startup, eatlink.gr, failed on Product Hunt and Kickstarter, I'm not stopping development, but I am pausing it for a bit until my meetings next month with some potential clients. Meanwhile, I am starting anew. So, for the rest of 2024, I will be creating startups until one succeeds.
During this journey, I will be posting almost daily updates on my progress. Any guidance in the comments would be greatly appreciated. And as a goal, I will try using new technologies that I've never used before to make this journey more exciting.
Idea Introduction
Almost every one of you might know bio-link platforms like Linktree. While I'm not planning to create a Linktree clone, I will develop an application where users can create their profile links and also build CVs. This app is geared towards developers, designers, and tech enthusiasts in general who want to make a quick introduction of themselves.
Here is a list of features my application will offer:
Social Media Integration: You will be able to link all your social media accounts.
Multimedia Support (Premium): You can upload images or videos between your profile links.
Analytics (Premium): Track views, visitors, average visit time, referrers, and links clicked.
Themes (Premium): Premium users will have multiple themes to choose from.
CV (Premium): You can create, share, or download your CV.
Here is a quick design I made on figma:
Technologies
Although most of my life I used Node.js and PHP now I am going to switch battlegrounds. So here is my tech stack.
Kotlin with Spring Boot: For the Core and the Analytics API
Postgres: I will stick to the basics for the database
Redis: For caching
Next.js: For the website and the admin dashboard
Shadcn/ui: I've never tried it before but have always wanted to switch from MaterialUI
Stripe: I will continue using Stripe for payments
Docker: I use Docker in almost all of my projects
System Design
CORE API: Written in Kotlin, this API handles user authentication, and manages CVs and links.
Analytics API: Also written in Kotlin, this will be a separate service dedicated to tracking analytics for each user.
LLama 3: Following its release a few days ago, we will use this to generate the CVs of users and some of their profile information.
Caching: We are going to cache almost every endpoint, with the help of observes we are going to update the cache that way we will ensure faster loading times across the platform.
Database
Below is my database design for the analytics and the core API. While this might not be the final version, it is very close to completion. I am open to suggestions on how you would design it.
Additionally, you can see that I am using LUIDs instead of regular IDs or UUIDs. LUIDs have several advantages. First, for security reasons, it is unsafe for users to know the order of database records. Although UUID7 are in chronological order and not random, LUIDs are very similar to UUID version 7 but offer the choice based on individual preference. I prefer LUIDs because they are shorter and look cleaner in URLs.
Conclusion
As I embark on this exciting journey to build a new SaaS startup, I am eager to explore fresh technologies and innovative approaches to system and database design. This venture is not just about creating a successful product; it's about learning, adapting, and continually improving.
I look forward to sharing my progress and receiving valuable feedback from the community.
Thanks for reading, and I hope you found this article helpful. If you have any questions, feel free to email me at kourouklis@pm.me, and I will respond.
You can also keep up with my latest updates by checking out my X here: x.com/sotergreco