D

Portfolio

Explore My Work.

poetry-assistant-cli-ads1-midterm-thumbnail

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

Poetry Assistant CLI (ADS1 Midterm)

2026 ยท 4 weeks

Node.jsJavaScriptData Structures
Details
Data Visualisation Gallery (ITP2 Final)

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

Data Visualisation Gallery (ITP2 Final)

2026 ยท 4 weeks

p5.jsJavaScriptHTML5
Details
teamsync

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.

TeamSync - AI-Powered Client Portal with Automation

2026 ยท 24 hours

Next.js 16Supabase (PostgreSQL, Auth, Storage)OpenAI GPT-4o
Details
ventevent-event-management-app-dnw-thumbnail

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`

ventEvent โ€” Event Management App (DNW)

2025 ยท 6 weeks

JavaScriptNode.jsExpress
Details
otodecks-dual-deck-dj-application-oop-finals-thumbnail

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

OtoDecks โ€” Dual-Deck DJ Application (OOP Finals)

2025 ยท 6 weeks

C++JUCECMake
Details
webcam-game-filters-graphics-programming-finals-thumbnail

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

Webcam Game Filters (Graphics Programming Finals)

2025 ยท 4 weeks

p5.jsml5.jsJavaScript
Details
vecook thumbnail

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!

VeCook - AI Cooking Assistant

2025 ยท 24 hours

HTMLCSSJavaScript
Details
SQUIGGLE thumbnail

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.

SQUIGGLE - Gift Giving App

2025 ยท 24 hours

React + ViteTailwindCSSFlask
Details
1

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.

MaiPanic - Crisis Management App

2025 ยท 1 month

ExpoReact NativeNativeWind
Details