Portfolio
Explore My Work.
A command-line rhyme assistant built in Node.js for CM1035 Algorithms and Data Structures 1 midterm (University of London). Reads a word from the terminal and returns rhyme candidates using two complementary algorithms plus a merged view. Features: ๐ Suffix matching against a plain-text word list using custom stack and queue data structures ๐ Phonetic matching against the CMU Pronouncing Dictionary (ARPAbet), comparing the last three phonemes of each entry ๐ Merge step interleaves the two sorted candidate lists into a single sorted array โ๏ธ Built on Node `readline` + `fs` only โ no external dependencies ๐ง Vowel- and consonant-final suffix extraction via tokenised character streams Going beyond the spec: - Two independent matching algorithms (orthographic + phonetic) with a merged view, not just one - Hand-rolled stack and queue implementations rather than built-in arrays - CMUdict header-skipping logic that respects the standard first-entry marker
An ITP2 Final Coursework (University of London) data visualisation gallery built in p5.js. A single menu loads real-world datasets as interactive sketches sharing a common lifecycle (setup/draw/preload/destroy) so the gallery can swap canvases cleanly. Included visualisations: ๐ Tech workforce diversity (race & gender) ๐ฐ Gender pay gap by occupation (2017) and over time (1997โ2017) ๐ก๏ธ Global surface temperature / climate change ๐ UK food attitudes ๐ฅ Nutrients over time (1974โ2016) with hover emphasis, year range, nutrient filters, rotated axis labels ๐ง Waffle chart with checkboxes, dynamic totals, and hover details ๐ Stock data viewer & simulator with mouse-wheel zoom, drag-to-pan, intervals, moving averages, multi-stock selection, animations, and pause Going beyond the spec: - Gallery abstraction that registers views so each sketch sets up and tears down cleanly - Stock viewer with a full interaction model (zoom, pan, hover, animate, pause) - Nutrients view with multi-dimensional filtering and rotated axis labels

TeamSync is an AI-powered client portal designed for development teams to automate project updates and streamline communication with stakeholders. By transforming pull request activity into engaging video updates, it eliminates manual reporting and keeps everyone aligned in real time. Features: ๐ฌ Automated Video Generation: Automatically generate polished video updates whenever a PR is merged, including AI-generated summaries, voice narration, app screenshots, and compiled visuals, along with downloadable PDF reports. ๐ค AI Assistant: Chat with a context-aware AI that understands your project, answers questions, and facilitates clearer communication between developers and reviewers. ๐ฅ Team Collaboration: Manage team roles with role-based access, add members easily, and keep everyone updated with real-time notifications. ๐ Project Management: Track progress through dashboards, browse update history, manage documents, and monitor milestones efficiently.
A full-stack event-management web app built for CM2040 Database Networks and the Web (University of London). Organisers draft and publish events with categorised tickets; attendees browse, filter, search, and book. Features: ๐ Organiser auth with bcrypt + `express-validator` and session management ๐ Draft / publish workflow for events with categories and tags ๐๏ธ Full and concession ticket types with per-type quotas ๐ Organiser dashboard: bookings summary + remaining ticket counts ๐ Attendee discoverability: category dropdown + keyword search (title or tag), combinable, filtered in SQL with bound parameters ๐๏ธ Timezone helpers, form validation, copy-link, and action confirmations in client JS Going beyond the spec: - Many-to-many tagging via `tags` + `event_tags` tables (ON DELETE CASCADE on both FKs) - Dynamic SQL builder combining `LIKE` title search, tag subqueries, and category filter in one statement - Organiser-side remaining-ticket display (not in the base spec) - Low-tech-debt structure: shared queries in `util/dbHelpers.js` and auth guards in `middleware/requireLogin.js`
OtoDecks is a dual-deck DJ desktop app built in C++ with the JUCE framework for the OOP Finals (University of London). Two independent players share a mixer, with waveforms, a playlist table, and a custom vinyl-jog UI. Features: ๐๏ธ Two independent decks sharing a `MixerAudioSource` โถ๏ธ Per-deck controls: play/pause, loop, reset, volume, speed, low-pass and high-pass `IIRFilterAudioSource` ๐ฟ Custom `VinylComponent` with rotation tied to playback position and drag-to-seek ๐ `AudioThumbnail` waveform displays with click-and-drag seeking ๐ `TableListBox` playlist with multi-format import (WAV, MP3, FLAC), save/load, per-row load-to-deck, remove, and search filtering โจ๏ธ Spacebar toggles play/pause on both decks when main window is focused ๐จ `CustomLookAndFeel` subclassing `LookAndFeel_V4` for metallic vertical sliders and circular buttons Going beyond the spec: - Full pluggable audio graph: file decode โ transport โ resampling โ low-pass โ high-pass - Custom vinyl-jog control using `std::function` callbacks to keep UI decoupled from audio - Timer-based UI sync so waveform playheads and vinyl rotation track playback without tight coupling - Dual-build setup (Projucer + CMake) with background texture and bespoke styling
A real-time computer-vision playground built in p5.js + ml5.js for the Graphics Programming Finals (University of London). The app processes live webcam input with multiple filters and an interactive pattern-lock game driven by hand-gesture detection. Features: ๐ธ Webcam capture with snapshot, 160ร120 min resolution pipeline ๐จ Image processing: grayscale + brightness boost, RGB channel split with threshold sliders, CMY conversion, YCbCr conversion for luminance/chrominance separation ๐ Live face detection with bounding boxes and per-face filters (grayscale, blur, CMY, pixelation) via keyboard shortcuts โ Hand-gesture pattern-lock mini-game: users trace heart, ribbon, and zigzag patterns with their index finger ๐๏ธ Performance-optimised blur (full-image blur, then face extract) to avoid harsh edges Going beyond the spec: - Pattern-lock extension combining memory and gesture control โ usable as a group icebreaker - Custom YCbCr colour targeting tuned for better blue/red tone separation - Face-region-only filtering except for blur, which required a different approach to avoid harsh edges

VeCook is an enhanced cooking companion built for Kitchen CoPilot. Perfect for anyone seeking guidance from an AI that cares about your health, corrects your mistakes, and understands you. Features: ๐ฝ Personalized Meal Planning: Powered by the Google Fit API, the AI dynamically adjusts recipes and ingredient portions based on your activity level for optimal nutrition. ๐ Hands-Free Recipe Book: Navigate through cooking steps effortlessly using hand gestures โ point right ๐ to move forward and left ๐ to go back (no more touching with messy hands). ๐ค AI-Powered Assistance: Made a mistake? Just raise your hand โ and ask the AI for guidance on how to fix it in real-time. ๐ฅ Record your cooking process and share it on social media!
Squiggle is a modern web app that transforms everyday chatting into something more meaningful โ by making gift giving the heart of your conversations. Features: ๐ค AI for Recommendations: AI reads your chats and gets what you (or your friend) actually want. ๐ Wishlist Management: Add your wishlist to your profile and friends team up to gift you exactly what you've been eyeing. โก๏ธ Quick Join: Drop your budget, and we'll match you to the perfect group gift. Achievement: 2nd Place.

MaiPanic is an all-in-one, serverless, and scalable crisis management superapp designed to handle situations ranging from personal emergencies to large-scale incidents. Whether it's a heart attack or a national emergency, MaiPanic provides users with the tools and information they need in critical moments. Features: ๐ค AI-Powered Guidance: Smart assistance to guide users during emergencies with relevant actions and information. ๐ฅ Emergency Tutorials: A library of quick-access videos to help users respond effectively in critical situations. ๐ SOS System: One-swipe emergency trigger and incident reporting for immediate help. ๐ฅ Family Status Tracking: Monitor the safety status of loved ones in real time. ๐ Live Incident Map: Stay updated with real-time crisis and incident feeds around you. ๐ค Personal Profile: Store essential medical information and emergency settings for quick access. Achievement: Finalist (Top 14), CODE EXP Novice Track at BrainHack by DSTA.