Solo Project
Java
JDK 25
Spring Boot
PostgreSQL
Docker
Thymeleaf
HTMX
JUnit 5
Testcontainers
Maven
A self-hosted local media management app built for NAS deployment. Framd indexes your media library, generates previews, and serves them through a lightweight web UI with a digital frame display mode that cycles through your photo library.
For a detailed write-up of the design decisions and progress, see the project blog.

- Reduced full scan time by ~84% (from 12 minutes to under 2 minutes) by building a concurrent indexing pipeline using Java virtual threads and a semaphore-bounded executor, decoupling EXIF extraction, preview generation, and DB persistence using blocking queues
- Designed a fatigue-based frame selection algorithm that groups photos by folder, weights selection by view frequency, and distributes picks across the chronological span of each folder
- Integrated a Java NIO WatchService file watcher to trigger incremental re-indexes on directory changes, avoiding full rescans
- Used content hashing to detect already-indexed files and key preview storage
Solo Project
Proxmox
TrueNAS
Ansible
Docker
IaC
Networking
Security
Firewall
- Maintain a home lab environment as a personal project, employing enterprise-grade tools and practices
- Design and operate infrastructure using Proxmox and TrueNAS
- Automate system configurations and deployments using Ansible and Docker
- Implement comprehensive backup strategies, security measures and documentation
- Practice DevOps principles through infrastructure-as-code and CI/CD pipelines
- Continuously explore and implement new technologies and security best practices
Final Year Project
Android
Kotlin
Ktor
D3.JS
MongoDB
Docker
Github Actions
CoreNLP
- Android app that analyses EPUB books using NLP to extract and visualise character relationships, appearances through chapters
- Uses CoreNLP for named entity recognition, with results stored in MongoDB and visualised through interactive D3.js charts and network graphs
- Server-offloading architecture: resource-intensive NLP processing runs in Docker containers on a backend server, keeping the mobile app lightweight

Team Project
Java
Gradle
- Developed multiplayer video game AI, Network and Logic with a team
