Personal Projects
Filter by technology

Arbitrage Simulation
Event-driven full-stack simulation of an arbitrage bot for betting.
- Simulates odds changes and bet execution delays to explore slippage.
- Distributed Python/FastAPI backend using Redis for inter-service communication.
- Real-time TypeScript/React frontend streaming from a webhook.
- Dockerised backend.
- Extensively tested with 43 high-signal unit tests (28 backend, 15 frontend).
PythonTypeScriptRedisReactDocker
ModulePal
Web app enabling Warwick students to review academic modules, integrating with university systems to ensure legitimacy and harnessing student data for confidential grade-based analytics.
- Used semi-officially in Warwick's Computer Science department, with over 5k reviews.
- Harnesses Warwick student data via OAuth, personalising the experience to a user's university account.
- Secure Spring (Java) backend using an in-memory ORM (SQL/Hibernate) database for caching, and a NoSQL Firebase Realtime Database for persistent storage.
- React (TypeScript) frontend using hooks and other advanced features, with Firebase Authentication managing auth state.
- Optimised with an efficient NoSQL data schema, in-memory SQL caching layer, scalable metric computations via moving averages, and paginated queries.
TypeScriptJavaSQLReactSpringFirebase
OAuth1-HMAC
Lightweight library implementing the OAuth1.0 protocol as a consumer.
- Implements the OAuth1.0 flow for a generic consumer via Google's OAuth Client Library for Java.
- Listed as a reference OAuth1.0 library on oauth.net/1, the protocol's official site.
- Includes an example implementation via Spring for Warwick University's OAuth1.0 provider.
Java
RedditCraft
Minecraft server plugin which provides a subreddit-based forum with Minecraft server integrations, with over 1.5k downloads.
- Syncs a Minecraft player's server data to a subreddit.
- Implemented a secure authentication system, realtime data management, and an abstraction layer for multiple database technologies.
JavaSQL
Riot API Crawler
Flexible League of Legends match crawler, useful for gathering large datasets of League of Legends matches in an intelligent and efficient manner.
- Uploads obtained data to a Firebase database, and computes skill-rating (Elo) metrics of players and matches.
JavaJavaScript
Live Maze Game
In-browser online multiplayer maze game.
- Uses p5.js for graphics.
- Uses a Firebase database to manage realtime data.
JavaScript
Dijkstra
C#.NET app that performs Dijkstra's Algorithm on an input network.
- Implements Dijkstra's algorithm for finding shortest paths in a weighted graph.
- Interface to input a network, and view its corresponding distance matrix.
- Computes and shows the shortest path with its weight, and a breakdown of the algorithm's working.
C#