Extending BASTA-web

Janet Tang

I had the great privilege of completing my internship with the goal of developing my software-engineering skills through an ongoing web-development project—BASTA-web. This project aligns closely with my astronomy background, where I use Bayesian methods to predict stellar properties, and with my broader goal of building strong engineering capability. As a result, most of my internship work focused on extending and improving BASTA-web's functionality.

At the beginning of the internship, I set three main goals: to understand the BASTA codebase and its scientific purpose by studying its paper, documentation, and algorithms; to strengthen my web-development fundamentals by learning HTTP request/response flows, RESTful patterns, Django's MVT architecture, Tailwind CSS, Git workflows, and state-management concepts; and to integrate into the development team so I could begin contributing through our project-board issues.

I began with smaller tasks, such as improving the README and adding new model options, and then progressed to more complex full-stack issues. One example was implementing a dynamic show/hide section based on whether the user had uploaded valid photometric filters and magnitudes. This task surfaced challenges related to state management and to DOM elements being partially replaced during page updates, causing JavaScript selectors to fail when referencing elements by ID. I resolved these issues by restructuring the JS logic and using more stable selectors.

During the filter-detection work, my supervisor suggested adopting a toast notification system (using Tailwind's UI component wrapper). Toasts allowed us to display error messages in a fixed corner of the page rather than embedding them directly into the DOM, which had previously interfered with scripts controlling the distance and coordinate-system sections. I replaced Django's built-in error messages with toast components and, in doing so, deepened my understanding of UI state management and user-experience design in real-world web applications.

Another significant task involved improving support for managing stellar model grids, which BASTA relies on to infer stellar properties. Previously, the grid path was hard-coded, limiting the science team's ability to update, configure, or test new grids. I addressed this by adding a GridModel field to the Django database and defining grid types, configurations, and filter lists. This created a more modular, loosely coupled architecture where grid configuration is separated from the fitting logic. It also allows the science team to manage grids directly through Django's admin interface without modifying code.

Beyond the technical work, I experienced a strong sense of teamwork and collaboration. Even though most of the internship was remote, I always felt welcomed and supported by both the BASTA-web team and the wider ADACS group. I learned how to communicate effectively with technical and non-technical stakeholders and gained firsthand experience with the full software-development lifecycle. I also strengthened my Git practices, including writing clear commit messages and reviewing other developers' code. Overall, this internship allowed me to bridge astronomy and software engineering in a meaningful way, and I would highly recommend it to future students—especially those interested in learning the engineering side of science and contributing to astronomy and astrophysics through software development.


Check out some of other internship projects.