From 4badb160bc9e2ad416e8880facfcddf774013c6a Mon Sep 17 00:00:00 2001 From: anikaahmed114 Date: Thu, 25 Sep 2025 18:52:52 -0400 Subject: [PATCH 01/17] Updated READ.ME documentation --- README.md | 56 ++++--------------- docs/contributing_guidelines.md | 96 +++++++++++++++++++++++++++++++++ docs/environment_setup.md | 43 +++++++++++++++ 3 files changed, 150 insertions(+), 45 deletions(-) create mode 100644 docs/contributing_guidelines.md create mode 100644 docs/environment_setup.md diff --git a/README.md b/README.md index e6afc4f..cc3d824 100644 --- a/README.md +++ b/README.md @@ -1,55 +1,21 @@ -

- CSSG Logo -

+# CCC -# CSSG Starter Template +A CS + SG project in partnership with The Campus & Community Coalition -This is a starter template for CSSG projects using React, TypeScript, and Tailwind CSS. It is configured to be used with VS Code Dev Containers for a consistent development environment. +## About The Campus & Community Coalition -## Prerequisites +The Campus & Community Coalition (CCC) is a collaborative force bringing together university and community partners to address the harms associated with high-risk drinking. By fostering open dialogue, sharing power, and using data-driven strategies, they work to create an environment where everyone can thrive socially, academically, and economically. -Before you begin, ensure you have the following installed: +## Project Mission -- [Git](https://git-scm.com/) -- [Docker Desktop](https://www.docker.com/products/docker-desktop) -- [Visual Studio Code](https://code.visualstudio.com/) -- [Dev Containers extension](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers) for VS Code. +CCC wants to migrate from under Downtown Chapel Hill's website to their own. Link to current website: [The Campus & Community Coalition](https://www.downtownchapelhill.com/coalition) -## Getting Started +## Project Overview -1. **Fork the repository:** +This website will be used primarily to display important trends regarding alcohol use in the Chapel Hill community alongside other important resources. - Fork this repository. Then, clone your forked repository: +This webpage uses React. If you are new to React, here is a resource to get started: [Get started with React](https://react.dev/learn) - ```bash - git clone - cd - ``` +## Get Started -2. **Open in VS Code/Cursor:** - - Open the cloned repository folder in VS Code or Cursor. - -3. **Open in Dev Container:** - - Once the project is open in VS Code, you will be prompted to "Reopen in Container". Click on it. - - If you don't see the prompt, you can open the command palette and run "Dev Containers: Reopen in Container". - - **Windows/Linux:** `Ctrl+Shift+P` - - **Mac:** `Cmd+Shift+P` - - This will build the Docker container for the development environment. The first build might take a few minutes. Subsequent loads will be much faster. - -## Available Commands - -Inside the dev container, you can use the following commands: - -| Command | Description | -| :------------------ | :--------------------------------------------------------- | -| `npm run dev` | Starts the development server with Hot Module Replacement. | -| `npm run build` | Builds the application for production. | -| `npm run start` | Serves the production build. | -| `npm run lint` | Lints the codebase using ESLint. | -| `npm run lint:fix` | Lints and automatically fixes issues. | -| `npm run format` | Formats the code using Prettier. | -| `npm run typecheck` | Runs the TypeScript compiler to check for type errors. | +Look at our environment setup docs: [Environment Setup](docs/environment_setup.md) diff --git a/docs/contributing_guidelines.md b/docs/contributing_guidelines.md new file mode 100644 index 0000000..6680fee --- /dev/null +++ b/docs/contributing_guidelines.md @@ -0,0 +1,96 @@ +# Contributing + +## Assigning Tickets + +All issues can be found on the Issues tab of this repository. You can also view them in the Projects bar for better organization. + +We are using GitHub issues to represent tickets and their acceptance criteria (things that must be done for the ticket to be closed). Click on them to open more info about them. + +Sometimes you may notice work to be done that does not have an issue on GitHub. If an issue does not exist for the thing you want to change, then create one detailing the changes to be made. + +When you are ready to take on a ticket, open the issue and go to "Assignees" and assign yourself to the ticket. 1 person per ticket only. + +## Branching - please read the entire section carefully + +Each ticket needs to be associated with a development branch.\ +There are three parts to this: + +1. Naming the branch +2. Creating the branch +3. Attaching the branch to the GitHub issue via the GitHub web interface + +### Naming Conventions + +Once you have chosen your ticket, come up with the name of your branch. This must be of the format `issuenumber-short-descriptive-name`. Base the name off the name of the GitHub issue. For example, if you intend to create a branch for a page or component, name the branch after the issue (e.g. `10-settings-page`, `11-notification-component`). + +### Creating New Branch + +Next, you need to create the actual branch. +All commands must be run inside your project terminal. For all your tasks, you will need to create a branch for your team and submit a pull request once you are done. + +**Option 1: Creating a branch on GitHub** + +1. Click the branch button on the github page of our repo. It should be right underneath the repo name and say "stage" +2. Type in the name of the branch you want to create. +3. Click **Create Branch: [branch name]** +4. Open up your project +5. Run `git pull` in the terminal to update your branches +6. Run `git checkout [branch name]` or `git switch [branch name]` to switch to the newly created branch +7. Double check that you are in the correct repository by running `git branch -a` +8. Make your changes and push as normal while working within your branch + +**Option 2: Creating a branch locally** + +1. `git branch [name]` to create a branch with name of [name]. +2. `git checkout [name]` to switch to branch [name]. +3. When you've finished making your changes locally, run `git push -u origin [name]` to create the remote branch and push to there. + +## Developing in your branch + +All of the code related to your issue should be contained to your branch only. Do not make changes to other people's branches. + +A single branch should not last longer than 2 weeks and should have very self-contained, easy to identify changes. + +### Making proper commits + +A proper commit should focus on one small piece of functionality and describe what has changed.\ +Only commit code that is working. Do not commit broken code.\ +Commits should start with an imperative verb and describe the overall change.\ +Example: "Fix calendar component not appearing on mobile"\ +For a resource on good commit messages, see here: [Guidelines for commit messages](https://gist.github.com/luismts/495d982e8c5b1a0ced4a57cf3d93cf60)\ +When you are ready to commit, make sure you're on your designated branch by the following code:\ +`git status`\ +And then commit your changes: + +1. `git add *` +2. `git commit -m "commit message"` +3. `git push TODO FOR NOW` + +### Keeping your branch up to date + +Occasionally, you may want to merge the contents of `stage` into your branch to keep it up to date. Follow these steps while remaining on your branch: + +1. `git fetch origin` to fetch the latest remote changes from origin for all branches +2. `git merge origin/stage` to merge the remote stage branch into your own local branch + +## Submitting Pull Requests + +Pull requests (PRs) represent a set of commits on a specific branch that are proposed to be merged into the `stage` branch. + +PRs have the following lifecycle: + +1. The PR is opened by the developer, who wants to merge their work from their branch into `stage`. The developer should request a review or let one of the project leads know. +2. The PR gets reviewed by a code reviewer such as a Tech Lead. +3. If changes need to be made, the developer continues to work on that branch and re-requests another review when they are ready. +4. If the changes are accepted, the branch commits will be merged into stage and the branch is now inactive. + +Developers are expected to have successful PRs every 2 weeks - this means you should submit your PR in advance, some time after one week, so you have time for fixing any issues. + +### Making a Pull Request + +1. Navigate to the [repository page](https://github.com/cssgunc/ccc). +2. Click the **stage** branch button and navigate to the branch you worked on. +3. Click the **Contribute** button +4. Click **Open Pull Request** +5. Write a short description of your changes +6. Click **Create pull request** diff --git a/docs/environment_setup.md b/docs/environment_setup.md new file mode 100644 index 0000000..f98b3c8 --- /dev/null +++ b/docs/environment_setup.md @@ -0,0 +1,43 @@ +# Setting up your environment + +## Cloning the repository + +1. [Clone the repository](https://github.com/git-guides/git-clone) into a local workspace. Avoid folders that have cloud sync services, such as Microsoft OneDrive. + +## Installing Node + +1. Check if you have node and npm install by running `node -v` and `npm -v`. If both are installed, skip this section. +2. Download node from https://nodejs.org/en/download. Follow the steps as shown. +3. Ensure that you have everything downloaded by repeating Step 1. You will need node to run the React server, and npm in order to install the React Native dependencies in the next section. + +## Installing Dependencies + +Open the repository in an IDE of your choice, preferably VSCode. + +### Starting your Project + +1. Open a new terminal for the project and run `cd ccc`. You should now be in `TODO`. This is where the React code is located. +2. Run `npm install`. You will get many warnings and vulnerabilities. Ignore these. If you get errors, you will have to debug. +3. Run `npm start`. This will be the command you need to run to start the project most of the time. +4. You have succeeded if you can open the browser version without errors (hit w, or go to http://localhost:8081). Open the developer console. There should be no errors. + +### Stopping the Project + +1. Close the running app with Ctrl + C. + +## Updating Dependencies and Running the Project Regularly + +You do not need to go through all these steps every time. For regular usage and development: + +1. Run `npm start` in the `TODO` directory as done previously. +2. If this fails, double check that your terminal is in the right directory. + +Very rarely, we may update the dependencies required for this projects.\ +Update dependencies after pulling from the remote repository by running `npm install` in the folder. You can refer back to the Installing Dependencies section. + +## Conclusion + +By the end of this, you should have an interactive app running on your browser.\ +You are ready to start contributing. + +Next: Read the [Contributing Guidelines](contributing_guidelines.md) before you begin! From 9e13dae1938bde0167e07d2ed3e9a91496e31de4 Mon Sep 17 00:00:00 2001 From: Anika Ahmed Date: Mon, 29 Sep 2025 19:00:29 -0400 Subject: [PATCH 02/17] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index cc3d824..4bbb2ee 100644 --- a/README.md +++ b/README.md @@ -8,13 +8,13 @@ The Campus & Community Coalition (CCC) is a collaborative force bringing togethe ## Project Mission -CCC wants to migrate from under Downtown Chapel Hill's website to their own. Link to current website: [The Campus & Community Coalition](https://www.downtownchapelhill.com/coalition) +CCC wants to migrate from under Downtown Chapel Hill's website to their own. [Click here to see the current website.](https://www.downtownchapelhill.com/coalition) ## Project Overview This website will be used primarily to display important trends regarding alcohol use in the Chapel Hill community alongside other important resources. -This webpage uses React. If you are new to React, here is a resource to get started: [Get started with React](https://react.dev/learn) +This webpage uses React. [Click here to get started with React.](https://react.dev/learn) ## Get Started From 31d5cae125a036c2591e17f9629fb0704b626f0f Mon Sep 17 00:00:00 2001 From: Anika Ahmed Date: Mon, 29 Sep 2025 19:35:32 -0400 Subject: [PATCH 03/17] Update environment_setup.md --- docs/environment_setup.md | 54 ++++++++++++++++++++------------------- 1 file changed, 28 insertions(+), 26 deletions(-) diff --git a/docs/environment_setup.md b/docs/environment_setup.md index f98b3c8..d345c0e 100644 --- a/docs/environment_setup.md +++ b/docs/environment_setup.md @@ -1,39 +1,41 @@ # Setting up your environment -## Cloning the repository - -1. [Clone the repository](https://github.com/git-guides/git-clone) into a local workspace. Avoid folders that have cloud sync services, such as Microsoft OneDrive. - -## Installing Node - -1. Check if you have node and npm install by running `node -v` and `npm -v`. If both are installed, skip this section. -2. Download node from https://nodejs.org/en/download. Follow the steps as shown. -3. Ensure that you have everything downloaded by repeating Step 1. You will need node to run the React server, and npm in order to install the React Native dependencies in the next section. +## Prerequisites +Before you begin, ensure you have the following installed: +- [Git](https://git-scm.com/) +- [Visual Studio Code](https://code.visualstudio.com/) +- [Docker Desktop](https://www.docker.com/products/docker-desktop/) +- [Dev Containers](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers) extension in VS Code -## Installing Dependencies - -Open the repository in an IDE of your choice, preferably VSCode. - -### Starting your Project +## Cloning the repository -1. Open a new terminal for the project and run `cd ccc`. You should now be in `TODO`. This is where the React code is located. -2. Run `npm install`. You will get many warnings and vulnerabilities. Ignore these. If you get errors, you will have to debug. -3. Run `npm start`. This will be the command you need to run to start the project most of the time. -4. You have succeeded if you can open the browser version without errors (hit w, or go to http://localhost:8081). Open the developer console. There should be no errors. +[Clone the repository](https://github.com/git-guides/git-clone) into a local workspace. Avoid folders that have cloud sync services, such as Microsoft OneDrive. -### Stopping the Project +## Starting your Project -1. Close the running app with Ctrl + C. +1. Open the project in VS Code +2. Upon doing so you should see a pop-up prompting you to reopen the folder in a container. Click this if you see it. +3. If you are not automatically prompted, open the VS Code Command Pallete (Mac: `Cmd+Shift+P`, Windows/Linux: `Ctrl+Shift+P`) +4. Run the command **Dev Containers: Rebuild and Reopen in Container** +5. This will build the Docker container for the development environment. Note that the first build might take a few minutes. Subsequent loads will be much faster. +6. Run `npm run dev` to start the development server. -## Updating Dependencies and Running the Project Regularly +## Available Commands +Inside the dev container, you can use the following commands: +| Command | Description | +|---|---| +| `npm run dev` | Starts the development server with Hot Module Replacement. | +| `npm run build` | Builds the application for production. | +| `npm run start` | Serves the production build. | +| `npm run lint` | Lints the codebase using ESLint. | +| `npm run lint:fix` | Lints and automatically fixes issues. | +| `npm run format` | Formats the code using Prettier. | +| `npm run typecheck` | Runs the TypeScript compiler to check for type errors. | -You do not need to go through all these steps every time. For regular usage and development: -1. Run `npm start` in the `TODO` directory as done previously. -2. If this fails, double check that your terminal is in the right directory. +## Stopping the Project -Very rarely, we may update the dependencies required for this projects.\ -Update dependencies after pulling from the remote repository by running `npm install` in the folder. You can refer back to the Installing Dependencies section. +Close the running app with Ctrl + C. ## Conclusion From c52669c75b68a07db61e8f7894fd092eff53a0e8 Mon Sep 17 00:00:00 2001 From: Anika Ahmed Date: Mon, 29 Sep 2025 19:44:20 -0400 Subject: [PATCH 04/17] Update contributing_guidelines.md --- docs/contributing_guidelines.md | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/docs/contributing_guidelines.md b/docs/contributing_guidelines.md index 6680fee..4028dd2 100644 --- a/docs/contributing_guidelines.md +++ b/docs/contributing_guidelines.md @@ -8,7 +8,7 @@ We are using GitHub issues to represent tickets and their acceptance criteria (t Sometimes you may notice work to be done that does not have an issue on GitHub. If an issue does not exist for the thing you want to change, then create one detailing the changes to be made. -When you are ready to take on a ticket, open the issue and go to "Assignees" and assign yourself to the ticket. 1 person per ticket only. +When you are ready to take on a ticket, open the issue and go to "Assignees" and assign yourself to the ticket. ## Branching - please read the entire section carefully @@ -30,7 +30,7 @@ All commands must be run inside your project terminal. For all your tasks, you w **Option 1: Creating a branch on GitHub** -1. Click the branch button on the github page of our repo. It should be right underneath the repo name and say "stage" +1. Click the branch button on the github page of our repo. It should be right underneath the repo name and say "main" 2. Type in the name of the branch you want to create. 3. Click **Create Branch: [branch name]** 4. Open up your project @@ -56,30 +56,32 @@ A single branch should not last longer than 2 weeks and should have very self-co A proper commit should focus on one small piece of functionality and describe what has changed.\ Only commit code that is working. Do not commit broken code.\ Commits should start with an imperative verb and describe the overall change.\ -Example: "Fix calendar component not appearing on mobile"\ +Example: "Fix calendar component not appearing on home page"\ For a resource on good commit messages, see here: [Guidelines for commit messages](https://gist.github.com/luismts/495d982e8c5b1a0ced4a57cf3d93cf60)\ -When you are ready to commit, make sure you're on your designated branch by the following code:\ +When you are ready to commit, make sure you're on your designated branch by the following code: `git status`\ And then commit your changes: 1. `git add *` 2. `git commit -m "commit message"` -3. `git push TODO FOR NOW` +3. `git push` ### Keeping your branch up to date -Occasionally, you may want to merge the contents of `stage` into your branch to keep it up to date. Follow these steps while remaining on your branch: +Occasionally, you may want to merge the contents of `main` into your branch to keep it up to date. Follow these steps while remaining on your branch: 1. `git fetch origin` to fetch the latest remote changes from origin for all branches -2. `git merge origin/stage` to merge the remote stage branch into your own local branch +2. `git merge origin` to merge the remote stage branch into your own local branch + +Or, you can run `git pull origin` to do both at once. ## Submitting Pull Requests -Pull requests (PRs) represent a set of commits on a specific branch that are proposed to be merged into the `stage` branch. +Pull requests (PRs) represent a set of commits on a specific branch that are proposed to be merged into the `main` branch. PRs have the following lifecycle: -1. The PR is opened by the developer, who wants to merge their work from their branch into `stage`. The developer should request a review or let one of the project leads know. +1. The PR is opened by the developer, who wants to merge their work from their branch into `main`. The developer should request a review or let one of the project leads know. 2. The PR gets reviewed by a code reviewer such as a Tech Lead. 3. If changes need to be made, the developer continues to work on that branch and re-requests another review when they are ready. 4. If the changes are accepted, the branch commits will be merged into stage and the branch is now inactive. @@ -89,7 +91,7 @@ Developers are expected to have successful PRs every 2 weeks - this means you sh ### Making a Pull Request 1. Navigate to the [repository page](https://github.com/cssgunc/ccc). -2. Click the **stage** branch button and navigate to the branch you worked on. +2. Click the **main** branch button and navigate to the branch you worked on. 3. Click the **Contribute** button 4. Click **Open Pull Request** 5. Write a short description of your changes From a90067713f41fe33147b3102e6d91be0fd0ef3e2 Mon Sep 17 00:00:00 2001 From: Anika Ahmed Date: Mon, 29 Sep 2025 19:45:26 -0400 Subject: [PATCH 05/17] Update environment_setup.md --- docs/environment_setup.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/environment_setup.md b/docs/environment_setup.md index d345c0e..5ca7e40 100644 --- a/docs/environment_setup.md +++ b/docs/environment_setup.md @@ -13,10 +13,10 @@ Before you begin, ensure you have the following installed: ## Starting your Project -1. Open the project in VS Code +1. Open the project in VS Code. 2. Upon doing so you should see a pop-up prompting you to reopen the folder in a container. Click this if you see it. -3. If you are not automatically prompted, open the VS Code Command Pallete (Mac: `Cmd+Shift+P`, Windows/Linux: `Ctrl+Shift+P`) -4. Run the command **Dev Containers: Rebuild and Reopen in Container** +3. If you are not automatically prompted, open the VS Code Command Pallete (Mac: `Cmd+Shift+P`, Windows/Linux: `Ctrl+Shift+P`). +4. Run the command **Dev Containers: Rebuild and Reopen in Container**. 5. This will build the Docker container for the development environment. Note that the first build might take a few minutes. Subsequent loads will be much faster. 6. Run `npm run dev` to start the development server. From 83e019baf579439c484acc6bce4990f313498207 Mon Sep 17 00:00:00 2001 From: Anika Ahmed Date: Mon, 29 Sep 2025 19:58:56 -0400 Subject: [PATCH 06/17] Update environment_setup.md --- docs/environment_setup.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/environment_setup.md b/docs/environment_setup.md index 5ca7e40..5dde197 100644 --- a/docs/environment_setup.md +++ b/docs/environment_setup.md @@ -35,7 +35,7 @@ Inside the dev container, you can use the following commands: ## Stopping the Project -Close the running app with Ctrl + C. +Close the running app with `Ctrl + C`. ## Conclusion From a417c001f8f883ba0094a0203deaf91f6bb67c4d Mon Sep 17 00:00:00 2001 From: Toren Kristoffersen Date: Wed, 1 Oct 2025 15:24:07 -0400 Subject: [PATCH 07/17] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 4bbb2ee..5a5d30b 100644 --- a/README.md +++ b/README.md @@ -19,3 +19,4 @@ This webpage uses React. [Click here to get started with React.](https://react.d ## Get Started Look at our environment setup docs: [Environment Setup](docs/environment_setup.md) +Also, make sure to look over the: [Contributing Guidelines](docs/contributing_guidelines.md) From 33b449c97aa566bbcdce906d680b4d5ed2814da3 Mon Sep 17 00:00:00 2001 From: Toren Kristoffersen Date: Wed, 1 Oct 2025 15:24:35 -0400 Subject: [PATCH 08/17] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 5a5d30b..2b0ea77 100644 --- a/README.md +++ b/README.md @@ -18,5 +18,5 @@ This webpage uses React. [Click here to get started with React.](https://react.d ## Get Started -Look at our environment setup docs: [Environment Setup](docs/environment_setup.md) +Look at our environment setup docs: [Environment Setup](docs/environment_setup.md)\ Also, make sure to look over the: [Contributing Guidelines](docs/contributing_guidelines.md) From 50494ca7a896f159b0e5569cfdb1ad482b8523d4 Mon Sep 17 00:00:00 2001 From: Toren Kristoffersen Date: Wed, 1 Oct 2025 16:52:17 -0400 Subject: [PATCH 09/17] Update contributing_guidelines.md --- docs/contributing_guidelines.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/contributing_guidelines.md b/docs/contributing_guidelines.md index 4028dd2..6a3631e 100644 --- a/docs/contributing_guidelines.md +++ b/docs/contributing_guidelines.md @@ -68,7 +68,7 @@ And then commit your changes: ### Keeping your branch up to date -Occasionally, you may want to merge the contents of `main` into your branch to keep it up to date. Follow these steps while remaining on your branch: +Occasionally, you may want to merge the contents of `stage` into your branch to keep it up to date. Follow these steps while remaining on your branch: 1. `git fetch origin` to fetch the latest remote changes from origin for all branches 2. `git merge origin` to merge the remote stage branch into your own local branch @@ -77,11 +77,11 @@ Or, you can run `git pull origin` to do both at once. ## Submitting Pull Requests -Pull requests (PRs) represent a set of commits on a specific branch that are proposed to be merged into the `main` branch. +Pull requests (PRs) represent a set of commits on a specific branch that are proposed to be merged into the `stage` branch. PRs have the following lifecycle: -1. The PR is opened by the developer, who wants to merge their work from their branch into `main`. The developer should request a review or let one of the project leads know. +1. The PR is opened by the developer, who wants to merge their work from their branch into `stage`. The developer should request a review or let one of the project leads know. 2. The PR gets reviewed by a code reviewer such as a Tech Lead. 3. If changes need to be made, the developer continues to work on that branch and re-requests another review when they are ready. 4. If the changes are accepted, the branch commits will be merged into stage and the branch is now inactive. From 462aae2e0115068c8b79fe7219ad3e69dcd5a0e1 Mon Sep 17 00:00:00 2001 From: Toren Kristoffersen Date: Wed, 1 Oct 2025 16:53:36 -0400 Subject: [PATCH 10/17] Update contributing_guidelines.md --- docs/contributing_guidelines.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/contributing_guidelines.md b/docs/contributing_guidelines.md index 4028dd2..6a3631e 100644 --- a/docs/contributing_guidelines.md +++ b/docs/contributing_guidelines.md @@ -68,7 +68,7 @@ And then commit your changes: ### Keeping your branch up to date -Occasionally, you may want to merge the contents of `main` into your branch to keep it up to date. Follow these steps while remaining on your branch: +Occasionally, you may want to merge the contents of `stage` into your branch to keep it up to date. Follow these steps while remaining on your branch: 1. `git fetch origin` to fetch the latest remote changes from origin for all branches 2. `git merge origin` to merge the remote stage branch into your own local branch @@ -77,11 +77,11 @@ Or, you can run `git pull origin` to do both at once. ## Submitting Pull Requests -Pull requests (PRs) represent a set of commits on a specific branch that are proposed to be merged into the `main` branch. +Pull requests (PRs) represent a set of commits on a specific branch that are proposed to be merged into the `stage` branch. PRs have the following lifecycle: -1. The PR is opened by the developer, who wants to merge their work from their branch into `main`. The developer should request a review or let one of the project leads know. +1. The PR is opened by the developer, who wants to merge their work from their branch into `stage`. The developer should request a review or let one of the project leads know. 2. The PR gets reviewed by a code reviewer such as a Tech Lead. 3. If changes need to be made, the developer continues to work on that branch and re-requests another review when they are ready. 4. If the changes are accepted, the branch commits will be merged into stage and the branch is now inactive. From d38b9c2d067a02f40420716cecfdba8989ec145e Mon Sep 17 00:00:00 2001 From: anikaahmed114 Date: Thu, 9 Oct 2025 20:15:09 -0400 Subject: [PATCH 11/17] added components directory --- app/components/test.tsx | 0 docs/contributing_guidelines.md | 2 +- docs/environment_setup.md | 8 +++++--- 3 files changed, 6 insertions(+), 4 deletions(-) create mode 100644 app/components/test.tsx diff --git a/app/components/test.tsx b/app/components/test.tsx new file mode 100644 index 0000000..e69de29 diff --git a/docs/contributing_guidelines.md b/docs/contributing_guidelines.md index 6a3631e..9da865d 100644 --- a/docs/contributing_guidelines.md +++ b/docs/contributing_guidelines.md @@ -8,7 +8,7 @@ We are using GitHub issues to represent tickets and their acceptance criteria (t Sometimes you may notice work to be done that does not have an issue on GitHub. If an issue does not exist for the thing you want to change, then create one detailing the changes to be made. -When you are ready to take on a ticket, open the issue and go to "Assignees" and assign yourself to the ticket. +When you are ready to take on a ticket, open the issue and go to "Assignees" and assign yourself to the ticket. ## Branching - please read the entire section carefully diff --git a/docs/environment_setup.md b/docs/environment_setup.md index 5dde197..2f0afe4 100644 --- a/docs/environment_setup.md +++ b/docs/environment_setup.md @@ -1,7 +1,9 @@ # Setting up your environment ## Prerequisites -Before you begin, ensure you have the following installed: + +Before you begin, ensure you have the following installed: + - [Git](https://git-scm.com/) - [Visual Studio Code](https://code.visualstudio.com/) - [Docker Desktop](https://www.docker.com/products/docker-desktop/) @@ -21,7 +23,8 @@ Before you begin, ensure you have the following installed: 6. Run `npm run dev` to start the development server. ## Available Commands -Inside the dev container, you can use the following commands: + +Inside the dev container, you can use the following commands: | Command | Description | |---|---| | `npm run dev` | Starts the development server with Hot Module Replacement. | @@ -32,7 +35,6 @@ Inside the dev container, you can use the following commands: | `npm run format` | Formats the code using Prettier. | | `npm run typecheck` | Runs the TypeScript compiler to check for type errors. | - ## Stopping the Project Close the running app with `Ctrl + C`. From e90935192a718d96820eaf99638e875c11518e87 Mon Sep 17 00:00:00 2001 From: dhruvnpUNC Date: Sat, 18 Oct 2025 11:25:45 -0400 Subject: [PATCH 12/17] Added basic page routing. --- app/routes.ts | 11 +- app/routes/contact.tsx | 8 + app/routes/data.tsx | 8 + app/routes/error.tsx | 8 + app/routes/people.tsx | 8 + app/routes/resources.tsx | 8 + app/routes/starter.tsx | 252 +------------------------------- docs/contributing_guidelines.md | 2 +- docs/environment_setup.md | 8 +- tsconfig.json | 1 + 10 files changed, 59 insertions(+), 255 deletions(-) create mode 100644 app/routes/contact.tsx create mode 100644 app/routes/data.tsx create mode 100644 app/routes/error.tsx create mode 100644 app/routes/people.tsx create mode 100644 app/routes/resources.tsx diff --git a/app/routes.ts b/app/routes.ts index 47ab806..27d3aee 100644 --- a/app/routes.ts +++ b/app/routes.ts @@ -1,3 +1,10 @@ -import { type RouteConfig, index } from "@react-router/dev/routes"; +import { type RouteConfig, route } from "@react-router/dev/routes"; -export default [index("routes/starter.tsx")] satisfies RouteConfig; +export default [ + route("/contact", "routes/contact.tsx"), + route("/data", "routes/data.tsx"), + route("*", "routes/error.tsx"), + route("/people", "routes/people.tsx"), + route("/resources", "routes/resources.tsx"), + route("/", "routes/starter.tsx"), +] satisfies RouteConfig; diff --git a/app/routes/contact.tsx b/app/routes/contact.tsx new file mode 100644 index 0000000..812644a --- /dev/null +++ b/app/routes/contact.tsx @@ -0,0 +1,8 @@ +import React from "react"; +export default function Contact() { + return ( + <> +

Contact Us

+ + ); +} diff --git a/app/routes/data.tsx b/app/routes/data.tsx new file mode 100644 index 0000000..8997341 --- /dev/null +++ b/app/routes/data.tsx @@ -0,0 +1,8 @@ +import React from "react"; +export default function Data() { + return ( + <> +

Data Page

+ + ); +} diff --git a/app/routes/error.tsx b/app/routes/error.tsx new file mode 100644 index 0000000..0fb2391 --- /dev/null +++ b/app/routes/error.tsx @@ -0,0 +1,8 @@ +import React from "react"; +export default function Error() { + return ( + <> +

Not Found

+ + ); +} diff --git a/app/routes/people.tsx b/app/routes/people.tsx new file mode 100644 index 0000000..7ad28d7 --- /dev/null +++ b/app/routes/people.tsx @@ -0,0 +1,8 @@ +import React from "react"; +export default function People() { + return ( + <> +

People Page

+ + ); +} diff --git a/app/routes/resources.tsx b/app/routes/resources.tsx new file mode 100644 index 0000000..44c432d --- /dev/null +++ b/app/routes/resources.tsx @@ -0,0 +1,8 @@ +import React from "react"; +export default function Resources() { + return ( + <> +

Resources Page

+ + ); +} diff --git a/app/routes/starter.tsx b/app/routes/starter.tsx index d82256c..c8a5ff4 100644 --- a/app/routes/starter.tsx +++ b/app/routes/starter.tsx @@ -1,15 +1,4 @@ import React from "react"; -import { - SiVite, - SiReact, - SiTypescript, - SiDocker, - SiEslint, - SiPrettier, - SiTailwindcss, - SiReactrouter, -} from "react-icons/si"; -import { VscExtensions } from "react-icons/vsc"; export function meta() { return [ @@ -23,244 +12,9 @@ export function meta() { } export default function Home() { - const features = [ - { - icon: SiVite, - name: "Vite", - description: "Lightning fast build tool and dev server", - color: "#646CFF", - }, - { - icon: SiReact, - name: "React 18", - description: "Latest React with concurrent features", - color: "#61DAFB", - }, - { - icon: SiTypescript, - name: "TypeScript", - description: "Type-safe JavaScript development", - color: "#3178C6", - }, - { - icon: SiDocker, - name: "Docker", - description: "Containerized development and deployment", - color: "#2496ED", - }, - { - icon: SiEslint, - name: "ESLint", - description: "Code linting and quality enforcement", - color: "#4B32C3", - }, - { - icon: SiPrettier, - name: "Prettier", - description: "Automatic code formatting", - color: "#F7B93E", - }, - { - icon: SiTailwindcss, - name: "Tailwind CSS", - description: "Utility-first CSS framework", - color: "#06B6D4", - }, - { - icon: SiReactrouter, - name: "React Router", - description: "Modern routing for React applications", - color: "#CA4245", - }, - { - icon: VscExtensions, - name: "VS Code Extensions", - description: "Pre-configured development extensions", - color: "#007ACC", - }, - ]; - return ( -
- {/* Header Section */} -
-
- Starter Template Logo -
-

- Vite + React Starter -

-

- A modern, production-ready template with all the tools you - need to build amazing React applications -

-
- - {/* Features Grid */} -
- {features.map((feature, index) => { - const IconComponent = feature.icon; - return ( -
{ - e.currentTarget.style.transform = - "translateY(-2px)"; - e.currentTarget.style.boxShadow = - "0 8px 25px rgba(5, 150, 105, 0.25), 0 4px 10px rgba(5, 150, 105, 0.15)"; - }} - onMouseOut={(e) => { - e.currentTarget.style.transform = - "translateY(0)"; - e.currentTarget.style.boxShadow = - "0 4px 6px rgba(5, 150, 105, 0.15), 0 1px 3px rgba(5, 150, 105, 0.1)"; - }} - > -
- -
-

- {feature.name} -

-

- {feature.description} -

-
- ); - })} -
- - {/* Getting Started */} -
-

- Ready to Start Building? -

-

- This template includes everything you need for modern React - development. Just clone, install, and start coding! -

-
- npm install && npm run dev -
-
-
+ <> +

Welcome to the Starter Template!

+ ); } diff --git a/docs/contributing_guidelines.md b/docs/contributing_guidelines.md index 6a3631e..9da865d 100644 --- a/docs/contributing_guidelines.md +++ b/docs/contributing_guidelines.md @@ -8,7 +8,7 @@ We are using GitHub issues to represent tickets and their acceptance criteria (t Sometimes you may notice work to be done that does not have an issue on GitHub. If an issue does not exist for the thing you want to change, then create one detailing the changes to be made. -When you are ready to take on a ticket, open the issue and go to "Assignees" and assign yourself to the ticket. +When you are ready to take on a ticket, open the issue and go to "Assignees" and assign yourself to the ticket. ## Branching - please read the entire section carefully diff --git a/docs/environment_setup.md b/docs/environment_setup.md index 5dde197..2f0afe4 100644 --- a/docs/environment_setup.md +++ b/docs/environment_setup.md @@ -1,7 +1,9 @@ # Setting up your environment ## Prerequisites -Before you begin, ensure you have the following installed: + +Before you begin, ensure you have the following installed: + - [Git](https://git-scm.com/) - [Visual Studio Code](https://code.visualstudio.com/) - [Docker Desktop](https://www.docker.com/products/docker-desktop/) @@ -21,7 +23,8 @@ Before you begin, ensure you have the following installed: 6. Run `npm run dev` to start the development server. ## Available Commands -Inside the dev container, you can use the following commands: + +Inside the dev container, you can use the following commands: | Command | Description | |---|---| | `npm run dev` | Starts the development server with Hot Module Replacement. | @@ -32,7 +35,6 @@ Inside the dev container, you can use the following commands: | `npm run format` | Formats the code using Prettier. | | `npm run typecheck` | Runs the TypeScript compiler to check for type errors. | - ## Stopping the Project Close the running app with `Ctrl + C`. diff --git a/tsconfig.json b/tsconfig.json index 4540ed2..079d6d2 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -14,6 +14,7 @@ "jsx": "react-jsx", "rootDirs": [".", "./.react-router/types"], "baseUrl": ".", + "ignoreDeprecations": "6.0", "paths": { "~/*": ["./app/*"] }, From e79511b1fc10fbb67314f92c41dc8fa497fbad5c Mon Sep 17 00:00:00 2001 From: Toren Kristoffersen Date: Wed, 22 Oct 2025 15:08:27 -0400 Subject: [PATCH 13/17] added figtree font to root.tsx --- app/root.tsx | 2 +- docs/contributing_guidelines.md | 2 +- docs/environment_setup.md | 8 +++++--- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/app/root.tsx b/app/root.tsx index e35a017..2c71977 100644 --- a/app/root.tsx +++ b/app/root.tsx @@ -19,7 +19,7 @@ export const links: Route.LinksFunction = () => [ }, { rel: "stylesheet", - href: "https://fonts.googleapis.com/css2?family=Inter:ital,opsz,wght@0,14..32,100..900;1,14..32,100..900&display=swap", + href: "https://fonts.googleapis.com/css2?family=Figtree:ital,wght@0,300..900;1,300..900&display=swap", }, ]; diff --git a/docs/contributing_guidelines.md b/docs/contributing_guidelines.md index 6a3631e..9da865d 100644 --- a/docs/contributing_guidelines.md +++ b/docs/contributing_guidelines.md @@ -8,7 +8,7 @@ We are using GitHub issues to represent tickets and their acceptance criteria (t Sometimes you may notice work to be done that does not have an issue on GitHub. If an issue does not exist for the thing you want to change, then create one detailing the changes to be made. -When you are ready to take on a ticket, open the issue and go to "Assignees" and assign yourself to the ticket. +When you are ready to take on a ticket, open the issue and go to "Assignees" and assign yourself to the ticket. ## Branching - please read the entire section carefully diff --git a/docs/environment_setup.md b/docs/environment_setup.md index 5dde197..2f0afe4 100644 --- a/docs/environment_setup.md +++ b/docs/environment_setup.md @@ -1,7 +1,9 @@ # Setting up your environment ## Prerequisites -Before you begin, ensure you have the following installed: + +Before you begin, ensure you have the following installed: + - [Git](https://git-scm.com/) - [Visual Studio Code](https://code.visualstudio.com/) - [Docker Desktop](https://www.docker.com/products/docker-desktop/) @@ -21,7 +23,8 @@ Before you begin, ensure you have the following installed: 6. Run `npm run dev` to start the development server. ## Available Commands -Inside the dev container, you can use the following commands: + +Inside the dev container, you can use the following commands: | Command | Description | |---|---| | `npm run dev` | Starts the development server with Hot Module Replacement. | @@ -32,7 +35,6 @@ Inside the dev container, you can use the following commands: | `npm run format` | Formats the code using Prettier. | | `npm run typecheck` | Runs the TypeScript compiler to check for type errors. | - ## Stopping the Project Close the running app with `Ctrl + C`. From 8866a895ff3011ca6f69555f6015999811044a59 Mon Sep 17 00:00:00 2001 From: anikaahmed114 Date: Wed, 22 Oct 2025 15:21:28 -0400 Subject: [PATCH 14/17] Added global fonts --- app/app.css | 4 +--- app/routes/starter.tsx | 2 +- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/app/app.css b/app/app.css index 242d4f3..b6b5792 100644 --- a/app/app.css +++ b/app/app.css @@ -1,9 +1,7 @@ @import "tailwindcss"; @theme { - --font-sans: - "Inter", ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", - "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + --font-sans: "Figtree"; } html, diff --git a/app/routes/starter.tsx b/app/routes/starter.tsx index c8a5ff4..3cdbb03 100644 --- a/app/routes/starter.tsx +++ b/app/routes/starter.tsx @@ -14,7 +14,7 @@ export function meta() { export default function Home() { return ( <> -

Welcome to the Starter Template!

+

Campus & Community Coalition

); } From ffb60261f56974c8ca3666d53c6197c3cedbb379 Mon Sep 17 00:00:00 2001 From: anikaahmed114 Date: Wed, 22 Oct 2025 15:39:15 -0400 Subject: [PATCH 15/17] Added images and fixed global styling --- app/app.css | 3 ++- app/images/logo.png | Bin 0 -> 99266 bytes 2 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 app/images/logo.png diff --git a/app/app.css b/app/app.css index b6b5792..ac8ad18 100644 --- a/app/app.css +++ b/app/app.css @@ -6,7 +6,8 @@ html, body { - @apply bg-white dark:bg-gray-950; + @apply bg-white text-black; + color-scheme: light; @media (prefers-color-scheme: dark) { color-scheme: dark; diff --git a/app/images/logo.png b/app/images/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..46a4b1d7561175a9fbd2403a508b3cfaf754f581 GIT binary patch literal 99266 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 z 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℞huTImM-0UwN(?(|ch@d`;ab-eS(g4C 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�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 literal 0 HcmV?d00001 From f78d18999ff3ff08760281f9733c996e5ae3b915 Mon Sep 17 00:00:00 2001 From: anikaahmed114 Date: Wed, 22 Oct 2025 15:57:17 -0400 Subject: [PATCH 16/17] Fixed file naming --- app/routes.ts | 4 ++-- app/routes/{contact.tsx => newsletter.tsx} | 4 ++-- app/routes/research.tsx | 8 ++++++++ app/routes/resources.tsx | 8 -------- 4 files changed, 12 insertions(+), 12 deletions(-) rename app/routes/{contact.tsx => newsletter.tsx} (50%) create mode 100644 app/routes/research.tsx delete mode 100644 app/routes/resources.tsx diff --git a/app/routes.ts b/app/routes.ts index 27d3aee..398be06 100644 --- a/app/routes.ts +++ b/app/routes.ts @@ -1,10 +1,10 @@ import { type RouteConfig, route } from "@react-router/dev/routes"; export default [ - route("/contact", "routes/contact.tsx"), + route("/newsletter", "routes/newsletter.tsx"), route("/data", "routes/data.tsx"), route("*", "routes/error.tsx"), route("/people", "routes/people.tsx"), - route("/resources", "routes/resources.tsx"), + route("/research", "routes/research.tsx"), route("/", "routes/starter.tsx"), ] satisfies RouteConfig; diff --git a/app/routes/contact.tsx b/app/routes/newsletter.tsx similarity index 50% rename from app/routes/contact.tsx rename to app/routes/newsletter.tsx index 812644a..a21c119 100644 --- a/app/routes/contact.tsx +++ b/app/routes/newsletter.tsx @@ -1,8 +1,8 @@ import React from "react"; -export default function Contact() { +export default function Newsletter() { return ( <> -

Contact Us

+

Newsletter

); } diff --git a/app/routes/research.tsx b/app/routes/research.tsx new file mode 100644 index 0000000..21e00b5 --- /dev/null +++ b/app/routes/research.tsx @@ -0,0 +1,8 @@ +import React from "react"; +export default function Research() { + return ( + <> +

Research Page

+ + ); +} diff --git a/app/routes/resources.tsx b/app/routes/resources.tsx deleted file mode 100644 index 44c432d..0000000 --- a/app/routes/resources.tsx +++ /dev/null @@ -1,8 +0,0 @@ -import React from "react"; -export default function Resources() { - return ( - <> -

Resources Page

- - ); -} From 75c8a3ebf65b4d675f799efb8b6439286c1cf12c Mon Sep 17 00:00:00 2001 From: Zhilin Zhai Date: Thu, 6 Nov 2025 18:51:50 -0500 Subject: [PATCH 17/17] Add newsletter sign-up form with validation --- app/helpers/validation.ts | 20 ++++ app/routes/newsletter.tsx | 187 +++++++++++++++++++++++++++++++++++++- app/routes/starter.tsx | 6 ++ package-lock.json | 86 +++++++++++++++--- package.json | 3 +- 5 files changed, 285 insertions(+), 17 deletions(-) create mode 100644 app/helpers/validation.ts diff --git a/app/helpers/validation.ts b/app/helpers/validation.ts new file mode 100644 index 0000000..dd13d23 --- /dev/null +++ b/app/helpers/validation.ts @@ -0,0 +1,20 @@ +const DISALLOWED_EMAIL_CHARS = /[\s()[\];:<>\\/"'`~!#$%^&*|+=?{}]/; +const BASIC_EMAIL_SHAPE = /^[^@\s]+@[^@\s]+\.[^@\s]+$/; + +export function normalizeEmail(value: string): string { + return (value || "").trim().toLowerCase(); +} + +export function isEmailValid(value: string): boolean { + const email = normalizeEmail(value); + + if (!email) return false; + if (DISALLOWED_EMAIL_CHARS.test(email)) return false; + if (!BASIC_EMAIL_SHAPE.test(email)) return false; + + return true; +} + +export function areRequiredFilled(obj: Record): boolean { + return Object.values(obj).every((v) => (v || "").trim().length > 0); +} diff --git a/app/routes/newsletter.tsx b/app/routes/newsletter.tsx index a21c119..187b467 100644 --- a/app/routes/newsletter.tsx +++ b/app/routes/newsletter.tsx @@ -1,8 +1,189 @@ import React from "react"; +import { + areRequiredFilled, + isEmailValid, + normalizeEmail, +} from "~/helpers/validation"; + +const INITIAL_FORM = { + firstName: "", + lastName: "", + email: "", +}; + export default function Newsletter() { + const [formValues, setFormValues] = + React.useState(INITIAL_FORM); + const [hasInteracted, setHasInteracted] = React.useState(false); + const [successMessage, setSuccessMessage] = React.useState( + null + ); + + const fieldsComplete = React.useMemo( + () => areRequiredFilled(formValues), + [formValues] + ); + + const emailValid = React.useMemo( + () => isEmailValid(formValues.email), + [formValues.email] + ); + + const validationError = !fieldsComplete + ? "All required fields are not filled." + : !emailValid + ? "Invalid email format." + : null; + + const shouldShowError = hasInteracted && Boolean(validationError); + const isSubmitDisabled = !fieldsComplete || !emailValid; + + const handleChange = + (field: keyof typeof INITIAL_FORM) => + (event: React.ChangeEvent) => { + const { value } = event.target; + + setHasInteracted(true); + setSuccessMessage(null); + setFormValues((prev) => ({ + ...prev, + [field]: value, + })); + }; + + const handleBlur = (field: keyof typeof INITIAL_FORM) => () => { + setFormValues((prev) => ({ + ...prev, + [field]: + field === "email" + ? normalizeEmail(prev.email) + : prev[field].trim(), + })); + }; + + const handleSubmit = (event: React.FormEvent) => { + event.preventDefault(); + setHasInteracted(true); + + if (validationError) { + setSuccessMessage(null); + setFormValues((prev) => ({ + ...prev, + email: normalizeEmail(prev.email), + firstName: prev.firstName.trim(), + lastName: prev.lastName.trim(), + })); + return; + } + + const normalizedForm = { + firstName: formValues.firstName.trim(), + lastName: formValues.lastName.trim(), + email: normalizeEmail(formValues.email), + }; + + setFormValues(normalizedForm); + setSuccessMessage("Thanks for signing up!"); + }; + return ( - <> -

Newsletter

- +
+
+

+ Sign Up for the Newsletter! +

+

+ Receive updates, events, and more! Our newsletters are sent + out quarterly +

+ +
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ {shouldShowError && validationError ? ( +

+ {validationError} +

+ ) : successMessage ? ( +

+ {successMessage} +

+ ) : null} +
+ + +
+
+
); } diff --git a/app/routes/starter.tsx b/app/routes/starter.tsx index 3cdbb03..cab5cc6 100644 --- a/app/routes/starter.tsx +++ b/app/routes/starter.tsx @@ -1,4 +1,5 @@ import React from "react"; +import { Link } from "react-router"; export function meta() { return [ @@ -15,6 +16,11 @@ export default function Home() { return ( <>

Campus & Community Coalition

+

+ + Preview the newsletter sign-up form + +

); } diff --git a/package-lock.json b/package-lock.json index 33c37bd..25eecb6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,7 +12,8 @@ "react": "^19.1.0", "react-dom": "^19.1.0", "react-icons": "^5.5.0", - "react-router": "^7.7.1" + "react-router": "7.9.4", + "react-router-dom": "7.9.4" }, "devDependencies": { "@eslint/js": "^9.36.0", @@ -1423,19 +1424,19 @@ } } }, - "node_modules/@react-router/express": { + "node_modules/@react-router/dev/node_modules/@react-router/node": { "version": "7.9.2", - "resolved": "https://registry.npmjs.org/@react-router/express/-/express-7.9.2.tgz", - "integrity": "sha512-8mAkthF+0oNg9eK6qiWM/VGhhbDZrK6l3IEH7B1lB8yRJArHu6BJsafzFKR2jBE0NCws4bB0STP6zJZMjztfFw==", + "resolved": "https://registry.npmjs.org/@react-router/node/-/node-7.9.2.tgz", + "integrity": "sha512-mGqpEXVWs1XmwpJdbESE2fzvS3a43EdMCuiL2U3Nmm1IuGdSjc60gQK/IeKWjNGdgj1pZEyyQK17fYXPqjp5Uw==", + "dev": true, "license": "MIT", "dependencies": { - "@react-router/node": "7.9.2" + "@mjackson/node-fetch-server": "^0.2.0" }, "engines": { "node": ">=20.0.0" }, "peerDependencies": { - "express": "^4.17.1 || ^5", "react-router": "7.9.2", "typescript": "^5.1.0" }, @@ -1446,9 +1447,9 @@ } }, "node_modules/@react-router/node": { - "version": "7.9.2", - "resolved": "https://registry.npmjs.org/@react-router/node/-/node-7.9.2.tgz", - "integrity": "sha512-mGqpEXVWs1XmwpJdbESE2fzvS3a43EdMCuiL2U3Nmm1IuGdSjc60gQK/IeKWjNGdgj1pZEyyQK17fYXPqjp5Uw==", + "version": "7.9.4", + "resolved": "https://registry.npmjs.org/@react-router/node/-/node-7.9.4.tgz", + "integrity": "sha512-sdeDNRaqAB71BR2hPlhcQbPbrXh8uGJUjLVc+NpRiPsQbv6B8UvIucN4IX9YGVJkw3UxVQBn2vPSwxACAck32Q==", "license": "MIT", "dependencies": { "@mjackson/node-fetch-server": "^0.2.0" @@ -1457,7 +1458,7 @@ "node": ">=20.0.0" }, "peerDependencies": { - "react-router": "7.9.2", + "react-router": "7.9.4", "typescript": "^5.1.0" }, "peerDependenciesMeta": { @@ -1491,6 +1492,49 @@ "react-router": "7.9.2" } }, + "node_modules/@react-router/serve/node_modules/@react-router/express": { + "version": "7.9.2", + "resolved": "https://registry.npmjs.org/@react-router/express/-/express-7.9.2.tgz", + "integrity": "sha512-8mAkthF+0oNg9eK6qiWM/VGhhbDZrK6l3IEH7B1lB8yRJArHu6BJsafzFKR2jBE0NCws4bB0STP6zJZMjztfFw==", + "license": "MIT", + "dependencies": { + "@react-router/node": "7.9.2" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "express": "^4.17.1 || ^5", + "react-router": "7.9.2", + "typescript": "^5.1.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@react-router/serve/node_modules/@react-router/node": { + "version": "7.9.2", + "resolved": "https://registry.npmjs.org/@react-router/node/-/node-7.9.2.tgz", + "integrity": "sha512-mGqpEXVWs1XmwpJdbESE2fzvS3a43EdMCuiL2U3Nmm1IuGdSjc60gQK/IeKWjNGdgj1pZEyyQK17fYXPqjp5Uw==", + "license": "MIT", + "dependencies": { + "@mjackson/node-fetch-server": "^0.2.0" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "react-router": "7.9.2", + "typescript": "^5.1.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, "node_modules/@remix-run/node-fetch-server": { "version": "0.9.0", "resolved": "https://registry.npmjs.org/@remix-run/node-fetch-server/-/node-fetch-server-0.9.0.tgz", @@ -6417,9 +6461,9 @@ } }, "node_modules/react-router": { - "version": "7.9.2", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.9.2.tgz", - "integrity": "sha512-i2TPp4dgaqrOqiRGLZmqh2WXmbdFknUyiCRmSKs0hf6fWXkTKg5h56b+9F22NbGRAMxjYfqQnpi63egzD2SuZA==", + "version": "7.9.4", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.9.4.tgz", + "integrity": "sha512-SD3G8HKviFHg9xj7dNODUKDFgpG4xqD5nhyd0mYoB5iISepuZAvzSr8ywxgxKJ52yRzf/HWtVHc9AWwoTbljvA==", "license": "MIT", "dependencies": { "cookie": "^1.0.1", @@ -6438,6 +6482,22 @@ } } }, + "node_modules/react-router-dom": { + "version": "7.9.4", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-7.9.4.tgz", + "integrity": "sha512-f30P6bIkmYvnHHa5Gcu65deIXoA2+r3Eb6PJIAddvsT9aGlchMatJ51GgpU470aSqRRbFX22T70yQNUGuW3DfA==", + "license": "MIT", + "dependencies": { + "react-router": "7.9.4" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "react": ">=18", + "react-dom": ">=18" + } + }, "node_modules/react-router/node_modules/cookie": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.0.2.tgz", diff --git a/package.json b/package.json index 7466851..8f91f9f 100644 --- a/package.json +++ b/package.json @@ -19,7 +19,8 @@ "react": "^19.1.0", "react-dom": "^19.1.0", "react-icons": "^5.5.0", - "react-router": "^7.7.1" + "react-router": "7.9.4", + "react-router-dom": "7.9.4" }, "devDependencies": { "@eslint/js": "^9.36.0",