giseldo/neodataset huggingface dataset:
Context Sharing: Analytics - "About The Session" press button

Capture analytics for how often a volunteer presses the "About The Session" button

## Tasks
- [ ] Add analytics service.capture event to function that is called when button is pressed 
- [ ] Add const for event 
- [ ] Code review
- [ ] Staging smoke tests
- [ ] Merge to main
- [ ] Deploy to prod

## Smoke tests
- [ ] Student/volunteer can login
- [ ] Student/volunteer can make/join session
- [ ] Student/volunteer can use whiteboard and chat in session

Story points: 1.0
BACKEND: Migrate notification priority groups from specific partners to "Associated partners"

We are migrating our notification priority group names from having specific partner names like "Big Telecom volunteers - not notified in the last 24 hours AND they don't have "high level subjects"" to have more generic naming like "Associated partner volunteers - ..." this allows us to capture multiple associated partners without having to create a new notification priority group for each new volunteer partner org that is added

The notification priority group static seeds changes and migration additions were added in this MR https://gitlab.com/upchieve/subway/-/merge_requests/1068/

We now need to migrate over notifications with the specific partner priority groups, e.g Verizon, to the ones created in that MR. We also need to create a migration script that removes the specific partner priority groups

## Tasks
- [ ] Code review
- [ ] Staging smoke tests
- [ ] Merge to main
- [ ] Deploy to prod

## Smoke tests
- [ ] Student/volunteer can login
- [ ] Student/volunteer can make/join session
- [ ] Student/volunteer can use whiteboard and chat in session

Story points: 1.0
BUG: Partner text notifications are not being captured in the database

It is likely that the check for `getAssociatedPartner` in https://gitlab.com/upchieve/subway/-/blob/main/server/services/TwilioService.ts#L207 is not correctly determining if a student is from a partner/sponsor org that has associated partners. This means that our targeted text notifications to certain partners are not stored with the appropriate priority group in the database.

Check if `getAssociatedPartner` is properly getting the associated partner for a student. If so, the issue may be related to a query or how the notification is being stored. There is some investigation that has to be done here.


## Tasks
- [x] Tests to make sure that this is the actual issue
- [x] Fix the `getAssociatedPartner` function in TwilioService
- [x] Code review
- [x] Staging smoke tests
- [x] Merge to main
- [x] Deploy to prod

## Smoke tests
- [x] Student/volunteer can login
- [x] Student/volunteer can make/join session
- [x] Student/volunteer can use whiteboard and chat in session
- [x] A student with an associated partner org should send out specific text notifications to counterpart volunteer

Story points: 1.0
BUG: student sign up school dropdown

Issue:
1. There is no "Can't Find School" option as a drop down when students sign up
2. It is showing results for a school that should not have any results. For example type “Pottstown” and you’ll correctly see two results, but type “Pottstownrandom” (or anything else added to the end of it) and it will still show you the same two results when it should only show "Can't Find School"

**This is happening in web**

May be getting an error code that isn't being handled and not updating list 

It should behave like this: 

![Screen_Shot_2022-05-11_at_3.12.50_PM](/uploads/88ee28696f8a7f89263bb56b3c635162/Screen_Shot_2022-05-11_at_3.12.50_PM.png)

![Screen_Shot_2022-05-11_at_3.11.26_PM](/uploads/2226eb3dd1ffe33f91c566f5a115ae66/Screen_Shot_2022-05-11_at_3.11.26_PM.png)

## Tasks
- [ ] Investigate issue
- [ ] Should always have "can't find school?" at bottom of list
- [ ] Code review
- [ ] Staging smoke tests
- [ ] Merge to main
- [ ] Deploy to prod

## Smoke tests
- [ ] Student/volunteer can login
- [ ] Student/volunteer can make/join session
- [ ] Student/volunteer can use whiteboard and chat in session

Story points: 2.0
Turn off flag for reading launch 5/15

## Tasks
- [x] Turn on student flag on 5/15
- [x] Turn off the volunteer tutoring banner flag - confirm with Katy when to do this (1 or 2 weeks after launch)

## Smoke tests
- [ ] Student/volunteer can login
- [ ] Student/volunteer can make/join session
- [ ] Student/volunteer can use whiteboard and chat in session

Story points: 0.0
Context Sharing: Frontend: Create Modal + About The Session Button

## Tasks
- [ ] Create Feature Flag to show/hide button in chat
- [x] Create button in chat "About the session" only for volunteers
- [x] Create modal
- [x] Add tip at bottom of modal
- [x] Add alert tip at top of modal
- [ ] Get data from endpoint - when session component mounts for the volunteer 
- [ ] Code review
- [ ] Staging smoke tests
- [ ] Merge to main
- [ ] Deploy to prod

## Smoke tests
- [ ] Student/volunteer can login
- [ ] Student/volunteer can make/join session
- [ ] Student/volunteer can use whiteboard and chat in session

Story points: 3.0
Context Sharing: Backend: Create endpoint for volunteer to retrieve pre-session survey data

## Tasks
- [ ] Update swagger
- [ ] Update routes and services with new endpoint
- [ ] Write sql query to get data 
- [ ] Uncomment existing tests - if too much to fix create additional issue 
- [ ] Code review
- [ ] Staging smoke tests
- [ ] Merge to main
- [ ] Deploy to prod

## Smoke tests
- [ ] Student/volunteer can login
- [ ] Student/volunteer can make/join session
- [ ] Student/volunteer can use whiteboard and chat in session

Story points: 2.0
BUG: Some sessions have more than two feedbacks available - which makes sessions not viewable

Query:

```
select
  session_id,
  count(*),
  max(created_at) as created_at
from
  feedbacks
group by
  session_id
having
  count(*) > 2
order by created_at
```

## Tasks
- [ ] Investigate why this was happening
- [ ] Fix if it is easy
- [ ] Make script to remove duplicate feedback
- [ ] Code review
- [ ] Staging smoke tests
- [ ] Merge to main
- [ ] Deploy to prod

## Smoke tests
- [ ] Student/volunteer can login
- [ ] Student/volunteer can make/join session
- [ ] Student/volunteer can use whiteboard and chat in session

Story points: 2.0
BUG: Backfill data outage

Get list of jobs to backfill data

Create a job for these scripts 

## Tasks
- [ ] Create job for scripts
- [ ] Code review
- [ ] Staging smoke tests
- [ ] Merge to main
- [ ] Deploy to prod

## Smoke tests
- [ ] Student/volunteer can login
- [ ] Student/volunteer can make/join session
- [ ] Student/volunteer can use whiteboard and chat in session

Story points: 1.0
BUG: Gracefully reconnect to redis in worker

Fix reconnect 

`server/worker/index` should look at errors: 
- promise block
- queue.onerror 

start worker run redis and see where it bubbles up and reconnect - test this works 

confirm we have alert looking for this log (connection error) 

## Tasks
- [x] Code review
- [x] Staging smoke tests
- [x] Merge to main
- [x] Deploy to prod

## Smoke tests
- [x] Student/volunteer can login
- [x] Student/volunteer can make/join session
- [x] Student/volunteer can use whiteboard and chat in session

Story points: 2.0
Session Recap: Fix admin session whiteboard view

Whiteboard not showing we need to figure out why and fix (most likely backend router)

If not in cache does nothing - cache.get throws error 

Handle error at end of document 

**Point on Monday - durning sprint planning**

## Tasks
- [x] Code review
- [ ] Staging smoke tests
- [x] Merge to main
- [ ] Deploy to prod

## Smoke tests
- [ ] Student/volunteer can login
- [ ] Student/volunteer can make/join session
- [ ] Student/volunteer can use whiteboard and chat in session
- [ ] Can view whiteboard in admin panel

Story points: 1.0
Pre Survey: Create stepper component

**Heather to confirm if this is needed**

Create new component for stepper or find an existing one we can use.

Note: Make sure we have check mark asset - Get SVG for this

Open Question for Grace:
- How will it look if someone goes back a step? Answer: It will look like it did on the previous step. For example the check will now be the current question number. 

## Tasks
- [x] Look at open source and see what we can use from those 
- [x] CSS
- [x] Code review
- [x] Staging smoke tests
- [x] Merge to main
- [x] Deploy to prod

## Smoke tests
- [x] Student/volunteer can login
- [x] Student/volunteer can make/join session
- [x] Student/volunteer can use whiteboard and chat in session

Story points: 2.0
Users can get multiple push notifications because we store multiple user/push-token records

When a student starts a session and a volunteer joins, we are sending them multiple push notifications simultaneously. I believe this is because we are storing their device push token every time they give permission? For bailey.lowenthal@yahoo.com we have the same push token stored 7 times and she's getting that many notifications.

We should probably have a unique index on (user_id, token) on the push_tokens table but also examine why we're storing it every time.

## Tasks
- [ ] Clean duplications
- [ ] Making unique index
- [ ] Don't store twice 
- [ ] Code review
- [ ] Staging smoke tests
- [ ] Merge to main
- [ ] Deploy to prod

## Smoke tests
- [ ] Student/volunteer can login
- [ ] Student/volunteer can make/join session
- [ ] Student/volunteer can use whiteboard and chat in session

Story points: 2.0
HEIC: SPIKE: Determine how handles load - Need to allow students to upload HEIC images on whiteboard

**As found here: https://gitlab.com/upchieve/subway/-/issues/1129 Students are not able to upload HEIC images to the whiteboard. We need to allow students to upload this image type.**

The reason we are doing this spike is to decide if we want to continue converting these on client side or backend

**Need to log size and upload speed, for multiple images (on off hours) to see how punishing is this to CPU**

Browsers don't support HEIC need to convert HEIC images to a supported image format

**Note:**
- Everything we enforce on frontend now should also be enforced on backend
- Upload these to existing whiteboard bucket

**Options for converting HEIC images:** https://www.npmjs.com/package/image-magick-js https://www.npmjs.com/package/heic-to-jpeg-middleware https://github.com/catdad-experiments/heic-convert https://www.npmjs.com/package/file-type

You can upload the following image formats to Cloudflare Images:
- PNG 
- GIF8 
- JPEG 
- WebP 

## Tasks
- [ ] Code review
- [ ] Staging smoke tests
- [ ] Merge to main
- [ ] Deploy to prod

## Smoke tests
- [ ] Student/volunteer can login
- [ ] Student/volunteer can make/join session
- [ ] Student/volunteer can use whiteboard and chat in session

Story points: 2.0
BUG: background info missing for admin detail view

We have a defect in the `admin detail view`. The frontend expected background info data to be nested on the user object under `user.background` .  

Relevant code: `UserAdminDetail` and `components/BackgroundInfo`

## Tasks
- [ ] figure out where data is wrong and fix depending where that is
- [ ] Code review
- [ ] Staging smoke tests
- [ ] Merge to main
- [ ] Deploy to prod

## Smoke tests
- [ ] Student/volunteer can login
- [ ] Student/volunteer can make/join session
- [ ] Student/volunteer can use whiteboard and chat in session

Story points: 1.0
Pre Survey: Database: Update schema + seeds in staging (final copy to come)

Note: use this using process in Grand Central Station Dave will document 

## Tasks
- [ ] Code review
- [ ] Staging smoke tests
- [ ] Merge to main
- [ ] Deploy to prod
- [ ] Dave documents process

## Smoke tests
- [ ] Student/volunteer can login
- [ ] Student/volunteer can make/join session
- [ ] Student/volunteer can use whiteboard and chat in session

Story points: 2.0
Pre Survey: Frontend: Display and submit Survey (Web) (BLOCKED until we get final confirmation on emojis)

https://www.figma.com/file/JPZ9LQZ8ytnvS07WqLZprx/Session-History%2F-Coaches%2FProfile?node-id=392%3A9106

Note: content is still changing. Designs are most likely going to stay as they are now.

Update what gets displayed in view based on feature flag

**Heather to confirm if progress bar is okay instead of stepper**
- Create new component for stepper (make one or find one) (own story) -- Make sure we have check mark asset 

## Tasks
- [ ] write services to retrieve and submit data for survey 
- [ ] Add feature flag
- [ ] Update styles
- [ ] Code review
- [ ] Staging smoke tests
- [ ] Merge to main
- [ ] Deploy to prod

## Smoke tests
- [ ] Student/volunteer can login
- [ ] Student/volunteer can make/join session
- [ ] Student/volunteer can use whiteboard and chat in session

Story points: 2.0
Pre Survey: Backend: Given a survey submission save to database

Note: make sure to fix tests - they may be commented out

## Tasks
- [ ] Write swagger
- [ ] Write endpoint
- [ ] Write service
- [ ] Write database queries with tests
- [ ] Code review
- [ ] Staging smoke tests
- [ ] Merge to main
- [ ] Deploy to prod

## Smoke tests
- [ ] Student/volunteer can login
- [ ] Student/volunteer can make/join session
- [ ] Student/volunteer can use whiteboard and chat in session

Story points: 3.0
Pre Survey: Backend: Given subject get survey to display to that user

Note: make sure to fix tests - they may be commented out 

## Tasks
- [x] Write swagger
- [x] Write endpoint
- [ ] Write service
- [x] Write database queries with tests
- [ ] Code review
- [ ] Staging smoke tests
- [ ] Merge to main
- [ ] Deploy to prod

## Smoke tests
- [x] Student/volunteer can login
- [x] Student/volunteer can make/join session
- [x] Student/volunteer can use whiteboard and chat in session

Story points: 3.0
Pre Survey: Write pre session user survey schema

**Analytics:**
From Aly: I recommend having `question_types` and `survey_types` perhaps so that I could run a query like
for `question_type = confidence` and `subject = algebraOne`
`what is the average response on survey_type = pre?`
to answer a question like, what subject on our platform do students have the lowest pre-score on confidence for?
or:
find all the sessions where the pre and post answers to a specific question exist. then calculate the difference between them, and then calculate the average of the differences. so we could make a statement like “on average students confidence increases by X points from the beginning to end of a session”

Also like to see if they correlate to user behavior too (session rating = any correlation to pre or post surveys)

Also user specific queries too, like to understand..for a given student, have their pre confidence scores increased over a year of using us?

very long term but it would also be cool to share increases in confidence with students: You've had 10 sessions and each time you were able to increase your confidence in your ability to learn! When you first started coming to UPchieve you felt really sad a lot about your ability to learn, now you're confident in your abilities!
(or even volunteers) (though that's not an analysis I guess) "You've helped Dave go from :cry: to :smile: about his ability to master Alg 1-great job!"

![Whiteboard_1_-01](/uploads/9805c278a7b18ba5e6bd6e183b5e2899/Whiteboard_1_-01.png)
## Tasks
- [ ] Code review
- [ ] Staging smoke tests
- [ ] Merge to main
- [ ] Deploy to prod

## Smoke tests
- [ ] Student/volunteer can login
- [ ] Student/volunteer can make/join session
- [ ] Student/volunteer can use whiteboard and chat in session

Story points: 1.0
Update condition for: Waiting on References email

CLOSE - THIS IS NOT NEEDED 

**Audience:** Non corporate partner volunteers

Condition: 4 days have passed since the applicant uploaded any references, and at least one reference has not yet submitted the form.

Update condition for: Waiting on References email (https://mc.sendgrid.com/dynamic-templates/d-65bf8204d28746f58ad28a4aa92407c7/version/19beb75b-fe96-48b8-9d35-98a2ec55b522/editor) 

## Tasks
- [ ] Query for has volunteer ever uploaded reference 
- [ ] Query for has any reference responded (filled out form)
- [ ] Write the new job
- [ ] Take old job and put in date check (if 5 day from day deploy this then return)
- [ ] Queue the job at reference creation if this is first reference using first query  
- [ ] Register job handler
- [ ] Send grid template key to config
- [ ] Code review
- [ ] Staging smoke tests
- [ ] Merge to main
- [ ] Deploy to prod
- [ ] 5 days after deploy remove old job from redis so it doesn't run anymore 

## Smoke tests
- [ ] Student/volunteer can login
- [ ] Student/volunteer can make/join session
- [ ] Student/volunteer can use whiteboard and chat in session

Story points: 2.0
Launch "Reading" as subject to students (web)

Description: Launch "Reading" Subject to students on 5/15 so they can request assistance with Reading.

## Tasks
- [x] Make a feature flag for the temp student reading subject
- [x] Code review
- [x] Staging smoke tests
- [x] Merge to main
- [x] Deploy to prod


## Smoke tests
- [ ] Student/volunteer can login
- [ ] Student/volunteer can make/join session
- [ ] Student/volunteer can use whiteboard and chat in session

Story points: 1.0
Launch "Reading": Convert reading banner and  feature flag to be dashboard banner + clean up reading subject flag

1. Convert feature flag for `reading-launch` to `dashboard-banner`
2. Rename related dead code paths for reading banner
3. clean up reading student subject feature flag
4. remove dead code paths for student subject feature flag 

Do this after launched May 15th 

## Tasks
- [ ] Remove student reading subject flag and code path
- [ ] Convert reading-launch to `dashboard-banner`
- [ ] Code review
- [ ] Staging smoke tests
- [ ] Merge to main
- [ ] Deploy to prod

## Smoke tests
- [ ] Student/volunteer can login
- [ ] Student/volunteer can make/join session
- [ ] Student/volunteer can use whiteboard and chat in session

Story points: 1.0
Launch "Reading" as a subject to volunteers

* Please add a new sub-subject to "Reading & Writing" called "Reading" to launch to volunteers
* Add the review materials linked [here](https://docs.google.com/presentation/d/1rJZ0wg9vgMC0ip-nTGKqwFv07BlRnlUaf9FeF9DZkfw/edit#slide=id.ge5c4b5fce2_0_704)
* The certification is in the app under "reading"
* When this goes live, all volunteers should see a banner that says: "Introducing our new subject: READING! Take the quiz by May 15th to help us launch to students" CTA “Get Certified”
* Banner should have same styling as the Algebra 2 launch banner had
* Plan is to launch to students on 5/15

Story points: 3.0
Fix admin session detail view

There are a few sessions on the admin page that will not load because they do not have user agent data. This usually occurs if the student is using the new mobile app. Update the null restrictions in `server/models/UserAction/queries/getSessionRequestedUserAgentFromSessionId` to allow null values for the following:
- device
- browser
- browserVersion
- operatingSystem
- operatingSystemVersion

## Tasks
- [x] Code review
- [ ] Staging smoke tests
- [x] Merge to main
- [x] Deploy to prod

## Smoke tests
- [ ] Student/volunteer can login
- [ ] Student/volunteer can make/join session
- [ ] Student/volunteer can use whiteboard and chat in session

Story points: 1.0
Fix Corporate Partnership Retool Dashboard

https://upchieve.retool.com/apps/58d3db18-c0e0-11ec-9b57-93143c5b9b51/Postgres%20Converted%20Dashboards/CP%20Health%20Metrics

Some of the data is still not displaying correctly. Compare timestamps with the Mongo one to check accuracy.

* There are some null problems in transformers.
* There are percentages that are above 100%

Story points: 2.0
BUG: ineligible student insertion failing because of an invalid zip code

We have a foreign key relationship on the ineligible students table. Insertions have been failing because the provided zip code wasn't in our zip code table. These students are likely putting in fake zip codes, which we need to account for. We should:

* change that column in the ineligible students table to a plain, non-foreign-key string, and remove the constraint.
* OR we need to improve the sign up process so that students can only provide zip codes that are in our table.

Story points: 2.0
Implement college ineligibility

* /check in eligibility router needs to be modified to check grade level for being "college"
  * if `isEligible` is false, we need to provide a reason in the response, so the frontend can differentially show the modals
  * name this field in the json whatever makes sense (maybe "message" as we use that elsewhere)
* differential text on the ineligibility page (show the picture in the epic in whatever way makes the most sense)
* frontend logic
  * if eligibility check comes back with reason being grade level, show this modal instead of the regular one
* update swagger
* update tests

## Tasks
- [ ] Code review
- [ ] Staging smoke tests
- [ ] Merge to main
- [ ] Deploy to prod

## Smoke tests
- [ ] Student/volunteer can login
- [ ] Student/volunteer can make/join session
- [ ] Student/volunteer can use whiteboard and chat in session

Story points: 1.0
Update push notification message to new spec for mobile app

New spec:

```
{
    "to": "expo_push_token",
    "notification": {
        "title": "Notification Title",
        "body": "Notification Body",
        "mutable_content": true,
        "sound": "Tri-tone"
    },
    "data": {
        "type": "chat",
        "sessionId": "62223045d984af637875f2d9"
    }
}
```

This should be behind a feature flag so we can turn it on when the new mobile app is released.


## Tasks
- [ ] Code review
- [ ] Staging smoke tests
- [ ] Merge to main
- [ ] Deploy to prod

## Smoke tests
- [ ] Student/volunteer can login
- [ ] Student/volunteer can make/join session
- [ ] Student/volunteer can use whiteboard and chat in session

Story points: 1.0
Create endpoint that allows account deletion

We need an endpoint that allows for user account "deletion."

We're not ready for actual full deletion flows, so what we're going to do is modify their email to have "deactivated" appended on it, basically to mark it for manual deletion. This is the pattern I've followed for manual deletions before. Then when we have the full deletion flow ready (how we're going to modify or anonymize data so we can remove their personal data) we can go find it and do that flow.

This is just for the iOS app mainly, as it is a hard requirement. We're concerned that the testers will try deleting account, be able to log back in, and not approve the app.

## Tasks
- [ ] Code review
- [ ] Staging smoke tests
- [ ] Merge to main
- [ ] Deploy to prod

## Smoke tests
- [ ] Student/volunteer can login
- [ ] Student/volunteer can make/join session
- [ ] Student/volunteer can use whiteboard and chat in session

Story points: 2.0
Update privacy policy to reflect ability to delete account

We need to update the privacy policy to reflect the ability to delete your account (as well as earlier changes we have in draft around Gleap/Posthog).

## Tasks
- [ ] Code review
- [ ] Staging smoke tests
- [ ] Merge to main
- [ ] Deploy to prod

## Smoke tests
- [ ] Student/volunteer can login
- [ ] Student/volunteer can make/join session
- [ ] Student/volunteer can use whiteboard and chat in session

Story points: 1.0