This site requires JavaScript to function.
Hello, I'm kyleplo
I'm a student programmer who makes random stuff on the Internet.
Explore my Projects
About
Projects:
Holiday Light Show 2023
The third (and perhaps last) iteration of my yearly holiday light show.
Learn More
DefenesTRAIN
A virtual reality game involving delivering packages by throwing them from a moving train.
Learn More
Discard
A Discord bot that turns funny moments and inside jokes into a card game.
Learn More
CopyWrite
A multiplayer writing game with a social deduction element.
Learn More
Holiday Light Show 2022
A significant upgrade to the previous light show, now with another song and WiFi-based music synchronization.
Learn More
Skykid Halloween Costume
My Halloween costume for 2022, based upon my character in Sky: Children of the Light.
Learn More
Candle
A custom controller for playing Sky: Children of the Light.
Learn More
Wit Send
A competitive multiplayer game about Shakespearian insults.
Learn More
Smudge
A robot that reacts to emotions.
Learn More
My Jam
A tool for generating a summary of any Spotify playlist, with short clips from each song.
Check it out
Learn More
Schedule
A simple schedule app for the Bangle.js hackable smart watch.
Learn More
Infinite Spelling Bee
A free infinite version of the New York Times Spelling Bee game.
Check it out
Learn More
Gutenreader
Online reader for eBooks from Project Gutenberg.
Learn More
Additional Projects: Holiday Light Show 2021 , Mosaic Maker , Scratch Highscore History
Holiday Light Show 2023
×
Check out the first and second iterations of this project.
They say third time's the charm, and while this iteration is far from perfect, it's getting close. I've been extremely busy lately with schoolwork and college applications, but I managed to find the time to make a few tweaks to this project improving it from last year.
The most time consuming part of this upgrade by far was the lanterns towards the middle of the display. There are twelve of them, one for each of the days of Christmas, and they light up in order during the song. Since nobody sells light strands with bulbs far enough to do that with, the whole lantern setup is custom made. Each lantern is an aluminum can with holes nailed through it (I outsourced some of this work to my family), and a hand-soldered lightbulb inside, totalling to almost 100 solder joints. It ended up looking pretty good, but maybe not worth all of the effort I put in.
I also completely rewrote the synchronization system, addressing a number of issues that caused the lights and the audio to get out of sync. The system now uses a WebSocket server to synchronize the time between the light controller and user devices. It turns out a lot of the syncing issues weren't due to network latency, instead being caused by a strange bug in Apple's audio processing engine that makes it lose track of where in an audio file it is. I came up with a workaround using the Web Audio API, and I'm now satisfied with the accuracy.
I'm not sure where this project's future lies, given that I'll be going to college next year and won't have a yard to decorate. I'd consider coming home just to set this up each holiday season or maybe showing my parents how to set it up, but either way this project will always hold a special place in my heart.
Song Credits
Deck the Halls - Jingle Punks
Sleigh Ride - US Navy Band
The Twelve Days of Christmas - Love to Sing
I Have a Little Dreidel - E's Jammy Jams
Jingle Bells - scottholmesmusic.com
We Wish You A Merry Christmas - Audionautix
DefenesTRAIN
×
This is a fun one. Over the summer of 2023 I participated in a two week program at Northeastern University about creating games in extended, or virtual reality. Throughout the program, I worked in a small group, learning about principles of professional game design while developing this game. The game is made in Unity (this was right before the pricing controversy thing) and runs on the Oculus Quest 2. The most difficult part by far was dividing up the work. We ended up each taking different aspects of the game, since we couldn't get online collaboration to work properly. I did the vast majority of the programming, while the other team members worked on the art, sound, and storyline. It was neat having a proper team for this project rather than doing all aspects of the project myself.
Perhaps more valuable than learning about game development though was the whole campus experience. I went into the program with few expectations, and I came out with a lot more for college. This was my first time living by myself for a longish period of time, and while it was nice to get some freedom for a little while, I did miss home in the end. Overall I enjoyed it and I'm hoping for a similar experience from college.
Discard
×
Discard is a Discord bot that provides an interactive card game based upon funny moments on your Discord server. I created this with a group of friends in about eight hours for a local hackathon, Beantown Bash . The bot works by letting users turn messages into cards, assigning them a random value and a card type (controversial, intellectual, wholesome, random, or humorous) by making use of AI . Users can then battle against each other using their cards, with different card types having advantages and disadvantages over other types.
We ended up doing quite well, winning in one of the hackathon's three prize categories. I was pretty happy with the project, although quite tired and bogged with homework afterwards. I don't think we will be opening the bot up for public use or maintaining it at all, mainly because our credits for the AI will run out eventually, but it was definitely a neat experience competing in a larger hackathon.
CopyWrite
×
Almost a year ago now, I put a little project called Wit Send on this website. It was a Jackbox -inspired game about creating Shakespearian insults, and while fun, it was quite flawed. For the holidays this year I wanted to make a new game both as a gift for my cousins, who are also Jackbox fans, and as an activity for my creative writing club at school. And thus, CopyWrite was born.
CopyWrite is played in five rounds. During each round, all players write a sentence of a story, and then depending on the game mode, some or all players then get to modify the sentences that someone else wrote. Then, players vote on which sentences they think are copies and which sentences are the best, creating a (very) short story by the end. Players are also awarded titles such as "Sneakiest" or "Best Writer" based upon gameplay.
This game was a lot of fun to make and playtest, and I kept on modifying it long after the gift was given. The backend started off very similar to that of Wit Send, but gradually I upgraded it to make it much more reliable, and eventually ported Wit Send to use that new system as well. I don't have any plans to release this game in its current form, but I may revisit the concept eventually.
Holiday Light Show 2022
×
It's back again this year, this time bigger and better. My original plan had been to use the same show every year, maybe making a few tweaks or adding a new song each time. There were a couple of changes I wanted to make this year, one thing led to another, and now I've rewritten basically the entire codebase.
First of all, I added a new song, "I Have a Little Dreidel," or more colloquially "The Dreidel Song." I am half Jewish and while my family usually leans toward our Christian side, I decided it was time to incorporate something Jewish into my work. There aren't that many Hanukkah songs out there but I'm glad I was able to find a public domain rendition of this one so I can share a bit of Jewish light with the world.
Secondly, I ditched the radio part of the system. I had never been a fan of using a radio transmitter, but at first I figured it was the easiest way to broadcast live music at a short range in sync with the lights. When I took the whole setup out of my closet for the year, I discovered that the radio transmitter was misbehaving. Rather than try to fix it or buy a new one, I decided to get rid of it entirely and switch to a WiFi-based timing system. Originally I was skeptical of using WiFi, but I made it work, switching the microcontroller to an ESP32-S2-based board, using an NTP server to sync the clock, and then creating the above interface for listening to the music live from essentially any device.
Lastly, the timing system was also completely rewritten in order to fix some of the syncing issues I had last year. This required me to rewrite the animations for all of the songs as well, which took ages. I think this was worth it though, since a lot of the animations make more sense now that they are properly synced with the music. The syncing still isn't great when coupled with the latency of the online player, but overall I'm happy with how it turned out.
See the Original Project From 2021
Skykid Halloween Costume
×
I've never been a fan of dressing up and pretending to be someone else. None of my Halloween costumes have ever been a specific character from a movie or game, always something generic like a robot or a LEGO brick. But as my craze for Sky: Children of the Light continued (see this project for details), I realized that Sky doesn't have specific characters. Every Sky player can design their Sky character to their liking. When I'm playing Sky, I don't see myself playing as a character. I see myself playing as myself.
Ever since I got into the electronics community, I've admired people sharing photos of their electronic cosplays. But I haven't had a reason to make my own, until now. I made my first Amazon purchase, some transparent 3D printer filament, designed and printed some stars, glued them to an old blanket, and added a short custom-made strand of Neopixels behind them. I've never really worked with fabric before, so cutting out the cape was a challenge. The program is written in CircuitPython, running on an Adafruit Circuit Playground (Bluefruit because that's what I had on hand), and controls the lights based upon the onboard accelerometer. I was originally going to use the light sensor as well, but that proved to be unreliable. I had a lot of fun making this costume, and I'm hoping people will recognize it when I wear it on Halloween (or at least have a few people ask "what is that?" and I can introduce them to Sky).
Candle
×
Summer is definetely my least favorite season. It's always been a struggle for me to transition from hours of schoolwork to having almost nothing to do for weeks on end, and then back again a couple months later. Going to school forces me to be social, and while I'm an introvert, I've learned that I need at least a little bit of social stimulation to be happy. This summer I decided to fill that gap by trying out an MMORPG , Sky: Children of the Light.
Since then, I've fallen in love with Sky. I play it for an hour nearly every night, and I'm even starting to make a couple of online friends. I love the whole mentality of the game (check out this documentary by the lead developer, self harm trigger warning from mins 28-30 ) and it has definetely helped me make it through the summer.
Anyways, back to this project. One major feature in Sky is candles. The player carries around a lit candle, using it to light other candles in the world, including those of other players. The candle that I made is essentially a physical replica. Tilting the candle, as shown in the video, sends HID commands to the computer to make the in-game character do the same. It's not a very practical controller, but I learned a lot while making it, especially with the 3D printing portion.
Wit Send
×
One of my least favorite parts about being a programmer is that I don't often get to see reactions to my work. The majority of my stuff is shared online, so I don't get to hear people laugh or see the looks on people's faces when they look at something I've made. This project attempts to change that. I've been wanting to make a game like this (heavily inspired by Jackbox Games ), and somehow I worked up the energy to go ahead and do it.
The game consists of three parts: In the first section, players are presented with a list of words, which can be clicked on to form a Shakespearian-style insult. In the second part, the narrator claims to have mixed up the insults, and players get to combine insult "fragments" to make new, even better insults. At the end of the game, players get to rank the insults, and a winner is announced. While the game can be played over the Internet, it's even better if all players are actually in the same room, listening to each other laugh.
Looking back at Wit Send's gameplay, the gameplay is definitely a bit flawed, so I don't think I'm going to release this game publicly, but I learned a lot making it and it gave me a topic for my college application essay.
Smudge
×
While I haven't shared about it much on this website, another one of my passions besides programming is creative writing. I write on occasion, usually just when I have a random idea, but sometimes I am prompted by a specific event. You can imagine my excitement when someone at my school announced a whole event based around creative writing, including a short story collection with the theme of aliens. Long story short, I managed to get far more involved in the event than I ever expected, including having a role in reviewing the submissions for the collection. All of the submissions were amazing, but one in particular caught my eye. In this story, the eponymous character Smudge is of an alien species that communicates through emotions instead of speech. The species also changes color depending on emotions. I found this idea intruiging, since I'm an introvert and sometimes I have trouble expressing my own emotions.
Thus, Smudge was born. I had a half day of school, a Circuit Playground Bluefruit , and an empty soap bottle. Instead of doing homework, I spent the afternoon researching libraries for detecting emotion from an image, and came across Human.js . A few hours and some hot glue later, I had a working robot that changes colors based on the emotion it detects. It's not pretty, but I thought it was interesting nonetheless.
Chromle
×
I'm an avid Wordle player. I play it every morning, and watched others play games based upon Wordle in different subject areas, everything from global trade, to prime numbers, to ornithology. I wanted to create my own version of Wordle, based upon something that I enjoy. I briefly considered doing something involving JavaScript keywords or HTML tags, but decided that those sets would be too small for an enjoyable game. I eventually settled on using hexadecimal colors, because there are a lot of them, and a lot of people who know how to use them. One of the key differences between Wordle and Chromle is the fact that the solution color is actually displayed at the top of the screen. I chose to add this feature as any combination of numbers and letters A-F is a valid hex color, whereas not every combination of letters is a valid word. I originally intended Chromle to be a small project mainly for myself, but after showing it to a few friends, who then got addicted to playing it alongside other Wordle games, I decided to polish it up and share it.
Check it out
Source Code on Glitch
It's All Fake to Me!
×
It's All Fake to Me! is a simple game built to teach about finding reliable sources online. I made it with some friends for a local hackathon in about six hours under the theme of information. This was my first semi-inperson hackathon, and it was a lot of fun. The game features two levels, in which the user must choose between reliable and unreliable sources of information, timed in the second level. We ended up winning first place, and while it's certainly far from perfect, I feel like it is decent for being created by three highschoolers in six hours.
Check it out
Source Code on REPL.IT
Mosaic Maker
×
This is a bit of a strange one. It started off as a Latin class project in which I was tasked with designing a Roman-style tile floor on a piece of graph paper. Me being me, I wanted to try incorporate some math and computer science into it. I came up with a cellular automata -like pattern, and after a few hours, I had filled the graph paper with a neat pattern of dots. While it looked cool (My sister thought it looked like a QR code, so I tried scanning it but it failed), I was almost certain I had made a mistake in the pattern somewhere. So I decided to automate it. After several hours, a lot of frustration, and maybe a damaged computer battery (my computer gave me a warning about the battery soon after, but it could be completely unrelated), it works. I was going to leave it at that, but my mom suggested that I share it with my class, so I ignored the battery warnings, added some CSS and customization features, and sent it off.
Edit: I ended up taking my computer to the Apple store and they said they'd like to keep it to figure out what went wrong and they'd give me a new computer for the price of just a new battery. So now I've got an M1 Mac. (the old one was Intel)
Check it out
Source Code on Glitch
Holiday Light Show 2021
×
I've always been amazed by holiday lights, and I've been helping my family put them up since I was five. This year, I decided I wanted to make my own holiday light display, and this is the result. As of November 28th, 2021 it is set up in front of my house, coming on every night at dusk and staying on for four hours. The music is broadcast over FM radio, which mostly works but has a few issues.
Statistics
Number of Lights: 600 RGB LEDs (600 red, 600 green, 600 blue, so 1800 individual LEDs)
Show Length: 9 minutes 26 seconds
Number of Songs: 4
Controller: Adafruit Feather RP2040
Programming Language: CircuitPython
Radio Transmitter: Adafruit Si4713 Stereo FM Transmitter
LED Driver: WS2811 (NeoPixel)
Song Credits
Sleigh Ride - US Navy Band
Deck the Halls - USAFB Concert Band
The Twelve Days of Christmas
Jingle Bells - Seoul Philharmonic Orchestra
Word of the Day Bot
×
Word of the Day Bot is a Discord bot that sends daily messages with WordNik 's word of the day, from their free API. It also integrates with Gutenreader , showing places in books where the word of the day is used. This is my first Discord bot, and it is written in Node.js using Discord.js. You're welcome to install this bot on any Discord server, although please don't spam it with commands/try to break it/otherwise abuse it.
Check it out
Source Code on Glitch
My Jam
×
My Jam is a tool for generating a summary of any Spotify playlist. I originally created this for myself, as I am quite shy about my music, and I wanted to create a way to share my music with others while still not making it obvious what I'm listening to. I feel like people often make judgements based off of the music you listen to, and I don't want that. I created this using the Spotify API. It has you sign in with Spotify, and then select a playlist. Spotify has public 30-second preview for most of their songs, which is more than enough to make a summary of a playlist.
Check it out
Source Code on Glitch
Oh My Words
×
Oh My Words is an advanced word counter and writing analyzer. It features counters for letters, syllables, words, sentences, and paragraphs, as well as customisable averages. It also finds the most common words, letters, and phrases in your writing, and calculates readability using several different metrics. I built this website as I needed a tool like it for writing essays in English class at school. Before I made this, I used Count Wordsworth , a similar website. I wanted to be able to customise the averages, and the project took off from there. It took me a few hours to get the basics working, and I have added more features as the need arose.
Check it out
Source Code on Glitch
Schedule
×
Schedule is a schedule app for the Bangle.js hackable smart watch. I got this watch for Christmas and this was one of the first things I thought of making when I got it. The app allows you to keep track of events and set the time of day and day(s) of the week that they occur. The watch buttons can be used to scroll through events, and the display will tell you the name of the event as well as the time until/since the event. Unfortunately my Bangle.js is no longer with us, so I'm not using this app anymore.
Source Code on Github
Infinite Spelling Bee
×
Infinite Spelling Bee is a free, (nearly) infinite version of the New York Times Spelling Bee game. The game consists of seven letters, which you must click on to spell words. I built this as a Christmas gift for my dad. This took me a few days to complete, and makes use of Datamuse's words API for checking words. The words are scored based off of length and letter rarity (words with Qs and Zs score better that words with just Es and Rs). There is also a button that lets you share a link to the current challenge with a friend. I'm not really working on this anymore, but I'll fix bugs if my dad requests it.
Check it out
Source Code on Glitch
Gutenreader
×
Gutenreader is an online reader for books on Project Gutenberg. Project Gutenberg is an organisation that collects and digitizes books that are in the public domain, such as those with expired copyrights. I first heard about Project Gutenberg in a magazine, and thought, "Cool, I wonder if they have an API?" They don't have an official API, but Gareth B. Johnson created an unofficial API that works quite well. I started Gutenreader just before COVID started, but when it started, I worked much more on it, as like many people, I was without new books to read. I haven't updated this in a while, but I learned quite a bit about making dynamic websites from this project.
Sniper Ducks
×
Sniper Ducks is an Hour of Code-style coding game. It is based off of the Pond game on Blockly Games, which is in turn based off of CROBOTS . I found Pond while helping with Scratch 3.0, and wanted to make a version that let players battle against each other, not just the three pre-programmed ducks. This was my first project using Firebase, and I developed it over a few weeks. I used this project to teach at my school's Coding Club and at the local STEAM night. I am not actively developing this anymore, although I might revisit making coding games in the future.
Check it out
Scratch Highscore History
×
Scratch Highscore History is a way of viewing the history of highscores on a Scratch project. It used the Scratch Clouddata API to fetch the values of cloud variables. The API actually stores the most recent 40 values, meaning that the 40 most recent highscores can be displayed. This was one of my first projects on Github, and I'm probably never going to touch it again. Due to changes in the Scratch API, I don't think it works anymore.
Check it out
Source Code on Github
About Me
I'm a student who works on programming projects in my free time.
I know:
JavaScript (web & Node.js)
Python
HTML/CSS
Java
C (Arduino)
I've also been getting into expressing myself through creative writing, although I'm not quite ready to share any of my writing yet.
Gaming
As well as programming, I also enjoy video games in my spare time, primarily Minecraft. I usually go by the name LeftyLlama in games, so if you see that username, that's probably me.
For a while I got into making Minecraft add-ons under the name Llama Studios. You can download them for Minecraft: Bedrock Edition on the Llama Studios website . Most of them are outdated and won't work with the current version of Minecraft.