About Me

Degree: Bachelor of Mechatronics Engineering + Computer Science double degree (University of Sydney)
Interests:Coding, reading, gaming, solving Rubik's Cubes, and eating tasty food

Links

About this Website

I originally made this website to learn about React and to display my projects. However, it has since evolved into a hobby project that I continuously work on. In addition to the projects I have linked, there are many other pages, such as Media Reviews, which feature non-technical content.

I have also spent a lot of time working on the styling and added multiple interesting themes that you can select from in the top right or from the following button:

Below are a list of all my apps and pages on this website.

Apps and Pages

Ashwin's Weather Hub

A weather monitoring system setup in my backyard, providing the latest and historical data.

Media Reviews

My personal reviews of books, movies, shows, games and music I've consumed. It has full database integration, detailed filtering and statistics.

Site Analytics

Live and historical analytics of this website, including both frontend routes visited and api requests made.

Tron Arcade

An online multiplayer 2D game based on Tron.

Generative Art

A collection of generative artworks I have made with the p5.js library.

Code Editor

A online code editor that supports many languages. The Piston API is used to safely execute code.

NSW Live Car Park

A public commuter carpark tracker using the Transport Opendata API.

Clash of Clans Tracker

Uses the Clash of Clans API to view and track the stats of any player or clan.

File Tools

A tool for file conversion between png, jpg, webp and pdf. Note this tool requires a login.

Cube Timer

Rubik's Cube timer that also provides scrambles for a 3×3 cube. Hold space to activate.

Diskord

An open anonymous chatroom.

Tic Tac Toe

An online multiplayer Tic Tac Toe game

Media Reviews (OLD)

My original personal reviews and ratings of books, movies, shows and games that I have consumed.

Projects

Project thumbnail

api.ashwingur

I have developed a new backend for my website. Initially, I used the backend provided with Next.js, but I wanted to expand my backend capabilities and host my owndatabase. I have set up an Ubuntu server on DigitalOcean. The application runs in a Docker container for easy configuration when working between my local and remote environments. A Flask server has been set up, using Gunicorn for the WSGI (Web Server Gateway Interface), and a Caddy web server for HTTPS. The database is PostgreSQL with the TimescaleDB extension for optimal querying of time-series data. The server also features custom rate limiting on each endpoint with a Redis database, and authentication capabilities for accessing protected routes. Additionally, there are apps that allow for websocket connections to enable fast communication.

Tech Stack

Ubuntu
Docker
Python
Flask
PostgreSQL
Redis
Gunicorn
Caddy
Project thumbnail

Ashwin's Weather Hub

The weather station, set up in my backyard, is a Raspberry Pi Zero 2W attached to atmospheric, ambient light, and air quality sensors. It runs 24/7 and samples the sensor data every 5 minutes, which is posted to my PostgreSQL database. The sensor data is stored in a TimescaleDB hypertable, allowing for very efficient queries, even with millions of rows in the table. The longer the timescale, the larger the time bucket for averaging. This allows for long-term trends to be observed easily and efficiently. The timeseries data is displayed on the frontend using the Recharts library, which allows for full customisation of axes styles and display.

Tech Stack

Raspberry Pi
I2C Sensors
Python
TimescaleDB
PostgreSQL
Cron
React
Recharts
Tailwind CSS
Project thumbnail

Media Reviews

Previously, this site used static generation with a single JSON file to store all the review data. However, I wanted to enhance its functionality by enabling dynamic addition and editing of reviews from the frontend. To achieve this, I created a custom form that allows submissions and updates on the backend. There is a one-to-many relationship between reviews and sub-reviews (e.g., one book series can have many books). Genres have a many-to-many relationship with reviews. By utilizing a database, I can efficiently serve reviews using paginated queries and perform complex filter operations server-side. This project also marked my first time integrating proper schema validation on both the frontend and backend. Additionally, I provided a statistics page to track rating distributions, media types, and other interesting data.

Tech Stack

Python
TimescaleDB
PostgreSQL
React
Recharts
Tailwind CSS
Project thumbnail

Tron Arcade

I was inspired to make a multiplayer game once I had my own Flask server set up. I decided to go with the 2D Tron game because I played it in school and it is simple but fun. I am using Socket.IO to communicate between the client and server. It provides utility functions for creating rooms, which is useful in the context of a multiplayer game, where you only want to broadcast messages to players who have joined the room. All game state validation occurs on the server, which prevents cheating from the client side. When a game starts, the client can only send their direction input, which is validated on the server for legality. The game runs at 30 ticks per second and sends every player's location on each tick to the client. The client stores a local game grid, which allows for lightweight communication as only the latest positions are updated. The game is rendered using the p5.js React wrapper library.

Tech Stack

Socket.IO
Flask-SocketIO
p5.js
React
Tailwind CSS
Project thumbnail

Clash of Clans Tracker

Uses the Clash of Clans developer API to provide player, clan, war and league information. The style is very similar to the game style and provides the information in a familiar format. There is also a progress tracker for all players in my clan which is scraped daily with a cron job and saved to a MongoDB Atlas database. This data can be viewed in a responsive graph layout.

Tech Stack

Next.js
Tailwind CSS
TypeScript
MongoDB
Recharts
Cron Job
Project thumbnail

Cube Timer

3x3 Rubiks Cube timer that provides randomly generated scrambles with a preview. The timer mimics the offical stackmat timer design where the timer must be held down for a moment before it can start.

Tech Stack

Next.js
Tailwind CSS
TypeScript
React
Project thumbnail

Diskord

Public chatroom that anyone can join with a username. Uses Pusher websocket connections to relay messages between the clients.

Tech Stack

Next.js
Tailwind CSS
TypeScript
React
Pusher
Project thumbnail

Tic Tac Toe

Online multiplayer Tic Tac Toe game. Users are able to host a game with any chosen room name and can get someone to join that room with the room name. Responsive design for mobile and dark mode support.

Tech Stack

Next.js
Tailwind CSS
TypeScript
React
Pusher
Project thumbnail

Turret-Spinner

2D Endless Survival Game created in Unity. The pixel art assets were created in GIMP.

Tech Stack

Unity
C#
GIMP
Project thumbnail

Snake

Snake Game created in Rust using sdl2.

Tech Stack

Rust

Links

Project thumbnail

Countries of the World Quizzer

A website that helps you learn the countries of the world, capital cities and flags with many different quiz options. The UI colour scheme and layout is pretty ugly, but in my defence it was my first real react project.

Tech Stack

React
CSS
Project thumbnail

Chip-8 Emulator

Chip-8 Emulator in written Rust which uses the sdl2 library to render the screen. Follows the specifications outlined in the Chip-8 Technical Reference. It contains many roms that can be played

Tech Stack

Rust

Links