Inspiration

ScoreSync is a role-aware collaboration workspace for school and community music ensembles. It helps directors, section leaders, and musicians stay consistent while working from different parts, different rehearsal experiences, and different responsibilities.

Preparing for a concert is collaborative, but rehearsal feedback is often inconsistent. A director works from a full score. Musicians work from individual parts. Section leaders help coordinate their sections. People miss rehearsals, hear different instructions, annotate different versions of the same music, or pass along reminders through word of mouth. A note that was obvious to one person can completely fail to reach another.

Instead of relying on scattered PDFs, screenshots, messages, and verbal reminders, I wanted to build something that gives each person the right materials and a structured way to communicate about them.

What it does

ScoreSync supports three practical roles:

  • Directors create ensembles, manage roster requests, create concerts and pieces, upload official files, assign musicians to concerts and parts, and share rehearsal notes.
  • Section leaders can view their section library, help with delegated part-assignment work, review musician suggestions, and coordinate shared section feedback.
  • Musicians request access to ensembles, see their assigned concerts and official parts, keep personal annotations, and suggest comments for review.

Membership details—including instrument, grade, and leadership role—are scoped to each ensemble rather than permanently attached to a user. A musician can play flute in one group, percussion in another, and have a different role in each.

Directors can upload private conductor scores and official instrument parts. Musicians can access only the concerts and parts assigned to them, while directors retain a full-library view.

The annotation system supports text and symbol notes placed by measure and location on rendered PDF pages. Notes can be personal reminders, shared notes for a relevant section or official part, director notes sent from a conductor score to selected instrument parts or multiple sections, or musician suggestions waiting for review.

Because a conductor score and an individual part do not have the same PDF layout, a score coordinate cannot automatically map to the correct location in every part. ScoreSync preserves measure context and lets someone intentionally place one shared global marker on the target part so everyone relevant sees the same shared location.

Musicians can suggest annotations on their assigned official part. Until reviewed, the suggestion is visible only to the musician, relevant section leader, and director.

  • Approve: when the comment is relevant and accurate, turning it into a shared annotation for relevant musicians.
  • Disregard: when it is inaccurate or only useful to the individual musician, returning it to that musician as a personal note instead of deleting their work.

How I built it

I started with a small Vite + React proof of concept, then used Codex as a development collaborator to turn it into a deployed full-stack application.

ScoreSync uses:

  • React, TypeScript, and Vite for the frontend
  • A Node.js API with OpenAPI-generated clients
  • Supabase Auth, Postgres, Storage, and Row Level Security
  • Private PDF storage with short-lived signed links
  • PDF.js for in-app PDF rendering and annotation overlays
  • Vercel for the frontend and Render for the API

I used Codex throughout the process to inspect the existing codebase, scope focused milestones, implement features, generate and review migrations, trace production failures, and run type/build checks.

Challenges I ran into

The hardest part was trying to visualize and remove friction at every collaboration point between directors, section leaders, and musicians.

Everyone works intimately with the same music, but they should not all have the same permissions or see the same materials. I had to keep thinking through edge cases and potential conflicts: who can view a part, who can publish a comment, what happens when a note applies to multiple sections, whether a suggested note is accurate enough to share, and how to avoid duplicate or contradictory annotations.

Deployment also surfaced bugs that were invisible locally: expired signed PDF links, nested-route refreshes, CORS configuration, and Row Level Security policies behaving differently in the live app.

Accomplishments that I'm proud of

I am proud that ScoreSync is not just a visual prototype—it is a deployed, role-aware workflow.

The project has secure private files, real membership and concert-participant permissions, per-musician part assignment, section-leader responsibilities, in-app PDF viewing, shared and personal annotation modes, cross-part annotation placement, and musician suggestion review.

I am especially proud of the cross-PDF annotation model. Instead of pretending that a placement on a conductor score automatically fits every individual part, ScoreSync preserves the musical context and allows one intentional shared placement on the relevant target part.

What I learned

I learned that the product design and database design had to match. Role permissions, Row Level Security, membership-scoped access, signed links, versioned files, and review workflows all affect whether collaboration actually works in practice.

I also learned to be methodical with Codex sessions, Git commits, Supabase migrations, personal notes, and unresolved bugs. Keeping work scoped and committing frequently made it possible to trace issues clearly.

Most importantly, I learned that deployment is not the final checkbox—it is part of building the product. Fixing live issues required tracing requests through the frontend, API logs, and Supabase policies.

What's next for ScoreSync: Consistent Collaboration for Music Ensembles

Future versions could add annotation discussion threads, review history, conflict or repetition detection, and richer notation tools.

But the current version already proves the core workflow: give each musician the correct part, keep rehearsal feedback consistent across the ensemble, and make shared musical decisions traceable without losing personal ownership.

Built With

Share this project:

Updates