PhD Student at the University of Chicago

More about me


Download my CV

How I made this website

For my first real post, it seems fitting to talk a bit about how I made this website and what lessons I learned. I know there's nothing groundbreaking here (in fact, there's a lot of basic stuff still to implement!), but my goal wasn't necessarily to have an incredible website. All I wanted was a place to store and share things I do that I previously didn't have a great outlet for. My primary requirements were control and speed. These influenced the technical choices that I made, which I will go more in depth about below. As for the content that I think belongs on a personal website, I plan to discuss that in a future post.

My Background

While I have been working with Python for a while, I didn't have any html/css/js experience until after I finished my undergrad degree. When I was a lab manager at UMASS, the PI I worked with wanted to use Amazon's mechanical turk to display websites online. If you haven't heard of mTurk, the basic idea is that people log on and do 'Human Intelligence Tasks' (HITs) which usually take a few seconds each and pay a few cents. To create these experiments, I had to learn html/css/js. After this, I had the skills to make my first site, which was a simple static site hosted on AWS. It had all the basics, including my cv, a blurb about my research, and pdfs of my publications. More recently, I've been wanting to do something with all the stuff I make, so I decided it was time for an upgrade.

The Tech

There are a few choices I considered before ultimately settling on Flask as my backend. When I was more interested in the blog part of the site, I thought using Medium, Wordpress, or Github Pages + Jekyll would work well. The major reason I didn't go with any of these choices was because I wanted a lot of flexibility in terms of how I presented the things I created. With my own site I could create interesting, interactive experiences that might not be possible with these other platforms. I wanted everything possible to be in one place, so ultimately I knew I had to build it myself. As a bonus, I got to learn a ton about backend development, which I knew nearly nothing about.

After making that decision, I had to decide what backend to use. While I knew some javascript, python is definitely my best language, so I knew I'd need a python framework. I looked at lot of frameworks, including Django, Pyramid, Bottle and Tornado, but it seemed like Flask was nicely suited for a small project with a lot of flexibility. I decided to go with SQLite for the database for simplicity, although if I ever decide I need more power I will probably switch over to Postgres. From there, I decided to go with Digital Ocean for hosting and followed their helpful tutorials for setting up uWSGI and Nginx to serve the Flask app. And then all I had to do was write the frontend! As I mentioned above, I was interested in speed, so I kept everything on the frontend as lightweight as possible. Right now, there's no javascipt at all running on basic pages (although that will change as I eventually include more features).


As of right now, I'm pretty happy with where the site is at. I probably could have gotten 90% of the functionality I need in way less time with one of the other options I mentioned, but I was happy to learn about flask in the process. It's also much more fun to learn about how to work with a flexible system versus struggling to implement something on a simplified system.

If you want to check out the code that runs the site, it's available on my github.