William Whorton

Work

Here are the technologies I work with and the projects I've used them on. There's going to be some scrolling involved. If you're a recruiter, you're going to hate this part.

You won't find my resume here, by the way; I tweak it pretty frequently and have a few different copies in rotation. If you're interested in my work history, check me out on LinkedIn. Or, contact me and I'll be happy to forward you a copy.

Projects

Here are some of the things I've worked on. Many of these can be found on my Github page, in which case I've added a link to the repository. In other cases, I either don't control the repository or no longer have access to the code, in which case I've provided a link to the application when possible. In the case of some internal products that aren't publicly accessible, you'll just have to take my word for it.

This Website (WilliamWhorton.com)

I made this website using Flask because I'm always looking for excuses to use Python, and Flask is a much lighter-weight framework than Django, which would've been overkill.

My old website was a WordPress site that I basically never touched. I know WordPress has been around for ages because it's doing something right, just like PHP, but, just like PHP, I've never liked it. Besides, any CMS is really more than this site needs.

In this case, I'm using Flask-Flatpages to generate most of the article-style content, such as this, and I'm using Frozen-Flask to serve it.

On the frontend, it's just HTML and CSS. There's no JavaScript because it doesn't need it. I'm using Tailwind CSS for styling.

Hero Patient Safety Improvement System

https://safetower.com/hero/

In 2024, I was hired by SafeTower, a startup in the patient safety space, to lead UI development as they rebuilt the Hero application, a patient safety event management system, as a SaaS product.

As the original application was built in Angular, and there was tremendous pressure to deliver the updated features to keep pace with the sales team, I had to learn Angular on the fly rather than rebuild the application in React.

Although I would rather have built the application in React, I did learn quite a bit about Angular and its take on the reactive programming paradigm using NgRx and RxJS. Over time, I came to appreciate Angular's opinionated approach. The boilerplate was an issue, but I was impressed with the performance.

The tight deadlines did not make development easy, and the process was complicated by the fact that we were building processes, infrastructure, and everything else as we went. Still, I am very proud of what we were able to achieve, and I had the opportunity to work with and in some cases mentor a very talented team of developers.

Tech Stack

These are languages and frameworks I use. I've also included some context, as well as my thoughts on them. I know it's long, but it's not an exhaustive list.

Language Context Notes
JavaScript 14+ years of frontend development It goes without saying that, as a frontend developer, JavaScript is my home. It isn't my favorite language, but I come back to it over and over again because I'm used to its quirks. It really has come a long way since I first started using it.
HTML See above This is another language that's come a long way. It's hard to overstate how big a deal the introduction of semantic HTML was for a number of reasons, not the least of which is accessibility. Also, I think the claim can be made that HTML is as effective a frontend application language as JavaScript simply based on what modern W3C-compliant browsers are capable of doing with it.
CSS See above above If you'd asked me what I thought about CSS maybe seven years ago I wouldn't have been able to tell you without profanity. Partly because I was building for older browsers, I wasn't able to take advantage of some of the really amazing developments in CSS such as Flexbox. It really is incredible what you can do just with styling rules these days, although CSS is still the most complicated language in computer science.
Node Some professional work, some personal projects Not much to say about Node, apart from being very relieved that modern Node is basically the same as JavaScript and works with TypeScript. Being able to move seemlessly from frontend to backend is a huge multiplier, and I am surprised more companies don't take advantage of that.
TypeScript Personal and professional exposure I don't like TypeScript, but I appreciate what it does. It's sort of like the strict mom of JavaScript; you know it's right, and you know you should do what it says, but it's not very fun. It does do a very good job of letting you ease into it, though. And frankly, after my first interface, I was sold.
Python Personal projects, some professional work I love Python. I don't get to use it on the job much, but it's the first thing I reach for when I'm working on a personal project (sorry node). The only way I can put it is that Python just sort of makes sense.
PHP Professional experience, none recent PHP 5 was the first scripting language I learned. Because I had experience with Pascal (yep, Pascal) and C, it felt very familiar. I have used it, but I cannot stand it. For some reason, it just doesn't jibe with me. It's the opposite of Python for me in that regard. I will say, however, that PHP has been about to die for at least ten years, and it's still not only standing but thriving, so you've got to respect it.
Framework Context Notes
React 8+ years of personal and professional use React is amazing. Hooks-based React made it, in my opinion, the absolute king of frontend libraries. Every new version makes it better, without pushing it into the territory of an actual framework—and I fully realize the irony of it leading this section. It really is "just JavaScript," or Typescript, as the case may be.
Angular One very intense year building an application I actually worked with Angular.js years ago, which is an entirely different animal. When Microsoft took over Angular, they reworked the fundamentals for the better, I think. It's still a strange, opinionated framework, but it performs well, and, especially if you're in a Microsoft stack anyway, or working in Azure, it's a solid "batteries included" option. It leans into the reactive pattern, and while that takes some getting used to, it's actually a better state management strategy than Redux, I believe. I fell in love with observables while building the application I learned Angular for, so that influences my opinion here.
Next.js A couple of personal projects Next is great, in part for the reason I mention above; if you remove the distinction between front and back end, you double the coverage of your development team. At any rate, Next is the predictable end-state of a lot of React-based apps, I think. Whatever your architecture looks like, having at least the first-contact backend be closely coupled with the frontend makes sense. Recent security issues are concering, however. I'm still bullish on Next, and would love to use it professionally.
Flask Personal projects, like this website As part of my strange desire to use Python as much as possible, I've gone through a few cycles of reinventing my personal website using Python-based frameworks. I actually used Django and Wagtail for a few iterations that failed to launch. Problem is, I would get so fixated on configuration and models and all of the awesome features included that I'd lose track of my purpose. Flask, being so minimal, has been an absolute joy to work with. It reminds me favorably of Express, another framework that gives you the basics and then gets out of the way. Also, blueprints are really cool.
Express A couple of personal projects, and a take-home code test years ago Not much to say here, other than it shares the qualities I like about Flask, with the added benefit of being in a language I have a lot of experience using. I think it shines in microservices.
Tailwind A couple of years on personal projects Everyone should be using Tailwind. Speaking as a frontend developer, this solves so many problems with styling and markup. Atomic classes have been around for awhile, but adding a preprocessor turns out to be the magic sauce. Tailwind is the Holy Grail of CSS frameworks.
Bootstrap Nearly my entire professional life, rarely personally Like hipsters and emo, I find that, while Bootstrap annoyed me to distraction when it was part of my life, in its absence I have come to appreciate it for what it is. Bootstrap never claimed to be an all-in-one styling solution. It's even in the name: "Bootstrap". It's for prototyping something with style rules that are inoffensive and largely there just to make it look like something. In practice, it's used (best-case scenario) as a sort of opinionated reset, or (worst-case scenario) as a full UI library. How you feel about Bootstrap tends to track with whether you were exposed to it during its "everything is a div" era.
Testing Library 5 years personal and professional use Everybody uses Jest, and everybody has this idea that unit test coverage is the metric for good code. That's bunk on the frontend, and Testing Library acknowledges that and solves the problem by scaling testing up to the integration level and testing user interactions, which are where you'll see the bugs that matter. Pair this with Cypress or Playwright and you've solved your testing problems.
Django (mainly with Wagtail) A few personal projects over the years I hesitate to even include Django simply because what I've done with it is so limited compared to what it can do. It is a big ol' honkin' framework, but if you want a CMS that's pretty much ready to rock right off the bat, this is it. I've used it with and without Wagtail, and, for blogs, Wagtail is just amazing. I don't know why this hasn't entirely taken over WordPress's market share. It does everything WP does and more without being nearly as difficult to work with.