tapped = false, 1500); navigator.clipboard?.writeText(location.href.split('#')[0] + '#ten-weeks-to-launch')" >Ten weeks to launch
I built the API in about ten weeks in 2017: the instrument's content, accounts, and subscriptions checked against renewal dates.
tapped = false, 1500); navigator.clipboard?.writeText(location.href.split('#')[0] + '#signed-in-per-device')" >Signed in, per device
Each Clarion signs in with tokens tied to that device, checked on every request, with a limit on devices per account. Deactivating a user cancels their tokens straight away.
tapped = false, 1500); navigator.clipboard?.writeText(location.href.split('#')[0] + '#releases-saved-work-and-content')" >Releases, saved work and content
The API hands out new app releases, saves users' work to the cloud, and serves three versions of the instrument's content formats, with content groups controlling who gets what.
tapped = false, 1500); navigator.clipboard?.writeText(location.href.split('#')[0] + '#an-admin-for-open-up-music-staff')" >An admin for Open Up Music staff
Users, devices and tokens are managed in one place, with readable password suggestions, renewal shortcuts and a count of devices active this academic year. Staff publish new pieces of music and app releases there too.
tapped = false, 1500); navigator.clipboard?.writeText(location.href.split('#')[0] + '#kept-current')" >Kept current
Off Heroku onto its own server, then Django 5.2 and Python 3.14, with every request logged and tests at 100% coverage.
