-
----
-
Passionate about combining my skills in design, software, and electronics to create cool robots that do cool things.
-{: .text-center}
----
-
Quick Links
-{: .text-left}
-[Browse all projects](/projects/){: .btn .btn--warning .btn--x-large}
-[Download my resume](/resume/){: .btn .btn--primary .btn--x-large}
-[View my GitHub profile](https://github.com/akhaled247){: .btn .btn--purple .btn--x-large}
-{: .text-center}
----
Background
-I am Abdullah Khaled ([akhaled247](https://github.com/akhaled247)), currently a junior at Wakeland High School in Frisco, TX, and have been working with robots since I was in kindergarten when I participated in a local LEGO BattleBots using EV3s. While I don't play with LEGOs as much as I used to (though I still find myself drawn to them at times), I now indulge in big LEGOs—actual robots made using real-world manufacturing and assembly techniques.
-Through my background in engineering both through academic courses and extracurricular activites, I have developed my skills in design, software, and electronics to become a (hopefully) well-rounded student. For more information about me, see my [about me](/about/) or my [resume](/resume/)!
-
----
+My name is Abdullah Khaled ([akhaled247](https://github.com/akhaled247)), and I am an aspiring robotics engineer in the Dallas area. I have been working with robots since I was in kindergarten when I participated in a local LEGO BattleBots using EV3s. While I don't play with LEGOs as much as I used to (though I still find myself drawn to them at times), I now indulge in big LEGOs: actual robots made using real-world manufacturing and assembly techniques!
+Through my background in engineering both through academic courses and extracurricular activites, I have developed my skills in design, software, and electronics to become a (hopefully) well-rounded student. For more information about me, see my [about me](/about/) or my featured projects below!
Featured Projects
-{% include feature_row id="feature_row_projects"%}
+
+

+
+
BU RISE: Benchmarking Reinforcement Learning Algorithms with Search and Rescue Tasks
+
+ As part of the Boston University Research in Science and Engineering program, I was mentored by Dr. Wenchao Li and Zijian Guo. Specification-guided (spec-guided) reinforcement learning (RL) attempts to improve the performance of traditional RL algorithms in long-horizon tasks, or tasks that require goals to be met in a certain order. Search and rescue (SAR) is one such task, as agents often must complete rescues in a specified order (e.g. based on risk level). In this work, we propose an extension to existing spec-guided RL benchmarks that includes a series of long-horizon SAR tasks compatible with spec-guided and traditional RL methods. We trained unconstrained, constrained, and spec-guided RL models in our multi-agent environments. Empirical results find that spec-guided RL model outperforms the unconstrained and constrained traditional models in the SAR environments!
+
Read More
+
+
+
+
+

+
+
FIRST Robotics Competition: 2026 Season
+
+ The 2026 Season of FRC, REBUILT, consisted of three robots on one alliance scoring FUEL into a HUB during their respective shifts. During this season, my team had (in my opinion) the most impressive year in our history, ending as the Winner of both district events we competed in, Impact Award Winner of our second district event, Winner of the Texas State Championship, Semi-Finalist of World Championship Newton Division playoffs, and Division Engineering Inspiration Award winner! As Technical Advisor, I oversaw our software development on the robot. I guided other software members through creating and refining our subsystems while developing more complex functions including pose estimation, auto-align, and autonomous routines. By the end of the season, we (statistically) reached 19th in the world rankings and 4th most improved team since last year!
+
Read More
+
+
+
+
+

+
+
OralVision: Federated Machine Learning Intraoral Screening System
+
+ Oral cavity cancers are highly treatable when caught early, but almost 70% of cases are diagnosed too late due to clinical uncertainty and a lack of accessible screening tools, leading to over 170,000 deaths annually. OralVision is an intraoral, deep-learning-based diagnostic device designed to change this unfortunate reality. By integrating noninvasive imaging with advanced artificial intelligence, OralVision could provide physicians with highly accurate diagnostic insights, allowing for earlier clinical referrals and therapeutic intervention. Moreover, with its use of inexpensive yet powerful components, we can mass produce and distribute OralVision at a much lower marginal cost than existing solutions, contributing to improved 5-year survival rates, especially in marginalized low-income communities.
+
Read More
+
+
+
+
+

+
+
Mantik: A FIRST Robotics-Centric Java Programming Curriculum
+
+ After completing the 2025 REEFSCAPE season as the only programmer on my team, I wanted to make a resource to institutionalize the knowledge I gained during my time in FRC and help build a deeper bench of programmers to prevent burnout in future seasons. Therefore, I created Mantik, a website that trains students in FIRST® Robotics programming concepts ranging from basic motor to advanced command-based libraries and control theory. By combining the documentation of a variety of sources, from the official WPILib documentation to each vendor's specific APIs, I was able to create accurate, concise tutorials for these complex concepts, which I published to my team as well as others. In addition, I created a series of video tutorials aimed at guiding students through these difficult concepts.
+
Read More
+
+
diff --git a/_pages/personal/mantik.md b/_pages/personal/mantik.md
index 8a787d4..b4be80b 100644
--- a/_pages/personal/mantik.md
+++ b/_pages/personal/mantik.md
@@ -1,11 +1,42 @@
---
title: "Mantik - FIRST Robotics Programming Curriculum"
-description: "Mantik by Abdullah Khaled (akhaled247): Free video and written tutorials for FIRST Robotics programming—WPILib, command-based programming, PID, and motion profiling."
-permalink: /personal/mantik/
+description: "Mantik by Abdullah Khaled (akhaled247): Free video and written tutorials for FIRST Robotics programming: WPILib, command-based programming, PID, and motion profiling."
+permalink: /mantik/
author_profile: false
project_schema: true
project_type: SoftwareSourceCode
+carousels:
+ - images:
+ - image: /assets/images/personal/mantik/itkannewstitle.png
+ - image: /assets/images/personal/mantik/countriesimpacted.png
+ - image: /assets/images/personal/mantik/homepage.png
+ - image: /assets/images/personal/mantik/resourcespage.png
+ - image: /assets/images/personal/mantik/pidsimulation.png
---
-{% include video id="guKZn1h-oeI?si=jYLIrwyS2MBDTL1Y" provider="youtube" width="48vw" height="27vw" float="left" margin="10px"%}
+{% include carousel.html width="48" height="27" unit="%" duration="10" number="1" float="left"%}
+{% include video id="JXoCSk-9al4" provider="youtube" width="48%" height="27%" float="right" margin="5px"%}
+{% include videotextbreak %}
+
Motivation
+In my second season as an FRC programmer ([2025](/first/reefscape/)), I was the only active programmer on my FRC team. While htis definitely spurred me to learn at a much quicker rate than I likely would have otherwise, it also made me highly susceptible to burnout. By the end of the season, I could feel my interest in robotics waning, yet I was still driven by the original reason I fell in love with FIRST: the feeling you get when your code finally works and everything comes together.
-Mantik is a website I created that trains students in FIRST® Robotics programming concepts, ranging from basic motor to advanced command-based libraries and control theory. By combining the documentation of a variety of sources, from the official WPILib documentation to each vendor's specific APIs, I was able to leverage AI to create accurate, concise tutorials for these complex concepts, which I published to my team as well as others. In addition, I created a series of video tutorials aimed at guiding students through these difficult concepts. The video tutorials are accompanied by pages on the Mantik website ([https://mantik.netlify.app/](https://mantik.netlify.app/)) so students have options. I also created a series of videos where students can simulate real robotics mechanisms and learn how to tune PID and Motion Profiles by following my tutorials, improving their skills while introducing them to complex features simultaneously.
\ No newline at end of file
+During the offseason, we ran summer training sessions for students learning CAD and programming. I was in charge of teaching a subset of the students with prior programming experience the ins and outs of FRC programming. As a mentor, I was frustrated by the scattered knowledge base, in particular between WPILib (the main library we use) and vendor-specific libraries (i.e. for the motors, other hardware we used).
+
+Therefore, I made [Mantik](https://mantik.netlify.app/), a website that trains students in Java programming with robotics as a core tenet of its teaching curriculum. Working with my mentor, we created the Java section of the website. Once he got busy with teaching the newer students Java with the website, however, I was in charge of developing the FIRST-specific sections of the site (FTC and FRC).
+
+Since I was already teaching the students based on how I learned to program in [2024](/first/crescendo), I had a loose framework in mind when making the website. I then took that idea and expanded on it to include individual lessons the students could refer back to when programming the robot. Lessons include setting up WPILib, coding a motor, understanding the coding structure we use, control theory, and more advanced features I was testing during the offseason. I used Mantik as a supplement to my in-person training, which allowed my students to learn both on- and off-robot. I believe this allowed them to feel that learning is continuous in robotics and encouraged them to explore Mantik and its references to build a more holistic understanding of FRC programming as a whole.
+
+
Expansion: Control Theory
+Yet when I began disseminating the platform beyond Itkan's walls, I knew that many teams did not have access to a robot during the offseason, especially schools teams since their facilities closed during summer or robots were dismantled to save costs. As such, I created a series of [YouTube videos](https://www.youtube.com/playlist?list=PLXZmTommNXyVIK9u44SjCFfDdXBWcj-Cy) that walk students through learning control theory through hand-on simulations. The videos walk through set up and attempt to build an intuitive understanding of how to tune a PID system in FRC based on my own experiences and the wealth of knowledge available online.
+
+Completing these trainings, though, led me to explore other ways to decrease the knowledge barrier in terms of PID tuning. So, I added a PID Simulation to the website based on the WPILib online simulations. It allows users to choose the mechanism and control stack they're using (i.e. different vendors) and learn how to program in those frameworks via a simplified IDE. The sim also walks through the code and how to tune the mechanism's movement as we would in season.
+
+
Results
+Since Mantik's inception, we have received over 10,000 impressions between ChiefDelphi and Google's SEO! We also had our new Software Director join Mantik and contribute using his knowledge of competitive programming, which has added another dimension to Mantik. In addition, Mantik has seen two years' worth of budding programmming students stress test the website through our summer training sessions. I think the cooolest outcome of the project, though, happened this past summer at Itkan. Since I was in [Boston](/rise/) for most of the summer, I could not commit to teaching this year. Instead, the students I had taught last year became the teachers, mentoring this year's students in a strikingly similar fashion to how I did when I first made the website. Thus, I believe that Mantik's true value comes from the institutionalization of ideas that comes with making a website, allowing our team to preserve our programming knowledge even when we graduate.
+
+{% include videotextbreak %}
+
Quick Links
+[Mantik Website](https://mantik.netlify.app/){: .btn .btn--danger .btn--large}
+[Itkan News Article](https://www.itkan.one/news/mantik-4500-users){: .btn .btn--primary .btn--large}
+[ChiefDelphi Post](https://www.chiefdelphi.com/t/resource-mantik-the-15th-competing-standard/522085){: .btn .btn--warning .btn--large}
+[GitHub Source Code](https://github.com/itkan-robotics/mantik/
+){: .btn .btn--purple .btn--large}
\ No newline at end of file
diff --git a/_pages/personal/oarobotics.md b/_pages/personal/oarobotics.md
index 18191ae..a8c5da5 100644
--- a/_pages/personal/oarobotics.md
+++ b/_pages/personal/oarobotics.md
@@ -1,7 +1,7 @@
---
title: "OARobotics - Accessible Robotics Education"
description: "OARobotics by Abdullah Khaled (akhaled247): Open-source FIRST LEGO League curriculum for refugee students and learners with disabilities."
-permalink: /personal/oarobotics/
+permalink: /oarobotics/
author_profile: false
project_schema: true
diff --git a/_pages/personal/oralvision.md b/_pages/personal/oralvision.md
index 4a1c6be..692df61 100644
--- a/_pages/personal/oralvision.md
+++ b/_pages/personal/oralvision.md
@@ -1,7 +1,7 @@
---
title: "OralVision - Conrad Challenge Entry"
description: "OralVision by Abdullah Khaled (akhaled247): A low-cost oral disease detection device using federated learning and ESP32, achieving 87% accuracy in the Conrad Challenge."
-permalink: /personal/oralvision/
+permalink: /oralvision/
author_profile: false
project_schema: true
header:
@@ -19,26 +19,50 @@ media:
image_path: /assets/images/personal/oralvision/specifics.png
alt: "Design Details"
title: "Notated drawing of OralVision's handheld device."
+carousels:
+ - images:
+ - image: /assets/images/personal/oralvision/txhsic-poster-talk.jpg
+ - image: /assets/images/personal/oralvision/txhsic-poster-topdown.jpg
+ - image: /assets/images/personal/oralvision/txhsic-presentation-room.jpg
+ - image: /assets/images/personal/oralvision/specifics.png
+ - image: /assets/images/personal/oralvision/irlprototype.jpg
---
-{% include video id="lzHXL2q3vNI" provider="youtube" width="20.25vw" height="36vw" float="left" margin="10px 10px 10px 15vw"%}
+{% include carousel.html width="44" height="33" unit="%" duration="10" number="1" float="left"%}
+{% include video id="lzHXL2q3vNI" provider="youtube" width="18vw" height="32vw" margin="0px"%}
+{% include videotextbreak %}
+
The Problem
+OralVision began when we witnessed a jarring reality firsthand: while we live in a hub of economic prosperity and innovation, our neighbors in underprivileged areas like South Dallas were dying from preventable, late-stage oral cancers.
+
+We realized that for millions worldwide, the barrier to survival isn't a lack of a cure, but a lack of proper diagnostics to lead to that cure. We developed OralVision to bridge this diagnostic gap, motivated by the challenge of integrating cutting-edge technologies such as federated learning and 3D printing to dismantle systemic healthcare inequities.
-
-

-
CAD drawing of OralVision's imaging device.
-
+Seeing the struggle of low-income families in our community transformed our technical curiosity into a mission: to ensure that everybody, no matter their age, gender, socioeconomic status, or income, has an equal chance of surviving cancer. In the end, our goal isn’t just to build a device, but to democratize early detection for the millions currently left behind.
+
Architecture
+{% include figure popup=true image_path="/assets/images/personal/oralvision/architecture.png" alt="Architecture Overview of OralVision" caption="Architecture Overview of OralVision." width="100%" %}
{% include videotextbreak %}
-Oral cavity cancers are highly treatable when detected early, yet nearly 70% of cases are diagnosed too late due to clinical uncertainty and the lack of accessible screening tools. As a result, over 170,000 people die each year from a largely preventable disease. OralVision is an intraoral, deep-learning–powered diagnostic device designed to make early screening affordable, reliable, and widely accessible.
+OralVision is a potential intraoral diagnostic system made up of two main components: an imaging device and an image processing unit.
-At the core of OralVision’s imaging system is a XIAO ESP32-C6 microcontroller, chosen for its low cost and strong processing capabilities. Images are captured using a 5-megapixel OV5642 camera, which supports high-bandwidth data transfer for clear intraoral imaging. To ensure reliable operation in the moist oral environment, the camera lens is protected with an anti-fog nano-coating, and the entire system is enclosed in a sterilization wrap to prevent bacterial contamination. The device is operated using a single medical-grade push button, reducing user error and simplifying the screening process.
+The control center for OralVision’s imaging device would be a XIAO-ESP32-C6 microcontroller, a cheap, yet powerful solution to reduce production costs while maintaining the technical capabilities of larger, more expensive controllers. The image would be taken using an OV5642 5MP image sensor with SPI compatibility for high-bandwidth data transfer to the microcontroller. In addition, an anti-fog nano coating would be applied to the camera lens to prevent moisture in the mouth from harming the internal components. To minimize user error, the entire system would use a single medical-grade momentary push button to control image streaming and capturing.
-OralVision is designed for use in low-resource settings. Power is regulated through a 5V voltage regulator that supports multiple input methods, including USB-C, AA batteries, and solar power. Rechargeable nickel-metal hydride batteries are included to improve safety during transportation. The housing uses a snap-fit design, allowing easy access for battery replacement and software updates.
+The power would be regulated using a 5V voltage regulator that accepts multiple power sources, including USB-C (with a port for easy charging access), AA batteries, and solar power (for extremely low-income areas with minimal electrical infrastructure). The device would also ship with rechargeable nickel-metal hydride batteries to prevent thermal runaway during transportation.
-{% include gallery id="media" caption="Various media related to the development of OralVision's imaging device." %}
+The entire imaging system would ultimately be encased in a clinical sterilization wrap to prevent bacteria and microbes from entering the device, with the prototype’s housing being held together using a snap-fit mechanism for easy access to the electronics for battery replacements and software updates.
-Captured images are transmitted wirelessly to the machine-learning interface using Wi-Fi, while SPI communication enables fast, low-latency image transfer within the device. Images are processed by a federated learning model, which generates diagnostic results displayed on a Raspberry Pi–based human-machine interface. Each device contributes to improving the global model by updating neural parameters locally, allowing users to periodically download improved versions without sharing sensitive patient data.
+For communication protocols between the imaging device and the machine learning interface, we plan to use SPI and Wi-Fi (see Figure 3). We chose SPI over UART and I2C because of its ability to transmit high-resolution intraoral images continuously with minimal latency.
-In testing, OralVision significantly outperformed existing market solutions. Our model achieved an overall accuracy of 87.15%, with a ROC-AUC score of 0.9417 and an F1 score of 0.8655. By comparison, VELscope, a widely used competing technology, has demonstrated accuracy rates near 53% in experimental trials.
-{% include figure popup=true image_path="/assets/images/personal/oralvision/architecture.png" alt="Architecture Overview of OralVision" caption="Architecture Overview of OralVision." width="100%" %}
+The device transfers images to our ML interface wirelessly via Wi-Fi 5, where our decentralized federated learning model processes the images through computer vision and transmits diagnostic results and Bayesian inferences to the screen on our Raspberry Pi 5 human-machine interface (HMI). When a device processes an image, it systematically alters neural parameters to prevent overfitting and improve the accuracy of our main model, which clients will be able to download from our website periodically for software updates.
+
Evaluation
+Due to financial limitations and strict Institutional Review Board (IRB) regulations, it is currently not feasible to validate the OralVision prototype in a clinical trial with oral cavity cancer patients. However, our team was able to validate accuracy and other important reliability benchmarks for OralVision's federated neural network model through an in-silico experimental trial, finding that it outscored major competitors in many important metrics.
+
+For instance, our federated learning model was able to achieve an identification accuracy of 87.15%, a ROC-AUC Score of 0.9417, and an F1 score of 0.865. Meanwhile, VELScope, our main competitor, was only able to manage an accuracy of 53% in a separate experimental trial. Since we are one of the first companies in the intraoral cancer diagnostics market to implement AI, industry standard ROC-AUC and F1 scores aren’t publicly available, but both of the scores we found for OralVision are considered above average for a high-precision medical device.
+
+In addition, we are in the process of obtaining a patent for our device. Currently, we have transitioned from the provisional stage into the non-provisional patent.
{% include videotextbreak %}
+
Quick Links
[Website](https://oral-vision.github.io/){: .btn .btn--info .btn--large}
-[Conrad Challenge Video](https://www.youtube.com/watch?v=MfCu4gWxRUY){: .btn .btn--danger .btn--large}
\ No newline at end of file
+[YouTube Channel](http://www.youtube.com/@Oral-Vision){: .btn .btn--danger .btn--large}
+
+{% include videotextbreak %}
+
Pitch Videos
+{% include video id="MfCu4gWxRUY" provider="youtube" width="32%" height="18%" float="left" margin="5px"%}
+{% include video id="-GlsvQLBDAg" provider="youtube" width="32%" height="18%" float="left" margin="5px"%}
+{% include video id="y4hZeqwWo9g" provider="youtube" width="32%" height="18%" float="left" margin="5px"%}
\ No newline at end of file
diff --git a/_pages/personal/photolab.md b/_pages/personal/photolab.md
deleted file mode 100644
index 1215000..0000000
--- a/_pages/personal/photolab.md
+++ /dev/null
@@ -1,12 +0,0 @@
----
-title: "Photo Lab - Retro Collage Creator"
-description: "Photo Lab by Abdullah Khaled (akhaled247): A minimalist web app for retro photo collages with 12 custom filters, at aakhaled.com/photo-lab/."
-permalink: /personal/photo-lab/
-author_profile: false
-project_schema: true
-project_type: SoftwareSourceCode
----
-
-{% include figure popup=true image_path="assets/images/personal/photolabexample.jpg" alt="Photo Lab collage example with retro filters applied" caption="Example of generated collage using PhotoLab." %}
-
-
PhotoLab is a minimalist collage creator that generates a collage of photos you input. I created it simply because I like how collages look, and thought it was a cool project to share with others! If you would like to try it out, you can go to [https://aakhaled.com/photo-lab/](https://www.aakhaled.com/photo-lab/) and add your images. The website works on mobile and desktop, and has 12 filters to choose from.
\ No newline at end of file
diff --git a/_pages/personal/rise.md b/_pages/personal/rise.md
new file mode 100644
index 0000000..c9f3afe
--- /dev/null
+++ b/_pages/personal/rise.md
@@ -0,0 +1,62 @@
+---
+title: "RISE - Benchmarking Reinforcement Learning Algorithms with Search and Rescue Tasks"
+description: "Boston University electrical engineering research internship. Studied search and rescue, reinforcement learning, and specification-guided RL under Dr. Wenchao Li."
+permalink: /rise/
+author_profile: false
+project_schema: true
+project_type: SoftwareSourceCode
+carousels:
+ - images:
+ - image: /assets/images/rise/ak-symposium.jpg
+ - image: /assets/images/rise/ak-zg-symposium.jpg
+ - image: /assets/images/rise/ak-zg-jl-symposium.jpg
+ - image: /assets/images/rise/ak-zg-jl-mit.jpg
+ - images:
+ - image: /assets/images/rise/og-mockup.png
+ - image: /assets/images/rise/saec-walls.jpg
+ - image: /assets/images/rise/multigoalsar1.jpg
+ - images:
+ - image: /assets/images/rise/singlesuccess.png
+ - image: /assets/images/rise/multisuccessviolation.png
+---
+{% include carousel.html width="48" height="36" unit="%" duration="5" number="1" float="left" %}
+{% include pdf path="/assets/buriseweeklystatusreports.pdf" width="47%" height="34%" float="right" %}
+{% include videotextbreak %}
+> Specification-guided reinforcement learning (RL) is a growing field that attempts to improve the performance of traditional RL algorithms in long-horizon tasks, or tasks that require goals to be met in a certain order. Linear temporal logic (LTL) is one way to encode the specifications of these tasks, such as GenZ-LTL1. Search and rescue (SAR) is one such task, as agents often must complete rescues in a specified order (e.g. based on risk level). While there are existing benchmarks such as SpecRLBench2 that provide environments for evaluation, there currently are no environments that correlate to potential real-world applications of specification-guided RL. In this work, we propose an extension to SpecRLBench that includes a series of long-horizon SAR tasks compatible with specification-guided and traditional RL methods as well as single-agent and multi-agent environments. There are two casualty categories: surface, which are directly visible by the agent, and entrapped, which are hidden inside buildings. The tasks increase in complexity, with each level adding more obstacles (i.e. walls) and casualties. Our environment supports arbitrary task specification (i.e. the order the agents must rescue the casualties in). We trained unconstrained, constrained, and specification-guided RL (PPO3, PPO-Lagrangian4 and GenZ-LTL respectively) in our multi-agent environments. Empirical results find that specification-guided RL method outperforms the unconstrained and constrained traditional RL methods in the SAR environments with respect to episode success rates and minimizes cost violations from incorrect rescue sequences and environment border collisions.
(1) Guo, Z.; Işık, İ.; Ahmad, H. M.; Li, W. One Subgoal at a Time: Zero-Shot Generalization to Arbitrary Linear Temporal Logic Requirements in Multi-Task Reinforcement Learning. Advances in Neural Information Processing Systems 2026, 38, 77500–77529.(2) Guo, Z.; Işık, İ.; Ahmad, H. M.; Li, W. SpecRLBench: A Benchmark for Generalization in Specification-Guided Reinforcement Learning. arXiv preprint 2026.(3) Schulman, J.; Wolski, F.; Dhariwal, P.; Radford, A.; Klimov, O. Proximal Policy Optimization Algorithms. arXiv preprint 2017. (4) Ray, A.; Achiam, J.; Amodei, D. Benchmarking Safe Exploration in Deep Reinforcement Learning. arXiv preprint arXiv:1910.01708 2019
+
+At Boston University's Research In Science and Engineering (RISE) program, I was one of 2 members of the [Dependable Computing Lab](https://sites.bu.edu/depend/) under [Dr. Wenchao Li](https://www.bu.edu/eng/profile/wenchao-li-ph-d/). The lab's stated goal is to "develop *computational proof methods* (a.k.a. formal methods) and *machine learning* techniques to aid the construction of safe, reliable and secure systems." Under the direct guidance of [Zijian Guo](https://www.bu.edu/hic/profile/zijian-guo/), we proposed an extension to [SpecRLBench](https://arxiv.org/abs/2604.24729), a specification-guided reinforcement learning benchmark.
+
+The existing environments in SpecRLBench, though successful at benchmarking various specification-guided RL models, are not rooted in real-world robotics applications. Therefore, I wanted to use a scenario that reflects the long-horizon tasks (i.e. ones that have multiple subgoals in it) that SpecRL thrives on. Therefore, I chose to use search and rescue (SAR) tasks. I also chose SAR environments since I personally am incredibly invested in trying to improve autonomous robotics for use in SAR applications and because Dr. Li told me himself that he believed this would align closely with my own interests.
+
+{% include carousel.html width="36" height="36" unit="%" duration="10" number="2" float="left" %}
+
+The first problem I had to solve was the environment itself. After reading up on existing literature surrounding unmanned ground vehicles (UGVs), autonomous robotics in SAR environments, and existing benchmarks and environments for RL agents, I came up with the mock-up in the carousel on the left. The key identifying features (taken from my poster) are as follows:
+- **Agent**: What the model is controlling. The model controls the forward/backward movement and rotation of the agent.
+- **Border**: A box around the environment so the agent cannot leave the bounds. The episode terminates if an agent hits the border.
+- **Surface casualties (SC)**: Goals agent can detect with lidar or vision unless an object occludes it (e.g. other agents, buildings, walls, etc.).
+- **Entrapped casualties (EC)**: Another goal that cannot be seen by lidar or vision unless the agent enters a building and an entrapped casualty is in that building.
+- **Buildings**: An object that is globally visible by lidar and vision; i.e. the agent can always see buildings.
+- **Walls**: Objects that obstruct the agent’s vision/lidar and terminate the episode if contacted.
+
+Once all casualties are rescued (surface and entrapped), the episode ends prematurely. If the episode times out, the episode truncates. I decided not to make the environment too complex (i.e. add the human operator depicted in the mock-up) due to time constraints and difficulties faced when training the models initially. Once I had this down, I began the process of creating the environment. I started with the walls, then the buildings, then the casualties. In order to test the environment, I built of of the existing keyboard movement in Safety-Gym and adapted it to SpecRLBench's set up so I could manually control the agent. At this point, I began realizing the difficulty of the environment firsthand, and after trying to train models on the more complicated environment, I simplified it significantly. In the end, I created two sets of levels: `SingleGoalSAR` tasks only had one type of casualty (surface/entrapped) in the environment, while `MultiGoalSAR` tasks had both types.
+
+{% include carousel.html width="36" height="36" unit="%" duration="10" number="3" float="right" %}
+After I had set up all of the environments, I began testing different models: first, on the `SingleGoalSAR` tasks, I tested two types of algorithms:
+- **Unconstrained (PPO, TRPO)**: These types of RL models only try to maximize reward (i.e. casualties rescued) and do not consider costs from collisions with the border or interior walls. PPO is the successor to TRPO (both of which were created by OpenAI). I originally tested these using Stable-Baselines3, but switched over to Safe Policy Optimization after realizing that SB3 does not have constrained algorithms natively built into its library (see below).
+- **Constrained (PPO Lagrangian, TRPO Lagrangian)**: These types of models try to maximize reward and minimize cost (max-min optimization) using a penalty coefficient λ.
+
+*Note: I also tested off-policy models (SAC), but they were too slow to effectively be used in the environment and the results that came from them were inadequate, so I did not pursue increases in its effectiveness.*
+
+Once I solidified the effectiveness of these algorithms in simpler tasks, I transitioned to `MultiGoalSAR` tasks. Now that the tasks were actually long-horizon (before they were not since the agent always had the same goal, either entrapped or surface casaulties), I started to incorporated specification-guided RL in the form of GenZ-LTL, the model created by Zijian. Moreover, I chose not to include TRPO and TRPO-Lagrangian in my `MultiGoalSAR` comparison as GenZ-LTL itself is built on a modified PPO with Hamilton-Jacobi reachability constraints, so I wanted a more similar model as comparison.
+
+{% include video id="IkegtaiXWZY" provider="youtube" width="30vh" height="30vh" float="left" margin="10px"%}
+
+After evaluation, I found that GenZ-LTL significantly outperforms traditional models in both environments, though all models struggle in Level 1. GenZ-LTL also had higher successful mean episode length than PPO and, although GenZ-LTL has lower violation rate on Level 0, it had the highest violation rate on Level 1. I concluded that violation rate and mean episode success length are likely skewed for Level 1 due to highly infrequent successful episodes (especially from PPO and PPO Lagrangian).
+
+Overall, although in the end the results were somewhat disappointing at higher complexities, I am incredibly pleased with all that I learned at RISE. The incredible guidance from Dr. Li and Zijian allowed me to accomplish so much during the past six weeks, and I am excited to continue expanding upon my research and transferring my newly acqiured deep RL knowledge to other autonomous robotics frameworks. In the future, I wish that I may one day use what I've gained here to help benefit others through my engineering skillset (hopefully sooner than I think)!
+{% include videotextbreak %}
+Quick Links
+[GitHub Repository](https://github.com/akhaled247/RISE-2026){: .btn .btn--purple .btn--large}
+{% include videotextbreak %}
+Final Poster
+{% include pdf path="/assets/images/rise/KHALED_Internship_Poster.pdf" width="36%" height="48%" float="left" %}
diff --git a/_pages/personal/watchfall.md b/_pages/personal/watchfall.md
index fa920c1..689757e 100644
--- a/_pages/personal/watchfall.md
+++ b/_pages/personal/watchfall.md
@@ -1,7 +1,7 @@
---
title: "WatchFall - Samsung Solve for Tomorrow"
description: "WatchFall by Abdullah Khaled (akhaled247): An affordable fall-detection camera using TensorFlow for senior monitoring, designed for Samsung Solve for Tomorrow."
-permalink: /personal/watchfall/
+permalink: /watchfall/
author_profile: false
project_schema: true
---
diff --git a/_pages/pltw_engineering/rng.md b/_pages/pltw_engineering/rng.md
index 06a8c2a..f118629 100644
--- a/_pages/pltw_engineering/rng.md
+++ b/_pages/pltw_engineering/rng.md
@@ -9,7 +9,7 @@ After learning about sequential and combinational logic, we were challenged to m
Throughout this process, I learned a lot about the different components used in the circuit. For example, I learned how capacitors and capacitance worked, how 555 timers used resistors to vary their oscillation period, and how frequency dividers could serve as binary counters. I also gained knowledge on circuit design software (CDS) and utilized this knowledge to design the schematic in NI Multisim and make it easily followable at first glance.
-One of the most memorable parts of this project was figuring out how the counter worked with my friend, Ibrahim. At the beginning of the project, we did not know how DFFs worked—however, by painstakingly tracing the wires, we determined how the counter functioned and improved our understanding of the circuit as a whole.
+One of the most memorable parts of this project was figuring out how the counter worked with my friend, Ibrahim. At the beginning of the project, we did not know how DFFs worked. However, by painstakingly tracing the wires, we determined how the counter functioned and improved our understanding of the circuit as a whole.
{% include pdf path="/assets/images/PLTW/rng/rngreport.pdf" width="500px" height="500px"%}
diff --git a/_pages/projects.md b/_pages/projects.md
index 544e6b7..3b4cfce 100644
--- a/_pages/projects.md
+++ b/_pages/projects.md
@@ -1,62 +1,31 @@
---
title: "Engineering Projects"
-description: "Browse Abdullah Khaled (akhaled247) engineering projects—FRC robotics, FTC, competition entries, PLTW coursework, and personal software."
+description: "Browse Abdullah Khaled (akhaled247) engineering projects: FRC robotics, FTC, competition entries, PLTW coursework, and personal software."
permalink: /projects/
author_profile: false
feature_row_projects:
-
- - image_path: /assets/images/personal/oralvision/main.png
- title: "OralVision"
- excerpt: "For the Conrad Challenge, my team and I designed a low-cost oral disease detector that used federated learning to create HIPAA-compliant data sets."
- url: "/personal/oralvision/"
- btn_label: "Read More"
- btn_class: "btn--inverse"
- tags:
- - Competition
- - Electrical
-
- - image_path: /assets/images/personal/solvefortomorrow.png
+ - image_path: /assets/images/personal/watchfall/capstone-demo-video.gif
title: "WatchFall"
excerpt: "For the Samsung Solve for Tomorrow competition, my team and I designed a small, low-cost camera device to detect seniors falling and alert caretakers audially."
- url: "/personal/watchfall/"
+ url: "/watchfall/"
btn_label: "Read More"
btn_class: "btn--inverse"
tags:
- Competition
- - image_path: /assets/images/personal/photolab.png
- title: "Photo Lab"
- excerpt: "I created a website where users can create retro collages with custom filters."
- url: "/personal/photo-lab/"
- btn_label: "Read More"
- btn_class: "btn--inverse"
- tags:
- - Personal
-
- - image_path: /assets/images/personal/oarobotics/Bots_Top.png
+ - image_path: /assets/images/personal/oarobotics/maze-traversal.gif
title: "OARobotics Curriculum"
excerpt: "I designed a robotics curriculum for students with limited English proficiency."
- url: "/personal/oarobotics/"
- btn_label: "Read More"
- btn_class: "btn--inverse"
- tags:
- - Personal
- - Software
-
- - image_path: /assets/images/personal/mantik.png
- title: "Mantik"
- excerpt: "I created an extensive written and video curricula for training students in Java, FTC, and FRC programming."
- url: "/personal/mantik/"
+ url: "/oarobotics/"
btn_label: "Read More"
btn_class: "btn--inverse"
tags:
- - Personal
- - Software
+ - Robotics
- - image_path: /assets/images/first/26357_2526.jpg
+ - image_path: /assets/images/first/33791-cycle.gif
title: "DECODE - 2025-2026 FTC"
- excerpt: "The 2025-26 FTC Season, during which I competed with teams 26357 and 28391 at ITKAN of ICF."
+ excerpt: "The 2025-26 FTC Season, during which I competed with team 33791 Wolverine Robotics."
url: "/first/decode/"
btn_label: "Read More"
btn_class: "btn--inverse"
@@ -64,7 +33,7 @@ feature_row_projects:
- Robotics
- Competition
- - image_path: /assets/images/first/9128_2025.jpg
+ - image_path: /assets/images/first/9128-2025-cycle.gif
title: "REEFSCAPE - 2025 FRC"
excerpt: "The 2025 FRC Season, during which I competed with team 9128 ITKAN Robotics."
url: "/first/reefscape/"
@@ -74,23 +43,25 @@ feature_row_projects:
- Robotics
- Competition
- - image_path: /assets/images/first/21330_2425.png
+ - image_path: /assets/images/first/21330-2025-cycle.gif
title: "INTO THE DEEP - 2024-2025 FTC"
excerpt: "The 2024-25 FTC Season, during which I competed with team 21330 ITKAN of Tomorrow."
url: "/first/into-the-deep/"
btn_label: "Read More"
btn_class: "btn--inverse"
tags:
- - FIRST
+ - Robotics
+ - Competition
- - image_path: /assets/images/first/9128_2024.jpg
+ - image_path: /assets/images/first/9752-2024-cycle.gif
title: "CRESCENDO - 2024 FRC"
excerpt: "The 2024 FRC Season, during which I competed with team 9752 ITKAN Robotics Jr."
url: "/first/crescendo/"
btn_label: "Read More"
btn_class: "btn--inverse"
tags:
- - FIRST
+ - Robotics
+ - Competition
- image_path: /assets/images/PLTW/homepage/mvnand.png
title: "Majority Vote"
@@ -99,20 +70,10 @@ feature_row_projects:
btn_label: "Read More"
btn_class: "btn--inverse"
tags:
- - Coursework
- Electrical
+ - PLTW
- - image_path: /assets/images/PLTW/homepage/elevatorIso.png
- title: "Machine Control Project"
- excerpt: "I worked with my team to CAD and program a full elevator prototype using feedback control systems."
- url: "/pltw-engineering/machine-control/"
- btn_label: "Read More"
- btn_class: "btn--inverse"
- tags:
- - Coursework
- - Robotics
-
- - image_path: /assets/images/PLTW/homepage/rng.png
+ - image_path: /assets/images/PLTW/rng-demo.gif
title: "Random Number Generator"
excerpt: "I created a working number generator using capacitors, timers, and combinational logic design."
url: "/pltw-engineering/rng/"
@@ -121,8 +82,17 @@ feature_row_projects:
tags:
- PLTW
- Electrical
+
+ - image_path: /assets/images/PLTW/elevator-demo.gif
+ title: "Machine Control Project"
+ excerpt: "I worked with my team to CAD and program a full elevator prototype using feedback control systems."
+ url: "/pltw-engineering/machine-control/"
+ btn_label: "Read More"
+ btn_class: "btn--inverse"
+ tags:
+ - PLTW
- - image_path: /assets/images/PLTW/homepage/compoundMachineIso.png
+ - image_path: /assets/images/PLTW/cmdp-demo.gif
title: "Compound Machine"
excerpt: "I worked with my team to CAD a design using Onshape to elegantly meet the required mechanical advantage constraints."
url: "/pltw-engineering/compound-machine/"
@@ -131,7 +101,7 @@ feature_row_projects:
tags:
- PLTW
- - image_path: /assets/images/PLTW/homepage/motorCarIso.jpg
+ - image_path: /assets/images/PLTW/motor-car-demo.gif
alt: "image of motor car"
title: "Motor Car"
excerpt: "I worked with a partner to create a unique three-wheel solution to create a reliable motor car, while looking stylish at the same time!"
@@ -140,8 +110,9 @@ feature_row_projects:
btn_class: "btn--inverse"
tags:
- PLTW
+ - Competition
- - image_path: /assets/images/PLTW/homepage/automataKobeIso.png
+ - image_path: /assets/images/PLTW/automata-demo.gif
alt: "automata"
title: "Automata"
excerpt: "Using Fusion360, I designed an animated automata and customized it based on a Kobe Bryant theme."
diff --git a/_pages/rant.md b/_pages/rant.md
new file mode 100644
index 0000000..28dc5a6
--- /dev/null
+++ b/_pages/rant.md
@@ -0,0 +1,8 @@
+---
+title: ""
+permalink: /rant/
+author_profile: false
+---
+I started exploring the world of STEM when I went to a LEGO camp in my town, but I was first introduced to software when I attended a Scratch camp at my YMCA. I spent many years making [platformers](https://scratch.mit.edu/projects/388377869/), [AMVs](https://scratch.mit.edu/projects/467152240/), [math tools](https://scratch.mit.edu/projects/413434253/), and...[recreating flash games](https://scratch.mit.edu/projects/434726723/)?
+All of this, though, inspired me to make games more seriously, so I took some courses on video game development, where I learned C++ and Java. At the same time, a friend of mine and I were learning Python just for fun (though our code wasn't the best quality). This exposure taught me just how much more there was to coding, and I was completely hooked. But, after COVID, I stopped being as interested in video game development (obviously, in 6th grade, I'd matured), and since I was good at math, I thought I'd have fun doing engineering.
+So, I took the Engineering class at my middle school in 7th grade, and I loved the class and my teacher, Mrs. Longnecker. I was especially fascinated with the LEGO EV3's we used to complete these Mars missions on a huge table (full circle moment!). But when I wanted to continue doing engineering through robotics, my school didn't offer any more classes and finding a team was quite difficult. It wasn't until 2024 that I finally found a FIRST Robotics team that would take me in. Initially, I wanted to do CAD, but my background in software helped me fill a niche that was present in the team, so I stuck with it. I continued working on design, but I fell in love again with software, with an insatiable hunger to make sure my code worked on the robot as much as possible. That drive helped me learn so much that summer, and made me capable to lead my team's software efforts in 2025.
diff --git a/_pages/rise/devlog.md b/_pages/rise/devlog.md
deleted file mode 100644
index 7451578..0000000
--- a/_pages/rise/devlog.md
+++ /dev/null
@@ -1,169 +0,0 @@
-#rise-dcl-log
-
-## Sources
-[ROS Ubuntu Installation](https://wiki.ros.org/noetic/Installation/Ubuntu)
-[Information Slideshow](https://docs.google.com/presentation/d/1C7Mwcdt3m7QfknjxOcZXIfugGhLVEKumrAQWOlkqRtM/edit?pli=1&slide=id.p#slide=id.p)
-[tf tutorials](https://wiki.ros.org/tf/Tutorials)
-[geometry msgs wiki](https://docs.ros.org/en/noetic/api/geometry_msgs/html/index-msg.html)
-[pubsub with python](https://wiki.ros.org/ROS/Tutorials/WritingPublisherSubscriber(python))
-[frames](/_pages/rise/frames.pdf)
-[SpecRLBench](https://github.com/BU-DEPEND-Lab/SpecRLBench)
-[RISE Python Training](https://github.com/akhaled247/rise_python_training/tree/main)
-[Gymnasium Documentation](https://gymnasium.farama.org/tutorials)
-# 06.29.2026
-
-### Old command
-
-```Shell
-docker create \
- --name workspace \
- --gpus all \
- --net=host \
- -e DISPLAY=$DISPLAY \
- -v /tmp/.X11-unix:/tmp/.X11-unix \
- -v /home/akhaled/workspace:/home/akhaled/workspace \
- -w /home/akhaled/workspace \
- ubuntu:20.04 \
- tail -f /dev/null
-```
-
-### New command
-
-```
-docker run -it \
- --name=ros_noetic \
- --net=host \
- --gpus all \
- -e DISPLAY=$DISPLAY \
- -e NVIDIA_DRIVER_CAPABILITIES=all \
- -v /tmp/.X11-unix:/tmp/.X11-unix:rw \
- osrf/ros:noetic-desktop-full
-
-docker exec -it ros_noetic bash
-```
-
-
-*start from step 1.5*
-
-
-```
-apt update
-apt-get install git-core python3-wstool python3-vcstools python3-rosdep ros-noetic-control-msgs ros-noetic-joystick-drivers ros-noetic-xacro ros-noetic-tf2-ros ros-noetic-rviz ros-noetic-cv-bridge ros-noetic-actionlib ros-noetic-actionlib-msgs ros-noetic-dynamic-reconfigure ros-noetic-trajectory-msgs ros-noetic-rospy-message-converter
-
-apt install python3 python3-pip python3-venv
-
-pip install argparse
-
-mkdir ros_ws
-cd ros_ws
-mkdir src
-
-wstool init .
-
-apt install git
-cd src
-git clone https://github.com/RethinkRobotics/sawyer_robot.git
-wstool merge sawyer_robot/sawyer_robot.rosinstall
-wstool update
-source /opt/ros/noetic/setup.bash
-catkin_make
-
-apt-get install gazebo11 ros-noetic-gazebo-ros ros-noetic-gazebo-ros-control
-ros-noetic-gazebo-ros-pkgs ros-noetic-ros-control ros-noetic-control-toolbox ros-noetic-realtime-tools
-apt-get install gazebo11 ros-noetic-gazebo-ros ros-noetic-gazebo-ros-control ros-noetic-gazebo-ros-pkgs ros-noetic-ros-control ros-noetic-control-toolbox ros-noetic-realtime-tools ros-noetic-ros-controllers ros-noetic-xacro python3-wstool ros-noetic-tf-conversions ros-noetic-kdl-parser
-
-cd src
-
-git clone https://github.com/RethinkRobotics/sawyer_simulator.git -b noetic_devel
-git clone https://github.com/RethinkRobotics-opensource/sns_ik.git -b melodic-devel
-
-rm .rosinstall
-wstool init .
-wstool merge sawyer_simulator/sawyer_simulator.rosinstall
-wstool update
-
-cd ..
-source /opt/ros/noetic/setup.bash
-catkin_make
-
-cd src/sawyer_simulator/sawyer_gazebo/src
-apt install nano
-nano head_interface.cpp
-
-cd /ros_ws/src/sawyer_simulator/sawyer_gazebo/src/head_interface.cpp line 71:
- cv_ptr->image = cv::imread(img_path, cv::IMREAD_UNCHANGED);
-
- catkin_make
-
- cd ros_ws
- . devel/setup.bash
- roslaunch sawyer_sim_examples sawyer_pick_and_place_demo.launch
-```
-
-# 06.30.2026
-
-we are now trying to see the simulator in the remote desktop via nomachine
-make sure you ssh out of the device before connecting with remote desktop connection @ 10.210.22.197
-```
-pkill -u $USER -f Xorg
-```
-
-## errors
-
-Python 3 errors: `ln -s /usr/bin/python3 /usr/bin/python`
-Syntax error in `/root/ros_ws/src/sawyer_simulator/sawyer_sim_examples/scripts/ik_pick_and_place_demo.py`
-- have to write `as e` instead `of , e` (three exceptions)
-
-###issues & solutions
-- we had an issue where the interpolation for the robotic arm to come down onto the block (_servo_to_pose) was linear, which didn't work for quaternions due to unit vector math that meant that linear interpolation would make the length of the vector !=1
- - solution: we reduced the step size to 1 so that we did not have to worry about intermediate steps. since we are only working with cartesian movements, this wasn't a huge worry
-- initial block pose was incorrect
- - we found out how to find the block pose using the gazebo sim
-- the block pose was not dynamic (i.e. if the block got moved, the robot didn't know where to go)
- a. learned how rostopic works and found the topic that published information about the coordinates of the scene objects
- i. rostopic list
- b. learned how to subscribe to the topic in the CLI and found the type of the message that was being published
- i. rostopic info /gazebo/model_states >> ModelStates
- c. learned about pub/sub in python (!= CLI) and how to parse the data
- d. learned about what tf does and began to implement using CLI first
- e. then learned how to use it in code using tutorials above. also what a frame was and how to perform type manipulation (i.e. Point <==> Vector3)
- f. Had to offset the position due to unknown reasons (likely because model is somewhat inaccurate), though it might also be because of something with the simplified orientation calculations we did
-
-personal learning
-* learned more about the CLI, especially became comfortable with nano in Linux
-* understood try except finally blocks and how to handle exceptions gracefully
-* learned Python class structure (DataSubscriber)
-
-# 07.01.26
-I talked with Zijian about his project and received confirmation from Dr. Li to work with Zijian on [SpecRLBench](https://github.com/BU-DEPEND-Lab/SpecRLBench), with the following instructions:
-- try out the current SpecRLBench, getting familiar with the Gym setup
-- come up with real-world scenario-inspired examples for the multi-agent setting,
-- create the corresponding environments or modify existing environments for the examples,
-- formalize the requirements in our multi-agent spec language
-- train and evaluate agents that use vision as inputs
-
-towards these goals, I started learning the foundational skills and frameworks that SpecRLBench is using, which I am tracking in [RISE Python Training](https://github.com/akhaled247/rise_python_training/tree/main)
-as part of this training, I have learned
-- Python syntax for control systems, classes, and overall how code is structured in Python
-- Gymnasium: Basic setup, hyperparameters, Q-Learning, REINFORCE algorithm with Mudoco
-*Note: There is more to the training, but at this point, I received the email from Dr. Li regarding what I should focus on, so I pivoted to directly working on the SpecRLBench stuff*
-
-## Setting up SpecRLBench
-Unlike in the tutorial, I didn't have to run `cd specbench` since the install file was in the main folder
-I also had to run these commands
-```bash
-pip install -e .
-pip install -e specbench/envs/panda-gym
-pip install -e specbench/envs/zones/safety-gymnasium
-```
-instead of `./install.bash` because a) the script was `install.sh` and b) I would get this error:
-```bash
-(specbench) C:\GitHub\rise_project\SpecRLBench>./install.sh
- '.' is not recognized as an internal or external command,
- operable program or batch file.
-```
-TODO: Learn how to make custom environments in gymnasium
-Create custom environment
-Lit review of current search-and-rescue operation environment definitions
-
-I then started exploring more into the `safety-gymnasium` and its environments, and found the [Building Button](https://safety-gymnasium.readthedocs.io/en/latest/environments/safe_vision/building_button.html) environment, which seems to be similar to the search-and-rescue operations I am interested in. This env also incorporates vision (optional), which is something I can look into.
diff --git a/_pages/section_homepages/first.md b/_pages/section_homepages/first.md
index 49d417e..d553ec8 100644
--- a/_pages/section_homepages/first.md
+++ b/_pages/section_homepages/first.md
@@ -1,6 +1,6 @@
---
title: "FIRST Robotics Projects | FRC & FTC"
-description: "FIRST Robotics projects by Abdullah Khaled (akhaled247)—FRC Team 9128 ITKAN and FTC teams 21330, 26357, 28391. REEFSCAPE, DECODE, CRESCENDO, INTO THE DEEP."
+description: "FIRST Robotics projects by Abdullah Khaled (akhaled247): FRC Team 9128 ITKAN and FTC teams 21330, 26357, 28391. REEFSCAPE, DECODE, CRESCENDO, INTO THE DEEP."
permalink: /first/
author_profile: false
diff --git a/_pages/section_homepages/personal.md b/_pages/section_homepages/personal.md
index 89418e3..b188ad3 100644
--- a/_pages/section_homepages/personal.md
+++ b/_pages/section_homepages/personal.md
@@ -1,18 +1,11 @@
---
-title: "Personal Projects"
-description: "Personal engineering projects by Abdullah Khaled (akhaled247)—OralVision, WatchFall, Photo Lab, Mantik, and OARobotics."
-permalink: /personal/
+title: "Additional Projects"
+description: "Additional engineering projects by Abdullah Khaled (akhaled247): OralVision, WatchFall, Mantik, and OARobotics."
+permalink: /additional/
author_profile: false
#Feature Row of Engineering Projects
feature_row_projects:
- - image_path: /assets/images/personal/photolab.png
- title: "Photo Lab"
- excerpt: "I created a website where users can create retro collages with custom filters."
- url: "/personal/photo-lab/"
- btn_label: "Read More"
- btn_class: "btn--inverse"
-
- image_path: /assets/images/personal/oralvision/main.png
title: "OralVision"
excerpt: "For the Conrad Challenge, my team and I designed a low-cost oral disease detector that used federated learning to create HIPAA-compliant data sets."
diff --git a/_pages/section_homepages/pltw.md b/_pages/section_homepages/pltw.md
index d1b98d8..5f40085 100644
--- a/_pages/section_homepages/pltw.md
+++ b/_pages/section_homepages/pltw.md
@@ -1,6 +1,6 @@
---
title: "PLTW Engineering Coursework"
-description: "PLTW Engineering coursework by Abdullah Khaled (akhaled247)—circuit design, CAD, VEX robotics, and control systems."
+description: "PLTW Engineering coursework by Abdullah Khaled (akhaled247): circuit design, CAD, VEX robotics, and control systems."
permalink: /pltw-engineering/
author_profile: false
diff --git a/_sass/_design-tokens.scss b/_sass/_design-tokens.scss
index aaac6b1..88a6634 100644
--- a/_sass/_design-tokens.scss
+++ b/_sass/_design-tokens.scss
@@ -1,4 +1,4 @@
-// Resume-aligned tokens — keep in sync with Abdullah_Khaled_CV_Public.yaml design.colors
+// Resume-aligned tokens. Keep in sync with Abdullah_Khaled_CV_Public.yaml design.colors
$cv-body: #313131;
$cv-muted: #616161;
$cv-section: #04416d;
diff --git a/_sass/minimal-mistakes/_footer.scss b/_sass/minimal-mistakes/_footer.scss
index a9c48e2..3fbabb6 100644
--- a/_sass/minimal-mistakes/_footer.scss
+++ b/_sass/minimal-mistakes/_footer.scss
@@ -14,6 +14,8 @@
-webkit-animation-delay: 0.45s;
animation-delay: 0.45s;
background-color: $footer-background-color;
+ box-shadow: 0 0 0 100vmax $footer-background-color;
+ clip-path: inset(0 -100vmax);
margin-inline: auto;
max-width: 100%;
padding: 0.5em 2em;
diff --git a/_sass/minimal-mistakes/_masthead.scss b/_sass/minimal-mistakes/_masthead.scss
index 80b0ed5..a11b47c 100644
--- a/_sass/minimal-mistakes/_masthead.scss
+++ b/_sass/minimal-mistakes/_masthead.scss
@@ -3,18 +3,25 @@
========================================================================== */
.masthead {
- position: relative;
+ position: -webkit-sticky; /* For Safari compatibility */
+ position: sticky;
+ top: 0;
+ background-color: $background-color;
border-bottom: 1px solid $border-color;
-webkit-animation: $intro-transition;
animation: $intro-transition;
-webkit-animation-delay: 0.15s;
animation-delay: 0.15s;
+ transition: 0.2s ease-in-out;
z-index: 20;
+ &.is-hidden {
+ transform: translateY(-100%);
+ }
&__inner-wrap {
@include clearfix;
margin-inline: auto;
- padding: 1em;
+ padding: 0.5em;
max-width: 100%;
display: -webkit-box;
display: -ms-flexbox;
@@ -40,6 +47,7 @@
.site-logo img {
max-height: 2rem;
+ max-width: 2rem;
}
.site-title {
diff --git a/_sass/minimal-mistakes/_variables.scss b/_sass/minimal-mistakes/_variables.scss
index 25f8ecf..cbeef8f 100644
--- a/_sass/minimal-mistakes/_variables.scss
+++ b/_sass/minimal-mistakes/_variables.scss
@@ -6,7 +6,7 @@
Typography
========================================================================== */
-$doc-font-size: 16px !default;
+$doc-font-size: 12px !default;
$doc-font-size-medium: $doc-font-size * 1.125 !default;
$doc-font-size-large: $doc-font-size * 1.25 !default;
$doc-font-size-x-large: $doc-font-size * 1.375 !default;
@@ -80,11 +80,11 @@ $type-size-7: 0.6875em !default; // ~11px
$type-size-8: 0.625em !default; // ~10px
/* headline scale */
-$h-size-1: 1.563em !default; // ~25.008px
-$h-size-2: 1.25em !default; // ~20px
-$h-size-3: 1.125em !default; // ~18px
-$h-size-4: 1.0625em !default; // ~17px
-$h-size-5: 1.03125em !default; // ~16.5px
+$h-size-1: 2em !default; // ~25.008px
+$h-size-2: 1.75em !default; // ~20px
+$h-size-3: 1.5em !default; // ~18px
+$h-size-4: 1.25em !default; // ~17px
+$h-size-5: 1.0625em !default; // ~16.5px
$h-size-6: 1em !default; // ~16px
/*
diff --git a/assets/buriseweeklystatusreports.pdf b/assets/buriseweeklystatusreports.pdf
new file mode 100644
index 0000000..a82a01a
Binary files /dev/null and b/assets/buriseweeklystatusreports.pdf differ
diff --git a/assets/css/main.scss b/assets/css/main.scss
index e78e940..2dc6a54 100644
--- a/assets/css/main.scss
+++ b/assets/css/main.scss
@@ -49,9 +49,9 @@ $header-font-family: $serif;
color: $cv-section;
border-bottom: 0.5px solid $cv-section;
padding-bottom: 0.3em;
- margin-top: 1.5em;
+ margin-top: 0em;
}
-
+
a:not(.btn) {
color: $cv-link;
text-decoration: underline;
@@ -68,7 +68,7 @@ $header-font-family: $serif;
color: $cv-section;
border-bottom: 0.5px solid $cv-section;
padding-bottom: 0.3em;
- margin-top: 1.5em;
+ margin-top: 0.5em;
}
.page__title {
@@ -153,16 +153,16 @@ $header-font-family: $serif;
margin-left: -50vw;
margin-right: -50vw;
margin-top: -67px;
- background: url("/assets/images/AbdullahKhaled_Bkg_Img.jpg");
+ background: url("/assets/images/bkg-img-v2.jpg");
background-size: cover;
- background-position: top;
- height: 400px;
+ background-position: 0px -75px;
+ height: 250px;
overflow: hidden;
color: #eee;
}
.layout--home .hero {
- margin-top: 0;
+ margin-top: -1em;
}
.hero .overlay {
@@ -171,7 +171,7 @@ $header-font-family: $serif;
left: 0;
width: 100%;
height: 100%;
- background: rgba($cv-section, 0.55);
+ background: rgba($cv-accent, 0.50);
z-index: 1;
}
diff --git a/assets/images/PLTW/automata-demo.gif b/assets/images/PLTW/automata-demo.gif
new file mode 100644
index 0000000..9fdb15a
Binary files /dev/null and b/assets/images/PLTW/automata-demo.gif differ
diff --git a/assets/images/PLTW/cmdp-demo.gif b/assets/images/PLTW/cmdp-demo.gif
new file mode 100644
index 0000000..02dbd1e
Binary files /dev/null and b/assets/images/PLTW/cmdp-demo.gif differ
diff --git a/assets/images/PLTW/elevator-demo.gif b/assets/images/PLTW/elevator-demo.gif
new file mode 100644
index 0000000..a4f8509
Binary files /dev/null and b/assets/images/PLTW/elevator-demo.gif differ
diff --git a/assets/images/PLTW/motor-car-demo.gif b/assets/images/PLTW/motor-car-demo.gif
new file mode 100644
index 0000000..e9575ed
Binary files /dev/null and b/assets/images/PLTW/motor-car-demo.gif differ
diff --git a/assets/images/PLTW/rng-demo.gif b/assets/images/PLTW/rng-demo.gif
new file mode 100644
index 0000000..3603d8b
Binary files /dev/null and b/assets/images/PLTW/rng-demo.gif differ
diff --git a/assets/images/about/smootstdpic.jpg b/assets/images/about/smootstdpic.jpg
new file mode 100644
index 0000000..4c72a9c
Binary files /dev/null and b/assets/images/about/smootstdpic.jpg differ
diff --git a/assets/images/bkg-img-v2.jpg b/assets/images/bkg-img-v2.jpg
new file mode 100644
index 0000000..a16a4b1
Binary files /dev/null and b/assets/images/bkg-img-v2.jpg differ
diff --git a/assets/images/first/21330-2025-cycle.gif b/assets/images/first/21330-2025-cycle.gif
new file mode 100644
index 0000000..546c002
Binary files /dev/null and b/assets/images/first/21330-2025-cycle.gif differ
diff --git a/assets/images/first/33791-cycle.gif b/assets/images/first/33791-cycle.gif
new file mode 100644
index 0000000..8767fd2
Binary files /dev/null and b/assets/images/first/33791-cycle.gif differ
diff --git a/assets/images/first/9128-2025-cycle.gif b/assets/images/first/9128-2025-cycle.gif
new file mode 100644
index 0000000..94a05eb
Binary files /dev/null and b/assets/images/first/9128-2025-cycle.gif differ
diff --git a/assets/images/first/9128-2026-auto-pp.png b/assets/images/first/9128-2026-auto-pp.png
new file mode 100644
index 0000000..4c07759
Binary files /dev/null and b/assets/images/first/9128-2026-auto-pp.png differ
diff --git a/assets/images/first/9128-2026-auto.gif b/assets/images/first/9128-2026-auto.gif
new file mode 100644
index 0000000..9b5b60d
Binary files /dev/null and b/assets/images/first/9128-2026-auto.gif differ
diff --git a/assets/images/first/9128-2026-autoalign.gif b/assets/images/first/9128-2026-autoalign.gif
new file mode 100644
index 0000000..4ff90f0
Binary files /dev/null and b/assets/images/first/9128-2026-autoalign.gif differ
diff --git a/assets/images/first/9128-2026-banners.png b/assets/images/first/9128-2026-banners.png
new file mode 100644
index 0000000..29076e1
Binary files /dev/null and b/assets/images/first/9128-2026-banners.png differ
diff --git a/assets/images/first/9128-2026-btb.jpg b/assets/images/first/9128-2026-btb.jpg
new file mode 100644
index 0000000..f66f94e
Binary files /dev/null and b/assets/images/first/9128-2026-btb.jpg differ
diff --git a/assets/images/first/9128-2026-ei.png b/assets/images/first/9128-2026-ei.png
new file mode 100644
index 0000000..58a3cd0
Binary files /dev/null and b/assets/images/first/9128-2026-ei.png differ
diff --git a/assets/images/first/9128-2026-farmersville.png b/assets/images/first/9128-2026-farmersville.png
new file mode 100644
index 0000000..1c266b5
Binary files /dev/null and b/assets/images/first/9128-2026-farmersville.png differ
diff --git a/assets/images/first/9128-2026-field.jpg b/assets/images/first/9128-2026-field.jpg
new file mode 100644
index 0000000..339776f
Binary files /dev/null and b/assets/images/first/9128-2026-field.jpg differ
diff --git a/assets/images/first/9128-2026-impact.jpg b/assets/images/first/9128-2026-impact.jpg
new file mode 100644
index 0000000..5eb0559
Binary files /dev/null and b/assets/images/first/9128-2026-impact.jpg differ
diff --git a/assets/images/first/9128-2026-queue.jpg b/assets/images/first/9128-2026-queue.jpg
new file mode 100644
index 0000000..4b8164d
Binary files /dev/null and b/assets/images/first/9128-2026-queue.jpg differ
diff --git a/assets/images/first/9128-2026-robot-banners.png b/assets/images/first/9128-2026-robot-banners.png
new file mode 100644
index 0000000..a661760
Binary files /dev/null and b/assets/images/first/9128-2026-robot-banners.png differ
diff --git a/assets/images/first/9128-2026-sotm.gif b/assets/images/first/9128-2026-sotm.gif
new file mode 100644
index 0000000..a19ebf9
Binary files /dev/null and b/assets/images/first/9128-2026-sotm.gif differ
diff --git a/assets/images/first/9128-2026-space-city-1.jpg b/assets/images/first/9128-2026-space-city-1.jpg
new file mode 100644
index 0000000..2662435
Binary files /dev/null and b/assets/images/first/9128-2026-space-city-1.jpg differ
diff --git a/assets/images/first/9128-2026-states.jpg b/assets/images/first/9128-2026-states.jpg
new file mode 100644
index 0000000..4267fdd
Binary files /dev/null and b/assets/images/first/9128-2026-states.jpg differ
diff --git a/assets/images/first/9752-2024-cycle.gif b/assets/images/first/9752-2024-cycle.gif
new file mode 100644
index 0000000..d6acda6
Binary files /dev/null and b/assets/images/first/9752-2024-cycle.gif differ
diff --git a/assets/images/first/frc-2026-rebuilt.jpg b/assets/images/first/frc-2026-rebuilt.jpg
new file mode 100644
index 0000000..9fab5ae
Binary files /dev/null and b/assets/images/first/frc-2026-rebuilt.jpg differ
diff --git a/assets/images/first/itkan-frc-9128-cycle-4-3-crop.gif b/assets/images/first/itkan-frc-9128-cycle-4-3-crop.gif
new file mode 100644
index 0000000..456e8cf
Binary files /dev/null and b/assets/images/first/itkan-frc-9128-cycle-4-3-crop.gif differ
diff --git a/assets/images/first/rebuilt-en-worlds.pdf b/assets/images/first/rebuilt-en-worlds.pdf
new file mode 100644
index 0000000..65df554
Binary files /dev/null and b/assets/images/first/rebuilt-en-worlds.pdf differ
diff --git a/assets/images/personal/mantik/countriesimpacted.png b/assets/images/personal/mantik/countriesimpacted.png
new file mode 100644
index 0000000..458d3a1
Binary files /dev/null and b/assets/images/personal/mantik/countriesimpacted.png differ
diff --git a/assets/images/personal/mantik/homepage.png b/assets/images/personal/mantik/homepage.png
new file mode 100644
index 0000000..c215c74
Binary files /dev/null and b/assets/images/personal/mantik/homepage.png differ
diff --git a/assets/images/personal/mantik/itkannewstitle.png b/assets/images/personal/mantik/itkannewstitle.png
new file mode 100644
index 0000000..15db5bb
Binary files /dev/null and b/assets/images/personal/mantik/itkannewstitle.png differ
diff --git a/assets/images/personal/mantik/lessonpage.png b/assets/images/personal/mantik/lessonpage.png
new file mode 100644
index 0000000..3f170a8
Binary files /dev/null and b/assets/images/personal/mantik/lessonpage.png differ
diff --git a/assets/images/personal/mantik/pid-sim.gif b/assets/images/personal/mantik/pid-sim.gif
new file mode 100644
index 0000000..16a63d1
Binary files /dev/null and b/assets/images/personal/mantik/pid-sim.gif differ
diff --git a/assets/images/personal/mantik/pidsimulation.png b/assets/images/personal/mantik/pidsimulation.png
new file mode 100644
index 0000000..9632357
Binary files /dev/null and b/assets/images/personal/mantik/pidsimulation.png differ
diff --git a/assets/images/personal/mantik/resourcespage.png b/assets/images/personal/mantik/resourcespage.png
new file mode 100644
index 0000000..7e84783
Binary files /dev/null and b/assets/images/personal/mantik/resourcespage.png differ
diff --git a/assets/images/personal/oarobotics/maze-traversal.gif b/assets/images/personal/oarobotics/maze-traversal.gif
new file mode 100644
index 0000000..11c3004
Binary files /dev/null and b/assets/images/personal/oarobotics/maze-traversal.gif differ
diff --git a/assets/images/personal/oralvision/diamondchallenge.pdf b/assets/images/personal/oralvision/diamondchallenge.pdf
new file mode 100644
index 0000000..ab23457
Binary files /dev/null and b/assets/images/personal/oralvision/diamondchallenge.pdf differ
diff --git a/assets/images/personal/oralvision/team-pic.png b/assets/images/personal/oralvision/team-pic.png
new file mode 100644
index 0000000..a0e6f52
Binary files /dev/null and b/assets/images/personal/oralvision/team-pic.png differ
diff --git a/assets/images/personal/oralvision/txhsic-poster-talk.jpg b/assets/images/personal/oralvision/txhsic-poster-talk.jpg
new file mode 100644
index 0000000..cac5f4b
Binary files /dev/null and b/assets/images/personal/oralvision/txhsic-poster-talk.jpg differ
diff --git a/assets/images/personal/oralvision/txhsic-poster-topdown.jpg b/assets/images/personal/oralvision/txhsic-poster-topdown.jpg
new file mode 100644
index 0000000..08b2b5f
Binary files /dev/null and b/assets/images/personal/oralvision/txhsic-poster-topdown.jpg differ
diff --git a/assets/images/personal/oralvision/txhsic-presentation-room.jpg b/assets/images/personal/oralvision/txhsic-presentation-room.jpg
new file mode 100644
index 0000000..81a809a
Binary files /dev/null and b/assets/images/personal/oralvision/txhsic-presentation-room.jpg differ
diff --git a/assets/images/personal/solvefortomorrow.png b/assets/images/personal/solvefortomorrow.png
deleted file mode 100644
index ebdbf6e..0000000
Binary files a/assets/images/personal/solvefortomorrow.png and /dev/null differ
diff --git a/assets/images/personal/watchfall/capstone-demo-video.gif b/assets/images/personal/watchfall/capstone-demo-video.gif
new file mode 100644
index 0000000..4667a2d
Binary files /dev/null and b/assets/images/personal/watchfall/capstone-demo-video.gif differ
diff --git a/assets/images/personal/watchfall/irl-design.png b/assets/images/personal/watchfall/irl-design.png
new file mode 100644
index 0000000..9b9756f
Binary files /dev/null and b/assets/images/personal/watchfall/irl-design.png differ
diff --git a/assets/images/rise/KHALED_Internship_Poster.pdf b/assets/images/rise/KHALED_Internship_Poster.pdf
new file mode 100644
index 0000000..1a34937
Binary files /dev/null and b/assets/images/rise/KHALED_Internship_Poster.pdf differ
diff --git a/assets/images/rise/ak-symposium.jpg b/assets/images/rise/ak-symposium.jpg
new file mode 100644
index 0000000..3bdc40b
Binary files /dev/null and b/assets/images/rise/ak-symposium.jpg differ
diff --git a/assets/images/rise/ak-zg-jl-mit.jpg b/assets/images/rise/ak-zg-jl-mit.jpg
new file mode 100644
index 0000000..ee293de
Binary files /dev/null and b/assets/images/rise/ak-zg-jl-mit.jpg differ
diff --git a/assets/images/rise/ak-zg-jl-symposium.jpg b/assets/images/rise/ak-zg-jl-symposium.jpg
new file mode 100644
index 0000000..5b7c09d
Binary files /dev/null and b/assets/images/rise/ak-zg-jl-symposium.jpg differ
diff --git a/assets/images/rise/ak-zg-symposium.jpg b/assets/images/rise/ak-zg-symposium.jpg
new file mode 100644
index 0000000..920c0fb
Binary files /dev/null and b/assets/images/rise/ak-zg-symposium.jpg differ
diff --git a/assets/images/rise/multigoalsar1.jpg b/assets/images/rise/multigoalsar1.jpg
new file mode 100644
index 0000000..2d5a305
Binary files /dev/null and b/assets/images/rise/multigoalsar1.jpg differ
diff --git a/assets/images/rise/multisuccessviolation.png b/assets/images/rise/multisuccessviolation.png
new file mode 100644
index 0000000..42c8d5d
Binary files /dev/null and b/assets/images/rise/multisuccessviolation.png differ
diff --git a/assets/images/rise/og-mockup.png b/assets/images/rise/og-mockup.png
new file mode 100644
index 0000000..470980e
Binary files /dev/null and b/assets/images/rise/og-mockup.png differ
diff --git a/assets/images/rise/saec-walls.jpg b/assets/images/rise/saec-walls.jpg
new file mode 100644
index 0000000..3ab81ca
Binary files /dev/null and b/assets/images/rise/saec-walls.jpg differ
diff --git a/assets/images/rise/singlesuccess.png b/assets/images/rise/singlesuccess.png
new file mode 100644
index 0000000..c141056
Binary files /dev/null and b/assets/images/rise/singlesuccess.png differ
diff --git a/docs/rewrite-priority-list.md b/docs/rewrite-priority-list.md
index ee912e9..810bbd6 100644
--- a/docs/rewrite-priority-list.md
+++ b/docs/rewrite-priority-list.md
@@ -42,6 +42,6 @@ Treat as the **template**, not an urgent rewrite—only minor edits or consisten
---
-**Practical order:** do **DECODE → WatchFall → Photo Lab → Majority Vote** first (visibility + gap vs REEFSCAPE + quick credibility fixes). Then batch **past robotics (INTO THE DEEP, CRESCENDO)** and **thin PLTW (machine control)** to match whatever template you settle on from REEFSCAPE/DECODE.
+**Practical order:** do **DECODE → WatchFall → Majority Vote** first (visibility + gap vs REEFSCAPE + quick credibility fixes). Then batch **past robotics (INTO THE DEEP, CRESCENDO)** and **thin PLTW (machine control)** to match whatever template you settle on from REEFSCAPE/DECODE.
If you say whether your main audience is **college apps**, **internships**, or **both**, the order can shift (e.g. OralVision and Mantik move up for certain programs).
\ No newline at end of file
diff --git a/index.html b/index.html
index 16da0ed..ff226c9 100644
--- a/index.html
+++ b/index.html
@@ -1,6 +1,6 @@
---
layout: home
author_profile: false
-# Exclude from sitemap so only _pages/index.md (permalink: /) is listed—avoids duplicate homepage URL for Googlebot
+# Exclude from sitemap so only _pages/index.md (permalink: /) is listed. Avoids duplicate homepage URL for Googlebot
sitemap: false
---