CamSite

Projects

Resolve IT, an I.T. Ticketing System

Full-stack Flask ticketing app with per-action permissions · co-developer

Co-developer · Jan – Apr 2026

  • Full-stack ticketing application built with Flask, SQLAlchemy, and SQLite.
  • Implemented a granular permission layer on top of role-based access control, so rights are assigned per action rather than only by fixed role.

Compared seven ML classifiers on a symptom dataset, wrapped in a Tkinter predictor · sole developer

Sole developer · COMP 4310 Web Health Informatics · Sep – Dec 2025 Python, scikit-learn, XGBoost, LightGBM, Tkinter

  • Trained and compared seven classifiers (logistic regression, naive Bayes, decision tree, random forest, gradient boosting, XGBoost, LightGBM) on a 520-record symptom dataset with a stratified train/test split.
  • Evaluated every model on accuracy, precision, recall, and F1 with confusion matrices, ranked them per metric, and read LightGBM feature importances to find the strongest predictive symptoms.
  • Wrapped the result in a Tkinter interface where a user enters their own symptom values and gets a prediction, with matplotlib charts for class balance, F1 by model, and top features.

2D Platformer Game

Unity/C# platformer — designed the enemy AI and spawning systems · co-developer

Co-developer · COMP 4478 Game Programming · Sep – Dec 2025 Unity, C#

  • Designed and programmed the enemy AI: a three-state model (stationary, patrol, attack) with variants including continuous pursuit for boss-summoned enemies and ranged pursuit that disengages when the player leaves range, used for dungeon patrols.
  • Implemented all skeleton enemies, the EnemyPatrolAndAttack script, the spawner object and script, and the final-wave timer.
  • Built the player HUD showing remaining health and special-attack charge.
  • Play-tested and fixed defects, including constraining the camera with a collider so it couldn't reveal the area outside the map, and correcting flickering and drifting torch behaviour.

Secure File Storage Web App

Browser-side encrypted file store with AES and SHA-256 implemented from scratch · sole developer

Sole developer · COMP 4476 Cryptography and Network Security · Jan – Apr 2025 React, Flask, JWT, Ubuntu, nginx

  • Built a file storage web app with client-side encryption: files are encrypted in the browser before upload, so the server only ever holds ciphertext.
  • Implemented AES from scratch in JavaScript — S-box substitution, key expansion, shift rows, mix columns, in CBC mode with padding — alongside hand-written SHA-256, HMAC, and a password-based key derivation function, rather than calling a crypto library.
  • Generated initialisation vectors with a Blum Blum Shub pseudorandom generator built from the course material.
  • Wrote a Flask backend with JWT-protected upload, download, and listing routes, storing each user's files under randomised UUID filenames with a per-user map from real name to stored name.
  • Deployed on Ubuntu behind an nginx reverse proxy serving the React frontend and Flask API over HTTPS.

Media Player & Video Trimmer

Kotlin/JavaFX MP4 player with non-destructive FFmpeg trimming · sole developer

Sole developer · COMP 4411 Programming Languages · Sep – Dec 2024 Kotlin, JavaFX, FFmpeg

  • Built a desktop MP4 player in Kotlin with a JavaFX interface: file loading, play/pause/stop, a seek slider synced to playback, elapsed/total time, and volume control with a live percentage readout.
  • Added a trim window where the user scrubs a preview to mark start and end points and queues multiple cuts before committing.
  • Implemented non-destructive editing: queued cuts are held in memory and applied only on save, invoking FFmpeg to re-encode the surviving segments and concatenate them, then clearing the temporary files.
  • Detected FFmpeg at startup and degraded gracefully so playback stayed usable without it, and managed two media-player instances so the preview and main window never contended for playback.