📚 Application

Got room for one more in the Remix band?

Introducing

David Adams

I'd love to come work with you guys. Here's what I’d add to the lineup.

  • 13 years of full-stack development experience. Primarily node/typescript, react, and php.
  • Almost a decade of React Router experience.
  • A love for building developer tools.
  • Figure-out-ability through the roof. No fear of failure here.
  • Excellent communication skills, having written several technical articles and README.md's.
  • Personally trained by Ryan. I should be qualified based on this fact alone.
    If not... Ryan, I would like my money back.

In all seriousness, I've been using react and React Router specifically since April of 2016. I've been heavily invested into the framework since. Michael, Ryan, Matt, and crew have been consistently pushing out quality projects and ideas over the years. I have a deep admiration for their work. The bar they have set is incredibly high. I'm at a point in my career where I'm looking to push myself further. Remix 3 seems like an incredibly ambitious project and one I would very much like to be considered to help with whether that means helping directly on it or with helping maintain React Router.

What can you do for us?

  • Jump into React Router maintenance. I've recently been advocating for and executing features.
  • Bring fresh perspectives to Remix 3 architecture decisions based on nearly a decade of real-world React Router pain points and developer experience. I have opinions...
    Fun fact: This actually lead to positive changes in the PHP docs.
  • Contribute to developer tooling. I have a passion for DX and understand what makes frameworks feel great to work with.
  • Write clear documentation and guides.
  • Ship developer tools that people actually want to use - I've built internal tooling that became essential to my entire company.
  • Bring the same bias toward action that Shopify values - experiment, learn, iterate, ship.

Who do you think you are?

My name is David Adams. 👋 I'm a Christian, family-man, self-taught full-stack developer, and graduate of Texas A&M '10. I live in College Station, TX with my wife and our 3 beautiful kids.

Short version of the story: I taught myself web dev in college while studying business. After graduating, I worked in the oil industry for two years, hated it, then crashed on a friend’s couch in Fort Worth while job-hunting for something I actually enjoyed: software development. I convinced my current boss to take a chance on me despite no formal CS education or professional experience. It paid off. I’ve been with the company since 2012.

Why have I stuck around for so long? I give a lot of credit to my boss. He has always treated me fairly, respected me, and consistently encouraged learning, experimentation, and ownership across frontend, backend, devops, and infrastructure.

I'm fascinated by all of it. I've found that the vast majority of my career work doesn't feel like work. It's always felt like solving interesting puzzles.

So why am I looking for a change now? I want to continue to grow, learn, be challenged, and a chance to work with people I've admired for years now. I want to contribute to a business that encourages entrepreneurship and action. Shopify is about doing, and not sitting idly by. That resonates with me a lot as I hope you'll see below.

Greatest hits

I've published several posts on my blog that cover Remix/React Router topics.

File uploads with Remix (updated)

After Michael reworked the file uploads I was excited to dig in, experiment, and share what I learned as well as showing off some new storage implementations I came up with:

  • S3
  • SFTP

This article is linked in the React Router docs today.

React router's data utilities are awkward in SPA's

I was excited to be able to use the new(at the time) data utilities. However, I had some feedback. I believe the article lead to some fruitful discussion and positive changes in the framework.

Studio sessions

I've recently contributed to the React Router repo directly in a few meaningful ways.

Callsite revalidation opt-out

While working on an app at my job, I encountered a kind of rough edge with with the router with what I needed to do. After discussing with folks in the discord, I was pointed to this old discussion Ryan started back in 2023. Rather than vent about it online, I pulled the react router repo down and attempted to make it a reality myself.

I got some help from Matt with running things locally in the morning.

I figured out what I needed without ever having looked at React Router’s internals, opened a PR after lunch, and worked with Matt to iterate on it and get it ready for an upcoming release.

Typesafe fetchers RFC

I brought up the suggestion to add typesafe fetchers in discord and was asked to write up an RFC. I wrote up the RFC with several possibilities which ultimately led to the steering committee to discuss and add it to the roadmap.

Adding preload option to clientLoader

In an effort to optimize network requests, I wrote up an RFC to allow routes to preemptively opt-in to single-fetch if they also export a clientLoader. This is more impactful now that middleware has landed.

The RFC can be found here. The POC pull request can be found here.

Street team

I've been in the Remix/React Router discord for a while now providing help and discussing the framework with fellow community leaders.

College Station is less than 2 hours away from Austin so I've also been attending the meet-ups led by Brooks and crew when able. Hopefully Brooks can attest to me not being a complete weirdo. I'll concede to partial weirdo.

Merch booth

I attempted to launch a Shopify app a while back. I have an in-depth write-up on the topic and why I was ultimately unsuccessful. I hope it also illustrates that I have gained some experience with the Shopify platform, that I'm a do-er, and that I'm not afraid of failure.

Main stage

I've lead the development of several React Router applications and encountered several challenges and opportunities to build tools along the way at my current position.

  • Brought CI and automated deployments via Jenkins to the company
  • Brought git to the company (moved from svn)
  • Brought typescript to the company
  • Brought monitoring to the company via prometheus, alertmanager, grafana, etc.
  • Converted LAMP based development environment to Docker based development environment (php + nginx)
  • Built an internal "headquarters" Remix app to manage in-house applications
    • user management
    • environment config management
    • queue worker management
    • dns management via octodns
    • log viewer
    • alerting on critical state
    • db management + reporting
    • docker container management
    • pm2 management

I've been instrumental to bringing modern development tools and practices to the company.

I currently lead the development of a B2B marketing application that's not yet public.

But can you shred?

Aside from building applications, I love building tools to solve different challenges that come up. Here are various unique projects I've built over the years.

ai-graphql

The project tests whether an LLM can autonomously build effective GraphQL queries when given a schema. It uses Express, Apollo Server, and an AI SDK to turn user prompts into GraphQL requests, fetch e-commerce data, and stream responses. The repo includes custom features like per-store DB routing, complexity checks, AND/OR filtering, pagination, and a base data layer. Early results show the approach works well and generalizes easily to other domains.

headlamp

A package to auto-generate api docs to mock Express APIs. I have a write up on the origination of this tool here.

c2-table

Before table libs were everywhere, I built my own.

Fun fact: I remember going to React training excited to ask Ryan about a challenge I was facing with this lib. No clue what it was now. 🙃

c2-react-config

Centralized but flexible webpack config for multiple apps.

c2-form

Built before modern form libs, back when we were deep in redux.

vendor-update-monitor

Go webhook for GitHub to alert via Slack when sensitive files change.

resource-reporter

Alertmanager webhook in Go that snapshots the output of arbitrary cli commands on the server to send to a Slack channel. I also have a write up on the origination of this tool here.

I believe I have a pretty good eye for novel, but effective, solutions and can actually make them a reality.

B-Sides & experiments

react-excel-workbook

What if you could model excel sheets in jsx? 🤔 Hard to believe this repo is almost a decade old. 👴 I didn't have the bandwidth to keep up with it unfortunately.

FriptKit (Fake ScriptKit)

I came across ScriptKit because of Kent C. Dodds and was fascinated by the concept. I wanted to try to build it myself just to see if I could. I was able to actually get something working. Interesting files: sdk.js, script.js, App.tsx

Indie releases

Koobly

I read a lot and am nerdy enough to watch book related videos on youtube. This was a fun book list building application. The homepage has a youtube video on how to manually build lists.

I incorporated AI into it to be able to generate a list of books given a videos title, description, and transcript. It then uses Google and Bing api's to search for covers for those books. Watch a demo of the AI here.

Preview tester

A means to test open graph images on social media platforms without using your actual domain and risk getting cached. This helped me with the building of the aforementioned Shopify app.

Bonus content

I love to make all sorts of things, not just software. I like to think I'm pretty good at the things I set my mind to.

Still not sure?

How about asking this completely unbiased ai?