Soniq

The 80% Schedule

The 80% Schedule

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.

Soniq in Beta

Soniq in Beta

Four years and counting

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. 

Soniq Changelog January 2024

Soniq Changelog January 2024

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.

Data manipulation and hair-loss with WASM Bindgen

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.

It takes time to fully understand the function software will need to perform

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.

Monorepo p2 - The CI build and deploy

Monorepo p2 - The CI build and deploy

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.

Deploying a Monorepo to Vercel with Github Actions p1

Deploying a Monorepo to Vercel with Github Actions p1

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.