
Charlie Gallegos
Software Engineer
I am a software engineer, graduated from the Autonomous University of Querétaro.
I am passionate about programming and software development.
Throughout my career I created different projects and acquired skills in different programming languages.
I have also come across different technologies and tools that helped me improve my skills.
I understand that technology and programming can be a complicated world, but this should not be an impediment to learning and improving. On the contrary, We should see these challenges as a way to learn and improve.
We were all beginners at this time and did not have much knowledge in software development, but with time and dedication we can improve.
For these reasons I would like to share my knowledge and help others improve their software development skills.
And I really like Sofia
Skills
These are some of the skills I have acquired throughout my career !

JavaScript

Java

PHP

Python

C#

C++
Projects
These are some of the projects I have created throughout my career !

AI Diseases
This is an artificial intelligence project that is responsible for making a prediction about what disease a person may have depending on the symptoms they present and the intensity of each of them.To develop this disease diagnosis module, Fuzzy Logic was applied to be able to make a more precise prediction. The module incorporates a Dataset that contained 10 diseases and 15 symptoms, each symptom had an intensity of 1 to 10.React was used to create the Frontend, in this the user can capture the symptoms they present and the intensity of these same Once the user has captured the symptoms, they send the information to the Backend through a REST APIThe backend is developed in Python using Flask, in this is the Fuzzy Logic model that is responsible for making the prediction.In order to be able to calculate the the prediction, a calculation of intersection of fuzzy sets is used to determine the disease.In addition, the result is evaluated using a confidence threshold, if the result is greater than the confidence threshold it is returned as a reliable result, if not it is returned as an unreliable result.The result is returned to the Frontend and is shown to the user, the user will see a table with the diseases that he may have and the probability of having each one of them.In addition, a button is shown to be able to see more information about the disease, by clicking on the button a description of the disease and the treatments that can be followed are shown.

Search Engine
This project is the creation of a search engine, but first we must ask ourselves the question: What is a search engine? A search engine is a system that has the ability to find and collect information that is stored on a server, but in order to do a search first there must be a word or a set of words that someone performs, we will call this search Query. There are various examples of search engines, one of the best known and used in the world is the Google search engine, this engine processes more than 40,000 searches every second, about 3.5 billion searches every day and about 1.2 trillion searches a year. And this is only from the Google search engine, there are more engines like Yahoo! and Bing that also receive a large number of queries per day. day.For this project I first had to make a file with different documents, these documents were going to simulate what the pages and documents on the web would be like, once the file was created and with the documents we will use Whoosh technology to process and normalize the data, with this I mean that it will do processes such as converting all the words to lowercase, removing accents and dividing the text into words or terms, this to later build the dictionary, the inverted index and the list of publications.The dictionary is a list of all the unique terms found in the corpus of documents, for example if a document in the corpus contains a phrase like 'Charlie Gallegos junior programmer' in the dictionary it would be {'Charlie', 'Gallegos', 'programmer', 'junior'}.The inverted index maps terms to a list of documents and positions where these terms appear, this is built using a data structure like a map or dictionary where each term points to its list of publications, for example, suppose we have the following 3 documents:Document 1: "the black cat"Document 2: "the white dog"Document 3: "the cat and the dog"The dictionary would be: {"the", "cat", "black", "dog", "white", "and"}, and the inverted index would be the following:"the": [(1, 1), (2, 1), (3, 1)]"cat": [(1, 2), (3, 2)]"black": [(1, 3)]"dog": [(2, 2), (3, 4)]"white": [(2, 3)]"and": [(3, 3)]As you can see, each term is pointing to the document and position in which it is found.The list of terms Posts, as its name indicates, is a list where for each term it includes information about all the documents that contain the term and the positions within those documents, taking the previous example:For the term "cat"Posting List: [(1, 2), (3, 2)]Once these 3 elements have been created we mustOnce we have indexed the documents we have created previously, Whoosh will be in charge of creating these 3 elements with the information from the documents we provide. With this, I was able to start coding the function to be able to make queries against the index. The searches could be by keywords or by complete phrases, in addition to having the ability to return more than one search or query at a time and the search engine could return the search results in a reasonable time. In addition, in the search results I had to show the results in an order of relevance, that is, the results that were most relevant were shown first. The results include the calculation of batch evaluations such as the calculation of precision and recall.

Socket Chat
This project is the creation of an instant messaging service, also known as chat, this is a service that allows two or more people to communicate instantly, maintaining an entire conversation in real time, a great example of this type of service and that practically everyone uses is Whatsapp, this application is the most used messaging application in the world with more than 2 billion users, there are also other applications that have this type of service such as Facebook Messenger, Instagram, Snapchat, Telegram, etc ...To create this project we have to understand some concepts that will be explained briefly and also in a very simplified way, just to understand how this project works.The first concept that we must see are the communication models between computers, there are two well-known architectures, one of them is the architecture Peer-to-Peer (P2P).In this architecture each computer in the network acts as both a client and a server. This means that each node in the network (each computer) can request and provide resources and services to other nodes without the need for a central server.This architecture has its pros and cons, but this is not the architecture that we will use for this project, we will use the Client-Server architecture.In this architecture, as its name indicates, we will have a client and a server, the client will be the computer or device that requests the resources or services, in this case it will request the service of sending a message. The server will be the computer or device that will provide the resources or services to the clients, in this case it will be the device that will receive the message from the client and send it to the other computers.We already know the architecture, but now we have to know how this is achieved, since we have only said that the computer will send a message to the server but I have not explained how the computer knows where to send the message, or how the server will know when a client sends a message, there has to be a connection between both to be able to know all this. To explain this connection or communication we have to know the following concepts:What is an IP address?An IP address is a unique address that identifies a device on a network, it can be on a local area network (LAN) or on the Internet.What is a port?A port is a number associated with an IP address that identifies a specific process or type of service on the device. Ports ensure that data reaches the correct application on a device. A computer has many ports ranging from 0 to 65535, too many ports, although some of these ports are occupied by some services that we use, maybe you didn't know but port 80 on your computer is intended for HTTP and port 443 for HTTPS, file transfer applications like FileZilla use port 21. In very simple terms, think of it as an ear that is always listening for requests.What is a Socket?It is a combination of an IP address and a port number, this represents one end of a network connection. These sockets allow communication between two devices on a network, in this case the Client Socket will include the client's IP and the port that the client uses for communication, and the Server Socket will include the server's IP and the port on which the server listens for requests.Communication protocols?There are communication protocols to transmit data over the network, two of the most used are UDP and TCP, there is a big difference between the two, to explain this I will give an example with two people. Let's imagine that Remy wants to know the time and is going to ask Mariana.TCP ProtocolRemy arrives and says hello to Mariana, expecting Mariana to reply with a “Hello”, Mariana listens to Remy and says “Hello” to Remy, at this point they have already introduced themselves and established a connection, then Remy says “Can you give me the time?” to Mariana and Mariana replies “It's 9 in the morning”.As we can see before asking her what she needed, there was first an introduction to establish a connection and wait for the confirmation message. In the UDP protocol it is totally different.UDP ProtocolRemy arrives and says to Mariana “Can you give me the time?” without knowing if Mariana received the message or not, in this case Mariana did hear the message and replied to Remy “It's 9 in the morning” but it could also be the case where Mariana doesn't receive the message and it just stays like that.In the UDP protocol there is no presentation, a confirmation message is not expected, so messages can be constantly sent without knowing if they have been received or not.At first glance we can say that why is the UDP protocol used if we are not sure that the message was received correctly or not, but each protocol has its function, for example, for Streaming services we do not want to know if all the packets have been received since, if we wait for a confirmation message for each packet we send, it would take too long to load, so the UDP protocol is the best for this case.In our case the TCP protocol is ideal since, if we need to know that the packets have been sent correctly, we cannot lose a message out of nowhere, in addition to the fact that it is a service that although it is instantaneous, it is not bad to wait a couple of seconds for a message.Once we know all this, we can explain this project. First we have to initialize the server since the messages sent by the clients will arrive there. The server is bound to a specific IP address and a specific port and is in a listening state, waiting for new available connections, the IP address and port are displayed on a screen.With the server on standby, we have to start the client, when starting the client the user will be asked for the server's IP address and port to create a socket and connect to the server.Once the client clicks to connect, it establishes a connection to the server with the socket, the server listens to this connection request and accepts it, the server saves the socket that was just connected in a list to add it to the chat.Up to this point we already have the connection between the different clients and the server to create what would be the chat, but we have not seen how the messages are sent, we have only created the connection but it is not as simple as just writing 'Hello' and being able to send it like that. In this project we have used two different programming languages, Java and C#, so we have to configure them so that both use the same protocol and data format, in this case configure them to be read by Bytes because images have to be sent later. Practically the message that the user wrote was converted into bytes and then sent to the server where it converted the bytes into text again, read the message and then converted it back into bytes to send to all the sockets in the list that was created previously.Up to this point we already know how we established the connection and how messages are sent, now let's talk about the list of members in the chat, as we can see on the left side the usernames of each of the chat members are displayed, this is achieved because previously the sockets of each of the members who joined the server were saved in a list and were associated with their username, in this way you can also achieve what would be a direct message, the user can choose any user in the list and can send a private message only to that person since instead of the server sending the message to all the sockets in the list, it is only sent to the socket of the user that was chosen.Finally we will talk about the Sending images, we usually think of images as what they are, just images, but we forget the fact that we are on a computer and it does not see it as an image, they are bytes, we send the bytes of the image and the server receives them in the same way it receives text.

Hackathon Pocket Lawyer
Before explaining this project we must ask ourselves the following question: What is a Hackathon?A hackathon is an event where several programmers meet in search of solutions.Solve a challenge or problem through collaborative and/or individual work. These challenges have to be solved within a time limit, most events have a time limit of between 24 and 48 hours, this depends on the organization of the event. What is sought in these events is to find solutions to the proposed challenge, each of the teams will propose different creative solutions, promoting healthy competition to share knowledge and improve skills such as teamwork.The Faculty of Computer Science of the Autonomous University of Querétaro held a Hackathon in 2023, where I had the opportunity to participate in this event. The theme of that year was in the legal field, the challenge was to build a platform that would help citizens or professionals who work with laws, the way to help was freely chosen, the only condition was that the platform was in the legal field.My team and I opted for a platform that would help citizens in these matters because many times people are not well informed on these issues because it is not easy to memorize all the laws that exist. An example of this is traffic laws, many times we drive a vehicle without knowing all the laws and rules that exist, so there are times when people are stopped without knowing why they were stopped, and we based ourselves on that problem to be able to make a platform that would help citizens in that case.The platform is a web page made with different technologies such as HTML, SCSS, PHP and JavaScript and created with an MVC (Model View Controller) architecture, within this page they found different things among which two important characteristics can be highlighted such as: 'Advice ChatBot' and 'Connection between people and lawyers'.The advice ChatBot was a function where people could enter this chat for legal advice in case they were stopped, the chat had a database with the laws and traffic regulations so that people knew why they were being stopped and what fine or process they had to follow for the infraction they had committed.The connection between people and lawyers was a function where people could contact a lawyer of the type they needed since there are different types of lawyers who are dedicated to different branches of law, the platform had a database where the lawyers' contacts would be kept so that people could contact them in case of legal advice or in case of an accident in which they need a lawyer quickly.In order to perform the function of connecting people and lawyers, people had to create an account on our platform to obtain their personal and contact information, this means that the platform supported user management, and with this I mean that the platform was capable of making registrations, logins with authentication fields such as username/email and a password. The passwords in the database were hashed so no one else but the user had knowledge of the password.

Let It Shine
At a talent show event, the organization required a method to publicize the event in order to get more participants and viewers for the show, and while there are tools such as social networks, such as Instagram, Facebook or Twitter, the event organizers also needed a method to be able to keep track of the event participants, such as registering them and keeping track of their information.Due to the characteristics of the project that the organization presented to us, we decided on the creation of a web page in which the participants had the option to register on the same page, once the participants were registered, the organization had access to an administration panel where the information of the people who had registered as talents and who were going to participate was displayed, this administration panel is protected with an authentication that is only The person in charge of organizing Let It Shine gave us the opportunity to meet the organization's objectives. The website was a success because it was possible to obtain more talent registrations than expected, and a large number of spectators attended. The event's forum reached 90% of its total capacity.For the creation of this project I used different technologies such as HTML, SCSS, PHP and JavaScript and it was built following the MVC (Model View Controller) architecture. The application haswith a database that allows to keep track of participants and control their information.

Java Store
This project is the creation of a store system, the project had certain requirements that had to be met, but I will only talk about one in particular, this requirement was that it could not be connected to a database management system, in other words, systems such as MySQL, mongoDB, Oracle, PostgreSQL, etc. could not be used... This complicated things since a store handles a lot of data, we are talking about data such as product inventory, profit reports, expense reports, supplier and customer records, and we know that when we talk about records it is not only the record, but also keeping track of login with authentication, because of this I had to think of a way to be able to keep all this and I found a solution.My solution for this requirement was to keep my entire database in different notebooks of notes, with this I mean that I practically had the information of the store in different txt, for example, in a txt named Clients.txt it contained the information that was requested from the client at the time of registration, this included a name, a password, an address, a number, an ID and other data.But that does not solve much, although it solves the problem of storing the information, it does not help us with the problem of how to manage it, in a database management system such as MySQL, management is considerably easy since you only have to make queries to retrieve, delete, add or modify the information, but in this case we have to create our own methods to be able to achieve these actions, due to this the information that is stored has to have a certain structure to be able to keep track of it.I will investigate a little bit in this of the structure of the information, as I just mentioned, the information has to have a certain structure so that it can be manipulated in the correct way, Java has a function that allows the reading of a txt file called FileReader and we also have a function, called Split, which allows to separate text taking as a base a character as identifier, knowing this we can get an idea of how we can organize the structure, the data structure will be organized as follows:name, password, address, number, id;Let's break down this structure and understand it, as we can see each data is separated by a comma “,” this allows the data to be separated in order to process it and not be combined with each other, without this there may be incorrect or corrupt data where the name and address are mixed and in the end you can't know where one begins and where it ends. But that doesn't fix a big problem and that is that we wouldn't know where a record starts and where one ends, for example, let's suppose that we have the same structure, but with more data, something like this:name,password,address,number,id, name,password,address,number,id, name,password,address,number,id, name,password,address,number,id, name,password,address,number,id, name,password,address,number,id,As we can see at a glance, we can say that it is understood and that we can keep it organized, but the problem is that the computer would not see it that way, we have to know that the Split function what it does is separate the text taking as a reference the “,” and places the text in an array, for example, if we only had one record it would look something like this once the Split function is used:[“name”,”password”,”address”,”number”,”id”]At first glance we could say that it is fine and that this way we can divide the data in the file to get each piece of data separately, but as I said before the problem starts when there are more records, with several records it would look like this:[“name”,”password”,”address”,”number”,”id”,“name”,”password”,”address”,”number”,”id”, “name”,”password”,”address”,”number”,”id”, “name”,”password”,”address”,”number”,”id”]This complicates things, as we can see if we separate each piece of data, but the problem is that the computer wouldn't know exactly where a record starts and where one ends, and to be honest, we wouldn't be able to tell either. To give a better structure for reading this data, another character is implemented that will help us to apply the Split function again to separate the records, the character I am talking about is the semicolon “;”, as we can see in the organization of the data I mentioned above, we canNote that at the end of the record there is a semicolon, which will mark the end of a record, for example, let's suppose that we have the same record number but now with the format that we are using for the project:name, password, address, number, id, name, password, address, number, id; name, password, address, number, id; name, password, address, number, id, name, password, address, number, id;We already saw how the format would look with the first split with the comma, but if we now add another Split function but now with the character “;” it will give us a totally different result. It would look like this:[[“name”,”password”,”address”,”number”,”id”],[“name”,”password”,”address”,”number”,”id”,“name”,”password”,”address”,”number”,”id”],[“name”,”password”,”address”,”number”, “id”]]As we can see, they are now displayed in a way that allows the data and records to be separated, this is how we can simulate a database without using a database management system. It is worth mentioning that there were other ways to do this, as we know in the world of programming there are different solutions for a single problem, one of those solutions was to simulate a database with JSON which is what NoSQL technologies like MongoDB practically do, but this solution was chosen since one of the requirements of the project was also to make use of notebooks to be able to do this.Okay, now we know how we handle the data in this project, I will start to talk about what this project does, as we mentioned before, it is a store system created under the Java programming language, with an interface that makes the user have a more pleasant experience, so at the beginning of the project, we first select who is going to use this system, we have an option of clients who are those who buy in our grocery store and we have the option of suppliers who are those who would sell us the products.Once this is selected, a login or a new registration will be requested to find out who is the person or company that is buying or selling, if it is a startup session the system will read the file where the information is stored and will do a process where it will first look for the customer or supplier number (depending on which option was chosen initially) and if it exists it will verify that the password matches the customer number that was provided, in the case of registration it does the same process that we discussed above.If the user has logged in correctly, they will enter the system where they can make purchases or sales of products, when selecting a product, the price of this is displayed and also depending on the selected quantity it is added to the final price, when adding the product to the basket, it is attached to a table where the quantity, price without taxes and taxes are displayed, at the bottom the final price of the basket without VAT and the added VAT is shown, at the time of finalizing the purchase an invoice of the purchase or sale is generated.Finally, this whole process generates different reports, such as the customer report, sales report, supplier report, invoice report, inventory report, Earnings report and purchase report, all of these are managed by the system and generated every time one of the system actions is done. The reports are saved in a similar way to the user records, and these can be seen from a section of the system when a button is clicked a report is shown that these.

School System
This project is the creation of a school platform, it is a project where the following problem was raised, a school needed a web page to be able to advertise it, a page where the careers offered and their contact information are shown. In addition to this we must create a management system for students and teachers, and when I say this I mean that the platform should have different functions such as a space where students can see their schedule, register their subjects, upload their work for their subjects and review their grades, both their work and final grades. Teachers should also have a space where they can see the subjects they are going to teach, publish their subject work, grade the work and record final grades.We can see that both students and teachers have their space, but because this is a school, not anyone can come and register as a student and teacher, and we can also see that theTeachers will only see the subjects they are going to teach but they do not have an option to register them, this is because there will also be an administration section which is the space where the school administration would use to perform different functions such as registering a new student, registering a new teacher, registering subject schedules, and also registering an event. This is so that only the administration is in charge of carrying out all this control, since in theory in schools only they can carry out this control.With these details we can already get an idea of everything that the system must be capable of, but we will investigate a little in certain aspects since they are important to also understand its operation, also in the rest of the explanation of the project we will see how the database and the queries that are made to it play an important role in being able to do this whole system, since they are complex queries and it is designed in a way that it can be highly scalable.Details in the student portal.When a student wants to enter the portal or system, he must log in with the fields of his id and password that the administration must provide him, at the time of logging in, a session will be kept active with the information of this student so that the portal shows only the information of this student and not that of all the students or that of some other student, with this the student when entering any of the sections will only be shown his information, for For example, in the section for viewing schedules, only the schedule of the student who logged in will be shown and something similar will happen in the other sections that I will explain.In the student portal we can see that there is an option to confirm subjects, but it is not as simple as just showing all the subjects that are in the university since we would be leaving open the possibility that maybe a student of the Software Engineering degree takes subjects of the Bachelor's degree in Computer Science and this should not be valid, in addition there is also the possibility that a first semester student takes a ninth semester subject, this while it could be fine in some occasions should be controlled by administration through a letter where the student agrees that he wants to take this subject, there is also the possibility that he registers in a schedule that does not agree with his group at the university, which although this may also be possible, it should also be discussed with the administration to find out if there is space in the schedule of another group.So the solution to these problems is to limit the options that are shown to the student, and this is somewhat complicated since it is I would have to make a query in the database that filters all these parameters.Also in the student portal we have a section called virtual where the student can upload their class work to their respective subjects, for this we have to make a query that shows the subjects that the student confirmed and also returns the work that the teacher has uploaded to his subject. If the teacher has left a job, the student has the possibility to upload his file, but this file will not be saved in the database as such since if we save it within the database this would imply that it grows quickly in size and can become slow, due to this what I will do is save the pdf within a specific location within the server and the access path will be saved in the database, in addition I will change the name of the pdf file to a unique one so that there is no probability in which the name is duplicated and the data is corrupted.Details in the teacher portal.As in the student portal, when the teacher starts his session with the data that the administration gave him, a session will be started so that only the data of the teacher who started the session is shown.When the teacher enters the section to view subjects, a query is made to show the subjects that the teacher will teach, with their due schedule.When the teacher wants to publish a work for your class, you can do it from the publish work section, there you will select the class to which you want to leave a work and once selected, the teacher can upload a work for your class by filling out a form with the characteristics of this work, at the time of uploading this work it will be saved in the database making it possible for the students enrolled in your class to view this work.If the teacher published a work and decides that it is time to grade it, you must enter the grading work section where you select: You will be able to register the class whose work you want to grade, within the section a panel will be displayed with the names of your students and their nested work, you will be able to download your work and see it on your computer, once reviewed, in the panel you will also have an option where you can grade your work and upload it to the database, in this way your students when entering your portal will be able to see the grades of their work.Finally, to register the final grade of the student, you will have a process similar to that of grading a work, you must enter the section to register a grade and choose the class you want to register grades for, there the students of your class will be displayed and next to each student there will be a section to be able to register the grade of each one, once the grade of the students is entered, they will be saved in the database and the students will be able to enter from their portal to see them.Details in the administrator portal.In this portal you will find the options to register students, schedules, teachers, subjects and events.To register a student, you must enter the section to register a student where a form will be filled out with the data of the student to be registered, data such as name, password, email, semester, group and major will be requested. At the time of registering them, it will be saved in the database and now the student will have access to the portal services. To register a teacher, it will be practically the same process, but from the section to register a teacher, but with different data, but in the same way at the time of registering, the teacher will be able to access his portal.To add a subject, you will enter the section to register a subject, and it will ask you to fill out a form with the fields of the name of the subject and the semester in which it is taught. When registering the subject, it can be used to register a schedule. To register the schedule, you must enter the section to register the schedule and you will be asked to fill out a form with the fields of the subject key/id, ID of the teacher who will teach it, ID of the group, day of the week and time of day. By registering this, the schedules can be displayed on the student and teacher portals.Finally, we have a section to register an event. The main function of this section is that the events that take place at the school are displayed on the page so that people can see the events that are taking place.For the creation of this project, I used different technologies such as HTML, SCSS, PHP and JavaScript and it was built following the MVC (Model View Controller) architecture. The application has a database that allows all these processes that we have mentioned above to be carried out. It is built in a way that is highly scalable and that all this information works together to achieve all the functions of the project.

NONE Carwash
This project originated from a challenge faced by a car wash business in the past. While the business had an existing website, it lacked relevant information, making it difficult for customers to find essential details such as updated prices, locations, operating hours, and other key information. As a result, the website received minimal monthly traffic and lacked a strong online presence.Recognizing these issues, I proposed a comprehensive solution and developed a new website from scratch to replace the previous version. The new platform includes all the necessary information about the car wash, ensuring that customers can quickly and easily find the details they need when searching online. During development, I implemented SEO practices (Search Engine Optimization) to improve the site's ranking on Google. As a result, the website has achieved a 150% increase in monthly visits, significantly enhancing the car wash's digital presence and visibility.To keep the pricing and services up to date, I designed an administrator section. This functionality enables the car wash staff to access the system and easily update, add, or delete services and products. Administrators can modify key elements such as the price, description, image, or the name of the service/product. This is made possible by integrating a database that dynamically connects to the website to retrieve and display information in real time.The project was developed using technologies such as HTML, SCSS, PHP, and JavaScript, and was built following the MVC architecture (Model-View-Controller). This structure ensures a scalable, efficient, and maintainable development process. The implemented solution not only addresses the previous challenges but also provides the company with a robust tool to manage its information autonomously and effectively.

Pursued By Darkness
Pursued By Darkness is a project that falls under the category of immersive systems, a set of technologies designed to create simulated environments that allow users to experience deep and interactive immersion. These systems aim to deceive the human senses, providing a sensory experience based on features such as sensory immersion, interactivity, and realism.Among the human senses, vision is the one most commonly and effectively deceived, thanks to devices such as virtual reality (VR) headsets and augmented reality (AR) tools, which offer highly realistic visual experiences.In this project, my team and I developed a virtual reality video game with the goal of immersing the player into a fully virtual environment. We utilized this technology to deceive the sense of sight and generate an interactive experience that makes the user feel as if everything happening in the game is occurring in real life.The concept of the game is simple yet impactful: the player is pursued by a monster in a dimly lit room, where they must complete various tasks to escape. This dynamic creates a sense of fear in the player, triggered by a danger that, while not real, feels genuine due to the visual illusion produced by the technology. Similar phenomena have been observed in experiments where individuals wearing VR headsets are simulated to fall from a building; their reactions, despite the fictional nature of the scenario, are completely real.The development of this project was carried out using the Unreal Engine 5 and implemented with Meta Quest 2 devices. This combination allowed us to create an immersive, interactive, and visually striking environment that meets current standards in virtual reality.

Herman Inmobiliaria
Herman Inmobiliaria is a company offering property rental and sales services. The website features a contact section and a services overview, enabling users to obtain information about the services offered and reach out to the company.The website essentially functions as a Content Management System (CMS), allowing company administrators to add, modify, and remove properties, as well as manage services and contact details. This is done through a dashboard that enables autonomous and optimized data management.Administrators do not require programming knowledge to manage content, as all operations are performed via user-friendly forms within the dashboard. Beyond property management, administrators also have control over technical aspects, such as page metadata and property links.The application was built using Nest.js and Next.js, integrating Google Cloud APIs and utilizing AWS services for various components. Additionally, I implemented a CI/CD pipeline using GitHub Actions to automate the deployment process.

Sparkaxe
Sparkaxe is an e-commerce management system featuring a centralized dashboard that allows for the simple and efficient management of all online store aspects, including inventory, customers, products, and orders.I joined the project in its final stages specifically for the cloud deployment phase, rather than as a developer. I was responsible for analyzing the codebase, the tools in use, and the system architecture to design a comprehensive cloud deployment strategy.Upon finalizing the strategy, I executed the deployment across AWS and Google Cloud platforms. Post-deployment testing confirmed that the system functioned correctly and satisfied all technical and client requirements.