System & Database Design (Day 1) - Creating a SaaS Startup in 30 Days
Tags: webdev, saas, startup, challenge
Published: 2024-04-27 05:33:34

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:


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/22bm00efbc4946zzne3m.jpeg)

### 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**](https://nextjs.org/): For the website and the admin dashboard
    
* [**Shadcn/ui**](https://ui.shadcn.com/): 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**](https://huggingface.co/meta-llama/Meta-Llama-3-8B): 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.


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/e56hqrlg6luahe3vtyve.png)

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1rjpog8d0z48ra7ul69x.png)

### 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.


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wwkdjluoi6crus298jd4.png)

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/blaf386veoryxcp37vni.png)

### 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**](mailto: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**](http://x.com/sotergreco)