Animal Aid
When I got to Tufts I didn't even know JumboCode existed, but my RA recommended I give it a look because I was interested in coding and philanthropy. On a whim, I applied to be a developer and was pleasantly surprised when I was accepted onto the Animal Aid team. After a year of hard work and a whole ton of learning, I walked away with a love of web development and a cool codebase I can point to and say "I did that!".
Our goal
The Animal Aid project was tasked with creating a website that pairs up Tufts students with local dog owners who were too busy or not physically able to walk their dogs regularly. The students would be paired up based on their schedules and dog preferences, then put in contact with the owners if they were matched. Previously, Animal Aid was doing all this management with an Excel spreadsheet, so this would be a huge upgrade and allow them to significantly expand their organization.
The hero's journey
As someone with no prior web development experience and one of only two freshman on my team, I was pretty nervous hopping on our first team Zoom call. I couldn't help but feel like everyone else was a godlike web dev guru and I was a simple little fish waiting to be caught up in a current and swept away. And yet, a core tenant of JumboCode is that being willing to learn far outweighs prior experience. And indeed I quickly learned that few people on my team had experience with Django - our framework of choice for the project - so we were all in the learning boat together.
Every single one of my tickets that year was a battle of wits. I didn't even take my first CS class at Tufts until spring, so I almost entirely relied on what little Java and Python I had taught myself in high school for my programming knowledge. I leveraged the knowledge of my teammates and got help from the club-wide Slack to solve tricky bugs, and sifted through Google for everything else. By the end of the year, I had a grasp of the template-based web framework Django, PostgreSQL, and Amazon's S3 buckets. The entire codebase was Python, so I got to further my craft in that as well.
My work
One of my first big challenged was implementing the schedule editor. The Animal Aid staff wanted the ability to add dog profiles to the site along with their individual hour-by-hour schedules and profile image. We planned on using Django's built-in admin UI for this but quickly realized it was highly limited when handling a large number of values. Since dogs had availabilities recorded for any hour between 9am and 6pm, 7 days a week, there were 63 boolean values to track. This, along with strings like contact info and name, would cause a lot of duplicate code and things would get messy fast. We needed more programmatic freedom than what Django ships with to display and edit all these values.
I used Python to pull dog info from PostgreSQL, then push them to JavaScript as JSON, which finally populates text fields and a table of checkboxes - generated by Django's template language - representing the dog's schedule. Each cell dynamically changed color as an extra visual indicator that the time block was checked. Alongside this I built a page that lists all the active dogs with their profile images, and lets staff add new dogs without needing to touch Django's admin page.
While the dog profile feature was one of my larger features, I was also a significant contributor to the site's core matching algorithm. This algorithm considered users' dog preferences and their respective schedules to create matches with three goals: maximizing dog preferences, maximizing number of matches, and keeping any single user from having too many matches. I brainstormed with my PM and TL to plan out the algorithm and ended up writing the majority of its implementation.
I also implemented the password reset feature using Django's built-in user authentication system and SendGrid.
signpost care to venture further?
JumboCode - web development for social good
Animal Aid - where I was a developer
Eboard - where I did leadership things
TUPIT - where I was a tech lead