Contents
Introduction:
My professional life intersects with some cool technologies such as React, Spring Boot, and a panoply of AWS services, but I wanted to expand my horizons by completing a few side projects. The following side projects required setting up my own AWS and GCP accounts, registering a couple of domains, and even creating an Alexa skill! I'm pleased to report I was able to use them to generate some innovative ideas in professional contexts, as well.
Personal Projects:
- Root - Infrastructure
- Email Forwarding - DynamoDB, Lambda, SES, SQS
- Jokes - DynamoDB, Lambda, Polly, React
- Choosee - DynamoDB, Lambda, React
- Other - Lambda, React, SQS
Root
Objectives:
This project was created to set up my AWS environment. Originally, I used Pulumi to manage my infrastructure as code. It is a terrific product, but when I started using AWS Serverless Application Model (SAM), I became familiar with AWS CloudFormation. After some thought, I made the decision that it would be easier for all infrastructure to use the same technology, so I converted this project to CloudFormation.
Users including my own user are managed by this project. It also contains an infrastructure user for every project, including itself, so that credentials are not shared and permission boundaries can be applied.
Lessons:
It was very enjoyable learning Pulumi and more about the concept of infrastructure as code. CloudFormation, likewise, is decently easy to use while accomplishing most of what I need. I'm thankful these projects have given me exposure to it.
Email Forwarding
Objectives:
I was using GoDaddy as a host, but it is expensive for my needs and I wanted a project to test my AWS skills. Unfortunately, one thing stopping me from switching was an email alias I set up for my parents on my GoDaddy site. That alias automatically forwarded both of them any email it received. Therefore, I had to recreate that functionality before I could migrate providers. As a handy side effect, having an endpoint that allows me to send emails could be useful for future projects.
Technologies:
For this project, I elected to use AWS SES to send and receive emails, since that's the AWS solution. I decided on AWS Serverless Application Model (SAM) to create NodeJS lambdas to power the project, a practice that worked so well I was able to bring into my professional life. Lambdas are perfect for this project since they work so well with elastic demand and processing speed isn't very relevant.
Lessons:
Perhaps the most useful thing I learned in this project was how to register and manage a website with AWS Route53. In addition to using Route 53 to set up MX DNS records for email traffic, I created an AWS SQS queue to hold emails while they wait to be sent by a lambda. With this project complete, I was able to eventually migrate my GoDaddy domain, meaning I now have both a production and a test domain.
Diagram:

Jokes
URL: https://jokes.dbowland.com
Objectives:
This project was my first to utilize a UI. I made a number of key decisions, including choosing Gatsby as my static site generator. While it isn't the fastest at compiling or the most popular option, it is highly specialized for creating fast static sites and I had a positive experience with it on a past project.
Technologies:
All UI projects leverage the material UI library MUI and use either Emotion or styled-components. Using a library helps drive accessibility in addition to providing a familiar experience. Icons from the MUI library are used in all UI projects, as well.
Lessons:
I learned to use stencils writing this project and designed the loading button I would later use in other projects. I also spent a lot of time thinking about how to uniformly pass both data and associated ID information when requesting a set of records, something I think this project does notably well. Plus, I got to build my first Alexa skill and use AWS Polly for text-to-speech!
Diagram:

Choosee
URL: https://choosee.dbowland.com
Objectives:
A friend of mine suggested this project. Most noteworthy, several other projects were created to build up to this one, including technology such as lambda back-ends, React front-ends, SMS messaging, Cognito authentication, and more.
Lessons:
This project was great because I hadn't worked with Google Cloud Platform, let alone Places API, in the past, so I got to set up an account and learn how to interact with that service. On the AWS side, this project allowed me to iterate on concepts learned in previous projects.
Diagram:

Other
URL: https://dbowland.com
Objectives:
This project includes this website and a few miscellaneous repositories including those that send SMS messages and a log subscriber, which watches for errors in AWS CloudWatch and alerts me via SMS when an error occurs.
Lessons:
Creating these repositories taught me about using AWS Pinpoint, both for analytics and for sending SMS messages. Further, it made me become more familiar with log subscription filters and other mechanisms for monitoring for errors.