cloud-based choir repertoire (no more paper records).
Explore the docs »
View Live
·
Report Bug
·
Request Feature
Table of Contents
Songchart is a web app built for the youth choir at Saint Alphonsa Cathedral Mississauga. It gives every member instant access to the full repertoire (song metadata, BPM, key, capo, and inline chord sheets or lyrics rendered directly in the browser) from any device.
Key capabilities: Song database
- title, key, BPM, capo, and transposition stored in Convex, browsable from any phone, tablet, or desktop with real-time sync across all connected clients Inline document viewer
- chord sheets and lyrics are stored as
.docxfiles in Convex file storage and rendered in-browser viamammoth, with no download required Weighted setlist generator - builds randomised rehearsal and performance setlists, with configurable song weights so frequently-needed songs appear more often Protected write access
- JWT-based authentication gates song creation and deletion, keeping the database clean
| layer | tools |
|---|---|
| frontend | |
| backend | |
| language | |
| deployment |
- Node.js 18+
- A Convex account (free tier works)
npm install npm@latest -g-
Clone the repo
git clone https://github.com/teddycitrus/songchart.git cd songchart -
Install dependencies
npm install
-
Initialise Convex — this will prompt a GitHub login, create a project, and write
NEXT_PUBLIC_CONVEX_URLto.env.localautomaticallynpx convex dev
-
Add the remaining values to
.env.localNEXT_PUBLIC_CONVEX_URL="https://your-deployment.convex.cloud" JWT_SECRET="a-long-random-secret"
-
Start the development server in a second terminal
npm run dev
Open http://localhost:3000 to see the app.
Browse the repertoire
the home dashboard lists all songs with their key, BPM, and capo. Click any song to open a detail view with the chord sheet rendered inline from the .docx file stored in Convex file storage. The list updates in real time across all connected clients.
Setlist generator
open the setlist picker, configure song weights if needed, and generate a randomised set. Songs with higher weights appear more frequently in the output.
Add or remove songs
authenticated users can create new entries or delete outdated ones. The song schema looks like this:
{
"name": "10,000 Reasons",
"key": "G Major",
"transpose": 0,
"capo": "none",
"bpm": 77,
"beat": "4/4",
"storageId": "<convex storage id>"
}Backend functions — all data operations are handled by Convex functions in convex/:
| function | type | description |
|---|---|---|
songs.list |
query | Fetch all songs — reactive, auto-updates on change |
songs.create |
mutation | Create a new song entry |
songs.remove |
mutation | Delete a song and its stored file |
songs.generateUploadUrl |
mutation | Get a short-lived URL for .docx file upload |
songs.saveStorageId |
mutation | Persist a file's storage ID onto a song document |
- Song database with full metadata and inline
.docxviewer powered by Convex file storage andmammoth - Weighted setlist generator for randomised rehearsal and performance sets
- Full CRUD; update and delete operations exposed in the UI for authorised members
- Multiple repertoire support for managing separate song lists across special masses and performances
See the open issues for a full list of proposed features and known bugs.
Contributions are welcome. If you have a suggestion, please fork the repo and open a pull request, or file an issue with the enhancement label.
- Fork the project
- Create your feature branch (
git checkout -b feature/my-feature) - Commit your changes (
git commit -m 'Add some AmazingFeature') - Push to the branch (
git push origin feature/my-feature) - Open a pull request
Distributed under the MIT License. See LICENSE for more information.
Project Link: https://github.com/teddycitrus/songchart
Live App: https://sacmchoir.vercel.app