{"pageProps":{"projects":[{"name":"PlayDate","category":"University","tags":["Python","Javascript","React-Query","Nextjs","Tailwindcss","Django","Django Rest Framework","Cloudinary","SteamAPI","Dramatiq","Redis","PostgreSQL","BeautifulSoup","Daphne","Channels","Vercel","Railway","Docker","APScheduler","Planetscale","React-Native","Expo","Websockets","Typescript"],"related_repositories":["https://github.com/rafaelcanoguitton/playdate_backend","https://github.com/rafaelcanoguitton/playdate_web-application","https://github.com/rafaelcanoguitton/playdate"],"description":"This is one special project. This project is the result of 2 semesters' efforts to build a startup from scratch.
Our idea was to create a platform where people could find other people to play videogames with. We wanted to make it as easy as possible for people to find other people with similar interests related to niche stuff, we considered anime and videogames but were looking forward to expanding into Twitch Streamers, Youtubers and anything alike. Some of the features we got to implement are:
- Integration with the SteamAPI to scrap profile information like games, hours played and achievements.
- A matchmaking system that would match people based on their interests and preferences that we collected through tags, though it never got to production.
- A backup system for steam data so that we don't hit the api eveytime and we have data in case we ran out of requests.
- We have a working chat using Django Channels and web sockets.
- Both a web app and a work in progress app using React Native.
Overall this project was/is a lot of fun, currently we're not sure if it's gonna be kept in development and if we're gonna be still look for funding, either way it was a very fun experience and I learned a lot from it.","image":"/Playdate.png","media":[],"deployment":"https://playdate-app.vercel.app"},{"name":"Copito's Adventure","category":"University","tags":["C#","Unity","AR","Voice Recognition","ASP.NET","ARCore"],"related_repositories":["https://github.com/rafaelcanoguitton/Copito-s-Adventure"],"description":"A project for Computer Human Interaction (CS2H1) class at Universidad Católica San Pablo's semester assignment. The core of the assignment is to implement an application/game which makes use of concepts and topics reviewed in class.
Our approach was to make an isometric low-poly style game that could be played using voice controls and used Augmented Reality.Also one of the requirements was to implement a multiplayer, we approached this using netcode and making the second player be able to interact with the map but not to control the character. We considered gameplay, enemies, items, level progression and many other concepts.","image":"https://github.com/rafaelcanoguitton/Copito-s-Adventure/blob/master/IMG_1168.PNG?raw=true","media":[{"type":"video","url":"https://www.youtube.com/embed/NJJ-VRA7V lM"}],"deployment":""},{"name":"Consultorio Solidario","category":"University","tags":["React","MUI","Django","DjangoRestAPI"],"related_repositories":[],"description":"This was a social work project to aid the Psychology department at Universidad Católica San Pablo.
The goal was to build a platform to aid the students in their work and to better manage information relevant to their appointments. The project's phase in which I took part had most of the components and functionality built but there were several changes, issues and bugs that had to be addressed.
During my participation I took the role of mantainer for both of the project's repositories, managed both of the deployments, managed the database, developed features for both frontend and backend, implemented the project's requirements and found creative solutions for things that were missing.
Although the project's code is not open source nor is it available to the public, I still have a deployment from the last iteration I took part in. You can use \"rafael\" as both username and password if you want to go and take a look at the project.","image":"/cons.png","media":[],"deployment":"https://front-end-consultorio-ucsp.vercel.app/"},{"name":"Rubick's Cube","category":"University","tags":["C++","OpenGL","GLM","CMake"],"related_repositories":["https://github.com/rafaelcanoguitton/Cubo-rubick"],"description":"This project was for Computer Graphics ( CS251 ) class at Universidad Católica San Pablo's final assignment. It consisted in implementing througth the semester a Rubick's cube that could solve itself and has unique animations that we came up with. For this we used concepts and topics covered in class and implemented the project's requirements.","image":"https://camo.githubusercontent.com/e270394bb08122cf965717d29a5a9ddb914cbbf42530e6a3ebc5ddd3d3dcbdb0/68747470733a2f2f6d656469612e67697068792e636f6d2f6d656469612f4446586e76483076313464315952333233552f67697068792e676966","media":[{"type":"gif","url":"https://camo.githubusercontent.com/2335b1a35957d2ac4dc11b0869da52941577c2e00ba1c8f57fb0f812c43f7102/68747470733a2f2f6d656469612e67697068792e636f6d2f6d656469612f70577550714c7548715944393048454b596c2f67697068792e676966"}],"deployment":""},{"name":"GIPE 2022","category":"University","tags":["Laravel","PHP","Docker","MySQL","Bootstrap","Blade","Artisan"],"related_repositories":[],"description":"This was an international project in which I took part from March 2022 to July 2022. The goal of the project is to join students and professors from 4 universities across the globe whilst solving a single problem.
The universities are: Universidad Católica San Pablo (Perú), Namibia University of Science and Technology (Namibia), Universitas Katolik Indonesia Atma Jaya (Indonesia) and Westfälische Hochschule - Westphalian University of Applied Sciences(Germany).
We were given the task on this edition to build a web portal to aid students from San Juan Apostol School, a public school located in the outskirts of Arequipa, Perú. There were several project goals for which we were splitted in 5 subteams. The team I was part on was called \"Software Backbone\", our goal was to support the other teams implementing server logic, database logic, transforming HTML views into Blade compatible files and implementing other views that were from our own requirements. I took the role of Assistant to the team leader, so I was one of the project mantainers and aside from implementation and I helped people fulfill their own tasks.","image":"https://gipe.thm-it.de/wp-content/uploads/2022/02/1-copy.png","media":[{"type":"image","url":"https://gipe.thm-it.de/wp-content/uploads/2022/09/IMG_1349-600x400-1.jpeg"}],"deployment":"https://gipe.w-hs.de"},{"name":"Estudio acerca del comportamiento de peruanos influyentes en Twitter","category":"University","tags":["Data Science","bs4","Python","sqlite3","Tweepy","Sklearn","seaborn","numpy","matplotlib","pyvis","nltk","pandas"],"related_repositories":["https://github.com/rafaelcanoguitton/topicosCG","https://github.com/rafaelcanoguitton/trabajoParcialTG"],"description":"This project was for Introduction to Data Science (CS351) class at Universidad Católica San Pablo, it was a project that I worked on the whole semester. The goal was to study the behavior of influential peruvian people in Twitter","image":"/medium.png","media":[{"type":"web","url":"https://medium.com/p/bd53cedab18f","icon":"https://raw.githubusercontent.com/get-icon/geticon/fc0f660daee147afb4a56c64e12bde6486b73e39/icons/medium-icon-circle.svg"}],"deployment":"https://rafaelcanoguitton.github.io/trabajoParcialTG/"},{"name":"rafxarBOT","category":"Personal","tags":["Nodejs","mongoose","discordjs","Python","mongodb"],"related_repositories":["https://github.com/rafaelcanoguitton/rafxarBOT"],"description":"A Discord bot I made due to the fact that I had friends asking me for google meet links from University.
The goal was to make the bot send the link to a channel according to the class' schedule. It would also mention users' role that had the class' respective role for the class and it could assign users to said role. Also the bot can scrap reddit for new posts on subreddits for a server and post them in a designated channel. Finally the bot can also be used as a TTS bot in voice channels. It was made with Javascript initially but due to developer experience it was then rewritten in Python.","image":"https://cdn.discordapp.com/avatars/831225962393894934/483d4e60c2d9dfdb03d300466de116bd.webp?size=480","media":[],"deployment":"https://discord.com/api/oauth2/authorize?client_id=831225962393894934&permissions=271722496&scope=bot"},{"name":"credit management","category":"Work","tags":["React","electronjs","MUI","IPC","sqlite3"],"related_repositories":["https://github.com/rafaelcanoguitton/credit-management-electron"],"description":"A credit management system that was requested by a client to manage their client's loans made by their small financial institution. They wanted it made on electron to keep the database local on a sqlite file and keep the costs down. With the posibility to eventually host it on the the web and cloud. It used CRA with electronjs and MUI for the frontend. Whilst using IPC and SQLITE3 for the backend.","image":"/credit.png","media":[],"deployment":""},{"name":"botUCSP","category":"Personal","tags":["Telegram","Python","PyPDF2","bs4"],"related_repositories":["https://github.com/rafaelcanoguitton/botUCSP"],"description":"A Telegram bot that was made to consume an API that I also made to make the creation of covers for university work in PDF files. The bot can also join a PDF file with the work and the cover that you create. Finally the bot can scrap the university website and generate an image with your current grades for the current semester. This was made to avoid the hassle of going to the website everytime and doing it yourself. Also it can scrap the website for new grades and send a message when there is one.","image":"/botUCSP.png","media":[],"deployment":"https://t.me/ucspBOT"},{"name":"pascal-compiler","category":"University","tags":["C++","Python","Anytree","graphviz"],"related_repositories":["https://github.com/rafaelcanoguitton/pascal-compiler"],"description":"This project was made for Compilers (CS342) class at UCSP. I got max points for this project due to fulfilling all the requirements plus some CLI stuff. The goal was to translate a Pascal program with a custom gramatic to Python and executing the code. For this, a Lexical Analyzer, LL(1) Parser, Semantic Analyzer, Code Generator and error recovery mechanisms were implemented. The project can also generate using graphviz a visualization of the intermediate representation of the program.","image":"/pascal.png","media":[],"deployment":""},{"name":"sudoku solver","category":"University","tags":["Haskell","Javascript","Electronjs","MUI","IPC"],"related_repositories":["https://github.com/rafaelcanoguitton/front-end-sudoku-solver","https://github.com/rafaelcanoguitton/sudoku-solver"],"description":"This was a free project for Programming Languages' (CS341) class at UCSP. The goal was to simply solve a problem using a programming language that we didn't know already. In this case we chose to use Haskell and implement a Sudoku solver. Also we implemented a front-end using Electronjs and MUI to be able to play sudoku, solve it, and get hints for it. The project can also be used as a backend for a sudoku solver that can be used in any front-end.","image":"/sudoku.png","media":[],"deployment":""},{"name":"Code Execution as a Service using Kubernetes","category":"University","tags":["Python","Flask","Kubernetes","Docker","IPC","Nextjs","React","Tailwindcss","Socket.io","Gunicorn","GKE"],"related_repositories":["https://github.com/rafaelcanoguitton/RemoteCodeExecution-Kubernetes"],"description":"This project was made for the Cloud Computing (CS3P2) class at UCSP. The goal was to implement a Code Execution as a Service app (e.g. replit), containerize it using Docker, and deploy it using Kubernetes so that it could theoretically scale according to the demand. The configuration for the Kubernetes' service and deployment was adjusted for the few available resources in GKE at the time, it wouldn't even let us deploy more than 1 pod.
We implemented a multiuser functionality using Socket.io so that users could share a coding session. The only language available is Python and the interface is a bit simple as the main focus was the containerization and deployment side of the project.","image":"/RemoteCode.png","media":[]},{"name":"La Cañeria","category":"Work","tags":["Dart","Flutter","PostgreSQL","Nodejs","Express","Python"],"related_repositories":["https://github.com/rafaelcanoguitton/AppLaCaneria-backend","https://github.com/rafaelcanoguitton/AppLaCaneria","https://github.com/rafaelcanoguitton/LaCaneriaBOT"],"description":"A Application made for delivery management for a local pizzería. It has three parts, the front-end that was developed to be a mobile app using Flutter, the backend that was made with Nodejs and Postgres, and a Telegram bot made to notify personell from the pizzería when a new order is placed. The application was finished and delivered to the Google Play Store.","image":"https://play-lh.googleusercontent.com/UNeej0pz4yEdZIPX242LxKJJ47LfayS3adsXB0W8OxmGbLnLQC06IaqeTppBV5vTSdg=w5120-h2880-rw","media":[],"deployment":"https://play.google.com/store/apps/details?id=com.lacaneria.app"},{"name":"Generador-Carátulas-API","category":"Personal","tags":["Python","Django"],"related_repositories":["https://github.com/rafaelcanoguitton/Generador-Caratulas-API"],"description":"This is an API made to generate covers for University work. They generally require a cover with the university logo, names and info about the work. This API was made with the purpose to integrate it with discord bots and apps that could be made.","image":"/API.png","media":[],"deployment":"https://generador-caratulas-ucsp-api.herokuapp.com"},{"name":"b-link","category":"University","tags":["C++","CMake"],"related_repositories":["https://github.com/rafaelcanoguitton/b-link"],"description":"This is the final project of Advanced Data Structures (CS232) class at UCSP. The goal was to implement from a book a b-link tree which is basically a parallel B-tree. The project was made with C++ and CMake.","image":"https://d3i71xaburhd42.cloudfront.net/31b23b4da3dfde454abed0c21124998666e5aabb/3-Figure1-1.png","media":[],"deployment":""},{"name":"gestorPro","category":"University","tags":["Python","Flask","SQLAlchemy","PostgreSQL","Heroku","Bootstrap"],"related_repositories":["https://github.com/rafaelcanoguitton/GestorPro"],"description":"This project was for Software Engineering (CS292) class at UCSP. The objective throught the whole development of it was to learn Software Development concepts, and to make a web application that could be used to manage events. The technology stack was chosen due to the fact that I ended up doing most of the project by myself and it was the first time I ever did full-stack development.","image":"https://github.com/rafaelcanoguitton/GestorPro/blob/master/static/GESTOR%20PRO.png?raw=true","media":[],"deployment":"https://gestor-pro.herokuapp.com"},{"name":"DBMS","category":"University","tags":["C++"],"related_repositories":["https://github.com/rafaelcanoguitton/ProyectoBD2"],"description":"A rushed project for Databases (CS272) class at UCSP. The goal was to implement a Database Management System from scratch using C++, with special focus on metadata, indexes and data structures. The project also needed to be used with SQL queries and to have a CLI interface.","image":"/DBMS.png","media":[],"deployment":""}],"icons":{"AR":"https://upload.wikimedia.org/wikipedia/commons/7/75/AR-Icon.svg","ARCore":"https://cdn.worldvectorlogo.com/logos/google-arcore.svg","ASP.NET":"https://upload.wikimedia.org/wikipedia/commons/e/ee/.NET_Core_Logo.svg","Anytree":"","Artisan":"","Blade":"","Bootstrap":"https://raw.githubusercontent.com/get-icon/geticon/fc0f660daee147afb4a56c64e12bde6486b73e39/icons/bootstrap.svg","C#":"https://raw.githubusercontent.com/get-icon/geticon/master/icons/c-sharp.svg","C++":"https://raw.githubusercontent.com/get-icon/geticon/master/icons/c-plusplus.svg","CMake":"https://upload.wikimedia.org/wikipedia/commons/1/13/Cmake.svg","Dart":"https://raw.githubusercontent.com/get-icon/geticon/master/icons/dart.svg","Data Science":"https://pic.onlinewebfonts.com/svg/img_532570.png","Django":"https://raw.githubusercontent.com/get-icon/geticon/master/icons/django.svg","DjangoRestAPI":"https://www.django-rest-framework.org/img/logo.png","Docker":"https://raw.githubusercontent.com/get-icon/geticon/fc0f660daee147afb4a56c64e12bde6486b73e39/icons/docker-icon.svg","Electronjs":"https://raw.githubusercontent.com/get-icon/geticon/master/icons/electron.svg","Express":"https://raw.githubusercontent.com/get-icon/geticon/fc0f660daee147afb4a56c64e12bde6486b73e39/icons/express.svg","Flask":"https://raw.githubusercontent.com/get-icon/geticon/master/icons/flask.svg","Flutter":"https://raw.githubusercontent.com/get-icon/geticon/fc0f660daee147afb4a56c64e12bde6486b73e39/icons/flutter.svg","GLM":"/GLM.png","Haskell":"https://raw.githubusercontent.com/get-icon/geticon/master/icons/haskell-icon.svg","Heroku":"https://raw.githubusercontent.com/get-icon/geticon/fc0f660daee147afb4a56c64e12bde6486b73e39/icons/heroku-icon.svg","IPC":"","Javascript":"https://raw.githubusercontent.com/github/explore/80688e429a7d4ef2fca1e82350fe8e3517d3494d/topics/javascript/javascript.png","Laravel":"https://raw.githubusercontent.com/get-icon/geticon/fc0f660daee147afb4a56c64e12bde6486b73e39/icons/laravel.svg","MUI":"https://mui.com/static/logo.png","MySQL":"https://raw.githubusercontent.com/get-icon/geticon/fc0f660daee147afb4a56c64e12bde6486b73e39/icons/mysql.svg","Nodejs":"https://raw.githubusercontent.com/github/explore/80688e429a7d4ef2fca1e82350fe8e3517d3494d/topics/nodejs/nodejs.png","OpenGL":"https://raw.githubusercontent.com/get-icon/geticon/master/icons/opengl.svg","PHP":"https://raw.githubusercontent.com/get-icon/geticon/fc0f660daee147afb4a56c64e12bde6486b73e39/icons/php.svg","PostgreSQL":"https://raw.githubusercontent.com/get-icon/geticon/fc0f660daee147afb4a56c64e12bde6486b73e39/icons/postgresql.svg","PyPDF2":"","Python":"https://raw.githubusercontent.com/github/explore/80688e429a7d4ef2fca1e82350fe8e3517d3494d/topics/python/python.png","React":"https://raw.githubusercontent.com/get-icon/geticon/fc0f660daee147afb4a56c64e12bde6486b73e39/icons/react.svg","SQLAlchemy":"https://quintagroup.com/cms/python/images/sqlalchemy-logo.png/@@images/image.png","Sklearn":"https://upload.wikimedia.org/wikipedia/commons/0/05/Scikit_learn_logo_small.svg","Telegram":"https://raw.githubusercontent.com/get-icon/geticon/fc0f660daee147afb4a56c64e12bde6486b73e39/icons/telegram.svg","Tweepy":"https://user-images.githubusercontent.com/32036535/87276097-dd011780-c49c-11ea-980f-6b27e617faad.png","Unity":"https://raw.githubusercontent.com/get-icon/geticon/fc0f660daee147afb4a56c64e12bde6486b73e39/icons/unity.svg","Voice Recognition":"https://www.svgrepo.com/show/169861/voice-recognition.svg","bs4":"https://cdn-contents.anymindgroup.com/corporate/wp-uploads/2021/10/04131147/4.png","discordjs":"https://images.opencollective.com/discordjs/529dcce/logo/256.png","electronjs":"https://raw.githubusercontent.com/get-icon/geticon/master/icons/electron.svg","graphviz":"https://upload.wikimedia.org/wikipedia/en/4/48/GraphvizLogo.png","matplotlib":"https://matplotlib.org/2.0.0/_static/logo2.svg","mongoose":"https://camo.githubusercontent.com/7c669e872b214571ae0b5097e8d3db369225a806dc2ce9a436cde3497164310c/687474703a2f2f6d6f6e676f64622d746f6f6c732e636f6d2f696d672f6d6f6e676f6f73652e706e67","mongodb":"https://raw.githubusercontent.com/get-icon/geticon/fc0f660daee147afb4a56c64e12bde6486b73e39/icons/mongodb-icon.svg","nltk":"/nltk.png","numpy":"https://raw.githubusercontent.com/get-icon/geticon/fc0f660daee147afb4a56c64e12bde6486b73e39/icons/numpy-icon.svg","pandas":"https://raw.githubusercontent.com/get-icon/geticon/fc0f660daee147afb4a56c64e12bde6486b73e39/icons/pandas-icon.svg","pyvis":"","seaborn":"https://seaborn.pydata.org/_images/logo-mark-lightbg.svg","sqlite3":"https://raw.githubusercontent.com/get-icon/geticon/fc0f660daee147afb4a56c64e12bde6486b73e39/icons/sqlite.svg","Kubernetes":"https://raw.githubusercontent.com/get-icon/geticon/fc0f660daee147afb4a56c64e12bde6486b73e39/icons/kubernetes.svg","Nextjs":"https://raw.githubusercontent.com/get-icon/geticon/fc0f660daee147afb4a56c64e12bde6486b73e39/icons/nextjs-icon.svg","Tailwindcss":"https://raw.githubusercontent.com/get-icon/geticon/fc0f660daee147afb4a56c64e12bde6486b73e39/icons/tailwindcss-icon.svg","Socket.io":"https://raw.githubusercontent.com/get-icon/geticon/fc0f660daee147afb4a56c64e12bde6486b73e39/icons/socket.io.svg","Gunicorn":"https://raw.githubusercontent.com/get-icon/geticon/fc0f660daee147afb4a56c64e12bde6486b73e39/icons/gunicorn.svg","GKE":"https://seeklogo.com/images/G/google-compute-engine-logo-2386E22DA3-seeklogo.com.png","React-Query":"https://seeklogo.com/images/R/react-query-logo-1340EA4CE9-seeklogo.com.png","Cloudinary":"https://raw.githubusercontent.com/get-icon/geticon/fc0f660daee147afb4a56c64e12bde6486b73e39/icons/cloudinary.svg","SteamAPI":"https://raw.githubusercontent.com/get-icon/geticon/fc0f660daee147afb4a56c64e12bde6486b73e39/icons/steam.svg","Dramatiq":"https://dramatiq.io/_static/logo.png","Redis":"https://raw.githubusercontent.com/get-icon/geticon/fc0f660daee147afb4a56c64e12bde6486b73e39/icons/redis.svg","Daphne":"https://pythonfix.com/pkg/d/daphne/daphne-banner.webp","Channels":"https://user-images.githubusercontent.com/9060759/51549343-3ed85680-1e90-11e9-8082-10c0001cbd0e.jpg","Vercel":"https://raw.githubusercontent.com/get-icon/geticon/fc0f660daee147afb4a56c64e12bde6486b73e39/icons/vercel.svg","Railway":"https://railway.app/brand/logo-dark.svg","APScheduler":"https://d1csarkz8obe9u.cloudfront.net/posterpreviews/clock-design-template-a723b5c7ca687ed826f539aed91c0635_screen.jpg?ts=1634889642","Planetscale":"https://seeklogo.com/images/P/planetscale-logo-0EEA8CAEB4-seeklogo.com.png","React-Native":"https://seeklogo.com/images/R/react-native-logo-221C671C70-seeklogo.com.png","Expo":"https://raw.githubusercontent.com/get-icon/geticon/fc0f660daee147afb4a56c64e12bde6486b73e39/icons/expo.svg","Websockets":"https://raw.githubusercontent.com/get-icon/geticon/fc0f660daee147afb4a56c64e12bde6486b73e39/icons/websocket.svg","Typescript":"https://raw.githubusercontent.com/get-icon/geticon/fc0f660daee147afb4a56c64e12bde6486b73e39/icons/typescript-icon.svg","Django Rest Framework":"https://www.django-rest-framework.org/img/logo.png"}},"__N_SSG":true}