No script... oh no.

Considering I identify as a Javascript developer, I made this site for scripts. But, alas, progressive enhancement is important in this world we live in, so I've tried to provide the textual bits of my site without any of the fluff.

The Developer Site for David HicksSkip to contentAboutPortfolioResumeContact


I'm a pharmacist and a Typescript developer from Asheville, North Carolina. I'm currently searching for an entry-level software career, preferably as a front-end or full-stack development. Although my background is in healthcare, I'm open to developing for any field, so I'd love to hear what projects you could use help with.

Style of Development

I prefer to use a paradigm, language, or framework fits the project I'm working on. So far, that has meant TypeScript alone or in combination with Angular or Lit, with an emphasis on object-oriented, component-based development. Over the past year, I've also become invested in RxJS, and have learned some Python for shorter scripts and web scraping. In the backend space, most of my experience is in MySQL/NodeJS, but I've recently spent time getting to know Firestore and Firebase Functions.

Pharmacy and Programming

Medical software can be more harmful than helpful, with alert fatigue, poor standardization, and medical errors threatening both patient safety and provider efficiency. My hope is that my understanding of medical terminology and pharmaceutical work flow can be an asset to my development team, and that I can serve as an intermediary between software developers and healthcare staff.


Pharmacokinetics Components

The pharmacokinetic web components project was developed to provide a customizable, portable, and interactive platform for pharmacy professors to demonstrate how changes in pharmacokinetic properties affect drug absorption and metabolism.

LitElement was used to create performant web components RxJS was used to handle user events Typescript is my preferred superset of Javascript Rollup was used for bundling each component SEE DEMO

Project Description

The pharmacokinetic web components project was created to supplement the UNC Eshelman School of Pharmacy's pharmacokinetics curriculum. I was tasked with upgrading our school's interactive pharmacokinetic graphs so as to improve scalability and ease-of-implementation. I decided to use web components for the project in order to ensure interoperability with any future frameworks UNC wanted to use. The resulting web components render an interactive charts with a realtime equation and auto-generated range-inputs.


Multiple Dosing EquationsMultiple dosing equations require a kinetic function to be run for each dose given to a (theoretical) patient. Alongside plot generation, this is computationally intensive when working with larger numbers. To improve performance when interacting with the component, web workers were used to allow for computation on a separate thread, which greatly improved performance on lower-end devices.
Ease of useBecause the audience for these components is pharmacy professors, I had to make sure that any setup was intuitive -- in other words, no LaTeX or MathML knowledge should be required to create a chart. MathJax could render ASCII, but was very slow. I decided on KaTeX, which meant I had to transform an ASCII input into LaTeX. Luckily, a library called ASCIIMath2Tex made this transformation easy and efficient.

Elder Drug is an Angular PWA that uses the RxNorm API in order to simplify screening medication lists for drugs on Beers Criteria. Beers Criteria is a list of medications to be used with caution in adults 65+.


Project Description

Beers Criteria is distributed as a PDF containing nearly 300 separate entries spread across several pages. Traditionally, a student applying the criteria to a patient's medication list could dedicate a few minutes per drug screened, which can become daunting when screening dozens of medications per patient. Elder Drug was created to make working up patients easier. It adds a comprehensive search that permits multiple drugs in a single query. Elder Drug also allows searching brands and generics even for entries pertaining to an entire therapeutic category (e.g. searching 'Abilify' would return any entries pertaining to antipsychotics).


Therapeutic Categories

Drug classes and therapeutic categories do not have uniform nomenclature. The consequences of this can be illustrated with amitriptyline: it is an antidepressant, but if I associated all antidepressants with the effects of Amitriptyline, relatively benign drugs like Sertraline would be categorized as anticholinergics. As a result, I had to find drug classes that accurately corresponded to each entry on Beers Criteria while also containing a queryable ID on RxNorm. To do so, I created a compound index using therapeutic categories and classes from both DailyMed and Veterans Affairs.

Database StructureA MySQL/NodeJS instance hosted on UNC's OpenShift service was initially used to host Elder Drug's database. However, the database was migrated to Firebase upon the realization that I'd eventually be graduating. If I were to host all entries on Firebase, my 20k queries/day free tier could be reached with relatively few users (with 20 drugs queried in a single session, it would take only 1000 users to hit my limit). Considering my database of brand and generic drug names contains around 1600 drugs that each correspond to one or many of the ~300 entries on Beers criteries, I came to the conclusion that it would make more sense to serve all entries with the user, and provide a single key-value index relating drug names and their respective entry numbers (i.e. [drugName]: [...entries] ).