<commit_before># Basic project setup

## Auth
- [x] Create user controller
- [x] Set up auth provider
- [x] Registration
- [x] Login
- [x] Permissions per page


## Models
- Users
 - [x] Name
 - [x] Email
 - [x] Password
 - [x] Role (Admin, Applicant, Judge, Observer)

- Questions
 - [x] Question
 - [x] Type (Input, Text, Dropdown, Boolean, File)
 - [x] Options (JSON, Optional, used for dropdowns, and for weighted booleans)
 - [x] Status (This question will only appear when an application is within a specific status)
 - [x] Role (User role this question should be shown to: Applicant or Judge)
 - [x] Required
 - [x] Parent
 - [x] Order

- Applications
 - [x] Name
 - [x] Description
 - [x] Status (New, Submitted, Review, Follow Up, Accepted, Rejected)
 - [x] Applicant Score
 - [x] Judge Score
 - [x] User ID

- Answers
 - [x] Application ID
 - [x] Question ID
 - [x] Answer

- Documents
 - [x] Name
 - [x] Description
 - [x] File
 - [x] Application ID
 - [x] Answer ID (Nullable, cascade on delete set null)
 - [x] User ID (Useful for tracking if admins have attached a file to an application)

- Feedback
 - [ ] Feedback (So judges can ask questions or give criticism)
 - [ ] Type (Input, Text, Dropdown, Boolean)
 - [ ] Options (JSON, Optional, only for dropdowns at the moment)
 - [ ] Response (Response from the user)
 - [ ] Application ID
 - [ ] User ID (Which admin sent the feedback)
 - [ ] Regarding ID (The ID of the data this feedback is related to, if any)
 - [ ] Regarding Type (Can be a question or a document)

- Scores
 - [ ] Score
 - [ ] Application ID
 - [ ] Admin ID
 - [ ] Question ID


## Pages
- [x] Home page
- [x] User dashboard
- [ ] Admin dashboard
- [x] Judge dashboard
- [x] Create question
- [x] Create application
- [x] Answering questions
- [ ] Judging applications
- [ ] Follow up questions


## Relationships
- [x] One to many + One to one between users <-> applications
- [x] One to one + One to many between answers <-> applications
- [x] One to one between answers -> questions
- [ ] One to many + One to one between questions <-> question children
- [x] One to many + One to one between applications <-> documents
- [x] One to many + One to one between questions <-> documents
- [x] One to one between documents -> admins (users) 
- [ ] One to one + One to many between feedback <-> applications
- [ ] One to one between feedback -> admins (users)
- [ ] One to one polymorphic between feedback -> answers and documents
- [ ] One to one + One to many between scores <-> applications
- [ ] One to one between scores -> admins (users)
- [ ] One to one btween scores -> questions


## Defined Events
- [ ] User Registered
- [ ] Application Submitted
- [ ] Application Needs Review
- [ ] Application Accepted
- [ ] Application Rejected


## Event Handlers
- [ ] Send user email when user is registered
- [ ] Send judges email when application is submitted
- [ ] Send user email when application needs review
- [ ] Send user email when application is accepted
- [ ] Send user email when application is rejected


## User Workflow
- [x] Create application
- [x] Update application
- [x] Answer questions
- [x] Uploading files
- [x] Review page
- [x] Submitting applications
- [x] Server-side checking for required answers
- [x] AJAX autosave for answers


## Judge Workflow
- [x] View submitted applications
- [ ] Rate user answers
- [ ] Rate judge questions
- [ ] Provide feedback
- [ ] Approve / deny applications<commit_msg>Planning for new model to handle judge criteria<commit_after># Basic project setup

## Auth
- [x] Create user controller
- [x] Set up auth provider
- [x] Registration
- [x] Login
- [x] Permissions per page


## Models
- Users
 - [x] Name
 - [x] Email
 - [x] Password
 - [x] Role (Admin, Applicant, Judge, Observer)

- Questions
 - [x] Question
 - [x] Type (Input, Text, Dropdown, Boolean, File)
 - [x] Options (Text, only used for dropdowns for now)
 - [x] Required
 - [x] Parent
 - [x] Order

- Applications
 - [x] Name
 - [x] Description
 - [x] Status (New, Submitted, Review, Follow Up, Accepted, Rejected)
 - [-] Objective Score
 - [-] Subjective Score
 - [ ] Total Score
 - [ ] Scored (Boolean)
 - [x] User ID

- Answers
 - [x] Application ID
 - [x] Question ID
 - [x] Answer

- Documents
 - [x] Name
 - [x] Description
 - [x] File
 - [x] Application ID
 - [x] Answer ID (Nullable, cascade on delete set null)
 - [x] User ID (Useful for tracking if admins have attached a file to an application)

- Criteria
 - [ ] Question
 - [ ] Type (Objective, Subjective)
 - [ ] Required
 - [ ] Parent
 - [ ] Order

- Scores
 - [ ] Application ID
 - [ ] Criteria ID
 - [ ] Admin ID
 - [ ] Answer
 - [ ] Score

- Feedback
 - [ ] Feedback (So judges can ask questions or give criticism)
 - [ ] Type (Input, Text, Dropdown, Boolean, File)
 - [ ] Options (Text, only used for dropdowns now)
 - [ ] Response (Response from the user)
 - [ ] Application ID
 - [ ] User ID (Which admin sent the feedback)
 - [ ] Regarding ID (The ID of the data this feedback is related to, if any)
 - [ ] Regarding Type (Can be a question or a document)


## Pages
- [x] Home page
- [x] User dashboard
- [ ] Admin dashboard
- [x] Judge dashboard
- [x] Create question
- [x] Create application
- [x] Answering questions
- [ ] Judging applications
- [ ] Follow up questions


## Relationships
- [x] One to many + One to one between users <-> applications
- [x] One to one + One to many between answers <-> applications
- [x] One to one between answers -> questions
- [ ] One to many + One to one between questions <-> question children
- [x] One to many + One to one between applications <-> documents
- [x] One to many + One to one between questions <-> documents
- [x] One to one between documents -> admins (users) 
- [ ] One to one + One to many between feedback <-> applications
- [ ] One to one between feedback -> admins (users)
- [ ] One to one polymorphic between feedback -> answers and documents
- [ ] One to one + One to many between scores <-> applications
- [ ] One to one between scores -> admins (users)
- [ ] One to one btween scores -> critera


## Defined Events
- [ ] User Registered
- [ ] Application Submitted
- [ ] Application Needs Review
- [ ] Application Accepted
- [ ] Application Rejected


## Event Handlers
- [ ] Send user email when user is registered
- [ ] Send judges email when application is submitted
- [ ] Send user email when application needs review
- [ ] Send user email when application is accepted
- [ ] Send user email when application is rejected


## User Workflow
- [x] Create application
- [x] Update application
- [x] Answer questions
- [x] Uploading files
- [x] Review page
- [x] Submitting applications
- [x] Server-side checking for required answers
- [x] AJAX autosave for answers


## Judge Workflow
- [x] View submitted applications
- [ ] Remove per-question rating options
- [ ] Display judge criteria on review page
- [ ] AJAX autosave for judge answers / ratings
- [ ] Automated score aggregation on a cron
- [ ] Provide feedback
- [ ] Approve / deny applications
{'fraction_non_alphanumeric': 0.11585365853658537, 'fraction_numerical': 0.0, 'mean_word_length': 3.1053550640279393, 'pattern_counts': {'":': 0, '<': 17, '<?xml version=': 0, '>': 29, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '7257159', 'n_tokens_mistral': 2135, 'n_tokens_neox': 2051, 'n_words': 928}