Surface Evolver
This a Surface Evolver Web Application
Intoduction
This is my capstone project - the Surface Evolver web application. This is an attempt to implement a web-based GUI for the program to make it easier for the researchers use the program.
Technical Details
Considerations and Implementation
The original code, written in C, was designed to be portable. However, it wasn’t intended for web application use. Consequently, I had to create an API in C to expose the core functionality and then use CFFI to wrap that API.
The primary challenge was ensuring that most of the existing code remained intact. Given the original architecture of the Surface Evolver, determining the appropriate architectural approach for this project proved difficult. Faced with time constraints, I opted for the simplest approach by implementing only the necessary functionality to interact with some of the pre-bundled files.
Consequently, only a small portion of the full functionality is currently implemented in this project.
Tech Stack
- React.js + Three.js
- FastAPI
- Python CFFI
- Tailwind CSS
- Docker Compose
- CMake for compiling the C code
- Pytest + ctest for backend testing
Conclusion
When I first started working on the project, I had an ambitious idea to create a comprehensive IDE for Surface Evolver. However, the challenge was time and scale. As the sole developer working on this project, which was also for my class, I realized that building an IDE from scratch would be an incredibly difficult and time-consuming endeavor. To address this, my advisor gave me a reality check and suggested that I focus on creating a simple web app that could fulfill my class requirements.
Looking ahead, I would like to play around with this project a bit more. One of my ideas is to convert the web app into a desktop application using Tauri. I already have the foundation laid out in the code I’ve written. So, the only remaining task is to expand the functionality to transform it into a full-fledged editor, rather than just a tool for working with multiple files.