Hi! I'm Raphael, an MSCS student from Boston, MA. I enjoy building
interactive and fun software, whether it’s related to augmented reality,
graphics, IoT, or mobile and web apps. I'm passionate about bringing
innovative ideas to life with solutions that are scalable and
maintainable. I’m always excited to learn new technologies and
collaborate on meaningful projects. You can check out some of my
favorite work below!
GitHub
LinkedIn
A custom graphics engine built from scratch in C (no external libraries like OpenGL, Vulkan, etc.). This includes all related mathematical functions, Bresenham's line drawing algorithm, scanline and barycentric filling, graphics primitives, and more. The engine also includes a hierarchical modeling system, scene graph traversal, supports PLY model imports, and implements shading techniques like Phong, Gouraud, Gooch, and Cel shading. The model viewer on the left was created by compiling the library to WebAssembly and using a WebGL canvas for the pixel values returned from the engine. You can also check out my full graphics portfolio below with a little more of an in depth description.
This project is an object-oriented, full stack augmented reality
version of Settlers of Catan using an MVC architecture and coded
in C++. The idea came from both wanting to keep track of game
history and player stats, and also to provide a cool way to
display a live game to anyone watching. It was created using a
combination of OpenGL, OpenCV, Qt6, and SQLite.
3D game pieces get mapped onto the 2D video stream through OpenGL
and OpenCV rendering strategies depending on the object. You can
use different camera sources, whether your computer's web camera
or stream from another device. For example, I found it useful to
use a Raspberry Pi placed above the table with a simple Flask
server to stream video to the app. The code uses a variety of
design patterns and handles multithreading for video input, frame
processing, and GUI operations.
The image on the left is an example of the GUI and the 3D object
for the ore resource.
This project is simulator for a garden to eventually integrate with my smart home system (a little below). It uses C++ and OpenGL/Qt to create a real time rendering sytem with environmental condition monitoring. Lighting changes depending on the temperature, giving a cool to warm shift in tone with the same shift in temperature. This is really more of a proof of concept than a useful tool at the moment, but I'm going to add more plant types to mirror the actual garden that will be a part of my smart home system, with some added automated sprinklers based on soil moisture levels, also toggleable with a UI button. I'm planning on making the overall architecture more robust like my AR Catan project's when I add it to my smart home as well. The system also incorporates garden saving and loading, and the typical features you might expect like camera movement, plant deletion, etc. The sensors are mock sensors for now/ also have a slider to use, but once added this will eventually sync up with my sensors connected to RPi Picos and other microcontrollers.
An IoT smart home and virtual assistant using Raspberry Pi 4's,
Pico Ws, and a Discord bot coded in Python. The bot is hosted on
Heroku and communicates with the Pi's via HiveMQ and MQTT for
remote commands and real-time alerts. A Pi hosts a local Mosquitto
server for communication between all the different devices
locally. It uses various sensors (e.g. temperature, moisture,
motion) to keep an eye on environmental conditions and trigger
automated actions using Sonoff devices flashed with Tasmota. Data
is stored locally with SQLite.
One Pi also connects to the OpenAI API to create the pictured
virtual assistant that can execute commands and output speech
through audio and visual waveforms on a small display to simulate
computer interaction. Currently, I'm working on an developing MVC
based dashboard application using C++ and Qt6 for the system.
The GitHub link has a diagram of the system, and a couple example
videos.
This project repurposes an old camera into a fun way to capture memories, the idea being to use it at parties or events so guests could pass the camera around and have a way to view all of the pictures afterwards. It uses a Raspberry Pi inside, with a button glued to the camera's orignal capture button, and a Raspberry Pi camera glued in as well. The Pi runs a simple Python script, and when a picture is taken, it saves and uploads the photo to a DropBox folder, creating a fun way to take and share pictures. I also printed out a QR code with a link to the DropBox folder and taped it to the side of the camera, so that partygoers could easily acces the link.
The big dilemma with this and thinking about expanding it comes with finding a balance between keeping the original camera feel while integrating the modern touches, especially in terms of adding anything externally, which came into play when thinking about powering the device. Luckily, the camera had a section in the back with a removal piece of plastic. I was able to remove the plastic and feed a wire through to a power bank velcroed onto the bottom to make it portable, which didn't mess with the expeience too much, at least in my (somewhat biased) opinion. I think in the future, it'll probably be worth switching to a Raspberry Pi Zero W for this and using a smaller powerbank so that everything fits inside, and the integrity of the original camera is kept totally intact, but this does work well as is and tends to be a hit at parties.
This project is a real-time 3D visualization system that combines embedded systems with modern graphics programming. It uses a Qt interface with OpenGL to render a cube, controlling the orientation with an IMU. The IMU is connected to a Raspberry Pi Pico W for wireless sensor data transmission over TCP/IP. Sensor fusion algorithms (complementary, Madgwick, Kalman filters) were implemented to process the IMU data for smooth motion tracking. I'm currently working on implementing the main application on a Pi 4b as well.
GreenThumbs is full-stack mobile application for gardeners with a Firebase Realtime Database. It includes a drag and drop garden planning UI, social media aspect with a friends system, profile pages, and messaging system, weather updates (using National Weather Service API) and plant recommendations based on location, and plant progress tracking. My personal contributions included the garden UI, social media side, and some work on the main dashboard. It was coded using Java and Android Studio.
A lightweight
npm package
for displaying 3D models using Three.js. This is meant for people
without a coding background to quickly add some models to their
websites. For example, someone with a 3D modeling portfolio or
looking to add some visual flair to their landing page. It can
easily be embedded like on the left which uses the below code.
Click and drag on the model to move it around.
<div class="project-demo"
id="my-model-viewer">
<script
src="https://unpkg.com/simple-model-viewer@1.0.4/dist/browser/model-viewer.browser.umd.js"></script>
<script>
const viewer = new ModelViewer({
containerId: "my-model-viewer",
modelsDirectory: "/glb_models/",
models: ["sheep.glb", "chalice.glb"],
showGui: true,
backgroundColor: 0xffffff,
width: 400,
height: 400,
});
</script>
</div>
A personal dashboard with a to do list, contacts, and custom-built calendar. Uses a React front end and Django Rest Framework for the backend.
I've been playing around with making some games in Unity recently, and this is a little bocce game, which was one of my first projects. It's relatively barebones right now, but it is meant for two players, red and blue, and spawns alternating balls which the playeres can toss towards the pallino using the mouse. Like in real bocce, the winner is determined by whoever gets closer to the pallino after all the turns. It's been a pretty good experience for figuring out how to dial down the physics in Unity specifially, and was pretty fun to make.
A normalized relational database for a sample university in BCNF.
A Python script generates test data, and R and SQL are used to
populate a local SQLite database. Has a variety of sample SQL
queries from simple to advanced with CTEs and window functions and
uses views, triggers, and indexes for optimization.
Example query to get the students with the top ten GPA's per major
if they have at least 3 grades reported:
WITH MinClasses AS (
SELECT student_id
FROM Enrollment
WHERE grade IS NOT NULL
GROUP BY student_id
HAVING COUNT(*) >= 3
)
SELECT
student_id AS 'StuID',
email AS 'StuEmail',
gpa AS 'StuGPA',
major_name AS 'MajorName'
FROM (
SELECT
m.major_name,
s.student_id,
s.email,
s.gpa,
DENSE_RANK() OVER (PARTITION BY sm.major_id ORDER BY s.gpa DESC) AS stuRank
FROM
Students s
JOIN StudentMajors sm ON s.student_id = sm.student_id
JOIN Majors m ON sm.major_id = m.major_id
WHERE
s.GPA IS NOT NULL
AND s.student_id IN (SELECT student_id FROM MinClasses)
) TopStudents
WHERE stuRank <= 10;
An object-oriented and MVC based command line image editor with various filters and transformations such as sharpen, blur, sepia, silver tone, and more Coded in C++ and adapted from a version developed in Java for class using Swing GUI complete with full JUnit testing.