# Workout Deck
## Log and Task List
### Mon. 5/18
#### Progress
- Generated HackMD
- Generated overall app goals
#### Task List
- [ ] Determine which backend framework to use
- [ ] Determine how difficulty will be quantified
- [ ] Research how to organize MySQL tables
## App Description
- An iOS App for users to have access to highly customizable workouts.
- Based on the popular trend to draw random cards from a deck to determine what exercise to do.
## User Stories
### Required
- Users can draw cards, and upon doing so will see a corresponding exercise to do.
- Users can customize the deck, assigning personalized exercises to various cards.
- Sign in/sign out features
- Users can share their custom decks with other users.
### Optional
- Other users can rate decks based on difficulty or overall quality.
- Search capabilities to find decks based on user, difficulty, or other criteria.
## Tech Stack
### Frontend
- The front-end will be an iOS Application, which will make it easy for users to gain access to their workouts. It will be implemented using SwiftUI.
- (Optional) Web app to make creating/searching custom decks easier.
### Backend
- The backend will be built on Flask/NodeJS/Vapor/etc. It will be used to access a database for users to retrieve deck information.
### Database
- The app will utilize a MySQL database to store user information. This information will include user info, favorited decks, created decks, etc.
## Models
### User
| Attribute | Type | Description |
| --------- | ---- | ----------- |
| Name | String | A user's real name |
| Username | String | A user's registered username, unique for each user, to use to identify their decks |
| Login Info | ??? | Need to determine how to securely handle this |
| Decks | Array of DeckIDs | The decks the user has saved |
| Image | Image | Profile Image |
### Deck
| Attribute | Type | Description |
| --------- | ---- | ----------- |
| ID | Integer | Unique id of a deck |
| Name | String | Name of the deck |
| Description | String | General description of the deck, created by author |
| Author | String | Username of the user who created the deck |
| Difficulty | String or Integer or Float* | Difficulty of the deck |
| Downloads | Integer | Number of users who have downloaded the deck |
| Vote | Integer | Upvotes/downvotes by users based on experience using deck |