Senior Engineer
Job for Imbellus
My main job at imbellus was building an editor that allowed our task designers to construct tasks without needing regular engineering or graphic design support. Originally I was hired as a contractor to build out the initial version of the editor, but as the editor became a regular tool in our task creation process I was hired to continue developing and maintaining it. This role involved a lot of work directly with my users, adapting the tool to their needs as they evolved. In addition, I had to adapt some of the infrustructure on our main client app to support this.
Some of the features I’m most proud of included:
- A system for automatically generating both front-end and back-end code, and emulating the back end in editor - allowing the designers to build the task and test it in a manner that matched the production version
- A visual programming language with robust error detection, allowing the designers to construct logic without needing to write code directly for most situations
- A typescript compiler & editor, allowing the designers to write custom code where needed, and have it validated against the rest of the task
- The capacity to live-reload the preview, including 3D assets, with any updates to logic as you build
- Integrating a Unity3D based preview directly into the editor
In addition to the editor, I was occasionally pulled in to support efforts in other areas. For example:
- Adjusting the structure of communication between Javascript & Unity, to move the “source of truth” into our Javascript client - and have the Unity 3d view just match the state it is given.
- Help migrate from our tasks being embeded into a Unity desktop application, to our tasks running in a browser using Unity’s WebGL builds.
- Build a back-end execution layer in our Python server that could run Javascript code generated by our editor, and store it’s state in memory isolated from other instances - allowing for real-time, stateful task evaluation on the backend while a client is interacting with it on the front end.
- Develop a web-component based “shell” for our next-generation tasks - with each task acting as a micro-frontend, and the global state & connection to the server managed by the shell.