Open Orchestras

Open Orchestras

2019 – PresentSee live
Steve on X

Open Up Music support Music Education Hubs, arts organizations and schools to create orchestras that are accessible to young disabled people. I built the Open Orchestras Laravel app, the members' portal behind those orchestras, and the Django API that powers The Clarion, their accessible instrument.

I've built and run the portal since 2019: teaching resources, evaluations, a community forum, and the admin that ties it all together.

Open Orchestras

Syncing with Discourse

Open Up Music care a lot about accessibility, and it was important to them that the experience be consistent between the Laravel web app and their Discourse community forum.

Discourse supports SSO out of the box, and there's a reasonably well maintained Laravel library for integrating it, so syncing users and sessions wasn't a huge problem. Members sign in once and land in Discourse already signed in, with their details kept in sync, and only orchestra members get in. However, Open Up had quite a complicated design in mind, one they wanted to share between the systems.

Despite this being a server-side rendered project rather than a single page app, I decided it made good sense to scrap the built-in Discourse navigation, and build our own in Vue.js, driven by APIs and props. Both Discourse and Laravel could render it, and the systems needn't even talk to each other about it: the Vue.js components query the data they need from the Discourse and Laravel APIs, if they weren't already given it through props on page load. A command writes the web server rules that inject it into Discourse. It seems like a crazy idea, and it works really well.

Open Orchestras resources
The shared navigation, on the resources section

Integration with WordPress

Open Up Music wanted Open Orchestras to feel like an integrated experience, so it made sense for the My Orchestra portal to sit alongside their existing WordPress site.

I did this by serving as much of the Laravel app as possible under a /my prefix, and routing those URLs to it in NGINX.

My Orchestra
My Orchestra

A resource library made of blocks

Teaching resources are pages built from blocks (text, images, video, audio, case studies, quotes and grids), with drafts, previews and per-block visibility, so staff publish without me.

Open Orchestras' musical resources
Musical resources, built from blocks

Measuring what matters

Educators track each young musician's progress through milestone surveys, from a baseline onwards, and Open Up Music turn them into evaluation reports for each orchestra. The surveys are built in Formstack, and come back through a signed webhook that marks each one complete. Participants' names are kept out of the admin and out of the survey links.

Admin and reporting

In the Nova admin, staff invite whole orchestras at once, impersonate members to help them, export anything to Excel, and see evaluation and community stats at a glance.

Pages in the Open Orchestras admin
Pages in the admin

Accessible from the start, and kept current

Skip links, screen reader fixes and keyboard support were there from day one. Since then I've kept it on every Laravel release from 5 to 11, and on PHP 8.4, with CI.

References

Paul Masri-Stone, Open Up Music

After working with Steve when I was a Project Manager at Simpleweb, I knew I could bring him into client projects with confidence.

Over the past couple of years I've contracted him to build a Django REST API and a sizeable Laravel app.

He is insightful, competent and actively engages in discussions about technical solutions.

Paul Masri-Stone, Open Up Music