This is a temporary design for my portfolio page. It is still a work in progress and I am still adding portfolio entries here. If you have any questions, please reach out by emailing me at reed@reed.wtf.

Reed Davenport

Portfolio reed@reed.wtf

Skills:

PlusReed LLC

In June 2022, I opened PlusReed LLC as a business which focused on web development and web hosting services.

Since then, I've made countless things for PlusReed LLC, namely:

  • Boxy Boy — A contact form system for PlusReed LLC built on Rails (originally in pure PHP!). The primary goal of Boxy Boy is to make it easy for prospective clients to get in contact with me (and also, I didn't want to set up a WordPress website just for a contact form. 😄)
  • PlusReed LLC Website — The website for PlusReed LLC, which uses Astro for its static site generation.
  • ngxd — An internal Nginx configuration management system built with Node.js and Git. It allows for versioned Nginx configurations hosted on a Git server.

Interested in having PlusReed LLC develop your next project? Contact us at contact@plusreed.co, or leave us a voicemail at +1 (864) 209-1163. We'll get back to you ASAP.

Wemo Conductor

During Christmas 2021, I reverse-engineered my Wemo smart plugs and made an open-source implementation of the Wemo app.

It did everything you'd want an app to do: toggle them on and off. And it was super light on resources.

You can see the source code at plusreed/wemo-conductor.

The new front-end (powered by React, Redux, Chakra UI) are available at plusreed/conductor-frontend.

Pictures of Wemo Conductor A screenshot from a mobile device showing the interface of Wemo Conductor. Three Christmas trees are on. Languages/Technologies Used
  • JavaScript (used for the wemo-conductor server)
  • Pug/Tailwind CSS (used for the initial prototype web UI included in the wemo-conductor server)
  • React (used in the newer front-end with much better mobile support)

HQ Reverse Engineering

HQ Trivia is a mobile game show where you answer questions and win money.

The idea of HQ intrigued me around 2018, so I started reverse-engineering the app around that time. In no particular order, here's what I've made:

Languages/Technologies Used
  • JavaScript (used for WebSocket/server emulator)
  • mitmproxy / Charles Proxy (for SSL proxying)
  • JADX / Hopper Disassembler (for disassembling the Android and iOS apps respectively)

HypeTrack

HypeTrack was born for a single purpose: hold HQ accountable.

HQ Trivia announced that their schedule would be scaled down while they work on features for the app. So, I decided "hey, why not track that?"

HypeTrack is very simple: it checks the production API every 5 seconds, and compares the x-hostname header to the locally stored hostname. If they don't match, something changed on the backend.

Eventually, I extended out the backend to also check for hidden HQ streams (it has caught quite a few!)

HypeTrack lives on Twitter at @HQMonitor, and on Telegram as @HQMonitor.

HypeTrack is also open sourced as HypeTrack/tracker on GitHub.

Pictures of HypeTrack A photo of the admin interface for HypeTrack, Sweetgreen. The dashboard is showing the current hashes stored for HQ services.
A photo of the admin interface for HypeTrack, Sweetgreen. The image shows the interface which allows an operator to post to social media as HypeTrack.
Languages/Technologies Used
  • TypeScript (for the server-side software, tracker)
  • JavaScript (for the admin interface, Sweetgreen)
  • Pug, Tailwind CSS (for the admin interface, Sweetgreen)

Scheduley

Scheduley is a Discord bot I made to wake people up for online classes.

When COVID-19 hit, me and my college friends had moved to online, synchronous classes. I started to realize people were not waking up for class.

So, I came up with this plan: use the existing class schedules everyone sent, and make a Discord bot notify people when their class was starting.

About an hour of coding later, I came up with the first prototype of Scheduley and showed it off to everyone. People loved it.

Scheduley was fairly customizable (I could make it say whatever in the embeds it would send), and it stored the Zoom links for every class. You just had to click the link in the embed to join class.

I made some slides (incomplete) explaining how Scheduley works. You can see it by clicking this link: Scheduley Slides


Pictures of Scheduley A photo of a Discord channel, showing the Scheduley bot notifying someone of a class named Intro to Java Programming.
A photo showing a Scheduley command, roll, which rolls a dice. PlusReed rolls 6 die with 60 sides.
Languages/Technologies Used
  • JavaScript (for the Discord bot, using Discord.js)
  • MongoDB (to store class data)

Printlytics

Printlytics is a simple tool I made while working at my college.

My job was to check the computer labs and make sure everything was OK. Stuff like that is boring, so I automated a part of it: I made a tool to log into all the printers on campus and give me their metrics.

This actually wasn't super easy - I had to make a web scraping tool (there was no API) and write some pretty gnarly JavaScript, but at the end of the day, the tool pretty much ran autonomously and reported metrics for lots of printers on campus to Prometheus.

I then made dashboards in Grafana to give me a birds-eye view of all the common printers that people use on campus. As soon as the printer had an issue (ran out of toner or paper, or had an abnormal status), it would send me a message on Telegram and show up on the Grafana dashboard.


Pictures of Printlytics A Telegram message showing that Printlytics is alerting me of an empty paper tray.
A computer monitor showing text that describes the states of multiple printers.
The Printlytics frontend showing a test printer with 100% black, cyan, magenta, and yellow toner and 100% paper levels.
Languages/Technologies Used
  • JavaScript (for the web scraping, using Puppeteer)
  • Prometheus
  • Grafana
  • React (for the web UI)

LTT Markov

LTT Markov just takes the video titles of a bunch of Linus Tech Tips videos and puts them in a Markov chain.

To be honest, I dunno where the idea for this came from. I made it in a class in college when I was supposed to be paying attention (I was bored.)

Check it out here: @LTTMarkov


Languages/Technologies Used
  • JavaScript
  • Heroku