Projects
I have worked on quite a lot of small random projects but here are a few of the more notable, interesting, and complete personal projects I have worked on.
Very approximately ordered with the newest first:
-
This WebsiteThe website you are viewing right now!
This Website
Why?
This website's main reason for existing is that I felt like making a website. It also serves as a good place to talk about and share my thoughts as well as to showcase what I can do to any potential future employers.
SSI and Zola
I originally used SSI (Server Side Includes) to make reusable components that could be shared between pages such as the navigation bar, but eventually decided to switch to using the static site generator Zola and its excellent templating engine, Tera.
For more information on this, see this blog post.
The source code for this website can be found here.
-
Custom Keyboard V2The second version of my fully custom keyboard.
Custom Keyboard V2
Like the first version of this project, this keyboard is a semi split design and supports n-key rollover. Unlike the first design however, this keyboard has an RGB LED under every key as well as an OLED display.
Hardware
The design process for this keyboard was very similar to the first one. I designed the PCB using KiCad and then got it printed using JLCPCB.
The LEDs are the
WS2812C-2020
model. These are daisy-chained together for easy control via QMK's inbuilt driver.Software
I used QMK to write this keyboard's firmware (just like in V1).
I made use of QMK's Quantum Painter to control and render to the small OLED display. I designed the UI for the display myself. On it you can see your current typing speed, num/caps/scroll lock indicators, the current hue, saturation, and brightness values for the LEDs, as well as a few other miscellaneous pieces of information.
See also, the first version of this project and the GitHub repository for this project.
-
Space Gravity GameA short game about a small robot and its efforts to repair a derelict space ship.
Space Gravity Game
This is a simple 2D platformer game I originally made as part of a college assignment. It is written in Python, uses Pygame for graphics, and Pymunk for physics.
The game currently contains a small selection of levels for you to play through, and one NPC (The Autopilot) for you to meet.
Story
You play as a small maintenance robot on a derelict spaceship. As a maintenance robot, it is your duty to keep the ship moving and on track towards its eventual destination.
You can find this game's source code here.
-
Custom Keyboard V1A fully custom keyboard, designed and built by me.
Custom Keyboard V1
This keyboard is a semi split design (both halves on the same PCB but with some distance between them). It supports n-key rollover but other than that does not have any fancy features like RGB lighting.
Hardware
For this project, I designed a custom circuit board using KiCad that I then got printed using JLCPCB.
I used the Raspberry Pi Pico 1 for the keyboard's microcontroller.
Software
I briefly experimented with writing the firmware by hand in C, but I greatly underestimated the difficulty of this task and ultimately decided that the time required to learn would be too long for this project. Because of this, I decided to use QMK to simplify the process and take care of the direct hardware communication, allowing me to focus on things like configuring the key map the way I wanted it.
See also, the second version of this project.
-
Tile Map RendererA top-down 3D tile map renderer written in WGSL and Rust.
Tile Map Renderer
This project was originally meant to be a Dwarf Fortress clone written in Rust using the Bevy game engine.
However I never really got to making the game itself and instead got sidetracked with designing a custom tile rendering solution using a WGSL shader and custom Bevy rendering pipeline.
The final product was able to render a 3D world using 2D sprites across multiple layers similar to the graphical version of Dwarf Fortress. It also had support for sprites that changed the way they looked based on their neighbours, and a chunking system to dynamically extend the world as needed.