Open-source development on Flamenco @ Blender
Role: designer, frontend, backend, project managementTools: Vue.js, Go, Make, OpenAPI, Swagger, Git

Overview

Flamenco is the open-source render farm web application created by the Blender Foundation. The primary goal of this project was to implement a settings page to make it easy for users to configure the Flamenco Manager. The secondary goal was to implement UI fixes and enhancements to improve the overall user experience with the web application. I contributed a total of 20+ pull requests to Flamenco which included fixing bugs, refactoring code and implementing the following features:

  • Settings page
  • Multi-select of jobs, tasks, workers
  • Mass-selection of jobs by timestamp
  • Design

    Because Flamenco has over 20 customizable settings, I decided on a minimalistic form and divided the amount of settings into five manageable categories: Core Settings, Timeout & Failures, Storage, MQTT, and Variables.

    I decided on a side dialog and a subheader that scrolls along with the user’s screen, making it easy to access essential functions regardless of whether the user is at the top, middle, or bottom of the form. The side dialog provides a brief description about the page, along with a description explaining what each setting does. The description for each setting is dynamically rendered based on which input the user is currently focused on, minimizing clutter and only showing what’s necessary based on where the user is clicking. By keeping the descriptions in the sidebar, text is minimized on the form, keeping it clean and making it easy for users to scan through. The subheader acts as a navigation bar specific to this page, making it easy for users to jump to a specific section of the form. The subheader also contains the Save button, so that users can conveniently save their changes regardless of what scroll position they are at. Despite the fact that there are a lot of settings to tinker with, the sticky elements make it easy for users to jump around the form and find additional info without adding to the length of the page, minimizing the amount of time a user spends scrolling up and down a page.

    Mockup of Variables

    The Variables section was unique in that the user could dynamically add variables, and have multiple configurations for each variable. Several iterations revealed that more attributes were required, like the audience. Users should be able to add/delete variables, and also add/edit/delete various configurations for each variable.

    Initial implementation of Variables

    Final implementation of Variables

    Mentorship

    Under the Google Summer of Code 2025 program, I received mentorship from Sybren Stuvel at the Blender Foundation. Despite the 12 hour time difference (I was in California, USA and Sybren was in Amsterdam, Netherlands), we had weekly meetings to discuss updates, timeline, and any blockers. I worked in 1-2 week sprints, submitted pull requests, made changes accordingly after reviews, and repeated this until the code was finally merged into main.

    Takeaways

    As a front-end engineer, the main challenges of this project revolved around understanding the back-end code and how to make the most out of my development tools. Writing unit tests, API calls, and handling structs in Go was difficult at first but opened my eyes to new ways of thinking. While gaining experience in new tools and a new language, I also received exposure with best practices in testing, API’s, and low-level code. I learned how to run tests using make and VSCode, how to use cURL and Postman to test API endpoints, and how to utilize Swagger documentation and OpenAPI to manage and auto generate API code. I frequently referred to developer docs to better understand various go packages, including how to marshal/unmarshal with encoding/json, how to handle HTTP requests and responses with echo, and how to format durations with time. I developed proficiency with error handling and learned about the data types Go has to offer. Overall, I gained valuable knowledge in the realm of Go, testing, and API’s.