One of the most common pain-points I hear from the Music Teachers (VMT) that I have spoken to over the last few years has been planning student lesson schedules for the next school term. I have had a few false-starts over the last few years on this, I keep uncovering yet another piece of foundational scheduling functionality that we need before this can start. Anyway, Soniq now has a solid scheduling foundation built into the core, and with Soniq in beta, this foundation is becoming pretty mature. Now’s my chance to try again.
It’s been almost four years now since I started on a side project to help Esther. Sometimes I ask myself: why am I still doing Soniq? After a busy week at work, I seem to get energy from doing a very similar thing: writing code, thinking about data, thinking about algorithms. It’s become a labour of love and more than just a business venture.
Create and Learn
I think it’s the making of a new creation; the thought of helping someone out there with every day needs; the thought that I might be able to excite someone or improve their everyday life. At the same time it has proved to be an invaluable learning experience for me.
Over the last year I have been working hard during my 20% time, behind the scenes, towards a basic working version of Soniq. Soniq is a platform for instrumental teachers, it’s purpose is to make their lives easier and give them opportunity to build engaging learning experiences to complement lessons.
Once again, I have had a huge amount of help from a few Soniq Advisors, instrumental teachers with different backgrounds who have given a lot of valuable insight.
I’ve been trying to move some of the Soniq application logic into WebAssembly using wasm-pack. I’m not sure whether it makes total sense at the moment, but I figure, the best way to find out is to do it and analyse the results.
I have been building an invoicing section which will take a set of lessons and create the corresponding invoices. It’s a relatively clean operation, I can feed in a load of lessons and contacts and it should respond with a list of invoices and invoice lines.
I’m starting to add Invoicing capabilities to Soniq. While designing the schema for an invoice, I needed to consider how to model the billing details. After talking with Esther, Sam and Jamie it is clear that they all handle invoicing clients in very different ways. Sometimes and invoice can be sent directly to the student, and other times it should be sent to a parent or carer contact. After wrestling with how to allow for this flexibility, I realised two things.
This is the second part of a series where I go through my monorepo setup with Github Actions deploying to Vercel. Links to all the articles in the series are at the bottom of the page.
In this article we will look closely at the build and deploy steps to the pipeline.
CI Pipeline
The main CI pipeline is handled by Turborepo. Any package which can be deployed defines a ci script within the package.json. This means that I can entrust Turborepo with only running changed applications as well as keeping the setup for each application encapsulated within.
I have recently added wasm-pack builds into my Soniq project but found that it is a nightmare trying to get rustup and cargo installed in the Vercel build alongside my yarn monorepo.
I have been planning to migrate my deployments to pure Github actions and this was the push to strap myself in and get my hands dirty.
So here is part 1 in a series where I will explain the steps I have taken to get my monorepo building and deploying efficiently with Github Actions using Turborepo and a few, key, architecture decisions.