giseldo/neodataset huggingface dataset:
[Improve] Track and exploit image duplication

# Description

Today we are allowing all file uploads to create a new representation of that file in Cloud Storage. 
This is despite the possibility that the files might be duplicate.
It would be great is we could detect the file duplication and cause the new file to reference the old file.

## The Problem

The biggest problem is bloat caused by users not understanding that they may have already uploaded a file.
There is also the possibility that some users might all have access to the same file. Admittedly this
problem might be a little less frequent.

## Background/Current State

We are storing all images that are uploaded regardless of duplication.

## Solution

- Use a MD5 index

## Additional Information

## Steps

- [x] Create a MD5 index in MongoDB
- [x] Hash the uploaded file on the server to get the MD5
- [x] Check for the duplicate and if it exists, simply return the old file object
- [x] Create a new file object and reference the image storage and url data


<!-- A note on weights
0 is trivial. Does not involve and code
1 is a button, documentation corrections, a quick fix
2 is a simple well known task
3 is for a somewhat simple task
5 is for a complicated story that requies a number of moving parts
8 is for a signifcant amount of work but should with perhaps some unkowns or external dependencies
Anything higher than 8 should be broken up into smaller more distinct stories.
-->

Story points: 5.0
[Polish] Clarify Add Character Flow

# Description

When a player creates a new character it immediately opens a file dialog box. This is jarring because they don't know they are suppose to chose and image.

## How should it look/feel?

Ideally, we would open the character editor and make it really obvious he character needs a image. 

- It's important canceling the creation doesn't result in a character being made.


<!-- A note on weights
0 is trivial. Does not involve and code
1 is a button, documentation corrections, a quick fix
2 is a simple well known task
3 is for a somewhat simple task
5 is for a complicated story that requies a number of moving parts
8 is for a signifcant amount of work but should with perhaps some unkowns or external dependencies
Anything higher than 8 should be broken up into smaller more distinct stories.
-->

Story points: 5.0
[Story] < Alex Tarasick > onboarding

<!-- Title suggestion: [Story] Name of story -->

## User Story

As a new MythicTeam QA Team Member, I can create issues with meaningful Acceptance Criteria and review issues properly.

## Details

Im not really sure what I expect as I go through the onboarding and QA process with Mythic Table. However, I am excited to find out!

## Steps

- [x] Typically the devs will fill this in, but I will just put that I'm following the onboarding procedures here.

## Acceptance Criteria (To be checked off **only** during Review)

This should be filled in prior to moving into ~"In Progress", but is not required upon first submitting the ticket.
**This list needs to be reviewed and completed by someone who did not work on the ticket.** Please do not pass Acceptance Criteria on a ticket you contributed code to. Ping #qa in Slack or #mythic-table to let someone know that a ticket is completed and ready for ~Review.

<!-- Some notes on Acceptance Criteria (AC)
If you are having issues creating Acceptance Criteria, please review [Some notes on Acceptance Criteria(AC)](https://gitlab.com/mythicteam/mythictable/-/wikis/qa/acceptace-criteria). Don't hesitate to ask for AC review or assistance in #qa, it's what we're here for.
-->

- [x] Given: I have included example Acceptance Criteria in my ticket.
    - [x] And: They are deemed acceptable.
    - [x] When: This ticket has been submitted.
    - [x] Then: They should be noted as complete.


- [x] A MythicTeam member other than myself can find this criteria in my issue and check it as complete. They are able to find it because I asked in #mythic-table for someone to review my ticket.
    
<!-- A note on weights
0 is trivial. Does not involve and code
1 is a button, documentation corrections, a quick fix
2 is a simple well known task
3 is for a somewhat simple task
5 is for a complicated story that requires a number of moving parts
8 is for a significant amount of work but should with perhaps some unknowns or external dependencies
Anything higher than 8 should be broken up into smaller more distinct stories.
-->

Story points: 2.0
[Polish] Use CharacterToken in the CharacterList

# Description

Use the CharacterToken.vue in the character list.

## Current State

Right now we are just doing and unstyled and skewed image.

![image](/uploads/4e8c310e02d73f64fd3684a4def8c05e/image.png)

## How should it look/feel?

Use the style of the character like it is used on the map

<!-- A note on weights
0 is trivial. Does not involve and code
1 is a button, documentation corrections, a quick fix
2 is a simple well known task
3 is for a somewhat simple task
5 is for a complicated story that requies a number of moving parts
8 is for a signifcant amount of work but should with perhaps some unkowns or external dependencies
Anything higher than 8 should be broken up into smaller more distinct stories.
-->

Story points: 2.0
[Improvement] General Clean up

# Description

This is just a task to do a little house keeping in the client code.  There are some old un referenced files hanging around I would like to get rid of.

## The Problem

There are some old un referenced files hanging around I would like to get rid of.

## Solution

Just general clean up





<!-- A note on weights
0 is trivial. Does not involve and code
1 is a button, documentation corrections, a quick fix
2 is a simple well known task
3 is for a somewhat simple task
5 is for a complicated story that requies a number of moving parts
8 is for a signifcant amount of work but should with perhaps some unkowns or external dependencies
Anything higher than 8 should be broken up into smaller more distinct stories.
-->

Story points: 2.0
[Improvement] Yaml Validation for Deployment

# Description

Let's set up a deployment validation step for

1. Local development
1. Build pipeline in the test stage

## The Problem

Yaml failures aren't spotted until deployment

* https://gitlab.com/mythicteam/mythictable/-/jobs/794110459

## Solution

- `kubectl apply --server-dry-run ` <--- preferred
- `kubectl apply -f <file> --dry-run`

## Steps

- [x] TBD



<!-- A note on weights
0 is trivial. Does not involve and code
1 is a button, documentation corrections, a quick fix
2 is a simple well known task
3 is for a somewhat simple task
5 is for a complicated story that requies a number of moving parts
8 is for a signifcant amount of work but should with perhaps some unkowns or external dependencies
Anything higher than 8 should be broken up into smaller more distinct stories.
-->

Story points: 2.0
[Polish] Word Spacing

<!-- Title suggestion: [Polish] Name of improvement -->
<!-- Polish tasks track work to improve the look, feel and usability of existing features -->

# Description

We are fixing this so the words have a more aesthetically pleasing space.

## Current State

Spaces are too wide.

Pictures?

![image](/uploads/64f5bbd40bf4bfebcbb8954d9da7c277/image.png)
How to Fix it?

it's due to html text justification sucking ass, but it should be addressed
https://css-tricks.com/almanac/properties/t/text-align/
https://practicaltypography.com/justified-text.html
CSS-TricksCSS-Tricks
text-align | CSS-Tricks
The text-align property in CSS is used for aligning the inner content of a block element. p { text-align: center; } These are the traditional values for


Pictures?


<!-- A note on weights
0 is trivial. Does not involve and code
1 is a button, documentation corrections, a quick fix
2 is a simple well known task
3 is for a somewhat simple task
5 is for a complicated story that requies a number of moving parts
8 is for a signifcant amount of work but should with perhaps some unkowns or external dependencies
Anything higher than 8 should be broken up into smaller more distinct stories.
-->

Story points: 2.0
Add Initcontainer for mongodbcli

<!-- Title suggestion: [Improvement] Name of improvement -->
<!-- Improvement Projects are interanal initiates meant to improve code quality, tests, infrastructure or process -->

# Description

We are going to add an initcontainer that can talk to the mongodb service and tell it to allowlist the current IP.

## The Problem

Right now our k8s deployments are weak? (probably need a better word). If we delete a pod, there is a chance the service won't work because the pod won't be allocated the same IP it had before that has been allowlisted on mongodb's access control list.

## Background/Current State

Just gotta get it checked in, work is done.

## Solution

initcontainer of Jose's mongocli docker image.

## Additional Information

## Steps

- [ ] N/A



<!-- A note on weights
0 is trivial. Does not involve and code
1 is a button, documentation corrections, a quick fix
2 is a simple well known task
3 is for a somewhat simple task
5 is for a complicated story that requies a number of moving parts
8 is for a signifcant amount of work but should with perhaps some unkowns or external dependencies
Anything higher than 8 should be broken up into smaller more distinct stories.
-->

Story points: 4.0
[Polish] Removed requirement for First name and Last name from account page

# Description

Currently we depend on having a first name and last name when a user registers. This is not necessary.

## Current State

![image](/uploads/8aadf1762c6d4a9c84b8b679962ad0e9/image.png)

## How should it look/feel?

Remove the requirement


<!-- A note on weights
0 is trivial. Does not involve and code
1 is a button, documentation corrections, a quick fix
2 is a simple well known task
3 is for a somewhat simple task
5 is for a complicated story that requies a number of moving parts
8 is for a signifcant amount of work but should with perhaps some unkowns or external dependencies
Anything higher than 8 should be broken up into smaller more distinct stories.
-->

Story points: 2.0
[Polish] - Keycloak Style

# Description

We are still using the Keycloak styled login/register pages. We should 

## Current State

![image](/uploads/787c13e71408dacdc10b5ebb2d6b32a3/image.png)

## How should it look/feel?

![Login_Page_Mockup](/uploads/7c00601857a88912ff03f704eb5e396b/Login_Page_Mockup.jpg)

Design Specs in Text Form:
###Fonts
#### Headers
Lato Light 30px

#### Labels
Lato Regular 14px

#### Interaction Items
_Remember Me, Forgot Password_

Lato Regular 12px

#### Buttons
Lato Bold 12px

### Colours

* Text: `#ffffff`
* Panel Background: `#31313aef`
* Input Backgrounds: `#444545`
* Button Backgrounds: `#274d78`
* Vertical Stroke: `#a3a3a3`
* Horizontal Stroke: `#444545`
* Forgot Password: `#21a0a0` **NOTE THIS IS DIFFERENT FROM DESIGN SPECS IMAGE**

<!-- A note on weights
0 is trivial. Does not involve and code
1 is a button, documentation corrections, a quick fix
2 is a simple well known task
3 is for a somewhat simple task
5 is for a complicated story that requies a number of moving parts
8 is for a signifcant amount of work but should with perhaps some unkowns or external dependencies
Anything higher than 8 should be broken up into smaller more distinct stories.
-->

Story points: 2.0
[Story] Brian Hansen (Daddy007) onboarding

<!-- Title suggestion: [Story] Name of story -->

## User Story

As a new MythicTeam QA Team Member, I can create issues with meaningful Acceptance Criteria and review issues properly. 

## Details

I'm not sure what my expectations are.  I'm looking forward to having fun working with everyone, learning something new, and being part of a great community of people dedicated to providing something amazing to the everyone!

## Steps

- [x] I'm following the onboarding procedures here

## Acceptance Criteria (To be checked off **only** during Review)

This should be filled in prior to moving into ~"In Progress", but is not required upon first submitting the ticket.
**This list needs to be reviewed and completed by someone who did not work on the ticket.** Please do not pass Acceptance Criteria on a ticket you contributed code to. Ping #qa in Slack or #mythic-table to let someone know that a ticket is completed and ready for ~Review.

A MythicTeam member other than myself can find this criteria in my issue and check it as complete. They are able to find it because I asked in #mythic-table for someone to review my ticket.

<!-- Some notes on Acceptance Criteria (AC)
If you are having issues creating Acceptance Criteria, please review [Some notes on Acceptance Criteria(AC)](https://gitlab.com/mythicteam/mythictable/-/wikis/qa/acceptace-criteria). Don't hesitate to ask for AC review or assistance in #qa, it's what we're here for.
-->

- [x] Given: Samples Criteria exists in template
    - [x] And: it has not been removed
    - [x] When: the ticket has been submitted
    - [x] Then: Someone else should update this
    - [x] And: include acceptable Acceptance Criteria
    
<!-- A note on weights
0 is trivial. Does not involve and code
1 is a button, documentation corrections, a quick fix
2 is a simple well known task
3 is for a somewhat simple task
5 is for a complicated story that requires a number of moving parts
8 is for a significant amount of work but should with perhaps some unknowns or external dependencies
Anything higher than 8 should be broken up into smaller more distinct stories.
-->

Story points: 2.0
[Story] Map/Grid Alignment

<!-- Title suggestion: [Story] Name of story -->

## User Story

As a DM, I should be able to easily align the in-game grid with the visible grid on my uploaded maps.

## Details

This is relevant when editing a scene and setting the map's scale. The offset should be configurable as well as the scale. In addition, there should be some immediate feedback to show if the scale & offset is correct.

## Steps

- [ ] TBD

## Acceptance Criteria (To be checked off **only** during Review)

This should be filled in prior to moving into ~"In Progress", but is not required upon first submitting the ticket.
**This list needs to be reviewed and completed by someone who did not work on the ticket.** Please do not pass Acceptance Criteria on a ticket you contributed code to. Ping #qa in Slack or #mythic-table to let someone know that a ticket is completed and ready for ~Review.

- [ ] Given: I am editing a scene
  - [ ] When: I upload a map to the scene
  - [ ] Then: I should see a preview of the grid overlayed on at least a section of the image
  - [ ] And: I should see intuitive controls to scale the grid
  - [ ] And: I should see intuitive controls to move the grid
    
<!-- A note on weights
0 is trivial. Does not involve and code
1 is a button, documentation corrections, a quick fix
2 is a simple well known task
3 is for a somewhat simple task
5 is for a complicated story that requies a number of moving parts
8 is for a signifcant amount of work but should with perhaps some unkowns or external dependencies
Anything higher than 8 should be broken up into smaller more distinct stories.
-->

Story points: 2.0
[Improvement] Private Characters

<!-- Title suggestion: [Improvement] Name of improvement -->
<!-- Improvement Projects are interanal initiates meant to improve code quality, tests, infrastructure or process -->

# Description

Very similar to #246, but allow for private characters

## The Problem

Why this is Bad?

## Background/Current State

Where are we now?

## Solution

How to Fix it?

## Additional Information

## Steps

- [ ] TBD



<!-- A note on weights
0 is trivial. Does not involve and code
1 is a button, documentation corrections, a quick fix
2 is a simple well known task
3 is for a somewhat simple task
5 is for a complicated story that requies a number of moving parts
8 is for a signifcant amount of work but should with perhaps some unkowns or external dependencies
Anything higher than 8 should be broken up into smaller more distinct stories.
-->

Story points: 2.0
[Improvement] Private Scenes

<!-- Title suggestion: [Improvement] Name of improvement -->
<!-- Improvement Projects are interanal initiates meant to improve code quality, tests, infrastructure or process -->

# Description

Creating a toggle to have scenes that only the owner can see

## The Problem

Quite often a GM would want to keep pre-built maps a secret from players until it comes up in game

## Background/Current State

All scenes are public to everybody

## Solution

- [ ] If you are the owner of a map, you should be able to see an `eyeball` icon on the scene selection panel.
- [ ] If you hit that `eyeball`, the icon should toggle between two OBVIOUS states indicating visible and not visible
- [ ] Other users should not be able to see scenes in the scene selection panel when non-visible is selected

## Additional Information

## Steps

- [ ] TBD



<!-- A note on weights
0 is trivial. Does not involve and code
1 is a button, documentation corrections, a quick fix
2 is a simple well known task
3 is for a somewhat simple task
5 is for a complicated story that requies a number of moving parts
8 is for a signifcant amount of work but should with perhaps some unkowns or external dependencies
Anything higher than 8 should be broken up into smaller more distinct stories.
-->

Story points: 3.0
[Improvement] New Tutorial Campaign Banner

<!-- Title suggestion: [Improvement] Name of improvement -->
<!-- Improvement Projects are interanal initiates meant to improve code quality, tests, infrastructure or process -->

# Description

Redesign the Tutorial Campaign Banner

## The Problem

The current one is cut off, and does not match the rest of the design at all. 

![image](/uploads/b2162ddb7b65c9fe1924f8288da3995a/image.png)

## Solution

Redesign it

## Additional Information

## Steps

- [ ] TBD



<!-- A note on weights
0 is trivial. Does not involve and code
1 is a button, documentation corrections, a quick fix
2 is a simple well known task
3 is for a somewhat simple task
5 is for a complicated story that requies a number of moving parts
8 is for a signifcant amount of work but should with perhaps some unkowns or external dependencies
Anything higher than 8 should be broken up into smaller more distinct stories.
-->

Story points: 1.0
[Bug] 401 Errors when Uploading Scenes

<!---
Please read this!

Before opening a new issue, make sure to search for keywords in the issues
filtered by the "regression" or "bug" label:

- https://gitlab.com/mythicteam/mythictable/issues?label_name%5B%5D=Bug

and verify the issue you're about to submit isn't a duplicate.

Title suggestion: [Bug] Brief bug description
--->

# Summary
<!--Summarize the bug encountered concisely -->

## Steps to reproduce
* Wait for ~5 minutes. 
* Try to upload an image

## What is the current *bug* behavior?
You get a 401 Error

## What is the expected *correct* behavior?

## Relevant logs and/or screenshots
<!--Paste any relevant logs - please use code blocks (```) to format console output,
logs, and code as it's tough to read otherwise. -->

## Possible fixes
<!-- If you can, link to the line of code that might be responsible for the problem -->
Update keycloak configs for token duration.

## Cause (Fill out after fix)
<!-- This must be filled out before the Bug can be closed.  
This is used in our post mordems to understand where we can make improvements. -->
Cause by config not being replaced. See [271](https://gitlab.com/mythicteam/mythictable/-/issues/271)

Chose one or more:
- [ ] Work was rushed
- [ ] Plan Incomplete
- [ ] Insufficient Tests
- [ ] Missed in Review

Story points: 3.0
[Improvement] Delete Characters

<!-- Title suggestion: [Improvement] Name of improvement -->
<!-- Improvement Projects are interanal initiates meant to improve code quality, tests, infrastructure or process -->

# Description

Create a way for characters to be deleted from the library

## The Problem

Characters currently cannot be deleted. This will lead to many characters that are unnecessary

## Solution

How to Fix it?

## Additional Information

## Steps

- [ ] TBD



<!-- A note on weights
0 is trivial. Does not involve and code
1 is a button, documentation corrections, a quick fix
2 is a simple well known task
3 is for a somewhat simple task
5 is for a complicated story that requies a number of moving parts
8 is for a signifcant amount of work but should with perhaps some unkowns or external dependencies
Anything higher than 8 should be broken up into smaller more distinct stories.
-->

Story points: 1.0
[Improvement] Upgrade the Dice Roller library

# Description

We are using an older version of the Dice Roller: https://github.com/skizzerz/DiceRoller

## Current State

Currently using version 4.0.0

## How should it look/feel?

Upgrade to 4.1

## Acceptance Criteria

- [x] Dice roller should now accept rolls like `d10` in addition to `1d10`

<!-- A note on weights
0 is trivial. Does not involve and code
1 is a button, documentation corrections, a quick fix
2 is a simple well known task
3 is for a somewhat simple task
5 is for a complicated story that requies a number of moving parts
8 is for a signifcant amount of work but should with perhaps some unkowns or external dependencies
Anything higher than 8 should be broken up into smaller more distinct stories.
-->

Story points: 1.0
[Bug] Can only edit campaign image once

# Summary
After selecting a new campaign image, the drag & drop region is replaced with a preview of the uploaded image. There is no option to pick a different image without canceling out of the edit screen and returning.

## Steps to reproduce

* Edit the Tutorial Campaign.
* Drag an image into the drag & drop region. Wait for the upload to complete.

## What is the current *bug* behavior?

You cannot drag a different image onto the region to replace it.

## What is the expected *correct* behavior?

You should be able to replace the image at any time while editing. 

## Cause (Fill out after fix)
<!-- This must be filled out before the Bug can be closed.  
This is used in our post mordems to understand where we can make improvements. -->

Chose one or more:
- [ ] Work was rushed
- [ ] Plan Incomplete
- [ ] Insufficient Tests
- [ ] Missed in Review

Story points: 4.0
[Polish] Campaign banner behavior is inconsistent

<!-- Title suggestion: [Polish] Name of improvement -->
<!-- Polish tasks track work to improve the look, feel and usability of existing features -->

# Description

The "actionable areas" of the campaign banner should be clearly designated.

## Current State

Clicking anywhere on the left half of the banner takes you into the campaign; clicking anywhere on the right half pulls up the info card:

![image](/uploads/abcf3da2a86368be6df0662956b2b042/image.png)

Ideally, the "main action" of the card should be front and center (taking you into the campaign). The secondary action (pulling up the info card) should be at the bottom or in a corner. But the actionable areas for each should be clearly delineated.

<!-- A note on weights
0 is trivial. Does not involve and code
1 is a button, documentation corrections, a quick fix
2 is a simple well known task
3 is for a somewhat simple task
5 is for a complicated story that requies a number of moving parts
8 is for a signifcant amount of work but should with perhaps some unkowns or external dependencies
Anything higher than 8 should be broken up into smaller more distinct stories.
-->

Story points: 1.0