Skip to main content

Projects

Framd

Active
2026 - Present
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

Self-Hosting & Home Lab

Active
2020 - Present
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
Holmes

Holmes

Completed
Aug 2021 - Mar 2022
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
    Graph
Quacker Royale

Quacker Royale

Completed
Jan 2019 - Mar 2019
Team Project
Java Gradle
  • Developed multiplayer video game AI, Network and Logic with a team