How do I make a live "Up next" list

Let’s say I have a database of Singers, and another database of Karaoke Songs.
Here’s the songs: https://www.seanarenas.com/songs
Here’s the singers: https://www.seanarenas.com/karaoke-singers

I’d like to have a page where I can, as an Admin only, select a singer, then add a song to their list to sing.
When they’re done singing it, I’d like to mark it as Sung.
When I select their ID later, I’d like to see what songs they’ve sung, and how many times, and the last date they sang it.

Then, there should be a client-facing page which lists all of the upcoming songs in the system. If I have 1 song for me, 2 songs for Vaughn, and 2 songs for Christel, they should see a table that shows:
Singer Next Song Next Next Song
Sean “Rapture” by Blondie
Vaughn “Californication” by Red Hot Chili Peppers “Enter Sandman” by Metallica
Christel “Metro” by Berlin “I Kissed a Girl” by Katy Perry

That page can go here: https://www.seanarenas.com/karaoke-lineup

Then the singers can look up that list on their phone or I can display it on the screen between songs.

The song database is already built, the singer database will be built real-time as new singers show up. What’s my next step for developing this cool tool in Wix?

You could perhaps create a collection with rows containing: artist (possibly artist id), song name, a running song number (indicating order for that artist), and a boolean indicating if the song was performed or not. This collection would be edited by an admin. To populate a table of artists with their upcoming songs, you could sort by artist and song number, filter out all “performed” songs, and then the result would be a list of artists and the songs they are too perform. Each artist might have more than two, but you wold limit the display to “next” and “next next”. You will need to watch for empties - an artist might have a “next" song, but maybe not a “next next”.

This is just a suggestion, which should at least get you pointed in the right direction.

I am looking for something similar… I think. I want to build a page that uses a form instead of a traditional menu and only displays information that is checked off.

Yisrael,
Trying to plan this out …
So make a Database called Karaoke Singers, which contains a list of the people who sing at my karaoke gig.
Then create another Database called Karaoke Lineup, with a primary field of Roster Position showing a number, 1 being the first singer on the roster, the highest number being the highest singer number on the roster (let’s call it 15). In the row with that number is a Reference Field to the singer’s name.

Finally, a Database which references … what - either the Roster Position in Karaoke Lineup, or the Singer’s name? And also has a text field for the song (which will eventually become a reference field once that song database is completely populated).

I want to make sure I have the structure planned right before I jump in and start creating databases and adding data all willy nilly.

Hey Sean,

IMHO - I would take a simple approach and just use one collection that looks like this:

  • artist name

  • artist id (useful since the id is unique)

  • artist roster position (a non-repeating number)

  • song name

  • song order number (non-repeating number indicating the order to be performed for that artist)

  • performed - a boolean indicating if the song was performed or not
    Note: non-repeating means that the numbers just keep growing “forever”, much like a serial number. You might opt for a nightly roster, where you’ll always start at 1 and go up to the maximum roster slot. It’s your call depending on how you want to use it. I designed my collection so that it could also be used to show performance “history”.

The collection can be sorted by artist (artist id?), artist roster position , and song name , and can be filtered by performed so that all songs already performed can be left out.

Sort the list by artist roster number and song order number, and filter out the songs that have already been performed and you will now get a list of artists in the order they are to appear, along with the songs that the artist is to perform, in the order that they are to be performed.

Create the collection and play around with differerent sorting and filtering combinations and you’ll see how easy it is. You’ll probably also come up with some other interesting uses for the list as well.

Yisrael

I created a database very similar to what you suggested.
I want to note that the “Artist” is the band who originally wrote the song, the “Singer” is the karaoke performer who will be singing it tonight, so it looks like this:
Song Title (e.g, “Rock Lobster”), text field for now
Song Artist (e.g., “The B-52’s”), text field for now
Singer ID (e.g., “SeanArenas”, a reference field)
Singer Roster Position (a number field)
Song Roster Position (a number field)
Performed (Boolean)
Performed Date (Date and Time) (I’d like to set this to the current date and time when I click “Performed” on the HTML side)
Skipped (Boolean) - This should also remove the song from the list, but marked as Skipped, because the singer changed their mind as to what song they want to sing, they left, or the night ended before all songs sung (5-15 songs like this every night)

Since the administration functions would only be visible to an Admin (me for now), do I need to make a separate page for admin functions, or just put it all on one page? I mean the roster display, and the admin tools - what the users will refresh and what I will refresh.
Or maybe there’s a SEO reason to make them different pages - I can more easily track user’s usage of the roster page compared to my usage of the admin page.

I have yet to make a user-facing page where a database can be altered. I assume the easiest ways is with input fields (text or drop-down) and associated buttons. I’ll probably want one page for “Add a singer,” another for “Add a song or make changes to the roster” - or is it more efficient to do that all on one page?

Any other advice on how to get started making a Page to change databases, especially a kind of live one designed to be refreshed by users a lot?

I have a feeling that once I can achieve the objectives above, that adding a form for users to submit songs to me will be a piece of cake. What’s the best way for me to get notifications of submissions - is there a way to text me that one was submitted?

Another question - on the HTML page which displays the roster, what’s the best way to get:

Singer name … Next song … Next Next song … Next Next Next Song

I’ll come up with better titles eventually, but seriously, some singers like to put in 2 or 3 songs in advance (I think to “claim” a song, so no one else can sing it that night) and I might want to display singer name + 3 songs for each person. 4 is right out. That’s beyond neurotic singers and no one has time for that, lol.

So which tool would do this best? Lists & Grids > Tables ? Customize a Repeater?

I assume my dataset will look something like this:

Cool, I did a successful test run:


But that’s just one song. How do I get the next two songs to list after that?
Another reason for displaying several upcoming songs is that it helps people to get a feel for what others are singing, and they get ideas for what songs to put in for their next or next next songs :slight_smile:

That page is here, by the way:
https://www.seanarenas.com/karaoke-roster

Added two more singers and they show up great, but …
I think I want to have the singer roster be in a separate database from the song order. Otherwise, every time I enter a song for a singer, I have to correctly specify the singer’s roster position.


I really need to find a way for the “Next” song to appear to the right, instead of beneath, the song that’s displayed.

Thanks for your help!

We’re approaching the weekend, where I’ll have the most time to work on this - any thoughts on this?

Do you have user profiles set up so people can rate the performance, request the user sing it later, etc.? If it included an email when requested you might get better attendance from people feeling wanted. Also, have you considered recording the performances and offering the downloads for sale on the site? You would need to get permission from your users but it could represent more income!

Not sure I’d want to charge to download the videos but would be cool to put a link to performances by a singer on YouTube. But I’d need a volunteer to record and upload - running the gig takes a lot of attention and I can’t be recording. Nor can I record a whole night on a static camera then edit it later - 5 hours of gig would make for a lot of editing time.

However, ratings might be cool!

Anyone have any thoughts about how to make the extra songs appear in columns and not rows? So it’d be like:
Singer 1: Song 1, Song 2, Song 3
Singer 2: Song 1, Song 2
Singer 3: Song 1
Singer 4: Song 1, Song 2, Song 3

etc.

Selling downloads
I wasn’t talking about video. I was talking about just recording the audio. I am sure people would pay a few bucks to have a recording of their drunk buddy singing crazy train. I bet there are people who would pay to dl a collection of their favorite singer as well. There is a way to sell or share audio and video files on wix with a button click.

Requesting Songs
Do you give people the option to request a song for another singer or just themselves? I used to do Karaoke every Thursday night and people would as me to sing certain songs occasionally. What if people requested for others and the person being asked had to approve the request to get put on the list? Even if they weren’t there they’d get the requests in an email and it might prompt more people to show up.

Online radio
Do you have a radio station where people can go to your website and listen to prerecorded or even live music from your gigs?

Online Karaoke
Do you offer people the ability to sing remotely? I assume that’s more than wix offers but that could be cool! Have virtual bars where people go to sing kind of like yahoo chat rooms back in the day with voice chat.

Wow, this is fun to think about!

Hey John, those are some great ideas!
I don’t think I’d be able to legally sell a recording of the song due to copyright purposes, but live broadcasting or free views of the recording on Soundcloud or YouTube might be cool, but not sure I’ll have enough space to host that many songs on Wix.

Requesting Songs + Online Radio
That’s a great idea, to be able to suggest songs for other sings through the system. Could even be from followers online, this could even be a Twitch thing embedded in the Wix site!

Online Karaoke
My gigs rely on people to show up and buy drinks, or I don’t keep my job/get paid lol - might work for other situations though and would consider adding that feature for other KJs!

Still need to figure out how to add the Next Next songs as additional columns

I think I want to have the singer roster be in a separate database from the song order. Otherwise, every time I enter a song for a singer, I have to correctly specify the singer’s roster position.
Hey Sean,

No need for a separate singer roster collection. Each time you add a song for a singer, you can look up the singer in the song roster collection. If the singer is already listed in the roster, you can then get the singer’s roster position and use it when adding the new song.

However, I would say you should set up your data structure in whatever way you feel is easiest to implement and maintain. Just keep in mind that the design of the data structure is the most critical aspect of your site. Carefully define what you want to do and try to determine how it can be implemented.

Hi again Sean,

If you go with just one collection that has a singer and one song per collection row, your query might look like this:

wixData.query("Roster")
.ascending("roster-order", "perform-order")
.find()
.then( (results) => {
 let songs = results.items;
 songs.forEach(function(song) {
 console.log(song);
  });
} )
.catch( (err) => {
 let errorMsg = err;
 console.log(errorMsg);
} );

The query sorts the collection by roster (singer) order and by song order. It then steps through the results one by one. From this you can get the singer, the first song, then the next song, then the next next song. You can then populate the table manually using the data you get from the query results.

Yisrael

Hi Yisrael,
I added the code and it looks like this:


When I hit Preview, I get this:


I’m sure I did something simple wrong