i5dr0id

Work / Vue Mastery, 2021 to present

Keeping the Vue ecosystem’s classroom running

Cloud Functions, storage hardening, content migrations and campaign launches for the platform that teaches Vue.js.

@@ storage, downloads and deployments @@
storage bucket readable and writable by anyone
authenticated, read-only, CORS scoped to production, staging and local
lesson videos served only from Vimeo
207 lessons in Cloud Storage behind subscription-gated signed URLs
4,724 profile images uploaded at any size
optimised in place, 2 MB limit on new uploads

Context

Vue Mastery is the video-course platform run by Vue.js core team members and instructors. It is a Nuxt 2 application on Firebase, with Flamelink as the CMS and Chargebee for subscriptions, maintained by a very small team. I joined in September 2021 as the engineer for the platform and its campaigns, full-time through the end of that year and on a part-time retainer since.

What I built

The first month was infrastructure; after that, whatever the platform needed.

  • A signed-URL download service as a Firebase Cloud Function, gated by subscription state and allowing free-tagged courses through, with the IAM roles and CORS scoped to exactly what it needed.
  • Storage hardening: the bucket went from public read and write to authenticated read-only.
  • The migration of 207 lesson videos from Vimeo into Cloud Storage, with Flamelink schema changes to track upload state, and a production run that optimised 4,724 user profile images.
  • An IP-to-location function so visitors in countries where Vimeo is blocked see a banner explaining why a video will not play.
  • The Chargebee cancel-subscription function, GA4 and Google Ads conversion tracking through Google Tag Manager, MailerLite reconciliation cron jobs, and GDPR compliance.
  • Every Black Friday, Holiday and Free Weekend campaign since 2021: landing pages, banners, coupon flows, countdowns and pricing changes, reviewed on staging with the founders and shipped on the day.
  • CircleCI deployments for staging and production, including recovering from a maxed-out deployment limit and a service-key incident.

Outcome

Downloads, storage and billing stopped generating support tickets. The retainer has run for five years. Along the way I contributed documentation and pull requests to the Vue.js and Pinia ecosystems.