About

I am a self-starter who is passionate about helping people by making their online activities safer and more secure. As an avid full-stack developer, I enjoy creating applications and tools that help stop breaches, either directly or by empowering others to be efficient and effective cyber defenders, security analysts, penetration testers, and incident responders. I thrive on solving challenging problems, engineering complex systems, and keeping up to date with the latest technologies in software development.

I graduated from the University of Central Florida in 2020 with honors, where I participated in collegiate rock climbing and cyber security competitions while completing my degree in Computer Science with a double minor in Secure Computing and Networks and Mathematics. I graduated from Lyman High School’s Institute for Engineering in 2016, having taken courses in Robotics, Digital Electronics, Aerospace Engineering, CAD Design, and Computer Science.

As a software developer I am passionate reducing technical debt through efficient design an documentation, creating clean & modern interfaces with focused UX patterns that reduce friction, creating apps that increase productivity through solving specific needs, and user-focused features that make software feel magical. I also just really enjoy solving real-life problems with software, and have no problem open sourcing my projects and contributing to the F/OSS community when I can. For those who are interested, I do most of my development using Vim with an short list of plugins.

I am a follower of Jesus Christ, the Son of the living God. To employers, this means that I am a diligent worker that will do my job not for money, but to honor God with my hard work ethic (Colossians 3:23) and to be a witness to others (Matthew 5:16). I trust God to provide for me (Philippians 4:19) and strive for good relations with my co-workers (Romans 12:18). To everyone else, being a Christian means I attribute my accomplishments, financial well-being, and status to Him alone (1 Corinthians 15:57); they were given to me so that I may glorify Him, give to others, and enjoy the life He has given me (1 Timothy 6:17-19). It means that when I encounter difficulty, I don’t complain or look for someone to blame; I dwell in the growth that I know is coming (Romans 5:3), lean on Him for the strength needed to lead me through (Psalm 34: 17-18), and then glorify Him for His strength when mine runs out (2 Corinthians 12:9-10).

I have been rock climbing for over a decade, competing through the youth circuit and placing well in many National Championships before moving to Chattanooga and switching to more outdoor climbing. My best result was in 2013 when I got 4th for speed climbing in the Male Youth B age bracket and went on to the World Cup, where I placed 16th. After that victory, I doubled down on bouldering and placed 6th at the National Championship in the Male Youth A age bracket two years later. I now focus on outdoor bouldering and the more social side of climbing, like introducing new people to the sport and showing people around the many local climbing spots.

I started the Netrunners CyberPatriot team in 2014, and our team went on to win the CyberPatriot National Competition in 2016. I am now a mentor for the team and continue to help with their Linux security skills, as I myself learn more through training for the Collegiate Cyber Defense Competition at UCF. Though the Netrunners have not returned to nationals yet, while I was a member the UCF CCDC team placed 2nd in the nation in 2018 and 2019 after winning the Southeast CCDC. My other achievements in cyber security include winning the 2017 and 2018 national Panoply/E-Sentinel competition (red team) and winning the Fall 2018 Lockdown v5 competition at the University of Buffalo (blue team).

Projects

I’ve always got a lot going on, but I wouldn’t have it any other way. I love to talk about my projects, so feel free to ask any questions you have!

Active Projects

These are projects I am currently working on, or have worked on in the past month.

Inactive Projects

These are projects that I haven’t worked on for a while, but intend to get back to.

Archived Projects

These are projects I probably won’t get back to, but I am still proud of and have learned a lot from.

I’m going to try to keep this list up to date with my most recent projects and status, and hopefully add more elaborate descriptions to some of the projects with all of the glorious technical details for those interested.

Contact Me

Thank you for your message

CC Orlando App

Back to Project List

Overview

In the fall of 2016, I spoke with the pastor of my church about church apps; it seemed that almost every church had one. However, I wasn’t crazy about the features offered by popular church app builders, and he wasn’t crazy about the price, so he gave me the opportunity to build a custom app for our church. I was excited to try out React Native, and already had a vision for what I wanted to do, so I jumped right in.

Before I get into the details, I am proud to say that after a year of active development, the app is now live on the App Store and Google Play Store. Feel free to download it and let me know what you think. I am keeping the source code private for now while I consider opportunities for monetization.

Goals / Features

With my app, I wanted to re-define what a church app should do. I’ve built a contextual interface that adapts to the current day and the available content, making sure that members are informed of what they care about and can easily find what they are looking for. A big part of the app is a mini social network, where ministry leaders can create events and announcements, and church members can “follow” these ministries in the app to stay up to date on the latest in each ministry.

Furthermore, I had always thought that bible apps, though rich in features, were inelegant, so I set out to design a built-in bible reader that was intuitive and fast.

Lastly, I wanted to build a great interface for finding, listening to, and watching past sermons. Last week’s sermon is always waiting for you on the home tab, and you can browse through all of our sermon collections, download sermons, and control the audio while following along in the bible tab. One of the most-used features of the app is the contextual bible verse lookup: on Sundays, the verses that the pastor references in his sermon are available as quick links in the bible tab, so that members of the congregation don’t have to waste time searching for verses during the message.

This is just the beginning; there are so many more goals I have for this app, and a whole roadmap of features lined up.

Components

The complexity of this project meant that I had to develop and maintain 4 independent components: 1. The CC Orlando App itself (built using React Native) 2. An administrator’s portal for ministry leaders to use to manage their ministries and other elements of the app (built using React) 3. The database and corresponding processing functions (to trigger actions based on database changes) 4. Python scripts to automate web scraping to load content from the website into the database

I used Firebase as a back-end, including their Real-time Database, Functions, Authentication, Messaging, Storage, Hosting, and other services they provide. Because my church is not too large, I’ve been able to use their service within the free tier, which has been a huge blessing.

History

The Design Process

I started the design with some rough sketches, and then moved on to a full prototype in Sketch. After trying various iterations of the prototype on my phone using inVision, I picked a design style that felt comfortable on both Android and iOS.

Kicking off the Back-end

I spent the majority of my winter break in 2016 building the administrator’s portal from scratch. It was a glorified database editor, but designed for people who are not as familiar with technology. As such, it was a tedious process of adding lots of feedback, instructions, and working out all of the bugs.

Getting Dirty

After that, I got off the ground with React Native (RN), and was pleasantly surprised by the ease of development using hot reloading. However, I kept bumping into the limitations of RN: to use any sort of native functionality, you either have to rely on community modules or develop your own. To have my audio engine work well with streaming and offline playback, I had to create a fork of react-native-sound that uses AVPlayer instead of AVAudioPlayer on iOS.

Another pain was the fast development cycle of RN itself; every few weeks, a new major version was released, often breaking my Xcode and gradle configuration, as well as outpacing the community modules I depended on. It was a nightmare to keep up with, and I had to send several PR’s to community modules to keep them up to date as well. But I was determined to ship with the latest version of RN available, and that’s what I did.

As I started to get my app up and running on tablets, I hit another snag: RN was simply not built for split-screen on tablets. As the proud owner of a 12.9” iPad Pro, this bothered me, so I worked on a fork of react-native-device-info that allowed my to get the initial dimensions of my app no-matter what configuration it was launched in. Then I found another issue: I wanted to use a popover view so that views on tablets didn’t always go full screen. This spawned another adventure, that you can read about in my “React Native Popover View” project below.

The adoption of React Navigation as the official navigation library for my app spawned further issues after iOS 11 was released. I found out the hard way that the maintainers don’t test on tablets, so all of their iOS 11 “fixes” actually broke navigation on tablets. I’ve submitted two pull requests to fix the functionality, and as of this writing am still waiting for them to go in.