Hello, my name is Joshua Brooks.

I am a web developer from San Diego, California. My work history is in IT, but a combination of writing scripts for work and personal projects pushed my interests into programming and web development. I am a problem solver and critical thinker, which has helped me be successful in my career of figuring out my coworkers' computer problems or crafting a careful Google search request to see what other people have figured out before me.

I quickly started loving the challenge web development brought; it is its own kind of problem solving that doesn't always have one right answer, and by being just the right amount of clever you can come up with fantastic solutions. I am fully self-taught, learning HTML, CSS, and vanilla JavaScript first and then moving into Angular and Node.JS to write my own full-stack web applications. I have practiced writing JavaScript by making scripts to manipulate text strings to help solve alternate reality game puzzles, which moved up to coding a web version of an Apples to Apples type game, to making a Twitch.tv chat bot. Samples of my code can be found on my GitHub account.

When I am not coding, I am usually watching Netflix with my wife, playing D&D 5E (currently running an elven monk that is trying to find actual magic herbs to sell at his family's business instead of the essential oils they currently have), or playing Super Mario World custom romhacks while my cat presses her head into my arms for attention.

Sir Botis is a Twitch.tv channel bot. Its aim is to act as a channel engager, interacting with users to keep them in a Twitch streamer's channel for longer. It provides functionality through user-entered commands (e.g. "!quote") which are created through the front end, operating both in a streamer's Twitch and Discord channels to bring the community together.

Sir Botis is created using Angular to run the site as a single page app in the front end. It uses HTTP requests to the back end API to fetch settings and uses Socket.io to get real time data for a channel event ticker that can be displayed while a user streams.

The back end runs in Node.js. Express is used to handle page requests and MySQL holds user data. Authentication is done using PassportJS and Twitch OAuth tokens to ensure a user can only have Sir Botis join their own Twitch channel. The server also reaches out to the Twitch API to turn on and off Pubsub and Webhook requests.

While Sir Botis is fully functional as a channel bot, he is constantly under construction and is adding new features as they get requested or thought of.

https://sirbotis.com Github

3301 is a series of cryptography-related puzzles released in 2012 through 2014. All of the info currently known about the puzzles are stored in a relatively disorganized Wikia page and this site was my personal project to verify all of the known information and make it easier to digest.

The site uses Next.js, a React framework for easy server side rendering, to display the page and vanilla JavaScript throughout for functionality.


As my wife likes to collect movies, she ended up with far too many to remember which she already has and which she does not. Because of this, we have some duplicate DVDs. This movie tracker is an easy way for her to see what we have while out of the house. The web app uses a basic password prompt to protect it from being vandalized.

The site uses React in the front end with Express and Mongo in the back end.

https://jbrooks.me/movies Github

Midgardia is a friend's online gaming community. They primarily live stream role playing game sessions with other people in the community and have a Tumblr hosted domain that they present their games on. I recreated their existing website and enhanced it with functionality they were not able to get through a Tumblr page, such as:

  • A custom game world and character info tab for their multi-session characters
  • A calendar showing upcoming sessions
  • Embedded YouTube videos of their past recordings
  • Mobile responsiveness

This website is made using Angular with Express in the back end. The Node.js server it runs on periodically accesses the Tumblr API to cache the most recent posts and parse them into something more trim and usable in the Angular component. It also accesses a public Google Calendar to get upcoming events.


I was looking for a new web project after I finished working on Midgardia, and I had just joined a D&D campaign so I decided to combine the two. This is a calendar or journal log of all of the things we have done in the campaign, from a slightly-biased viewpoint of my own character.

There are two versions of this site. Both are written entirely in vanilla JavaScript and make GET requests to retrieve the calendar event data from the back end, which stores the data in a MySQL database. The basic version linked here only displays data, while another non-public version of the site also includes add/edit/delete buttons so my friends and I can make changes as our story progresses. The event entries are created, saved, and displayed using the Markdown syntax for easy styling.


This is a website I converted for a friend's father. The client wanted to move their website from his existing host onto a platform where they could update their car sales page themselves. Everything was done in Wordpress, with themes and plugins chosen for the client's needs.

The website was set up with a third-party theme, extended and customized for the client's needs. The header and footer were modified for mobile responsiveness with additional CSS added to tweak elements throughout the site while keeping a similar look to what they previously had.

I can be reached at or by sending a message through this form:

Thank you for reaching out, I will get back to you soon.