DEV Community

Cover image for System & Database Design (Day 1) - Creating a SaaS Startup in 30 Days
Sotiris Kourouklis
Sotiris Kourouklis

Posted on • Updated on • Originally published at sotergreco.com

System & Database Design (Day 1) - Creating a SaaS Startup in 30 Days

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

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.

Image description

Image description

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

Image description

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

Top comments (1)

Collapse
 
buddhikaherath92dev profile image
Buddhika Herath

I really love this idea. I also had it, but was too lazy to work on it. Glad you are doing it. I am not much familiar some technologies you are listed, but instead of relational database I would go with a non-relational one because I think nesting everything inside on user document object is efficient than relational queries(I am no expert, experts to comment on this). I wonder in which format the final CV will be downloaded. I guess initially PDF. But many ATS and ATL software prefer docx files over PDFs.

*Here are some feature suggestions for me: *

  • CV version control: CVs evolve over time, for a job seeker might have to create multiple versions of CVs specified for different roles or organizations. For an example, a Full-stack developer might want to apply for a back-end developer role, so he might have to re-write his CV and experience / descriptions emphasized on back-end development. But many CV builders only offer one version. If they want to create a customized version for a specific job, they have to edit the original version and download it. And then keep those different versions of CVs in own PC or somewhere. This is a lot of work and hustle when someone is actively looking for job and applying faster(I've been through this and I know this hustle). So the feature I am suggesting is allowing people to create multiple CVs in an single account, and saving the update history as versions(Like Git). So they can go back-and forth over time and different versions of CVs in a single place.

  • Keyword Extension: People like to write their CV in their own words(That is the correct thing to do). But they always seek help from chatGPT or a professional resume writer to re-arrange their content hoping their CV will go through those ATL and ATS software and get shortlisted. What if there is a feature that suggest the keywords when you paste a job description or enter the job title. And this feature oversea the entire CV user is building and show them the places where keywords are lacking and can be included. This is a rough idea, but basically the objective of this feature is to allow users to write their CV in their own words without the need of a resume writer or AI.

  • ATS & ATL software simulation: This is related to the keyword extension I mentioned above. What if there is a way to just paste a Job description a user planning to apply for and see how much percentage his CV is matched with the job description or the probability percentage of getting shortlisted. And give suggestions where CV can be improved to match with the job description to improve the matching percentage/probability percentage.

Some business models and monetization possibilities I see:

  • Affiliate links routing leads to resume writers, career advising services and educational/course providers
  • Premium features as you suggest above
  • Default ads monetization as the audience grow

Hope I added something valuable here. Thank you for your time.