Hi 👋, I'm Sahaf, a third-year computer science student at Goldsmiths, UoL. My studies focus on artificial intelligence, machine learning, and data mining. I have an interest in digital humanities and am working on a digital history project for my final year.
Projects
French Revolution Interactive Visualisation Tool
An interactive data visualisation tool to explore the events, locations, and relationships of the French Revolution. This project is my final year project, combining historical research with technology to deliver an engaging learning experience.
Features:
Data Visualisation: Uses TimelineJS3 to create an interactive timeline that presents events of the French Revolution in a chronological and engaging format.
Custom Styling: Applies CSS and custom styles to ensure an aesthetically pleasing, pastel-themed, and accessible design, aligning with WCAG standards for inclusivity.
Backend Development: Developed using Node.js and Express to serve data and manage API endpoints, enabling integration with the frontend.
Static and Dynamic Data Handling: Uses JSON-based sample data for events and prepares for future integration with live data sources like Wikidata through SPARQL queries.
Responsive Design: Ensures compatibility across desktops, tablets, and smartphones using flexible layouts and media queries.
Interactive Features: Implements zoom functionality, clickable events, and event details pop-ups to enhance user engagement and exploration.
A music-based game featuring three unique modes: Rhythm Game, Karaoke Game, and Audio Visualisations.
Features:
Graphical User Interface (GUI): Designed using p5.js to provide an interactive gaming experience, including real-time visualizations of pitch data, lyrics display, and responsive menu options.
Real-Time Audio Processing: Utilises the p5.AudioIn library and ml5 pitch detection model to analyse microphone input and compare the user's pitch with the song's pitch in real time, while also beat detection algorithm to generate notes in the same rhythm.
Data Visualisation: Implements pitch bars, waveforms, and lyrics synchronization to provide real-time feedback on the user's performance and the song's progression.
Game Logic Design: Develops a structured gameplay loop, including start, pause, and game-over states, score calculation based on pitch accuracy, and countdown timers for unpausing.
Audio Signal Analysis: Processes audio frequency to extract dominant pitches from the song using FFT (Fast Fourier Transform).
Animation and Effects: Incorporates animated overlay effects (e.g., glitter, hearts, butterflies) and toggles visual effects like webcam backgrounds.
A web platform for sharing, discovering, and rating food posts.
Features:
Full-Stack Web Development: Built a complete application using Node.js and Express.js for the backend and MySQL for database management.
Data Management: Created a database to handle users, food posts, tags, and ratings. Used efficient SQL queries for filtering, sorting, and pagination to manage large datasets effectively.
Security Implementation: Protected user data with hashed passwords using bcrypt and session-based authentication with express-session. Prevented vulnerabilities like SQL injection and cross-site scripting by validating inputs and using prepared statements.
Integration with External APIs: Connected the application to TheMealDB API, enabling users to access related recipes.
File Handling: Optimised uploaded images with Sharp-Multer for faster loading and reduced storage requirements.
User-Centred Design: Created dashboards for users to upload, manage, and rate food posts. Added filters for tags and ratings to make content discovery straightforward and efficient.
Testing and Feedback Integration: Conducted usability testing to identify and resolve issues. Used user feedback to improve navigation, search features, and overall functionality.
Technologies: Node.js, Express.js, MySQL, EJS, Sharp-Multer, TheMealDB API
A Java-based calculator with a GUI built using Swing, performing basic and advanced arithmetic operations.
Features:
Graphical User Interface (GUI): Designed using Java Swing to provide an interactive and user-friendly calculator experience, including a display for inputs, a history panel, and responsive buttons.
Expression Evaluation: Processes mathematical expressions with operators, parentheses, and precedence rules using stacks to parse and compute results.
Data Structures: Uses stacks to manage operators during expression evaluation.
Input Validation: Ensures valid numerical input, restricts multiple decimal points in a single number, and validates the overall expression structure.
Customisable Design: Enhanced user interface elements, such as a scrollable history panel and responsive buttons, improving usability and accessibility.
A Java implementation of the classic Hangman game.
Features:
Graphical User Interface (GUI): Built using Java Swing for an interactive user experience, displaying the guessed word, remaining guesses, incorrect guesses, timer, and score.
Multithreading: A separate thread manages the countdown timer, ensuring smooth gameplay and real-time updates.
Scoring System: Tracks points for correct and incorrect guesses, displayed in real-time on the GUI.
File Handling: Reads the word list dynamically from an external wordlist.txt file for flexible word selection.
Input Validation: Ensures only valid, single-letter guesses are accepted, improving user experience.
A web application for scheduling and managing room bookings with extensive user functionality.
Features:
Full-Stack Web Application: Built a scalable application using Node.js and Express for the backend and MySQL for data management.
Data Management and File Handling: Designed and implemented a robust database on Planetscale to store and retrieve data related to rooms, users, and bookings. Integrated secure file handling functionality to process, upload, and manage images such as room photos.
Prototyping and Iteration: Followed Agile methodologies, producing iterative versions (V0, V1) based on user feedback. Integrated dynamic filter systems and real-time updates to improve user experience in later versions.
Collaboration and Teamwork: Coordinated with a diverse team using tools like GitHub for version control and task management. Regular peer reviews ensured code quality and alignment with project goals.
Performance Optimisation: Enhanced application responsiveness by minimizing file sizes, using efficient SQL queries, and optimizing server responses. Reduced UI latency through AJAX and dynamic DOM updates.
User Testing and Feedback Integration: Conducted iterative usability tests to refine features and applied feedback to improve clarity and functionality..