Photo by Emily Morter on Unsplash

I set a bucket list item for myself to create a business at some point in my life. Being a software engineer, a natural route to creating a business seems to be through creating an online service or tool like a SaaS. I am still early into my journey creating products, but I have a feeling that creating products will never really be the sticking point for me. From Elsewhere to Crow Authentication to Papyrus, my time to MVP has decreased from multiple months to days. …

21 July 2021

Photo by Cody Doherty on Unsplash

JWTs are a popular form of authenticating users for web applications. I won’t get into the debate about whether or not we should be using JWTs for this purpose because that is a different discussion entirely. There are use cases that are better suited for using JWTs than others, and I am going to expect that you have landed here after already determining that JWTs are a good fit for what you hope to accomplish.

JWTs are a convenient way for us to store a small bit of public information generated by a server acting as the…

15 July 2021

Photo by Mitchell Luo on Unsplash

I’m writing this post with a little hesitancy. The title might read like generic clickbait, but I hope to inject some originality into this subject. What you probably clicked on to read about is further on down past my rant. Feel free to skip ahead.

When I first started hearing about SEO I imagined it as a large abstract construct. The quick and dirty explanation that I go back to for myself is that SEO is simply the process of ranking higher on search engines. That’s it. There are tons of hacky methods and instructors out there…

Why My SQS Free Tier Disappeared

Photo by Jp Valery on Unsplash

Last weekend I was meeting up with some friends from college when I received an unexpected email.

Your AWS account xxxxxxxxxxxx has exceeded 85% of the usage limit for one or more AWS Free Tier-eligible services for the month of July.

At the time the Budget email was sent I had used 865,062 of 1,000,000 free SQS requests. The first thought that came to my mind was, “I’m glad that I have a budget set up.” The second was, “How am I about to exceed 1 million SQS requests?” The third was, “Oh wow did Crow go viral?” …

Photo by Mathyas Kurmann on Unsplash

I have worked with Stripe for the last month or so and one topic that I stumbled upon that seemed to stump people was handling Stripe webhooks in a Lambda function. I initially stumbled on this issue because I misconfigured my code but it had nothing to do with the API Gateway and Lambda proxy configuration set up. Specifically, I am referencing problems that others came across in this GitHub issue.

I have my endpoint set up as an API Gateway and Lambda proxy integration. I configured the generated endpoint URL in Stripe and passed my Stripe secret key and…

7 July 2021

Photo by Kevin Mueller on Unsplash

Over the last month, I’ve been underground working on a project that I call Crow Authentication or, lovingly, Crow. It spawned when I set about creating a new application for myself that needed basic authentication. I had already implemented authentication in a previous project of mine so I had the nuts and bolts. As I was about to start copying and pasting code from one project into another a much better idea entered my head. I was going to create a service for myself that handled authentication for all of my projects. That naturally spiraled into creating…

6 July 2021

Photo by Samur Isma on Unsplash

I recently finished building an application that allowed users to upload PDFs that I can then host and direct others to via a QR code. I knew that I wanted to build the application using AWS and I figured that S3 would be my best option for storing the uploaded files, but I had never dealt with uploading files. The solution turned out to be easier than I expected, but it also was not super straightforward.

It turns out that handling an upload with HTML is just as easy as creating an input tag with the type…

Photo by Stefen Tan on Unsplash

For the past month or so I’ve been working on a new service that offers authentication as an API and I started needing user input on the front end. Just about every web app nowadays lets a user enter some sort of information that is then used to make API calls on their behalf. Pulling that data out of the input forms can sometimes be a little tricky. One of my use cases was allowing a user to enter their credentials before signing them in.

I have posted previously about creating forms with Material UI components, but I did not…

Photo by Ron Dauphin on Unsplash

I’ve been playing with Stripe lately as a payment processor for some of my projects, and their documentation is by far the best I have ever read. The integration experience is extremely easy thanks to what they have written. The message is clear and concise. The animations bring value to the page with my personal favorites being those that highlight which pieces of the code snippets the documentation is referencing. Overall, working with their service is much easier and more fun thanks to their documentation. They obviously put a huge emphasis on the developer experience.

For any developers out there…

21 June 2021

by Thomas

Photo by Jaye Haych on Unsplash

I recently started diving into the vast world of DynamoDB. One area that I was almost immediately introduced to was that of modeling data for DynamoDB, and I wanted to share an experience I just came across related to how I modeled some data for a project. Since DynamoDB is a NoSQL database, data storage and models need to be thought of differently than traditional SQL databases. To get the maximum benefit out of this incredibly quick and reliable data storage service, a system’s data and use cases need to be thought of and planned…

Thomas Step

Full-time software engineer and part-time indie hacker. Check out my blog at

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store