Clayton Hickey
I'm currently studying Bioengineering and Computer Science at the University of Pennsylvania. I'm currently developing a language learning app, Tutor Engine. The app's development is being documented on my blog. Below you can find an abbreviated history of my over 11 years of programming projects.

Experiences
Projects

Started: July 13, 2022; Completed: July 13, 2022
skills: Rust, BUI (my core gui lib), BUI Basic (my gui framework), WGPU, WGSL, compute shaders, desktop software, Windows software, Linux software, Winit
Conway's Game of Life computed and rendered on the GPU using WGPU. Written with my own gui framework, BUI Basic.
Started: February 22, 2022
skills: Rust, BUI (my core gui lib), GUI framework design, cross-platform (mobile, desktop, web)
Simplified wrapper around bui for building guis without sacrificing any performance.
Won 1st place wth a perfect score at the PJAS state competition.
I'm a little bit disenchanted with this. I think there will need to be innovations (that I'm working on) in programming languges to actually achieve the ideal this project seeks.
Note: Latest update is not pushed
Started: August 13, 2021
skills: Rust, WGPU, WGSL, render shaders, cross-platform (mobile, desktop, web)
A performant WGPU (currently - plan to support multiple backends) GUI rendering library.
Note: Latest update is not pushed.

Started: November 12, 2021; Completed: November 28, 2021
skills: Rust, microcontrollers, Raspberry Pi, dynamic parsing
A rhythm game for Raspberry Pi - specifically the Raspberry Pi 3B+. Imports 4k osu!mania maps (no hold notes). Single player (2 player may be added). I completed this project for a Raspberry Pi 3. This game is meant to be played with wheeled robots hitting the notes and sacrifices were made for that. However, it can be easily modified to fit one's requirements. The game dynamically reads and parses osu!mania (a popular and now open source rhythm game for desktop operating systems) set/map files that the user can choose from to play on startup.
Started: November 15, 2023; Completed: November 16, 2023
skills: websites, JavaScript, HTML, CSS, web hosting, Linode, Nginx, DNS, Cloudflare, Nix, static sites, Web Components
A portfolio website (this website) created in raw HTML, CSS, and JS using web components
Started: July 5, 2021; Completed: July 5, 2021
skills: websites, Rust, Maud, static sites, HTML, CSS, web hosting, Linode, Nginx, DNS, Cloudflare, Nix
The old version of this site was generated statically with Rust and the Maud templating engine. Deployed with Nix.

Completed: February 1, 2019
skills: websites, web apps, algorithms, OCR, JavaScript, p5.js, HTML, CSS
A tool to solve word searching using OCR which allows users to upload pictures of word searches so they can solve them quickly. Developed because I am very bad at word searches.
skills: Rust, Rocket.rs, fullstack web, DNS, Cloudflare, web hosting, Linode, Linux, Ubuntu, Nginx, server-side rendering, web templating, Maud, Google SEO, Bing SEO, dynamic sitemap, HTML, CSS, websites
My personal website to show off projects. Has gone through many rewrites. The current version is made with Rust using the backend framework, Rocket, and the compile-time templating engine, Maud. The website is hosted on Linode and put behind a Cloudflare proxy to protect from the surprisingly common DDOS attacks. It's also behind a reverse proxy, nginx, to allow for other sites to be hosted on the same Ubuntu Linode server Gets 100% on Google Lighthouse. Previous version used NodeJS, expressJS, and a custom web framework/templator.

Started: April 7, 2019; Completed: April 7, 2019
skills: Unity Engine, C#, AI, ML, custom ML, desktop software, Windows software, Linux software, Mac software, web apps
I created a custom neural net/machine learning procedure to train a neural net to drive through a track. It's inefficient but it works. I made a video describing how I developed it and how it works.

Started: November 28, 2021; Completed: November 28, 2021
skills: Rust, WGPU, WGSL, render shaders, Winit, BUI (my core gui lib), Constrainer (now "archived indefinitely" tool for creating CAD-like GUI), desktop software, Windows software, Linux software, audio visualization, async software, async in Rust
I adapted a JavaScript/p5.js tutorial by ExecuteBig which itself was an adaptation from a HackClub tutorial to use Rust and my own GUI libraries/tools which are fully GPU accelerated.
Usage: place a sound file named "input.mp3" next to the downloaded executable/binary file and run the executable or specifify the location of the file as the first argument when executing from a terminal

Completed: January 21, 2020
skills: JavaScript, HTML, CSS, p5.js, p5.sound, web apps, software audio playback, Node.js, Websockets, socket.io, real-time multiplayer, multiplayer on the web, multiplayer client prediction and rollback, multiplayer matchmaking
A real-time multiplayer pong clone made for a Repl.it competition. Instead of just playing to a score, winning a point reveals information about the other player (that they submit) so that they can get to know each other a bit. Physics calculations are done server-side to prevent cheating. Optional singleplayer is available.

Completed: July 22, 2020
skills: OpenSCAD, Arduino, C++, microcontrollers, peripheral dev, CAD, FreeCAD, FDM 3D Printing, Debouncing, Soldering
An extremely cheap ($10) 2 key keyboard for playing Osu!, a rhythm game, with an Arduino Pro Micro base. Case designed by me in FreeCAD, keycaps designed by rsheldiii and customized with OpenSCAD, all 3D printed on my MP Select Mini V2 in PLA. Code was developed by me using Arduino's pre-built tools and C++.

Completed: June 4, 2019
skills: web apps, JavaScript, HTML, p5.js
Created a web app with p5.js to make visually translating between cryptic "fonts" easier. Made for the Game Theory ARG.

Completed: August 20, 2018
skills: C, low-level/embedded software, Pebble UI
A timer for keeping track of cross country or track running intervals and other repeating timer needs. Also functions as a stopwatch. Uses the native Pebble SDK.

Started: July 22, 2022
skills: WGPU, Rust, CLI
Makes images from images using the GPU so it's much faster. Will update so that it also works in the web and desktop without CLI.

Completed: May 26, 2018
skills: JavaScript, p5.js, HTML, CSS, web apps
I made a program that takes a bunch of images and forms them into another image by color matching.
Completed: October 9, 2019
skills: JavaScript, Node.js, ExpressJS, HTML, CSS, API, web apps
Allows a single player to control multiple Kahoot "users" from an entirely separate website. Also allows keyboard controls without the use of external hotkey software so that one can answer faster on a Chromebook.
Does not work for now due to changes in Kahoot's API

Started: August 12, 2020; Completed: August 30, 2020
skills: reverse engineering APIs, JavaScript, HTML, REST API, browser extensions, browser extension publishing
A browser extension to allow users of Duolingo to give multiple lingots at the same time to users for their contributions to the forums or helping them understand a new topic.
Note: Lingots no longer exist so the extension no longer works..
Started: March 30, 2018; Completed: April 3, 2018
skills: Python, FFmpeg, desktop software, Windows software, Linux software, Mac software, API, YouTube API
Gets royalty free music from creators and automatically gives them credit to play during live streams through integration with OBS
Open Source Contributions

Started: January 9, 2022; Completed: January 9, 2022
skills: C++, firmware development, FreeRTOS software, LittleVGL
I purchased a new PineTime watch which uses the Infinitime firmware. I had previously used my own app (PebbleXCTimer) on my old Pebble Time for this function but it's not portable and the Infinitime firmware does not have the function built in or sideloading. So, I added the functionality to the timer app already built in.
Note: PR is unmerged but code is functional. They said they want it to be put into a separate app but I haven't gotten to it yet.
Started: May 28, 2020; Completed: May 29, 2020
skills: Android Native, Android layouts/views, Java, REST API, mobile apps
Comments on the LBRY website were already present but they were not available on the Android app. I like to read comments so I decided I should add them to the Android app so I analyzed how their website (ReactJS) was able to get comments from the LBRY REST backend server and adapted a similar technique to make comments available on the Android app.
Note: I only included the first page of comments in my PR because I didn't see a way with their API to ensure that the comments were kept in sync (if a comment was added or removed before a user would scroll, comments may be missing or duplicated on the user's screen) without fetching all the pages at once (defeating the purpose of pagination of saving memory and bandwidth). I thought they were going to add something to their API or something but after my PR, they just went with the latter solution and fetched all the pages at once.
Started: October 2, 2020; Completed: October 2, 2020
skills: Android Native, Android layouts/views, Java, REST API, mobile apps
Unpublishing and deleting videos are separate actions on the LBRY platform. However, the LBRY Android app did not make this distinction and performed both actions. So, I added another button and fixed some UI logic around it.
Abandoned Projects
Started: July 20, 2021
skills: VR app development, OpenXR, Godot, FFI, Desktop Games, Windows Games, TCP Sockets, real-time multiplayer, async software, desktop software, Windows software, Linux software
A micro voxel-world VR game. Never finished but it was a good exercise in making VR games and using Rust/FFI in game engines for optimal performance. Likely applicable to other engines like Unity and Unreal. This game would probably require a custom rendering pipeline to make performant at all so if this were to be fully developed, a custom engine would be used.
Tidbits
Desktop: custom
OS: Windows 10
CPU: i7-6700
GPU: RTX 2060
RAM: 32GB
Monitors: 1 to 1.5 (average 1.25)
Laptop: Framework 13
OS: NixOS
WM: Sway
CPU: 12 Gen Intel i5-1240P0
RAM: 64GB
Programming Environment
IDE: NeoVim
Terminal: Alacritty
Shell: Bash
Release channel preference: LTS
Personal Server
Host: Linode
RAM: 2GB
CPU: 1 core Xeon E5-2697
OS: NixOS
Proxy: Nginx
Server: Nextcloud
<3 Software Stack
Rust
<3 Web Stack
Backend: Rust w/ Actix
Client: static HTML/CSS/JS generated from OCaml
Database: Postgres
Sports
Ex-Cross Country/Track
Tennis
Cycling