From 2719a35b7b6414396ca5e5afc9960e6fcbea95f4 Mon Sep 17 00:00:00 2001 From: ongarrick <75192692+norellic@users.noreply.github.com> Date: Wed, 29 Oct 2025 00:21:58 -0400 Subject: [PATCH 01/25] Revise README with project name and details Updated project details, description, and inspiration in README. --- README.md | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 0e1211217..1b59a90dd 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,8 @@ -# [your app name here] +# [Beam] CodePath WEB103 Final Project -Designed and developed by: [your names here] +Designed and developed by: [Kristal Hong, Luis Pina, Noelle Garrick] πŸ”— Link to deployed app: @@ -10,17 +10,18 @@ Designed and developed by: [your names here] ### Description and Purpose -[text goes here] +Beam is a gamified habit and task tracker that visualizes progress in a fun and interactive way. As users complete tasks, they earn points that can be spent to customize an in-game creature or environment. Visual feedback, rewards, and customization motivate consistent task completion while allowing users to track their achievements over time. +The purpose of Beam is to help users build consistent, healthy habits through gamification and visual progress. By tying task completion to rewards, customization, and visual feedback, the app encourages focus, accountability, and satisfaction. ### Inspiration -[text goes here] +Habit tracking apps with a visual representation of progress – examples include β€œPlant Nanny”, an app that lets you track you water consumption and use it to water virtual plants, and β€œFinch,” where checking off to-do list items earns points you can spend on accessories for your in-game pet. ## Tech Stack -Frontend: +Frontend: React.js -Backend: +Backend: Render ## Features From fbfcecd04ea04e3a2f391764a9b8a38fc4f6e0bf Mon Sep 17 00:00:00 2001 From: ongarrick <75192692+norellic@users.noreply.github.com> Date: Wed, 29 Oct 2025 00:28:01 -0400 Subject: [PATCH 02/25] added user stories --- planning/user_stories.md | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/planning/user_stories.md b/planning/user_stories.md index 1e55ecbcd..9b074eea4 100644 --- a/planning/user_stories.md +++ b/planning/user_stories.md @@ -4,10 +4,19 @@ Reference the Writing User Stories final project guide in the course portal for ## Outline User Roles -[πŸ‘‰πŸΎπŸ‘‰πŸΎπŸ‘‰πŸΎ Include at least at least 1, but no more than 3, user roles.] +1. Student: with many tasks they need to organize +2. New Grad/Young Adult: with unstructured time they need to plan ## Draft User Stories -[πŸ‘‰πŸΎπŸ‘‰πŸΎπŸ‘‰πŸΎ Include at least at least 10 user stories in this format:] +1. As a new grad trying to build healthy habits, I want a tool that will allow me to visualize the time I spend dedicated towards my goals. +2. As a student with a long and varied to do list, I want a place to keep track of all my tasks so I can stay organized. +3. As a new grad learning to manage my time independently, I want a way to track and celebrate small wins, so that I can stay motivated and recognize progress even when larger goals feel far away. +4. As a new grad lacking motivation, I want my focus sessions and task completions to translate into in-app rewards or growth, so that I feel like my effort tangibly builds something over time. +5. As student who values aesthetic satisfaction, I want the visualization of my progress to be beautiful and calming, so that opening the app feels rewarding and reflective rather than stressful. +6. As a student who enjoys gamified structure, I want my habits and tasks to impact a virtual ecosystem, so that I associate productivity with care and positive reinforcement. +7. As a new grad who wants accountability, I want the app to respond to my engagementβ€”whether through progress decay or gentle reminders, so that I feel a sense of responsibility to maintain my virtual world. +8. As a goal-oriented new grad, I want to quantify my progress through clear metrics, so that I can measure growth and set meaningful targets. +9. As a student, I want to customize my task categories, visual themes, or icons, so that my to-do list feels personal and reflects my mindset or aesthetic preferences. +10. As a new grad, I want to review past streaks, milestones, or visual changes in my world, so that I can appreciate long-term consistency and feel proud of my journey. -1. As a [user role], I want to [what], so that [why]. From a2f5459238139a6dff2c35eec9c0a959c64f8626 Mon Sep 17 00:00:00 2001 From: ongarrick <75192692+norellic@users.noreply.github.com> Date: Wed, 29 Oct 2025 00:29:15 -0400 Subject: [PATCH 03/25] Revise milestone1 reflections and support needs Updated reflections on group collaboration, challenges faced, and support needed for the final project. --- milestones/milestone1.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/milestones/milestone1.md b/milestones/milestone1.md index 52b9b0038..a8a6d6426 100644 --- a/milestones/milestone1.md +++ b/milestones/milestone1.md @@ -21,12 +21,12 @@ This unit, be sure to complete all tasks listed below. To complete a task, place ### 1. What went well during this unit? -[πŸ‘‰πŸΎπŸ‘‰πŸΎπŸ‘‰πŸΎ your answer here] +Our brainstorming process went really well. Everyone in the group contributed their thoughts and ideas, which helped us narrow down a solid direction for our project. We were able to collaborate effectively and communicate our goals clearly, which made it easier to get started. ### 2. What were some challenges your group faced in this unit? -[πŸ‘‰πŸΎπŸ‘‰πŸΎπŸ‘‰πŸΎ your answer here] +Interestingly, brainstorming was both our strength and our challenge. We had a lot of different ideas, and it was sometimes difficult to choose which one to focus on. It took time for everyone to agree on a final concept and ensure that it was realistic to complete within the given timeframe. In addition, we suspect occasional struggles with scheduling conflicts and making sure everyone is on the same page about the technical aspects of our plan. ### 3. What additional support will you need in upcoming units as you continue to work on your final project? -[πŸ‘‰πŸΎπŸ‘‰πŸΎπŸ‘‰πŸΎ your answer here] +As we move forward, we could use more guidance on how to code and implement some of the new ideas we want to include in our application. Having examples or tutorials related to similar projects would help us strengthen our technical approach. It would also be helpful to have a bit more dedicated time to work together as a group, so we can refine our ideas, troubleshoot issues, and make sure our project stays on track. From 7e37aa04813c3097877e0751566c0e076af0d631 Mon Sep 17 00:00:00 2001 From: ldpina <103157888+ldpina@users.noreply.github.com> Date: Tue, 4 Nov 2025 19:00:00 -0800 Subject: [PATCH 04/25] Update entity relationship diagram with User and Habits tables Added tables for User and Habits to the entity relationship diagram. --- planning/entity_relationship_diagram.md | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/planning/entity_relationship_diagram.md b/planning/entity_relationship_diagram.md index 12c25f62c..c4030fc7a 100644 --- a/planning/entity_relationship_diagram.md +++ b/planning/entity_relationship_diagram.md @@ -4,7 +4,22 @@ Reference the Creating an Entity Relationship Diagram final project guide in the ## Create the List of Tables -[πŸ‘‰πŸΎπŸ‘‰πŸΎπŸ‘‰πŸΎ List each table in your diagram] +** User Table ** +| Column Name | Type | Description | +|-------------|------|-------------| +| userID | integer | primary key | +| username | text | unique user alias | +| password | text | login credential to access | +| timeCreated | timestamp | how long the user has been with the app | + +** Habits Table ** +| Column Name | Type | Description | +|-------------|------|-------------| +| userID | integer | primary key | +| habitName | text | habit to be tracked | +| frequency | integer | how frequent the user wants to do this habit | +| duration | integer | how long the user wants to spend doing this habit | +| status | text | if the user has already created habit into a habit | ## Add the Entity Relationship Diagram From 7838d316af9102e5e5c0736746ca5640070181b4 Mon Sep 17 00:00:00 2001 From: ldpina <103157888+ldpina@users.noreply.github.com> Date: Tue, 4 Nov 2025 19:44:22 -0800 Subject: [PATCH 05/25] Update entity relationship diagram with new columns Added points, description, and pointWeight columns to user and habits tables. --- planning/entity_relationship_diagram.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/planning/entity_relationship_diagram.md b/planning/entity_relationship_diagram.md index c4030fc7a..dbec29271 100644 --- a/planning/entity_relationship_diagram.md +++ b/planning/entity_relationship_diagram.md @@ -10,6 +10,7 @@ Reference the Creating an Entity Relationship Diagram final project guide in the | userID | integer | primary key | | username | text | unique user alias | | password | text | login credential to access | +| points | integer | points accuraled from mastering habits | | timeCreated | timestamp | how long the user has been with the app | ** Habits Table ** @@ -17,6 +18,8 @@ Reference the Creating an Entity Relationship Diagram final project guide in the |-------------|------|-------------| | userID | integer | primary key | | habitName | text | habit to be tracked | +| description | text | description of habit | +| pointWeight | integer | how many points the user will recive from completing the habit | | frequency | integer | how frequent the user wants to do this habit | | duration | integer | how long the user wants to spend doing this habit | | status | text | if the user has already created habit into a habit | From 2e5bd56cf6e3b9bd80ace4c41acdc72ce9ed32b3 Mon Sep 17 00:00:00 2001 From: ldpina <103157888+ldpina@users.noreply.github.com> Date: Tue, 4 Nov 2025 19:48:32 -0800 Subject: [PATCH 06/25] added table realtionship --- table realtionship.png | Bin 0 -> 51507 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 table realtionship.png diff --git a/table realtionship.png b/table realtionship.png new file mode 100644 index 0000000000000000000000000000000000000000..8e89a2d8e5c4d9a9c3e2eb6874c4391f70f7bce2 GIT binary patch literal 51507 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 HeDnVRb++H^ literal 0 HcmV?d00001 From e220df1ad1edeec6477b88529a0922b9dbcde5fe Mon Sep 17 00:00:00 2001 From: ldpina <103157888+ldpina@users.noreply.github.com> Date: Tue, 4 Nov 2025 19:49:17 -0800 Subject: [PATCH 07/25] Update entity_relationship_diagram.md --- planning/entity_relationship_diagram.md | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/planning/entity_relationship_diagram.md b/planning/entity_relationship_diagram.md index dbec29271..e5ccc5229 100644 --- a/planning/entity_relationship_diagram.md +++ b/planning/entity_relationship_diagram.md @@ -28,8 +28,4 @@ Reference the Creating an Entity Relationship Diagram final project guide in the [πŸ‘‰πŸΎπŸ‘‰πŸΎπŸ‘‰πŸΎ Include an image or images of the diagram below. You may also wish to use the following markdown syntax to outline each table, as per your preference.] -| Column Name | Type | Description | -|-------------|------|-------------| -| id | integer | primary key | -| name | text | name of the shoe model | -| ... | ... | ... | +![table reltationship diagram](https://github.com/norellic/codepath-web103-capstone/blob/main/table%20realtionship.png) From 3a44a56590b6beffa438620e9a3564c23db58be8 Mon Sep 17 00:00:00 2001 From: Kristal Hong <130208431+KHONG707@users.noreply.github.com> Date: Wed, 5 Nov 2025 03:08:11 -0800 Subject: [PATCH 08/25] Update milestone2.md --- milestones/milestone2.md | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/milestones/milestone2.md b/milestones/milestone2.md index e3178cd81..f4a6027de 100644 --- a/milestones/milestone2.md +++ b/milestones/milestone2.md @@ -6,24 +6,24 @@ This document should be completed and submitted during **Unit 6** of this course This unit, be sure to complete all tasks listed below. To complete a task, place an `x` between the brackets. -- [ ] In `planning/wireframes.md`: add wireframes for at least three pages in your web app. - - [ ] Include a list of pages in your app -- [ ] In `planning/entity_relationship_diagram.md`: add the entity relationship diagram you developed for your database. - - [ ] Your entity relationship diagram should include the tables in your database. -- [ ] Prepare your three-minute pitch presentation, to be presented during Unit 7 (the next unit). - - [ ] You do **not** need to submit any materials in advance of your pitch. -- [ ] In this document, complete all three questions in the **Reflection** section below +- [x] In `planning/wireframes.md`: add wireframes for at least three pages in your web app. + - [x] Include a list of pages in your app +- [x] In `planning/entity_relationship_diagram.md`: add the entity relationship diagram you developed for your database. + - [x] Your entity relationship diagram should include the tables in your database. +- [x] Prepare your three-minute pitch presentation, to be presented during Unit 7 (the next unit). + - [x] You do **not** need to submit any materials in advance of your pitch. +- [x] In this document, complete all three questions in the **Reflection** section below ## Reflection ### 1. What went well during this unit? -[πŸ‘‰πŸΎπŸ‘‰πŸΎπŸ‘‰πŸΎ your answer here] +Our group was able to get the ball rolling with clear ideas of what we wanted our website/app to look like. We discussed layouts, features, and design elements early on, which helped us visualize the overall direction of our project and stay organized as we moved forward. ### 2. What were some challenges your group faced in this unit? -[πŸ‘‰πŸΎπŸ‘‰πŸΎπŸ‘‰πŸΎ your answer here] +One of the main challenges we faced was paying attention to the small details that would make our website more engaging and appealing to users. We also had to think carefully about customer behavior, understanding what users might want or expect when navigating the app, which took time and thoughtful planning. ### 3. What additional support will you need in upcoming units as you continue to work on your final project? -[πŸ‘‰πŸΎπŸ‘‰πŸΎπŸ‘‰πŸΎ your answer here] +We may need additional guidance on improving the user interface and user experience design aspects of our project. Support in conducting user testing or receiving feedback on our layout and functionality would also help us refine our website/app to make it more intuitive and user-friendly. From 6a4e3e709f8ff39e9e405409a723d743e6ce8447 Mon Sep 17 00:00:00 2001 From: Kristal Hong <130208431+KHONG707@users.noreply.github.com> Date: Wed, 5 Nov 2025 03:16:04 -0800 Subject: [PATCH 09/25] Update wireframes.md --- planning/wireframes.md | 35 ++++++++++++++++++++++++++++------- 1 file changed, 28 insertions(+), 7 deletions(-) diff --git a/planning/wireframes.md b/planning/wireframes.md index fbcd15a0c..dd784585e 100644 --- a/planning/wireframes.md +++ b/planning/wireframes.md @@ -2,20 +2,41 @@ Reference the Creating an Entity Relationship Diagram final project guide in the course portal for more information about how to complete this deliverable. +image + + ## List of Pages [πŸ‘‰πŸΎπŸ‘‰πŸΎπŸ‘‰πŸΎ List the pages you expect to have in your app, with a ⭐ next to pages you have wireframed] -## Wireframe 1: [page title] -[πŸ‘‰πŸΎπŸ‘‰πŸΎπŸ‘‰πŸΎ include wireframe 1] +## Wireframe 1: Homepage/Login Page ⭐ + +Screenshot 2025-11-05 at 3 10 37 AM + +## Wireframe 2: New Habit ⭐ + +Screenshot 2025-11-05 at 3 11 25 AM + + +## Wireframe 3: Edit Habit ⭐ + +Screenshot 2025-11-05 at 3 11 53 AM + +## Wireframe 4: Update Habits ⭐ + +Screenshot 2025-11-05 at 3 12 13 AM + +## Wireframe 5: Completion of Habit ⭐ + +Screenshot 2025-11-05 at 3 12 30 AM + +Screenshot 2025-11-05 at 3 12 45 AM + -## Wireframe 2: [page title] +## Wireframe 6: Store ⭐ -[πŸ‘‰πŸΎπŸ‘‰πŸΎπŸ‘‰πŸΎ include wireframe 2] +Screenshot 2025-11-05 at 3 13 02 AM -## Wireframe 3: [page title] -[πŸ‘‰πŸΎπŸ‘‰πŸΎπŸ‘‰πŸΎ include wireframe 3] -[πŸ‘‰πŸΎπŸ‘‰πŸΎπŸ‘‰πŸΎ include more wireframes as desired] From 5cd4767713a30698cd70d712e484e98b421d0d7f Mon Sep 17 00:00:00 2001 From: ldpina <103157888+ldpina@users.noreply.github.com> Date: Wed, 5 Nov 2025 16:32:55 -0800 Subject: [PATCH 10/25] Update backend tech stack in README --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 1b59a90dd..bb7f5f949 100644 --- a/README.md +++ b/README.md @@ -21,7 +21,7 @@ Habit tracking apps with a visual representation of progress – examples includ Frontend: React.js -Backend: Render +Backend: Render, Postgresql ## Features From 8c974d9039fa0ed7ccb542f2e0370ad7679b2c8e Mon Sep 17 00:00:00 2001 From: ongarrick <75192692+norellic@users.noreply.github.com> Date: Sun, 9 Nov 2025 22:04:03 -0500 Subject: [PATCH 11/25] updated entity relationship diagram --- Screenshot 2025-11-09 215536.png | Bin 0 -> 139410 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 Screenshot 2025-11-09 215536.png diff --git a/Screenshot 2025-11-09 215536.png b/Screenshot 2025-11-09 215536.png new file mode 100644 index 0000000000000000000000000000000000000000..b664933a1d679a7fbe96c216eaebdb64604d19b7 GIT binary patch literal 139410 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 z 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%0Av*FhiJ$^P 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 RCeLK>{k-WxQ-9j^KLAovdFcQE literal 0 HcmV?d00001 From 04729b7bee58cedf03dcc74c456904d275c04ee8 Mon Sep 17 00:00:00 2001 From: ongarrick <75192692+norellic@users.noreply.github.com> Date: Sun, 9 Nov 2025 22:04:58 -0500 Subject: [PATCH 12/25] Rename Screenshot 2025-11-09 215536.png to updated_entity_relationship_diagram.png --- ...6.png => updated_entity_relationship_diagram.png | Bin 1 file changed, 0 insertions(+), 0 deletions(-) rename Screenshot 2025-11-09 215536.png => updated_entity_relationship_diagram.png (100%) diff --git a/Screenshot 2025-11-09 215536.png b/updated_entity_relationship_diagram.png similarity index 100% rename from Screenshot 2025-11-09 215536.png rename to updated_entity_relationship_diagram.png From e3427d070861ca1673f462c3e04cd0af16cbdc9f Mon Sep 17 00:00:00 2001 From: ldpina <103157888+ldpina@users.noreply.github.com> Date: Tue, 11 Nov 2025 17:07:56 -0800 Subject: [PATCH 13/25] Update milestone3.md --- milestones/milestone3.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/milestones/milestone3.md b/milestones/milestone3.md index 571ce7651..4407a3e98 100644 --- a/milestones/milestone3.md +++ b/milestones/milestone3.md @@ -10,12 +10,12 @@ You will need to reference the GitHub Project Management guide in the course por - [ ] In your repo, create a project board. - *Please be sure to share your project board with the grading team's GitHub **codepathreview**. This is separate from your repository's sharing settings.* -- [ ] In your repo, create at least 5 issues from the features on your feature list. +- [x] In your repo, create at least 5 issues from the features on your feature list. - [ ] In your repo, update the status of issues in your project board. -- [ ] In your repo, create a GitHub Milestone for each final project unit, corresponding to each of the 5 milestones in your `milestones/` directory. +- [x] In your repo, create a GitHub Milestone for each final project unit, corresponding to each of the 5 milestones in your `milestones/` directory. - [ ] Set the completion percentage of each milestone. The GitHub Milestone for this unit (Milestone 3 - Unit 7) should be 100% completed when you submit for full points. - [ ] In `readme.md`, check off the features you have completed in this unit by adding a βœ… emoji in front of the feature's name. - - [ ] Under each feature you have completed, include a GIF showing feature functionality. + - [ ] Under each feature you have completed, include a GIF showing feature functionality. - [ ] In this documents, complete all five questions in the **Reflection** section below. ## Reflection From 13b03dc4fa91de277d986b5354299a45c7caefe3 Mon Sep 17 00:00:00 2001 From: ldpina <103157888+ldpina@users.noreply.github.com> Date: Tue, 11 Nov 2025 17:56:13 -0800 Subject: [PATCH 14/25] Update milestone3.md to reflect completed tasks --- milestones/milestone3.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/milestones/milestone3.md b/milestones/milestone3.md index 4407a3e98..81f6a7b3c 100644 --- a/milestones/milestone3.md +++ b/milestones/milestone3.md @@ -8,10 +8,10 @@ This unit, be sure to complete all tasks listed below. To complete a task, place You will need to reference the GitHub Project Management guide in the course portal for more information about how to complete each of these steps. -- [ ] In your repo, create a project board. +- [x] In your repo, create a project board. - *Please be sure to share your project board with the grading team's GitHub **codepathreview**. This is separate from your repository's sharing settings.* - [x] In your repo, create at least 5 issues from the features on your feature list. -- [ ] In your repo, update the status of issues in your project board. +- [x] In your repo, update the status of issues in your project board. - [x] In your repo, create a GitHub Milestone for each final project unit, corresponding to each of the 5 milestones in your `milestones/` directory. - [ ] Set the completion percentage of each milestone. The GitHub Milestone for this unit (Milestone 3 - Unit 7) should be 100% completed when you submit for full points. - [ ] In `readme.md`, check off the features you have completed in this unit by adding a βœ… emoji in front of the feature's name. From cec6eff01144d41f5eeed5e3a3ddd0b93b482eb9 Mon Sep 17 00:00:00 2001 From: ongarrick Date: Tue, 11 Nov 2025 21:54:44 -0500 Subject: [PATCH 15/25] Set up project folder structure and install dependencies --- .gitignore | 26 + client/index.html | 13 + client/package-lock.json | 1578 +++++++++++++++++++++++++++++++++++++ client/package.json | 23 + client/src/App.jsx | 11 + client/src/index.css | 68 ++ client/src/main.jsx | 13 + client/src/style.css | 96 +++ package-lock.json | 6 + server/,env | 5 + server/config/database.js | 14 + server/config/dotenv.js | 2 + server/config/reset.js | 5 + server/package-lock.json | 1346 +++++++++++++++++++++++++++++++ server/package.json | 20 + server/server.js | 13 + 16 files changed, 3239 insertions(+) create mode 100644 .gitignore create mode 100644 client/index.html create mode 100644 client/package-lock.json create mode 100644 client/package.json create mode 100644 client/src/App.jsx create mode 100644 client/src/index.css create mode 100644 client/src/main.jsx create mode 100644 client/src/style.css create mode 100644 package-lock.json create mode 100644 server/,env create mode 100644 server/config/database.js create mode 100644 server/config/dotenv.js create mode 100644 server/config/reset.js create mode 100644 server/package-lock.json create mode 100644 server/package.json create mode 100644 server/server.js diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..3b0b40372 --- /dev/null +++ b/.gitignore @@ -0,0 +1,26 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? + +.env \ No newline at end of file diff --git a/client/index.html b/client/index.html new file mode 100644 index 000000000..ddd41b9d5 --- /dev/null +++ b/client/index.html @@ -0,0 +1,13 @@ + + + + + + + client + + +

+ + + diff --git a/client/package-lock.json b/client/package-lock.json new file mode 100644 index 000000000..df944d420 --- /dev/null +++ b/client/package-lock.json @@ -0,0 +1,1578 @@ +{ + "name": "client", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "client", + "version": "0.0.0", + "dependencies": { + "react": "^19.2.0", + "react-dom": "^19.2.0", + "react-router-dom": "^7.9.5" + }, + "devDependencies": { + "@vitejs/plugin-react": "^5.1.0", + "vite": "npm:rolldown-vite@7.2.2" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.27.1", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.5.tgz", + "integrity": "sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.5.tgz", + "integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.5", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-module-transforms": "^7.28.3", + "@babel/helpers": "^7.28.4", + "@babel/parser": "^7.28.5", + "@babel/template": "^7.27.2", + "@babel/traverse": "^7.28.5", + "@babel/types": "^7.28.5", + "@jridgewell/remapping": "^2.3.5", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.5.tgz", + "integrity": "sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.28.5", + "@babel/types": "^7.28.5", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", + "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.27.2", + "@babel/helper-validator-option": "^7.27.1", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-globals": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", + "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz", + "integrity": "sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1", + "@babel/traverse": "^7.28.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz", + "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.4.tgz", + "integrity": "sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.5.tgz", + "integrity": "sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.5" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.27.1.tgz", + "integrity": "sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.27.1.tgz", + "integrity": "sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", + "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/parser": "^7.27.2", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.5.tgz", + "integrity": "sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.5", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.28.5", + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.5", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.5.tgz", + "integrity": "sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@emnapi/core": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.7.0.tgz", + "integrity": "sha512-pJdKGq/1iquWYtv1RRSljZklxHCOCAJFJrImO5ZLKPJVJlVUcs8yFwNQlqS0Lo8xT1VAXXTCZocF9n26FWEKsw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/wasi-threads": "1.1.0", + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/runtime": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.7.0.tgz", + "integrity": "sha512-oAYoQnCYaQZKVS53Fq23ceWMRxq5EhQsE0x0RdQ55jT7wagMu5k+fS39v1fiSLrtrLQlXwVINenqhLMtTrV/1Q==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/wasi-threads": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.1.0.tgz", + "integrity": "sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@napi-rs/wasm-runtime": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.0.7.tgz", + "integrity": "sha512-SeDnOO0Tk7Okiq6DbXmmBODgOAb9dp9gjlphokTUxmt8U3liIP1ZsozBahH69j/RJv+Rfs6IwUKHTgQYJ/HBAw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "^1.5.0", + "@emnapi/runtime": "^1.5.0", + "@tybys/wasm-util": "^0.10.1" + } + }, + "node_modules/@oxc-project/runtime": { + "version": "0.96.0", + "resolved": "https://registry.npmjs.org/@oxc-project/runtime/-/runtime-0.96.0.tgz", + "integrity": "sha512-34lh4o9CcSw09Hx6fKihPu85+m+4pmDlkXwJrLvN5nMq5JrcGhhihVM415zDqT8j8IixO1PYYdQZRN4SwQCncg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-project/types": { + "version": "0.96.0", + "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.96.0.tgz", + "integrity": "sha512-r/xkmoXA0xEpU6UGtn18CNVjXH6erU3KCpCDbpLmbVxBFor1U9MqN5Z2uMmCHJuXjJzlnDR+hWY+yPoLo8oHDw==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/Boshen" + } + }, + "node_modules/@rolldown/binding-android-arm64": { + "version": "1.0.0-beta.47", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.0.0-beta.47.tgz", + "integrity": "sha512-vPP9/MZzESh9QtmvQYojXP/midjgkkc1E4AdnPPAzQXo668ncHJcVLKjJKzoBdsQmaIvNjrMdsCwES8vTQHRQw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-darwin-arm64": { + "version": "1.0.0-beta.47", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.0.0-beta.47.tgz", + "integrity": "sha512-Lc3nrkxeaDVCVl8qR3qoxh6ltDZfkQ98j5vwIr5ALPkgjZtDK4BGCrrBoLpGVMg+csWcaqUbwbKwH5yvVa0oOw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-darwin-x64": { + "version": "1.0.0-beta.47", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.0.0-beta.47.tgz", + "integrity": "sha512-eBYxQDwP0O33plqNVqOtUHqRiSYVneAknviM5XMawke3mwMuVlAsohtOqEjbCEl/Loi/FWdVeks5WkqAkzkYWQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-freebsd-x64": { + "version": "1.0.0-beta.47", + "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.0.0-beta.47.tgz", + "integrity": "sha512-Ns+kgp2+1Iq/44bY/Z30DETUSiHY7ZuqaOgD5bHVW++8vme9rdiWsN4yG4rRPXkdgzjvQ9TDHmZZKfY4/G11AA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm-gnueabihf": { + "version": "1.0.0-beta.47", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.0.0-beta.47.tgz", + "integrity": "sha512-4PecgWCJhTA2EFOlptYJiNyVP2MrVP4cWdndpOu3WmXqWqZUmSubhb4YUAIxAxnXATlGjC1WjxNPhV7ZllNgdA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm64-gnu": { + "version": "1.0.0-beta.47", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.0.0-beta.47.tgz", + "integrity": "sha512-CyIunZ6D9U9Xg94roQI1INt/bLkOpPsZjZZkiaAZ0r6uccQdICmC99M9RUPlMLw/qg4yEWLlQhG73W/mG437NA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm64-musl": { + "version": "1.0.0-beta.47", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.0.0-beta.47.tgz", + "integrity": "sha512-doozc/Goe7qRCSnzfJbFINTHsMktqmZQmweull6hsZZ9sjNWQ6BWQnbvOlfZJe4xE5NxM1NhPnY5Giqnl3ZrYQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-x64-gnu": { + "version": "1.0.0-beta.47", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.0.0-beta.47.tgz", + "integrity": "sha512-fodvSMf6Aqwa0wEUSTPewmmZOD44rc5Tpr5p9NkwQ6W1SSpUKzD3SwpJIgANDOhwiYhDuiIaYPGB7Ujkx1q0UQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-x64-musl": { + "version": "1.0.0-beta.47", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.0.0-beta.47.tgz", + "integrity": "sha512-Rxm5hYc0mGjwLh5sjlGmMygxAaV2gnsx7CNm2lsb47oyt5UQyPDZf3GP/ct8BEcwuikdqzsrrlIp8+kCSvMFNQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-openharmony-arm64": { + "version": "1.0.0-beta.47", + "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.0.0-beta.47.tgz", + "integrity": "sha512-YakuVe+Gc87jjxazBL34hbr8RJpRuFBhun7NEqoChVDlH5FLhLXjAPHqZd990TVGVNkemourf817Z8u2fONS8w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-wasm32-wasi": { + "version": "1.0.0-beta.47", + "resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.0.0-beta.47.tgz", + "integrity": "sha512-ak2GvTFQz3UAOw8cuQq8pWE+TNygQB6O47rMhvevvTzETh7VkHRFtRUwJynX5hwzFvQMP6G0az5JrBGuwaMwYQ==", + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@napi-rs/wasm-runtime": "^1.0.7" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@rolldown/binding-win32-arm64-msvc": { + "version": "1.0.0-beta.47", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.0.0-beta.47.tgz", + "integrity": "sha512-o5BpmBnXU+Cj+9+ndMcdKjhZlPb79dVPBZnWwMnI4RlNSSq5yOvFZqvfPYbyacvnW03Na4n5XXQAPhu3RydZ0w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-win32-ia32-msvc": { + "version": "1.0.0-beta.47", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-1.0.0-beta.47.tgz", + "integrity": "sha512-FVOmfyYehNE92IfC9Kgs913UerDog2M1m+FADJypKz0gmRg3UyTt4o1cZMCAl7MiR89JpM9jegNO1nXuP1w1vw==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-win32-x64-msvc": { + "version": "1.0.0-beta.47", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.0.0-beta.47.tgz", + "integrity": "sha512-by/70F13IUE101Bat0oeH8miwWX5mhMFPk1yjCdxoTNHTyTdLgb0THNaebRM6AP7Kz+O3O2qx87sruYuF5UxHg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.0-beta.47", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.47.tgz", + "integrity": "sha512-8QagwMH3kNCuzD8EWL8R2YPW5e4OrHNSAHRFDdmFqEwEaD/KcNKjVoumo+gP2vW5eKB2UPbM6vTYiGZX0ixLnw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tybys/wasm-util": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.1.tgz", + "integrity": "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", + "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz", + "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.2" + } + }, + "node_modules/@vitejs/plugin-react": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-5.1.0.tgz", + "integrity": "sha512-4LuWrg7EKWgQaMJfnN+wcmbAW+VSsCmqGohftWjuct47bv8uE4n/nPpq4XjJPsxgq00GGG5J8dvBczp8uxScew==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.28.4", + "@babel/plugin-transform-react-jsx-self": "^7.27.1", + "@babel/plugin-transform-react-jsx-source": "^7.27.1", + "@rolldown/pluginutils": "1.0.0-beta.43", + "@types/babel__core": "^7.20.5", + "react-refresh": "^0.18.0" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "peerDependencies": { + "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" + } + }, + "node_modules/@vitejs/plugin-react/node_modules/@rolldown/pluginutils": { + "version": "1.0.0-beta.43", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.43.tgz", + "integrity": "sha512-5Uxg7fQUCmfhax7FJke2+8B6cqgeUJUD9o2uXIKXhD+mG0mL6NObmVoi9wXEU1tY89mZKgAYA6fTbftx3q2ZPQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/baseline-browser-mapping": { + "version": "2.8.26", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.8.26.tgz", + "integrity": "sha512-73lC1ugzwoaWCLJ1LvOgrR5xsMLTqSKIEoMHVtL9E/HNk0PXtTM76ZIm84856/SF7Nv8mPZxKoBsgpm0tR1u1Q==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.js" + } + }, + "node_modules/browserslist": { + "version": "4.28.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.0.tgz", + "integrity": "sha512-tbydkR/CxfMwelN0vwdP/pLkDwyAASZ+VfWm4EOwlB6SWhx1sYnWLqo8N5j0rAzPfzfRaxt0mM/4wPU/Su84RQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "baseline-browser-mapping": "^2.8.25", + "caniuse-lite": "^1.0.30001754", + "electron-to-chromium": "^1.5.249", + "node-releases": "^2.0.27", + "update-browserslist-db": "^1.1.4" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001754", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001754.tgz", + "integrity": "sha512-x6OeBXueoAceOmotzx3PO4Zpt4rzpeIFsSr6AAePTZxSkXiYDUmpypEl7e2+8NCd9bD7bXjqyef8CJYPC1jfxg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/cookie": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.0.2.tgz", + "integrity": "sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.5.250", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.250.tgz", + "integrity": "sha512-/5UMj9IiGDMOFBnN4i7/Ry5onJrAGSbOGo3s9FEKmwobGq6xw832ccET0CE3CkkMBZ8GJSlUIesZofpyurqDXw==", + "dev": true, + "license": "ISC" + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/lightningcss": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.30.2.tgz", + "integrity": "sha512-utfs7Pr5uJyyvDETitgsaqSyjCb2qNRAtuqUeWIAKztsOYdcACf2KtARYXg2pSvhkt+9NfoaNY7fxjl6nuMjIQ==", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "detect-libc": "^2.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-android-arm64": "1.30.2", + "lightningcss-darwin-arm64": "1.30.2", + "lightningcss-darwin-x64": "1.30.2", + "lightningcss-freebsd-x64": "1.30.2", + "lightningcss-linux-arm-gnueabihf": "1.30.2", + "lightningcss-linux-arm64-gnu": "1.30.2", + "lightningcss-linux-arm64-musl": "1.30.2", + "lightningcss-linux-x64-gnu": "1.30.2", + "lightningcss-linux-x64-musl": "1.30.2", + "lightningcss-win32-arm64-msvc": "1.30.2", + "lightningcss-win32-x64-msvc": "1.30.2" + } + }, + "node_modules/lightningcss-android-arm64": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.30.2.tgz", + "integrity": "sha512-BH9sEdOCahSgmkVhBLeU7Hc9DWeZ1Eb6wNS6Da8igvUwAe0sqROHddIlvU06q3WyXVEOYDZ6ykBZQnjTbmo4+A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-arm64": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.30.2.tgz", + "integrity": "sha512-ylTcDJBN3Hp21TdhRT5zBOIi73P6/W0qwvlFEk22fkdXchtNTOU4Qc37SkzV+EKYxLouZ6M4LG9NfZ1qkhhBWA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-x64": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.30.2.tgz", + "integrity": "sha512-oBZgKchomuDYxr7ilwLcyms6BCyLn0z8J0+ZZmfpjwg9fRVZIR5/GMXd7r9RH94iDhld3UmSjBM6nXWM2TfZTQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-freebsd-x64": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.30.2.tgz", + "integrity": "sha512-c2bH6xTrf4BDpK8MoGG4Bd6zAMZDAXS569UxCAGcA7IKbHNMlhGQ89eRmvpIUGfKWNVdbhSbkQaWhEoMGmGslA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.30.2.tgz", + "integrity": "sha512-eVdpxh4wYcm0PofJIZVuYuLiqBIakQ9uFZmipf6LF/HRj5Bgm0eb3qL/mr1smyXIS1twwOxNWndd8z0E374hiA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.30.2.tgz", + "integrity": "sha512-UK65WJAbwIJbiBFXpxrbTNArtfuznvxAJw4Q2ZGlU8kPeDIWEX1dg3rn2veBVUylA2Ezg89ktszWbaQnxD/e3A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-musl": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.30.2.tgz", + "integrity": "sha512-5Vh9dGeblpTxWHpOx8iauV02popZDsCYMPIgiuw97OJ5uaDsL86cnqSFs5LZkG3ghHoX5isLgWzMs+eD1YzrnA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.30.2.tgz", + "integrity": "sha512-Cfd46gdmj1vQ+lR6VRTTadNHu6ALuw2pKR9lYq4FnhvgBc4zWY1EtZcAc6EffShbb1MFrIPfLDXD6Xprbnni4w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.30.2.tgz", + "integrity": "sha512-XJaLUUFXb6/QG2lGIW6aIk6jKdtjtcffUT0NKvIqhSBY3hh9Ch+1LCeH80dR9q9LBjG3ewbDjnumefsLsP6aiA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-arm64-msvc": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.30.2.tgz", + "integrity": "sha512-FZn+vaj7zLv//D/192WFFVA0RgHawIcHqLX9xuWiQt7P0PtdFEVaxgF9rjM/IRYHQXNnk61/H/gb2Ei+kUQ4xQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-x64-msvc": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.30.2.tgz", + "integrity": "sha512-5g1yc73p+iAkid5phb4oVFMB45417DkRevRbt/El/gKXJk4jid+vPFF/AXbxn05Aky8PapwzZrdJShv5C0avjw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/node-releases": { + "version": "2.0.27", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz", + "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/react": { + "version": "19.2.0", + "resolved": "https://registry.npmjs.org/react/-/react-19.2.0.tgz", + "integrity": "sha512-tmbWg6W31tQLeB5cdIBOicJDJRR2KzXsV7uSK9iNfLWQ5bIZfxuPEHp7M8wiHyHnn0DD1i7w3Zmin0FtkrwoCQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "19.2.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.0.tgz", + "integrity": "sha512-UlbRu4cAiGaIewkPyiRGJk0imDN2T3JjieT6spoL2UeSf5od4n5LB/mQ4ejmxhCFT1tYe8IvaFulzynWovsEFQ==", + "license": "MIT", + "dependencies": { + "scheduler": "^0.27.0" + }, + "peerDependencies": { + "react": "^19.2.0" + } + }, + "node_modules/react-refresh": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.18.0.tgz", + "integrity": "sha512-QgT5//D3jfjJb6Gsjxv0Slpj23ip+HtOpnNgnb2S5zU3CB26G/IDPGoy4RJB42wzFE46DRsstbW6tKHoKbhAxw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-router": { + "version": "7.9.5", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.9.5.tgz", + "integrity": "sha512-JmxqrnBZ6E9hWmf02jzNn9Jm3UqyeimyiwzD69NjxGySG6lIz/1LVPsoTCwN7NBX2XjCEa1LIX5EMz1j2b6u6A==", + "license": "MIT", + "dependencies": { + "cookie": "^1.0.1", + "set-cookie-parser": "^2.6.0" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "react": ">=18", + "react-dom": ">=18" + }, + "peerDependenciesMeta": { + "react-dom": { + "optional": true + } + } + }, + "node_modules/react-router-dom": { + "version": "7.9.5", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-7.9.5.tgz", + "integrity": "sha512-mkEmq/K8tKN63Ae2M7Xgz3c9l9YNbY+NHH6NNeUmLA3kDkhKXRsNb/ZpxaEunvGo2/3YXdk5EJU3Hxp3ocaBPw==", + "license": "MIT", + "dependencies": { + "react-router": "7.9.5" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "react": ">=18", + "react-dom": ">=18" + } + }, + "node_modules/rolldown": { + "version": "1.0.0-beta.47", + "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.0.0-beta.47.tgz", + "integrity": "sha512-Mid74GckX1OeFAOYz9KuXeWYhq3xkXbMziYIC+ULVdUzPTG9y70OBSBQDQn9hQP8u/AfhuYw1R0BSg15nBI4Dg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@oxc-project/types": "=0.96.0", + "@rolldown/pluginutils": "1.0.0-beta.47" + }, + "bin": { + "rolldown": "bin/cli.mjs" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "optionalDependencies": { + "@rolldown/binding-android-arm64": "1.0.0-beta.47", + "@rolldown/binding-darwin-arm64": "1.0.0-beta.47", + "@rolldown/binding-darwin-x64": "1.0.0-beta.47", + "@rolldown/binding-freebsd-x64": "1.0.0-beta.47", + "@rolldown/binding-linux-arm-gnueabihf": "1.0.0-beta.47", + "@rolldown/binding-linux-arm64-gnu": "1.0.0-beta.47", + "@rolldown/binding-linux-arm64-musl": "1.0.0-beta.47", + "@rolldown/binding-linux-x64-gnu": "1.0.0-beta.47", + "@rolldown/binding-linux-x64-musl": "1.0.0-beta.47", + "@rolldown/binding-openharmony-arm64": "1.0.0-beta.47", + "@rolldown/binding-wasm32-wasi": "1.0.0-beta.47", + "@rolldown/binding-win32-arm64-msvc": "1.0.0-beta.47", + "@rolldown/binding-win32-ia32-msvc": "1.0.0-beta.47", + "@rolldown/binding-win32-x64-msvc": "1.0.0-beta.47" + } + }, + "node_modules/scheduler": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz", + "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==", + "license": "MIT" + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/set-cookie-parser": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.2.tgz", + "integrity": "sha512-oeM1lpU/UvhTxw+g3cIfxXHyJRc/uidd3yK1P242gzHds0udQBYzs3y8j4gCCW+ZJ7ad0yctld8RYO+bdurlvw==", + "license": "MIT" + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD", + "optional": true + }, + "node_modules/update-browserslist-db": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.4.tgz", + "integrity": "sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/vite": { + "name": "rolldown-vite", + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/rolldown-vite/-/rolldown-vite-7.2.2.tgz", + "integrity": "sha512-Fl3ZdmJhDMJGcqrr342pPVrhugXdOcuNBRBauz4S7QGSRXbQy7y8q5QYJtgkcrG8XjY0EENSZeTk58c3m20FxA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@oxc-project/runtime": "0.96.0", + "fdir": "^6.5.0", + "lightningcss": "^1.30.2", + "picomatch": "^4.0.3", + "postcss": "^8.5.6", + "rolldown": "1.0.0-beta.47", + "tinyglobby": "^0.2.15" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^20.19.0 || >=22.12.0", + "esbuild": "^0.25.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + } + } +} diff --git a/client/package.json b/client/package.json new file mode 100644 index 000000000..41af817e1 --- /dev/null +++ b/client/package.json @@ -0,0 +1,23 @@ +{ + "name": "client", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "vite build", + "preview": "vite preview" + }, + "devDependencies": { + "@vitejs/plugin-react": "^5.1.0", + "vite": "npm:rolldown-vite@7.2.2" + }, + "overrides": { + "vite": "npm:rolldown-vite@7.2.2" + }, + "dependencies": { + "react": "^19.2.0", + "react-dom": "^19.2.0", + "react-router-dom": "^7.9.5" + } +} diff --git a/client/src/App.jsx b/client/src/App.jsx new file mode 100644 index 000000000..4efcdacc7 --- /dev/null +++ b/client/src/App.jsx @@ -0,0 +1,11 @@ + +const App = () => { + + return ( +
+

Hello World

+
+ ) +} + +export default App \ No newline at end of file diff --git a/client/src/index.css b/client/src/index.css new file mode 100644 index 000000000..3e207db6a --- /dev/null +++ b/client/src/index.css @@ -0,0 +1,68 @@ +@import url('https://fonts.googleapis.com/css2?family=Rubik:ital,wght@0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,300;1,400;1,500;1,600;1,700;1,800;1,900&display=swap'); + +#root { + --font-family: Rubik, Verdana, sans-serif; + --primary: rgb(115, 2, 12); + --primary-hover: black; + --color: rgb(0, 0, 0); + --h1-color: var(--color); + --h2-color: var(--color); + --h3-color: var(--color); + --card-background-color: rgba(0, 0, 0, 0.8); + --card-sectionning-background-color: rgba(0, 0, 0, 0.8); + --form-element-active-border-color: var(--color); + --form-element-placeholder-color: gray; +} + +#root h1 { + font-size: 3rem; + margin-bottom: 0px; +} + +#root h2 { + margin-bottom: 0px; +} + +#root h3 { + font-size: 1.5rem; + margin-bottom: 0px; +} + +#root p { + margin-bottom: 10px; +} + +#root [role=button], #root button, #root input[type=submit] { + font-family: var(--font-family); + font-weight: 500; + text-transform: uppercase; + border: 2px solid transparent; + margin: 10px; + width: max-content; +} + +#root [role=button]:hover, #root button:hover, #root input[type=submit]:hover { + border: 2px solid var(--color); +} + +#root main { + display: flex; + overflow-x: hidden; + overflow-y: hidden; +} + +#root article { + text-align: left; + margin-bottom: 5px; +} + +#root article header { + border-bottom: 0px; + margin-bottom: 10px; +} + +#root article footer { + border-top: 0px; + margin-top: 0px; + display: flex; +} \ No newline at end of file diff --git a/client/src/main.jsx b/client/src/main.jsx new file mode 100644 index 000000000..a2ca76165 --- /dev/null +++ b/client/src/main.jsx @@ -0,0 +1,13 @@ +import React from 'react' +import ReactDOM from 'react-dom/client' +import { BrowserRouter } from 'react-router-dom' +import App from './App' +import './index.css' + +ReactDOM.createRoot(document.getElementById('root')).render( + + + + + +) \ No newline at end of file diff --git a/client/src/style.css b/client/src/style.css new file mode 100644 index 000000000..8df73e3b2 --- /dev/null +++ b/client/src/style.css @@ -0,0 +1,96 @@ +:root { + font-family: system-ui, Avenir, Helvetica, Arial, sans-serif; + line-height: 1.5; + font-weight: 400; + + color-scheme: light dark; + color: rgba(255, 255, 255, 0.87); + background-color: #242424; + + font-synthesis: none; + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +a { + font-weight: 500; + color: #646cff; + text-decoration: inherit; +} +a:hover { + color: #535bf2; +} + +body { + margin: 0; + display: flex; + place-items: center; + min-width: 320px; + min-height: 100vh; +} + +h1 { + font-size: 3.2em; + line-height: 1.1; +} + +#app { + max-width: 1280px; + margin: 0 auto; + padding: 2rem; + text-align: center; +} + +.logo { + height: 6em; + padding: 1.5em; + will-change: filter; + transition: filter 300ms; +} +.logo:hover { + filter: drop-shadow(0 0 2em #646cffaa); +} +.logo.vanilla:hover { + filter: drop-shadow(0 0 2em #f7df1eaa); +} + +.card { + padding: 2em; +} + +.read-the-docs { + color: #888; +} + +button { + border-radius: 8px; + border: 1px solid transparent; + padding: 0.6em 1.2em; + font-size: 1em; + font-weight: 500; + font-family: inherit; + background-color: #1a1a1a; + cursor: pointer; + transition: border-color 0.25s; +} +button:hover { + border-color: #646cff; +} +button:focus, +button:focus-visible { + outline: 4px auto -webkit-focus-ring-color; +} + +@media (prefers-color-scheme: light) { + :root { + color: #213547; + background-color: #ffffff; + } + a:hover { + color: #747bff; + } + button { + background-color: #f9f9f9; + } +} diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 000000000..a6096e566 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,6 @@ +{ + "name": "codepath-web103-capstone", + "lockfileVersion": 3, + "requires": true, + "packages": {} +} diff --git a/server/,env b/server/,env new file mode 100644 index 000000000..9fcf097c9 --- /dev/null +++ b/server/,env @@ -0,0 +1,5 @@ +PGDATABASE= +PGHOST= +PGPASSWORD= +PGPORT= +PGUSER= \ No newline at end of file diff --git a/server/config/database.js b/server/config/database.js new file mode 100644 index 000000000..52c34eba7 --- /dev/null +++ b/server/config/database.js @@ -0,0 +1,14 @@ +import pg from 'pg' + +const config = { + user: process.env.PGUSER, + password: process.env.PGPASSWORD, + host: process.env.PGHOST, + port: process.env.PGPORT, + database: process.env.PGDATABASE, + ssl: { + rejectUnauthorized: false + } +} + +export const pool = new pg.Pool(config) \ No newline at end of file diff --git a/server/config/dotenv.js b/server/config/dotenv.js new file mode 100644 index 000000000..f33ba621a --- /dev/null +++ b/server/config/dotenv.js @@ -0,0 +1,2 @@ +import dotenv from 'dotenv' +dotenv.config({ path: '../.env' }) \ No newline at end of file diff --git a/server/config/reset.js b/server/config/reset.js new file mode 100644 index 000000000..574750c04 --- /dev/null +++ b/server/config/reset.js @@ -0,0 +1,5 @@ +//import pool +//import dotenv.js +//import data.js + +//create tabel queries \ No newline at end of file diff --git a/server/package-lock.json b/server/package-lock.json new file mode 100644 index 000000000..850cb7418 --- /dev/null +++ b/server/package-lock.json @@ -0,0 +1,1346 @@ +{ + "name": "server", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "server", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "cors": "^2.8.5", + "dotenv": "^17.2.3", + "express": "^5.1.0", + "nodemon": "^3.1.11", + "pg": "^8.16.3" + } + }, + "node_modules/accepts": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", + "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", + "license": "MIT", + "dependencies": { + "mime-types": "^3.0.0", + "negotiator": "^1.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "license": "MIT" + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/body-parser": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.0.tgz", + "integrity": "sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==", + "license": "MIT", + "dependencies": { + "bytes": "^3.1.2", + "content-type": "^1.0.5", + "debug": "^4.4.0", + "http-errors": "^2.0.0", + "iconv-lite": "^0.6.3", + "on-finished": "^2.4.1", + "qs": "^6.14.0", + "raw-body": "^3.0.0", + "type-is": "^2.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "license": "MIT" + }, + "node_modules/content-disposition": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.0.tgz", + "integrity": "sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", + "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", + "license": "MIT", + "engines": { + "node": ">=6.6.0" + } + }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "license": "MIT", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/dotenv": { + "version": "17.2.3", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.2.3.tgz", + "integrity": "sha512-JVUnt+DUIzu87TABbhPmNfVdBDt18BLOWjMUFJMSi/Qqg7NTYtabbvSNJGOJ7afbRuv9D/lngizHtP7QyLQ+9w==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "license": "MIT" + }, + "node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "license": "MIT" + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/express/-/express-5.1.0.tgz", + "integrity": "sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==", + "license": "MIT", + "dependencies": { + "accepts": "^2.0.0", + "body-parser": "^2.2.0", + "content-disposition": "^1.0.0", + "content-type": "^1.0.5", + "cookie": "^0.7.1", + "cookie-signature": "^1.2.1", + "debug": "^4.4.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "finalhandler": "^2.1.0", + "fresh": "^2.0.0", + "http-errors": "^2.0.0", + "merge-descriptors": "^2.0.0", + "mime-types": "^3.0.0", + "on-finished": "^2.4.1", + "once": "^1.4.0", + "parseurl": "^1.3.3", + "proxy-addr": "^2.0.7", + "qs": "^6.14.0", + "range-parser": "^1.2.1", + "router": "^2.2.0", + "send": "^1.1.0", + "serve-static": "^2.2.0", + "statuses": "^2.0.1", + "type-is": "^2.0.1", + "vary": "^1.1.2" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.0.tgz", + "integrity": "sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==", + "license": "MIT", + "dependencies": { + "debug": "^4.4.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "on-finished": "^2.4.1", + "parseurl": "^1.3.3", + "statuses": "^2.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", + "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "license": "MIT", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-errors/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ignore-by-default": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", + "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==", + "license": "ISC" + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-promise": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", + "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", + "license": "MIT" + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/media-typer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", + "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/merge-descriptors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz", + "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mime-db": { + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz", + "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", + "license": "MIT", + "dependencies": { + "mime-db": "^1.54.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/negotiator": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", + "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/nodemon": { + "version": "3.1.11", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.1.11.tgz", + "integrity": "sha512-is96t8F/1//UHAjNPHpbsNY46ELPpftGUoSVNXwUfMk/qdjSylYrWSu1XavVTBOn526kFiOR733ATgNBCQyH0g==", + "license": "MIT", + "dependencies": { + "chokidar": "^3.5.2", + "debug": "^4", + "ignore-by-default": "^1.0.1", + "minimatch": "^3.1.2", + "pstree.remy": "^1.1.8", + "semver": "^7.5.3", + "simple-update-notifier": "^2.0.0", + "supports-color": "^5.5.0", + "touch": "^3.1.0", + "undefsafe": "^2.0.5" + }, + "bin": { + "nodemon": "bin/nodemon.js" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nodemon" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-to-regexp": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.3.0.tgz", + "integrity": "sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/pg": { + "version": "8.16.3", + "resolved": "https://registry.npmjs.org/pg/-/pg-8.16.3.tgz", + "integrity": "sha512-enxc1h0jA/aq5oSDMvqyW3q89ra6XIIDZgCX9vkMrnz5DFTw/Ny3Li2lFQ+pt3L6MCgm/5o2o8HW9hiJji+xvw==", + "license": "MIT", + "dependencies": { + "pg-connection-string": "^2.9.1", + "pg-pool": "^3.10.1", + "pg-protocol": "^1.10.3", + "pg-types": "2.2.0", + "pgpass": "1.0.5" + }, + "engines": { + "node": ">= 16.0.0" + }, + "optionalDependencies": { + "pg-cloudflare": "^1.2.7" + }, + "peerDependencies": { + "pg-native": ">=3.0.1" + }, + "peerDependenciesMeta": { + "pg-native": { + "optional": true + } + } + }, + "node_modules/pg-cloudflare": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/pg-cloudflare/-/pg-cloudflare-1.2.7.tgz", + "integrity": "sha512-YgCtzMH0ptvZJslLM1ffsY4EuGaU0cx4XSdXLRFae8bPP4dS5xL1tNB3k2o/N64cHJpwU7dxKli/nZ2lUa5fLg==", + "license": "MIT", + "optional": true + }, + "node_modules/pg-connection-string": { + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.9.1.tgz", + "integrity": "sha512-nkc6NpDcvPVpZXxrreI/FOtX3XemeLl8E0qFr6F2Lrm/I8WOnaWNhIPK2Z7OHpw7gh5XJThi6j6ppgNoaT1w4w==", + "license": "MIT" + }, + "node_modules/pg-int8": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz", + "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==", + "license": "ISC", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/pg-pool": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.10.1.tgz", + "integrity": "sha512-Tu8jMlcX+9d8+QVzKIvM/uJtp07PKr82IUOYEphaWcoBhIYkoHpLXN3qO59nAI11ripznDsEzEv8nUxBVWajGg==", + "license": "MIT", + "peerDependencies": { + "pg": ">=8.0" + } + }, + "node_modules/pg-protocol": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.10.3.tgz", + "integrity": "sha512-6DIBgBQaTKDJyxnXaLiLR8wBpQQcGWuAESkRBX/t6OwA8YsqP+iVSiond2EDy6Y/dsGk8rh/jtax3js5NeV7JQ==", + "license": "MIT" + }, + "node_modules/pg-types": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz", + "integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==", + "license": "MIT", + "dependencies": { + "pg-int8": "1.0.1", + "postgres-array": "~2.0.0", + "postgres-bytea": "~1.0.0", + "postgres-date": "~1.0.4", + "postgres-interval": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pgpass": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/pgpass/-/pgpass-1.0.5.tgz", + "integrity": "sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==", + "license": "MIT", + "dependencies": { + "split2": "^4.1.0" + } + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postgres-array": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", + "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/postgres-bytea": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz", + "integrity": "sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postgres-date": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz", + "integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postgres-interval": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz", + "integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==", + "license": "MIT", + "dependencies": { + "xtend": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "license": "MIT", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/pstree.remy": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", + "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", + "license": "MIT" + }, + "node_modules/qs": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.1.tgz", + "integrity": "sha512-9G8cA+tuMS75+6G/TzW8OtLzmBDMo8p1JRxN5AZ+LAp8uxGA8V8GZm4GQ4/N5QNQEnLmg6SS7wyuSmbKepiKqA==", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.7.0", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/raw-body/node_modules/iconv-lite": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.0.tgz", + "integrity": "sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/router": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz", + "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==", + "license": "MIT", + "dependencies": { + "debug": "^4.4.0", + "depd": "^2.0.0", + "is-promise": "^4.0.0", + "parseurl": "^1.3.3", + "path-to-regexp": "^8.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT" + }, + "node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/send": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/send/-/send-1.2.0.tgz", + "integrity": "sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==", + "license": "MIT", + "dependencies": { + "debug": "^4.3.5", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "fresh": "^2.0.0", + "http-errors": "^2.0.0", + "mime-types": "^3.0.1", + "ms": "^2.1.3", + "on-finished": "^2.4.1", + "range-parser": "^1.2.1", + "statuses": "^2.0.1" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/serve-static": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.0.tgz", + "integrity": "sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ==", + "license": "MIT", + "dependencies": { + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "parseurl": "^1.3.3", + "send": "^1.2.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "license": "ISC" + }, + "node_modules/side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/simple-update-notifier": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz", + "integrity": "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==", + "license": "MIT", + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/split2": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", + "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", + "license": "ISC", + "engines": { + "node": ">= 10.x" + } + }, + "node_modules/statuses": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", + "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/touch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.1.tgz", + "integrity": "sha512-r0eojU4bI8MnHr8c5bNo7lJDdI2qXlWWJk6a9EAFG7vbhTjElYhBVS3/miuE0uOuoLdb8Mc/rVfsmm6eo5o9GA==", + "license": "ISC", + "bin": { + "nodetouch": "bin/nodetouch.js" + } + }, + "node_modules/type-is": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz", + "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==", + "license": "MIT", + "dependencies": { + "content-type": "^1.0.5", + "media-typer": "^1.1.0", + "mime-types": "^3.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/undefsafe": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", + "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", + "license": "MIT" + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "license": "ISC" + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "license": "MIT", + "engines": { + "node": ">=0.4" + } + } + } +} diff --git a/server/package.json b/server/package.json new file mode 100644 index 000000000..c27df520b --- /dev/null +++ b/server/package.json @@ -0,0 +1,20 @@ +{ + "name": "server", + "version": "1.0.0", + "main": "server.js", + "type": "module", + "scripts": { + "start": "nodemon server.js" + }, + "keywords": [], + "author": "", + "license": "ISC", + "description": "", + "dependencies": { + "cors": "^2.8.5", + "dotenv": "^17.2.3", + "express": "^5.1.0", + "nodemon": "^3.1.11", + "pg": "^8.16.3" + } +} diff --git a/server/server.js b/server/server.js new file mode 100644 index 000000000..d778417af --- /dev/null +++ b/server/server.js @@ -0,0 +1,13 @@ +import express from 'express' +import './config/dotenv.js' +import cors from 'cors' + +const app = express() + +app.use(cors()) + +const PORT = process.env.PORT || 3001 + +app.listen(PORT, () => { + console.log(`πŸš€ Server listening on http://localhost:${PORT}`) +}) \ No newline at end of file From a8e8a3310a1f643ec9242854433e021f8d1d1539 Mon Sep 17 00:00:00 2001 From: ongarrick Date: Tue, 11 Nov 2025 22:04:59 -0500 Subject: [PATCH 16/25] added scripts to server package.json --- server/package.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/server/package.json b/server/package.json index c27df520b..802b5e780 100644 --- a/server/package.json +++ b/server/package.json @@ -4,7 +4,9 @@ "main": "server.js", "type": "module", "scripts": { - "start": "nodemon server.js" + "start": "npm run reset && nodemon --require dotenv/config server.js", + "build": "cd client && vite build", + "reset": "cd config && node --require dotenv/config reset.js" }, "keywords": [], "author": "", From b30569178db8f8586dd9f6296abb8c97411e230e Mon Sep 17 00:00:00 2001 From: Kristal Hong <130208431+KHONG707@users.noreply.github.com> Date: Tue, 11 Nov 2025 20:04:08 -0800 Subject: [PATCH 17/25] Update milestone3.md --- milestones/milestone3.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/milestones/milestone3.md b/milestones/milestone3.md index 81f6a7b3c..aac42f621 100644 --- a/milestones/milestone3.md +++ b/milestones/milestone3.md @@ -16,26 +16,26 @@ You will need to reference the GitHub Project Management guide in the course por - [ ] Set the completion percentage of each milestone. The GitHub Milestone for this unit (Milestone 3 - Unit 7) should be 100% completed when you submit for full points. - [ ] In `readme.md`, check off the features you have completed in this unit by adding a βœ… emoji in front of the feature's name. - [ ] Under each feature you have completed, include a GIF showing feature functionality. -- [ ] In this documents, complete all five questions in the **Reflection** section below. +- [x] In this documents, complete all five questions in the **Reflection** section below. ## Reflection ### 1. What went well during this unit? -[πŸ‘‰πŸΎπŸ‘‰πŸΎπŸ‘‰πŸΎ your answer here] +Setting up a clear project management structure went well. Our group established an organized workflow and communication plan, which helped everyone stay on the same page and understand their responsibilities. ### 2. What were some challenges your group faced in this unit? -[πŸ‘‰πŸΎπŸ‘‰πŸΎπŸ‘‰πŸΎ your answer here] +A major challenge was organizing the project into smaller, manageable issues that could be assigned to individual members. Many components of the project are interconnected, which made it difficult to isolate tasks without affecting others. ### Did you finish all of your tasks in your sprint plan for this week? If you did not finish all of the planned tasks, how would you prioritize the remaining tasks on your list? -[πŸ‘‰πŸΎπŸ‘‰πŸΎπŸ‘‰πŸΎ your answer here] +Yes, we completed all of our planned tasks for the week. Our tasks were primarily setup-based, including establishing the project structure, installing dependencies, rendering the database, and creating a solid project plan. ### Which features and user stories would you consider β€œat risk”? How will you change your plan if those items remain β€œat risk”? -[πŸ‘‰πŸΎπŸ‘‰πŸΎπŸ‘‰πŸΎ your answer here] +The image upload feature and implementation of more custom art are currently β€œat risk.” If we run short on time, we’ll prioritize completing our core features first and leave these as stretch goals to revisit later if time permits. ### 5. What additional support will you need in upcoming units as you continue to work on your final project? -[πŸ‘‰πŸΎπŸ‘‰πŸΎπŸ‘‰πŸΎ your answer here] +None at this time as our team feels confident moving forward with the current plan and structure. From 7350def470fae30559a40cd6df6abe91e97444d0 Mon Sep 17 00:00:00 2001 From: ongarrick <75192692+norellic@users.noreply.github.com> Date: Tue, 11 Nov 2025 23:17:49 -0500 Subject: [PATCH 18/25] Document dbdiagram.io database structure in reset.js for reference for table queries Added database structure comments for users, habits, tags, and stickers. --- server/config/reset.js | 53 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 52 insertions(+), 1 deletion(-) diff --git a/server/config/reset.js b/server/config/reset.js index 574750c04..a36395480 100644 --- a/server/config/reset.js +++ b/server/config/reset.js @@ -2,4 +2,55 @@ //import dotenv.js //import data.js -//create tabel queries \ No newline at end of file +//create table queries + +/* +dbdiagram.io structure: + +Table users { + id integer [primary key] + username varchar + password varchar + points integer +} + +Table habits { + id integer [primary key] + user_id integer [not null] + title varchar + description text [note: 'Description of the habit'] +} + +Table tags { + id integer [primary key] + name varchar +} + +Table habitTags { //join table + habit_id integer [not null] + tag_id integer [not null] +} + +Table stickers { + id integer [primary key] + name varchar + price integer + image_url url +} + +Table userStickers { + user_id integer [not null] + sticker_id integer [not null] +} + +Ref user_habits: habits.user_id > users.id // many-to-one + +Ref link_habit_id_to_habitTag: habitTags.habit_id > habits.id + +Ref link_tag_id_to_habitTag: habitTags.tag_id > tags.id + +Ref link_user_id_to_userStickers: userStickers.user_id > users.id + +Ref link_sticker_id_to_userStickers: userStickers.sticker_id > stickers.id + +*/ From 9f99e0e7863bbcdc2cbdeef8fa3da44a5e190512 Mon Sep 17 00:00:00 2001 From: lpina Date: Tue, 11 Nov 2025 20:19:31 -0800 Subject: [PATCH 19/25] added .env creds still need reset.js --- milestones/milestone3.md | 6 +++--- server/,env | 5 ----- 2 files changed, 3 insertions(+), 8 deletions(-) delete mode 100644 server/,env diff --git a/milestones/milestone3.md b/milestones/milestone3.md index aac42f621..9492e9847 100644 --- a/milestones/milestone3.md +++ b/milestones/milestone3.md @@ -13,9 +13,9 @@ You will need to reference the GitHub Project Management guide in the course por - [x] In your repo, create at least 5 issues from the features on your feature list. - [x] In your repo, update the status of issues in your project board. - [x] In your repo, create a GitHub Milestone for each final project unit, corresponding to each of the 5 milestones in your `milestones/` directory. - - [ ] Set the completion percentage of each milestone. The GitHub Milestone for this unit (Milestone 3 - Unit 7) should be 100% completed when you submit for full points. -- [ ] In `readme.md`, check off the features you have completed in this unit by adding a βœ… emoji in front of the feature's name. - - [ ] Under each feature you have completed, include a GIF showing feature functionality. + - [x] Set the completion percentage of each milestone. The GitHub Milestone for this unit (Milestone 3 - Unit 7) should be 100% completed when you submit for full points. +- [x] In `readme.md`, check off the features you have completed in this unit by adding a βœ… emoji in front of the feature's name. + - [x] Under each feature you have completed, include a GIF showing feature functionality. - [x] In this documents, complete all five questions in the **Reflection** section below. ## Reflection diff --git a/server/,env b/server/,env deleted file mode 100644 index 9fcf097c9..000000000 --- a/server/,env +++ /dev/null @@ -1,5 +0,0 @@ -PGDATABASE= -PGHOST= -PGPASSWORD= -PGPORT= -PGUSER= \ No newline at end of file From d8a021c3a393c44e6d840bd0049d9372deb94961 Mon Sep 17 00:00:00 2001 From: lpina Date: Tue, 11 Nov 2025 21:33:38 -0800 Subject: [PATCH 20/25] connected back end to project and have some sample data --- server/config/reset.js | 73 ++++++++++++++++++++++++++++++++++++++-- server/package-lock.json | 8 ++--- server/package.json | 12 +++---- 3 files changed, 80 insertions(+), 13 deletions(-) diff --git a/server/config/reset.js b/server/config/reset.js index a36395480..da5f2b89e 100644 --- a/server/config/reset.js +++ b/server/config/reset.js @@ -1,6 +1,5 @@ -//import pool -//import dotenv.js -//import data.js +import 'dotenv/config'; +import { pool } from './database.js'; //create table queries @@ -54,3 +53,71 @@ Ref link_user_id_to_userStickers: userStickers.user_id > users.id Ref link_sticker_id_to_userStickers: userStickers.sticker_id > stickers.id */ + +const reset = async () => { + try { + await pool.query(` + DROP TABLE IF EXISTS habit_tags; + DROP TABLE IF EXISTS user_stickers; + DROP TABLE IF EXISTS habits; + DROP TABLE IF EXISTS tags; + DROP TABLE IF EXISTS stickers; + DROP TABLE IF EXISTS users; + + CREATE TABLE users ( + id SERIAL PRIMARY KEY, + username VARCHAR(50) NOT NULL UNIQUE, + password VARCHAR(255) NOT NULL, + points INTEGER NOT NULL DEFAULT 0 + ); + + CREATE TABLE habits ( + id SERIAL PRIMARY KEY, + user_id INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE, + title VARCHAR(120) NOT NULL, + description TEXT + ); + + CREATE TABLE tags ( + id SERIAL PRIMARY KEY, + name VARCHAR(50) NOT NULL UNIQUE + ); + + CREATE TABLE habit_tags ( + habit_id INTEGER NOT NULL REFERENCES habits(id) ON DELETE CASCADE, + tag_id INTEGER NOT NULL REFERENCES tags(id) ON DELETE CASCADE, + PRIMARY KEY (habit_id, tag_id) + ); + + CREATE TABLE stickers ( + id SERIAL PRIMARY KEY, + name VARCHAR(100) NOT NULL UNIQUE, + price INTEGER NOT NULL CHECK (price >= 0), + image_url TEXT + ); + + CREATE TABLE user_stickers ( + user_id INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE, + sticker_id INTEGER NOT NULL REFERENCES stickers(id) ON DELETE CASCADE, + PRIMARY KEY (user_id, sticker_id) + ); + `); + + // minimal seed: 1 user + 1 tag + 1 sticker (for testing UI) + await pool.query(` + INSERT INTO users (username, password, points) + VALUES ('demo', '$2b$10$examplehash', 0) + ON CONFLICT DO NOTHING; + + INSERT INTO tags (name) VALUES ('sample') ON CONFLICT DO NOTHING; + INSERT INTO stickers (name, price, image_url) + VALUES ('Sample Sticker', 10, NULL) ON CONFLICT DO NOTHING; + `); + + console.log('βœ… schema reset; minimal seed inserted'); + } finally { + await pool.end(); + } +}; + +reset(); diff --git a/server/package-lock.json b/server/package-lock.json index 850cb7418..e8e80d7f7 100644 --- a/server/package-lock.json +++ b/server/package-lock.json @@ -10,7 +10,7 @@ "license": "ISC", "dependencies": { "cors": "^2.8.5", - "dotenv": "^17.2.3", + "dotenv": "^16.6.1", "express": "^5.1.0", "nodemon": "^3.1.11", "pg": "^8.16.3" @@ -249,9 +249,9 @@ } }, "node_modules/dotenv": { - "version": "17.2.3", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.2.3.tgz", - "integrity": "sha512-JVUnt+DUIzu87TABbhPmNfVdBDt18BLOWjMUFJMSi/Qqg7NTYtabbvSNJGOJ7afbRuv9D/lngizHtP7QyLQ+9w==", + "version": "16.6.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.6.1.tgz", + "integrity": "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==", "license": "BSD-2-Clause", "engines": { "node": ">=12" diff --git a/server/package.json b/server/package.json index 802b5e780..ebb123022 100644 --- a/server/package.json +++ b/server/package.json @@ -3,18 +3,18 @@ "version": "1.0.0", "main": "server.js", "type": "module", - "scripts": { - "start": "npm run reset && nodemon --require dotenv/config server.js", - "build": "cd client && vite build", - "reset": "cd config && node --require dotenv/config reset.js" - }, +"scripts": { + "start": "npm run reset && nodemon server.js", + "reset": "node ./config/reset.js", + "build": "cd client && vite build" +}, "keywords": [], "author": "", "license": "ISC", "description": "", "dependencies": { "cors": "^2.8.5", - "dotenv": "^17.2.3", + "dotenv": "^16.6.1", "express": "^5.1.0", "nodemon": "^3.1.11", "pg": "^8.16.3" From c666cd28641f89853b5ba3c4879afa2d1dad5edb Mon Sep 17 00:00:00 2001 From: ldpina <103157888+ldpina@users.noreply.github.com> Date: Tue, 11 Nov 2025 22:39:02 -0800 Subject: [PATCH 21/25] Update README.md --- README.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index bb7f5f949..07c562088 100644 --- a/README.md +++ b/README.md @@ -47,4 +47,7 @@ Backend: Render, Postgresql ## Installation Instructions -[instructions go here] +- First git clone the repo +- Once done npm install inside the client directory +- npm run reset in the server directory +- npm run dev in client directory From 3c3f97a8e2c89000c4307907ac0424d56a2f901f Mon Sep 17 00:00:00 2001 From: lpina Date: Tue, 11 Nov 2025 23:41:51 -0800 Subject: [PATCH 22/25] created main routes for beam and fundemental action --- client/src/App.jsx | 28 ++++++++-- client/src/pages/Habits.jsx | 77 ++++++++++++++++++++++++++++ client/src/pages/Home.jsx | 8 +++ client/src/pages/StickerGallery.jsx | 8 +++ creatingHabits1.0.gif | Bin 0 -> 144422 bytes 5 files changed, 118 insertions(+), 3 deletions(-) create mode 100644 client/src/pages/Habits.jsx create mode 100644 client/src/pages/Home.jsx create mode 100644 client/src/pages/StickerGallery.jsx create mode 100644 creatingHabits1.0.gif diff --git a/client/src/App.jsx b/client/src/App.jsx index 4efcdacc7..944fd2553 100644 --- a/client/src/App.jsx +++ b/client/src/App.jsx @@ -1,11 +1,33 @@ +import { Routes, Route, Link } from 'react-router-dom'; +import Home from './pages/Home'; +import Habits from './pages/Habits'; +import StickerGallery from './pages/StickerGallery'; const App = () => { return ( -
-

Hello World

+
+ {/* Navigation buttons */} + + + {/* Define the routes */} + + } /> + } /> + } /> +
- ) + ); } export default App \ No newline at end of file diff --git a/client/src/pages/Habits.jsx b/client/src/pages/Habits.jsx new file mode 100644 index 000000000..adc2b0152 --- /dev/null +++ b/client/src/pages/Habits.jsx @@ -0,0 +1,77 @@ +import { useState } from "react"; + +export default function Habits() { + const [habits, setHabits] = useState([]); + const [showForm, setShowForm] = useState(false); + const [form, setForm] = useState({ title: "", description: "" }); + + const handleChange = (e) => { + const { name, value } = e.target; + setForm((f) => ({ ...f, [name]: value })); + }; + + const handleSubmit = (e) => { + e.preventDefault(); + if (!form.title.trim()) return alert("Please enter a title."); + const newHabit = { + id: crypto.randomUUID(), + title: form.title, + description: form.description, + created_at: new Date().toLocaleString(), + }; + setHabits((prev) => [newHabit, ...prev]); + setForm({ title: "", description: "" }); + setShowForm(false); + }; + + return ( +
+

Your Habits

+

Track and manage your daily habits here!

+ + + {showForm && ( +
+

Create Habit

+
+ +
+