Projects

Things I've built.

Chess In Java

A very simple implementation of Chess using the Swing library(don't judge). Ugly but effective and includes all rules such as En passant, stalemate and check/checkmate. Perhaps one day I shall go back and make it nicer, maybe try and get a simple chess engine going. Swing framework for building graphical user interfaces. Graphics & Rendering using AWT. ![chess](https://res.cloudinary.com/do4hdvuet/image/upload/v1776608991/457895418-57a83c9d-1a3d-4d56-9ec9-8cdbcc0f1ca5_ugduxc.png)

Java. Swing

This website!

Featured

For my personal website, I wanted to create more than just a boring static webpage with a bunch of links. I wanted to create something I could interact with, and somewhere I could revisit often with room for improvements. I used Spring for the backend, while overkill and heavy for this sort of web app, it is what I am learning at the moment. ## Features - **Blog** — markdown posts with syntax highlighting, tags, read time, related posts, and comments - **Projects** — portfolio with featured projects, tech stack, repo and live links - **Admin panel** — protected dashboard to create, edit, publish, and delete posts and projects - **Dark mode** — system-aware with manual toggle - **Page transitions** — view transitions API As you can probably tell, there is a lot more going on in the backend than a lot of portfolio websites. I have my own admin panel which features safe login, allowing me to make, edit and delete post projects. Right now te admin panel looks like this: ![admin panel](https://res.cloudinary.com/do4hdvuet/image/upload/v1776610606/Screenshot_2026-04-19_155632_yvnx4s.png) This website is still in its early days and I am sure will be improved as my skills improve.

Java, Spring, PostgreSQL, Next.js, TypeScript, Tailwind, React

Task Tracker

My first dive into Spring, I made a very simple Task Tracker app with all the CRUD methods. Uses React frontend and a custom Spring Boot backend API. ## Features - Create, read, update, delete tasks - Set task status, priority, and due date - Inline task editing - Dark/light mode toggle - Full-screen responsive layout ![first](https://github.com/user-attachments/assets/4f4a4aad-238e-4a93-9b0e-2ba6cc4817e0) ![second](https://github.com/user-attachments/assets/9d69a21f-ef34-4f22-9643-6e6e709e901c)

Java, Spring, React

(WIP) - Timeline

_Timeline your life_ A personal timeline app for organising memories and life events, with support for media attachments and simple task planning. The primary motivation behind this timeline app comes from a desire to organise memories. The app’s main focus is to store, categorise, and order the things you do in your life, with attachments such as videos and pictures. The app is also capable of creating to-dos, acting as a simple planning tool as well. It is still in very early development stages, and I plan to focus on it more during the summer after exams. ![image1](https://res.cloudinary.com/do4hdvuet/image/upload/v1776776249/Screenshot_2026-04-21_135601_veokwl.png) ![image2](https://res.cloudinary.com/do4hdvuet/image/upload/v1776776249/Screenshot_2026-04-21_135711_v5dtmh.png)

Kotlin, Android Studios, Jetpack Compose

The Typing Quest

Featured

A real-time multiplayer typing race built with Node.js and WebSockets. Players join rooms via a shared code, and a persistent two way connection keeps everyone's progress in sync as they type, each keystroke triggers a server broadcast so all clients update simultaneously. The server runs a state machine across each room (lobby → countdown → racing → guess phase → results), supporting multiple concurrent gam es. The frontend is vanilla JS with no framework: typing sounds are generated procedurally using the Web Audio API, and the video background is driven by the YouTube IFrame API. ## Running locally ```bash npm install node server.js ``` Then open http://localhost:3000 In my web dev module, we touched upon websockets - descibing their use case and how they work but not applying it. I found the idea interesting and wanted to create something fun using websockets.

Node.js, Javascript, websockets