Multilingual Aphasia and Dementia Research Web Application Overview
What is it? A research management suite built with Django, Django Rest Framework, htmx, and PostgreSQL. Used by research labs all over the world. Please contact me for view-only access.
Building for HIPAA Compliance The Patient management section of this application relies on obfuscated patient identification codes that only the research and clinician team can translate outside of the application. This both enhances security and HIPAA compliance.
Database Data is stored in an RDS PostgreSQL cluster (2 dbs - 1 read / 1 read/write) with failover and automated nightly backups.
Tailwind Tailwind makes styling a breeze (especially using their pre-designed components), but adds a whole lot of ugly classes to the templates. Some elements end up having over 6 classes for styling alone.... is this really where years of CSS development has gotten us? Anyways, it does work well.
For this project I used one of the base application templates and now I just edit bits and pieces to fit what the customer wants. Saved me an incredible amount of time.
Authentication Django-oauth is one of the easiest ways to add social authentication to your django apps. Hence the name, oauth2 is the protocol used for auth. Specifically for this application, Google was decided as the only offered identity provider. Authentications are logged separately and sent to splunk..
Monitoring From experience, there is one thing that AWS Cloud Watch and Splunk have in common. They love money. Be VERY careful of the amount and kind of logs you are sending from aws to Splunk. That being said, we are making sense of the Cloud Watch logs in custom built Splunk dashboards that do the heavy parsing for us.
Sentry Application Monitoring It does what is advertises. I set up alerts when certain functions surpass threshold. I get notified if lambdas are returning errors. It warns be when specific functions are reaching api limits. It's cool, and worth the money.
AWS Task Queue Solved my problem needing to run lalmbda functions on schedules. And A LOT of them. I also have some python scripts that users can trigger to create new schedules (add tasks to the queue) for data processing needs.
HTMX and Alpine I've been wanting to use htmx and alpine on a larger scale project for some time... when I heard the customer specifically did not want a SPA, no fancy interactions, and the ability to have the webapp open in multiple tabs and browsers at the same time all having different functions, I went straight for these tools. HTMX was a breath of fresh air from having to deal with the popularity of React and Vue. I'll go deeper on htmx in another post, but is has worked really well for removing page load on specific elements, data refreshing, and search! I did not enjoy Alpine as much because it has its own opinion on how things should be done and made my code look messy. To be clear, alpine was only used for interactions and responsiveness (nav bar etc).