Announcing an Open-Source Scouting App

Huh, haven’t had this issue.
Also, looking over our code I can’t see a reason why it can happen.
Could you maybe send me a link to your Scouting instance so I can try to help?

Great job solving the prior issues! I think we’ll add them as “Common Issues” and provide solutions if this is appropriate.

My 2 notes currently would be:

  • The admin panel should work if you set it up to have an initial admin, so that’s weird. We will document this later today.
  • The firestore rules allow, by default, only “miscar1574.org” users to sign in. This should be changed in the “create” script; To make sure it has, look at “firestore.rules” and/or the rules as shown in the Firebase Console.

How do you run the command , l can’t run the command.

Have you met this problem , how to fix it?

I think you should run “firebase login”

I am now dealing with the proxy problem and l think it won’t take me a long time.

I have made a bit more progress. I think all of my confusion has been a lack of understanding (any understanding really) of how firebase works.

At first, none of the stages worked (I did not even know what the stages were, they are Practice, Qualifiers, Finals, etc)

The reason was that there was no admin set up. I overwrote the match rules in the app’s firestore.rules file in vscode (but I think this could be done on firestore too) to directly allow the team’s admin uuid. Then, I was able to choose an event and set up the scouting fields. At that point, the app began to work quite a bit. I can record data (but the data does not yet load), and I can use the leaderboard.

I did have to create the empty database in firestore in order for the leaderboard and custom fields to work.

I am not exactly sure of a few things.

  1. I do not know how to view recorded data (I am not sure game data is getting recorded in the database).
  2. I am not sure how to enter team data gleaned from interviews (irrespective of matches).

This is incredible, and I think it will eventually work for us. there is a bit more tinkering to go though. Thank you all for making this app and helping us out.

@mendax1234 I am sorry, I cannot really help with proxy issues. However, there is a localhost firebase option. I know nothing about it though.

If I should move my notes to the Git, please let me know and I can do so.

Hi! Indeed for adding the first admin a bit of work in Firestore and Firebase Authentication is required.

For question 1: the scouting submissions exist inside of Firestore. After sending a submission, you should get a message “Submission Received”, and then you can see the submission inside Firestore.

We use Google Sheets alongside a Google Apps Script to get everything from Firestore and then we can play with the data in any way we’d like.
We will be sharing this today.

For question 2: I’m not sure what you mean; The current way Scouting works doesn’t support anything other than game scouts.

Do you think we should add other notes? If so, do you have an idea how this should be implemented?

1 Like

Hi everyone!

We’ve just added major improvements to our README to include common issues, dashboard setup and frequently asked questions, alongside getting started improvements.

As usual, you can check it out on GitHub.

1 Like

The new readme is incredible. Thank you for the changes.

I wonder, since the full table uses Google sheets, how does that work at an event with no Internet connection?
Do teams struggle with finding their data? I know that it will work back at the hotel, but in many of our events, the qualifiers end mid-day on Sunday (though by the end of Saturday, much of the pertinent data is available). This may be more of an issue this year with single-day events being a thing.

We admittedly do not do a lot of scouting. That is actually why I am so interested in this app. At our events, it seems there are primarily 3 ways people acquire scouting data.

  1. Performance in observed matches
  2. Interactions/ performance in matches the team participates
  3. Pit Interviews; during Pit Interviews, team members go around and discuss the team, robot capabilities, uniqueness, and general thoughts about life, the universe, and everything
  4. Historical data (I am not really sure how much this is a thing, but it is data that is available on TBA, so I would guess some teams may use it)

While actual in-game performance is big, I think interactions 2 and 3 also carry weight. Number 2 can already be input using the app as is, but I do think it would be excellent to have a page for the third option.

My vision is that it would pull up a list of all the teams competing at the event (like the app does for the in-game page), and have another schema for Interviews. There, members could select the team and record more robot, team, or pit specific info. The piece of scouting that our team currently does during this period is tracking any ideas that we would love to adopt (we always ask permission) that we learn about the team, their robots, or their pits. We are still in our infancy; we do not have any engineers on the team, and as such, we learn most of what we know from events and CD. Using an app like this to track that data would be excellent.

Adding the ability to add images of some of these things would be great too, but that may add a level of complexity (and cost) to the app design that could potentially be untenable for many teams.

Edit: I got the script in the Sheet, but I am receiving an error.
RangeError: Maximum call stack size exceeded
Edit 2: It seems that the data is still not writing to firebase for the actual scouting (the leaderboard is working).
I am able to manually create the event collection and have the sheet fetch, but I do not think it is entering data.

I am confused. First, does this run on Windows or Linux? I saw at least one person with a post that suggested they were installing on windows, but they didn’t say if they were ultimately successful. But the install instructions talk about running npm. Does that run on Windows? Then, there is a lot of things here like Firebase Cloud and Google Sheets which seem to imply an internet connection, but we don’t have internet available at the competitions. How do you consolidate the data without internet?

I have been building it on Windows.

It runs on firebase. And, theoretically, any machine that runs npm can be used to build it (npm does run on Windows, I use it to make my fitbit apps :slight_smile:).

I am wondering about the event aspects as well.

It seems firebase apps are web-based applets. There is a localhost option, but am not sure yet how that works with syncing.

My thought is this. Each member has a version on their device (phone, tablet, etc). Then they sync when they get access to the firebase. I am not the dev, just someone looking into it for our team. We do have members with phones that have no data, and some old cellphones that have no service at all that can be used to complete webforms and take pictures/video if the local storage/sync is up to par.

Edit: Okay, I am getting a bit closer to understanding all of this. I am still having some issues.

  1. I do not think data is getting saved correctly. It would help a lot if we could see a screenshot or text-based layout of the firebase structure tree. I am close, but some things are not completing automatically (like the event table). Obviously, it would not have real uuids

  2. I created a crash accidentally. I will enter it on Git because if what I did caused it, it is a potential security hole with a potentially easy fix.

  3. I do want to see how all of this works at an event without network access. I am thinking flash drives (with the export option) if nothing else.

  4. I do not know if this can be done safely, but if we had access to an example form (from the scout perspective), and a working spreadsheet, that would be really helpful.

Thank you again for putting all of this together and sharing it as well.

1 Like

I think it has been long enough that I cannot edit the post above. I wanted to update anyone trying this out.
I got it all working last night, and I think there is some real potential. It seems all of my issues with database pieces had to do with permissions. The Firebase.rules need to be updated to allow full write capabilities for the admin (I can only achieve this by entering the UUID directly into the rule), and all scouts need write permission on a user level (By default, this is not enabled).\

I am still wondering how this will work off-line, but thus far, I do like it, and I have learned a lot about Firebase. :slight_smile:

1 Like

Did you try the admin/admins document with a users array that contains your UUID?

Yes. That allowed me to do some things at times, but it was not consistent. The event collection would not create or populate at all. When I get some time, I am going to try that for users with a different document. We have students on the team who are homeschooled so they are in a different organization. This solution for users would make the app even more flexible.

I started working on a pit scouting page first though.

Does anyone know any good resources for learning angular? I know Javascript and have done some work in typescript, but not Angular.

I would also love it if anyone knew of an Angular REPL? If I can figure out the offline piece, I do think we will adopt it. In that event, I would love to have our programmers making some games.

Thanks again. This project is a lot of fun and has helped relieve stress during an intense week :slight_smile:

Eidt: Though when I tried to set up an Angular REPL in REPL.it it failed, a quick Google Search revealed this working one which can be copied. This could be a wonderful sandbox in which members could design games.

Interesting! Glad you like it :slight_smile:

We used the Angular documentation: https://angular.io. You may also wish to use the Angular Material documentation.

Also might interest you: we use Visual Studio Code to work on the repository (and not a REPL). There’s a nice Angular extension

1 Like

Thank you. That helps. I am using VsCode too, but I did not know how to preview my changes without pushing them. So, I may have broken some things in the process. I will look into the plugin.

Do you know where the css object <mat-card-title> and the other mat pieces are defined? I can get a page to load in the Pit section, but I am getting build errors when I try to add the cards.

I don’t fully understand your issue.

In any case, you can use npm run start to run Scouting locally

1 Like

I figured out the issue. I had to add the new component to the app.modules.ts file in addition to the routing module.

The routing module is how I broke the app a bit. I was not adding data to it correctly, so the URL was broken. I attempted to visit it, and the redirect to the home page gave google the unsafe flag. So, that URL is now restricted. Another reason perhaps to use npm run start while sorting through these things.

1 Like

Do You know which Angular extension you use? There are many in the marketplace.

Also, if anyone else is following any of this, there is a recommendation for using Stackblitz in the Angular documentation. They start you off with a nice tutorial. Stackblitz is an online IDE.

https://marketplace.visualstudio.com/items?itemName=Angular.ng-template

1 Like