[{"content":"From the very first steps in preparing the application, the requirements were clear: design a project that is both scalable and sustainable. It is in this spirit that I envisioned the infrastructure architecture. Whereas for my previous projects with more modest ambitions I opted for a standalone solution hosted on my VPS, this time I chose a distributed approach.\nFirst and foremost, it is essential to review the different software components. On the client side, there are mobile applications (Android/iOS) as well as a web interface intended for administration and users. On the server side, the application consists of an API and a Websocket service.\nThese two services are deployed in separate Docker containers. Indeed, restarting the Websocket should not render the entire application unavailable, and initially, having all clients connect to the same server simplified data exchanges. This issue does not arise for the API, which is inherently stateless.\nThese containers run on a Kubernetes instance provided by OVH, distributed over two nodes that host all my active projects (including this blog). However, at this stage, several essential elements are still missing in this quiz application: where to store images, icons, and passwords?\nRegarding images, I preferred to host them on an S3 storage space with Digital Ocean, thereby ensuring data persistence without overloading my VPS. Additionally, the VPS also stores the MySQL databases (for the TEST, DEV, and PROD environments). I chose not to externalize this part, as the costs quickly increase when seeking more flexible management, especially concerning the number of active connections. In fact, since I parallelize the retrieval of questions during the quiz schema construction, the number of sessions can quickly exceed 100. To ensure data sustainability, a backup of the production version is performed every night and stored both on my VPS and on the S3 storage, ensuring effective redundancy.\nA crucial point concerns access to the Kubernetes clusters via a URL such as api.vstrivia.app. For this, I use my VPS as a proxy with NGINX, which redirects all connections. Additionally, to safeguard against potential DDoS attacks, I employ Cloudflare (free version) to mask the IP address of my VPS.\nOn the DevOps side, the code is structured around two main branches. The \u0026ldquo;dev\u0026rdquo; branch triggers, with each merge, compliance tests and container builds, which are then deployed on the DEV environment of my Kubernetes cluster to test the application in real-world conditions. If all tests pass, the \u0026ldquo;dev\u0026rdquo; branch can be merged with the \u0026ldquo;prod\u0026rdquo; branch, thereby triggering the production deployment process. The generated containers are then stored in a Container Registry with Digital Ocean.\n","date":"20 February 2025","externalUrl":null,"permalink":"/en/posts/vs-trivia-architecture/","section":"Posts","summary":"From the very first steps in preparing the application, the requirements were clear: design a project that is both scalable and sustainable. It is in this spirit that I envisioned the infrastructure architecture. Whereas for my previous projects with more modest ambitions I opted for a standalone solution hosted on my VPS, this time I chose a distributed approach.\n","title":"Architecture of VS Trivia","type":"posts"},{"content":"","date":"20 February 2025","externalUrl":null,"permalink":"/en/","section":"BALES","summary":"","title":"BALES","type":"page"},{"content":"","date":"20 February 2025","externalUrl":null,"permalink":"/en/categories/","section":"Categories","summary":"","title":"Categories","type":"categories"},{"content":"","date":"20 February 2025","externalUrl":null,"permalink":"/en/posts/","section":"Posts","summary":"","title":"Posts","type":"posts"},{"content":"","date":"20 February 2025","externalUrl":null,"permalink":"/en/categories/tech/","section":"Categories","summary":"","title":"Tech","type":"categories"},{"content":"","date":"1 January 2025","externalUrl":null,"permalink":"/en/tags/flutter/","section":"Tags","summary":"","title":"Flutter","type":"tags"},{"content":"","date":"1 January 2025","externalUrl":null,"permalink":"/en/tags/kubernetes/","section":"Tags","summary":"","title":"Kubernetes","type":"tags"},{"content":"","date":"1 January 2025","externalUrl":null,"permalink":"/en/projects/","section":"Projects","summary":"","title":"Projects","type":"projects"},{"content":"","date":"1 January 2025","externalUrl":null,"permalink":"/en/tags/","section":"Tags","summary":"","title":"Tags","type":"tags"},{"content":" View Website VS Trivia is a general knowledge app designed to combine learning with fun. Striking the perfect balance between entertainment and education, it stands out for making knowledge accessible, engaging, and tailored to all. Avoiding the dryness of academic textbooks and the overly simplistic nature of purely recreational games, VS Trivia is both an educational tool and an exciting way to pass the time.\nA Personalized Experience # VS Trivia delivers a customized experience by adapting to the preferences and interests of each user. Whether you\u0026rsquo;re into fascinating trivia or want to dive deep into a specific topic, the app tailors its content to your strategy and goals. This system creates an enjoyable, implicit learning journey, letting users explore their passions while expanding their knowledge.\nSocial and Competitive Features # One of VS Trivia\u0026rsquo;s key strengths is its focus on social interaction and competition. With real-time global quizzes, the app connects players from around the world, offering content tailored to their levels and cultural backgrounds. For more intimate challenges, private games allow users to host and invite friends or family through a simple shared code, fostering collaborative learning and fun.\n","date":"1 January 2025","externalUrl":null,"permalink":"/en/projects/vs-trivia/","section":"Projects","summary":" View Website VS Trivia is a general knowledge app designed to combine learning with fun. Striking the perfect balance between entertainment and education, it stands out for making knowledge accessible, engaging, and tailored to all. Avoiding the dryness of academic textbooks and the overly simplistic nature of purely recreational games, VS Trivia is both an educational tool and an exciting way to pass the time.\n","title":"VS Trivia","type":"projects"},{"content":"","date":"1 January 2025","externalUrl":null,"permalink":"/en/tags/websocket/","section":"Tags","summary":"","title":"Websocket","type":"tags"},{"content":"","date":"31 August 2020","externalUrl":null,"permalink":"/en/tags/android/","section":"Tags","summary":"","title":"Android","type":"tags"},{"content":" View on APKPure Lund was a native Android application targeting the school agenda sector, designed for students. It was made available to the public at the end of August 2020.\nThe primary goal of this project was educational, focusing on skill-building through a real-world, practical case that could be genuinely used.\nFeatures # Among its popular features, it included:\nAccess to assignments and grades from both phone and computer. Schedule saving with A/B week management. Organizing course photos through a dedicated interface. All data was synchronized with a monolithic server infrastructure.\n","date":"31 August 2020","externalUrl":null,"permalink":"/en/projects/lund/","section":"Projects","summary":" View on APKPure Lund was a native Android application targeting the school agenda sector, designed for students. It was made available to the public at the end of August 2020.\n","title":"Lund","type":"projects"},{"content":"","date":"31 August 2020","externalUrl":null,"permalink":"/en/tags/monolithic/","section":"Tags","summary":"","title":"Monolithic","type":"tags"},{"content":"","date":"31 August 2020","externalUrl":null,"permalink":"/en/tags/tool/","section":"Tags","summary":"","title":"Tool","type":"tags"},{"content":"Passionate about computer science, data and the products it makes possible, I am particularly interested in massively distributed real-time applications. In this context, I have undertaken the creation of applications aimed at the general public, which have allowed me to tackle both technical challenges and business/loyalty issues.\nTo build a strong foundation in this field, I am currently pursuing an Engineering degree in Computer Science and Networks at the École des Mines d\u0026rsquo;Alès through a work-study program. Previously, I completed a Bachelor\u0026rsquo;s degree in Computer Science at the IUT of Montpellier, alongside an MTS (Management, Technologies, and Sciences) degree at the IAE of Montpellier. Moving forward, I aim to specialize in Data/DevOps to further strengthen my expertise.\n","externalUrl":null,"permalink":"/en/about/","section":"BALES","summary":"Passionate about computer science, data and the products it makes possible, I am particularly interested in massively distributed real-time applications. In this context, I have undertaken the creation of applications aimed at the general public, which have allowed me to tackle both technical challenges and business/loyalty issues.\n","title":"About","type":"page"},{"content":"","externalUrl":null,"permalink":"/en/authors/","section":"Authors","summary":"","title":"Authors","type":"authors"},{"content":"Verified credentials I\u0026rsquo;ve earned, click any badge to check its authenticity.\n","externalUrl":null,"permalink":"/en/certifications/","section":"Certifications","summary":"Verified credentials I’ve earned, click any badge to check its authenticity.\n","title":"Certifications","type":"certifications"},{"content":"","externalUrl":null,"permalink":"/en/series/","section":"Series","summary":"","title":"Series","type":"series"}]