Michael Tang vor 4 Tagen
Ursprung
Commit
c1193b6813
88 geänderte Dateien mit 20233 neuen und 0 gelöschten Zeilen
  1. 23 0
      PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/.gitignore
  2. 70 0
      PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/README.md
  3. 21 0
      PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/READMEv2.md
  4. BIN
      PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/fonts/Test-AzoCollection.zip
  5. BIN
      PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/fonts/Test-AzoCollection/Test-AzoMono/AzoMonoTest-Bold.otf
  6. BIN
      PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/fonts/Test-AzoCollection/Test-AzoMono/AzoMonoTest-BoldItalic.otf
  7. BIN
      PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/fonts/Test-AzoCollection/Test-AzoMono/AzoMonoTest-Italic.otf
  8. BIN
      PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/fonts/Test-AzoCollection/Test-AzoMono/AzoMonoTest-Light.otf
  9. BIN
      PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/fonts/Test-AzoCollection/Test-AzoMono/AzoMonoTest-LightItalic.otf
  10. BIN
      PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/fonts/Test-AzoCollection/Test-AzoMono/AzoMonoTest-Medium.otf
  11. BIN
      PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/fonts/Test-AzoCollection/Test-AzoMono/AzoMonoTest-MediumItalic.otf
  12. BIN
      PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/fonts/Test-AzoCollection/Test-AzoMono/AzoMonoTest-Regular.otf
  13. BIN
      PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/fonts/Test-AzoCollection/Test-AzoMono/AzoMonoTest-Thin.otf
  14. BIN
      PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/fonts/Test-AzoCollection/Test-AzoMono/AzoMonoTest-ThinItalic.otf
  15. BIN
      PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/fonts/Test-AzoCollection/Test-AzoSans/AzoSansTest-Black.otf
  16. BIN
      PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/fonts/Test-AzoCollection/Test-AzoSans/AzoSansTest-BlackItalic.otf
  17. BIN
      PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/fonts/Test-AzoCollection/Test-AzoSans/AzoSansTest-Bold.otf
  18. BIN
      PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/fonts/Test-AzoCollection/Test-AzoSans/AzoSansTest-BoldItalic.otf
  19. BIN
      PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/fonts/Test-AzoCollection/Test-AzoSans/AzoSansTest-Italic.otf
  20. BIN
      PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/fonts/Test-AzoCollection/Test-AzoSans/AzoSansTest-Light.otf
  21. BIN
      PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/fonts/Test-AzoCollection/Test-AzoSans/AzoSansTest-LightItalic.otf
  22. BIN
      PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/fonts/Test-AzoCollection/Test-AzoSans/AzoSansTest-Medium.otf
  23. BIN
      PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/fonts/Test-AzoCollection/Test-AzoSans/AzoSansTest-MediumItalic.otf
  24. BIN
      PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/fonts/Test-AzoCollection/Test-AzoSans/AzoSansTest-Regular.otf
  25. BIN
      PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/fonts/Test-AzoCollection/Test-AzoSans/AzoSansTest-Thin.otf
  26. BIN
      PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/fonts/Test-AzoCollection/Test-AzoSans/AzoSansTest-ThinItalic.otf
  27. BIN
      PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/fonts/Test-AzoCollection/Test-AzoSuper/AzoSuperTest.otf
  28. 0 0
      PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/fonts/Test-AzoCollection/__MACOSX/Test-AzoMono/AzoMonoTest-Bold.otf
  29. 0 0
      PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/fonts/Test-AzoCollection/__MACOSX/Test-AzoMono/AzoMonoTest-BoldItalic.otf
  30. 0 0
      PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/fonts/Test-AzoCollection/__MACOSX/Test-AzoMono/AzoMonoTest-Italic.otf
  31. 0 0
      PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/fonts/Test-AzoCollection/__MACOSX/Test-AzoMono/AzoMonoTest-Light.otf
  32. 0 0
      PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/fonts/Test-AzoCollection/__MACOSX/Test-AzoMono/AzoMonoTest-LightItalic.otf
  33. 0 0
      PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/fonts/Test-AzoCollection/__MACOSX/Test-AzoMono/AzoMonoTest-Medium.otf
  34. 0 0
      PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/fonts/Test-AzoCollection/__MACOSX/Test-AzoMono/AzoMonoTest-MediumItalic.otf
  35. 0 0
      PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/fonts/Test-AzoCollection/__MACOSX/Test-AzoMono/AzoMonoTest-Regular.otf
  36. 0 0
      PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/fonts/Test-AzoCollection/__MACOSX/Test-AzoMono/AzoMonoTest-Thin.otf
  37. 0 0
      PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/fonts/Test-AzoCollection/__MACOSX/Test-AzoMono/AzoMonoTest-ThinItalic.otf
  38. 0 0
      PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/fonts/Test-AzoCollection/__MACOSX/Test-AzoSans/AzoSansTest-Black.otf
  39. 0 0
      PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/fonts/Test-AzoCollection/__MACOSX/Test-AzoSans/AzoSansTest-BlackItalic.otf
  40. 0 0
      PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/fonts/Test-AzoCollection/__MACOSX/Test-AzoSans/AzoSansTest-Bold.otf
  41. 0 0
      PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/fonts/Test-AzoCollection/__MACOSX/Test-AzoSans/AzoSansTest-BoldItalic.otf
  42. 0 0
      PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/fonts/Test-AzoCollection/__MACOSX/Test-AzoSans/AzoSansTest-Italic.otf
  43. 0 0
      PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/fonts/Test-AzoCollection/__MACOSX/Test-AzoSans/AzoSansTest-Light.otf
  44. 0 0
      PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/fonts/Test-AzoCollection/__MACOSX/Test-AzoSans/AzoSansTest-LightItalic.otf
  45. 0 0
      PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/fonts/Test-AzoCollection/__MACOSX/Test-AzoSans/AzoSansTest-Medium.otf
  46. 0 0
      PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/fonts/Test-AzoCollection/__MACOSX/Test-AzoSans/AzoSansTest-MediumItalic.otf
  47. 0 0
      PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/fonts/Test-AzoCollection/__MACOSX/Test-AzoSans/AzoSansTest-Regular.otf
  48. 0 0
      PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/fonts/Test-AzoCollection/__MACOSX/Test-AzoSans/AzoSansTest-Thin.otf
  49. 0 0
      PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/fonts/Test-AzoCollection/__MACOSX/Test-AzoSans/AzoSansTest-ThinItalic.otf
  50. 0 0
      PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/fonts/Test-AzoCollection/__MACOSX/Test-AzoSuper/AzoSuperTest.otf
  51. 18485 0
      PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/package-lock.json
  52. 47 0
      PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/package.json
  53. BIN
      PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/public/favicon.ico
  54. 45 0
      PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/public/index.html
  55. BIN
      PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/public/logo192.png
  56. BIN
      PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/public/logo512.png
  57. 25 0
      PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/public/manifest.json
  58. 3 0
      PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/public/robots.txt
  59. 248 0
      PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/src/AnimatedBackground.js
  60. 56 0
      PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/src/App.css
  61. 41 0
      PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/src/App.js
  62. 8 0
      PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/src/App.test.js
  63. 14 0
      PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/src/about.js
  64. 67 0
      PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/src/admin.css
  65. 33 0
      PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/src/admin.js
  66. 50 0
      PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/src/adminHome.css
  67. 30 0
      PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/src/adminHome.js
  68. 63 0
      PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/src/createAccount.css
  69. 32 0
      PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/src/createAccount.js
  70. 81 0
      PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/src/hamburgerMenu.css
  71. 40 0
      PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/src/hamburgerMenu.js
  72. 183 0
      PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/src/home.js
  73. BIN
      PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/src/images/Ninjas in Costumes.png
  74. BIN
      PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/src/images/logo.png
  75. BIN
      PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/src/images/vines.jpg
  76. BIN
      PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/src/images/vinesV2.png
  77. BIN
      PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/src/images/welcome.jpg
  78. 13 0
      PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/src/index.css
  79. 17 0
      PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/src/index.js
  80. 26 0
      PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/src/inputBlocks.css
  81. 87 0
      PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/src/loader.css
  82. 29 0
      PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/src/loader.js
  83. 143 0
      PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/src/profile.css
  84. 124 0
      PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/src/profile.js
  85. 13 0
      PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/src/reportWebVitals.js
  86. 5 0
      PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/src/setupTests.js
  87. 94 0
      PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/src/styles.css
  88. 17 0
      PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/src/textBlocks.css

+ 23 - 0
PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/.gitignore

@@ -0,0 +1,23 @@
+# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
+
+# dependencies
+/node_modules
+/.pnp
+.pnp.js
+
+# testing
+/coverage
+
+# production
+/build
+
+# misc
+.DS_Store
+.env.local
+.env.development.local
+.env.test.local
+.env.production.local
+
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*

+ 70 - 0
PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/README.md

@@ -0,0 +1,70 @@
+# Getting Started with Create React App
+
+This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app).
+
+## Available Scripts
+
+In the project directory, you can run:
+
+### `npm start`
+
+Runs the app in the development mode.\
+Open [http://localhost:3000](http://localhost:3000) to view it in your browser.
+
+The page will reload when you make changes.\
+You may also see any lint errors in the console.
+
+### `npm test`
+
+Launches the test runner in the interactive watch mode.\
+See the section about [running tests](https://facebook.github.io/create-react-app/docs/running-tests) for more information.
+
+### `npm run build`
+
+Builds the app for production to the `build` folder.\
+It correctly bundles React in production mode and optimizes the build for the best performance.
+
+The build is minified and the filenames include the hashes.\
+Your app is ready to be deployed!
+
+See the section about [deployment](https://facebook.github.io/create-react-app/docs/deployment) for more information.
+
+### `npm run eject`
+
+**Note: this is a one-way operation. Once you `eject`, you can't go back!**
+
+If you aren't satisfied with the build tool and configuration choices, you can `eject` at any time. This command will remove the single build dependency from your project.
+
+Instead, it will copy all the configuration files and the transitive dependencies (webpack, Babel, ESLint, etc) right into your project so you have full control over them. All of the commands except `eject` will still work, but they will point to the copied scripts so you can tweak them. At this point you're on your own.
+
+You don't have to ever use `eject`. The curated feature set is suitable for small and middle deployments, and you shouldn't feel obligated to use this feature. However we understand that this tool wouldn't be useful if you couldn't customize it when you are ready for it.
+
+## Learn More
+
+You can learn more in the [Create React App documentation](https://facebook.github.io/create-react-app/docs/getting-started).
+
+To learn React, check out the [React documentation](https://reactjs.org/).
+
+### Code Splitting
+
+This section has moved here: [https://facebook.github.io/create-react-app/docs/code-splitting](https://facebook.github.io/create-react-app/docs/code-splitting)
+
+### Analyzing the Bundle Size
+
+This section has moved here: [https://facebook.github.io/create-react-app/docs/analyzing-the-bundle-size](https://facebook.github.io/create-react-app/docs/analyzing-the-bundle-size)
+
+### Making a Progressive Web App
+
+This section has moved here: [https://facebook.github.io/create-react-app/docs/making-a-progressive-web-app](https://facebook.github.io/create-react-app/docs/making-a-progressive-web-app)
+
+### Advanced Configuration
+
+This section has moved here: [https://facebook.github.io/create-react-app/docs/advanced-configuration](https://facebook.github.io/create-react-app/docs/advanced-configuration)
+
+### Deployment
+
+This section has moved here: [https://facebook.github.io/create-react-app/docs/deployment](https://facebook.github.io/create-react-app/docs/deployment)
+
+### `npm run build` fails to minify
+
+This section has moved here: [https://facebook.github.io/create-react-app/docs/troubleshooting#npm-run-build-fails-to-minify](https://facebook.github.io/create-react-app/docs/troubleshooting#npm-run-build-fails-to-minify)

+ 21 - 0
PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/READMEv2.md

@@ -0,0 +1,21 @@
+# Prize Rewards System - FrontEnd
+
+Welcome to the Prize Rewards System FrontEnd project! 
+
+## Table of Contents
+
+
+### Node.js and npm
+
+Ensure that you have Node.js and npm installed on your machine. You can download them from [Node.js official website](https://nodejs.org/).
+
+### Start the project
+
+Be in the "code-ninjas-react-server" directory and run "npm start" in the terminal
+
+### Current navigation system
+
+To change tabs manually enter the end point to the end of the URL
+
+The current method with the hamburger dropdown menu is not functional
+

BIN
PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/fonts/Test-AzoCollection.zip


BIN
PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/fonts/Test-AzoCollection/Test-AzoMono/AzoMonoTest-Bold.otf


BIN
PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/fonts/Test-AzoCollection/Test-AzoMono/AzoMonoTest-BoldItalic.otf


BIN
PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/fonts/Test-AzoCollection/Test-AzoMono/AzoMonoTest-Italic.otf


BIN
PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/fonts/Test-AzoCollection/Test-AzoMono/AzoMonoTest-Light.otf


BIN
PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/fonts/Test-AzoCollection/Test-AzoMono/AzoMonoTest-LightItalic.otf


BIN
PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/fonts/Test-AzoCollection/Test-AzoMono/AzoMonoTest-Medium.otf


BIN
PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/fonts/Test-AzoCollection/Test-AzoMono/AzoMonoTest-MediumItalic.otf


BIN
PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/fonts/Test-AzoCollection/Test-AzoMono/AzoMonoTest-Regular.otf


BIN
PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/fonts/Test-AzoCollection/Test-AzoMono/AzoMonoTest-Thin.otf


BIN
PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/fonts/Test-AzoCollection/Test-AzoMono/AzoMonoTest-ThinItalic.otf


BIN
PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/fonts/Test-AzoCollection/Test-AzoSans/AzoSansTest-Black.otf


BIN
PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/fonts/Test-AzoCollection/Test-AzoSans/AzoSansTest-BlackItalic.otf


BIN
PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/fonts/Test-AzoCollection/Test-AzoSans/AzoSansTest-Bold.otf


BIN
PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/fonts/Test-AzoCollection/Test-AzoSans/AzoSansTest-BoldItalic.otf


BIN
PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/fonts/Test-AzoCollection/Test-AzoSans/AzoSansTest-Italic.otf


BIN
PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/fonts/Test-AzoCollection/Test-AzoSans/AzoSansTest-Light.otf


BIN
PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/fonts/Test-AzoCollection/Test-AzoSans/AzoSansTest-LightItalic.otf


BIN
PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/fonts/Test-AzoCollection/Test-AzoSans/AzoSansTest-Medium.otf


BIN
PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/fonts/Test-AzoCollection/Test-AzoSans/AzoSansTest-MediumItalic.otf


BIN
PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/fonts/Test-AzoCollection/Test-AzoSans/AzoSansTest-Regular.otf


BIN
PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/fonts/Test-AzoCollection/Test-AzoSans/AzoSansTest-Thin.otf


BIN
PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/fonts/Test-AzoCollection/Test-AzoSans/AzoSansTest-ThinItalic.otf


BIN
PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/fonts/Test-AzoCollection/Test-AzoSuper/AzoSuperTest.otf


+ 0 - 0
PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/fonts/Test-AzoCollection/__MACOSX/Test-AzoMono/AzoMonoTest-Bold.otf


+ 0 - 0
PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/fonts/Test-AzoCollection/__MACOSX/Test-AzoMono/AzoMonoTest-BoldItalic.otf


+ 0 - 0
PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/fonts/Test-AzoCollection/__MACOSX/Test-AzoMono/AzoMonoTest-Italic.otf


+ 0 - 0
PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/fonts/Test-AzoCollection/__MACOSX/Test-AzoMono/AzoMonoTest-Light.otf


+ 0 - 0
PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/fonts/Test-AzoCollection/__MACOSX/Test-AzoMono/AzoMonoTest-LightItalic.otf


+ 0 - 0
PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/fonts/Test-AzoCollection/__MACOSX/Test-AzoMono/AzoMonoTest-Medium.otf


+ 0 - 0
PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/fonts/Test-AzoCollection/__MACOSX/Test-AzoMono/AzoMonoTest-MediumItalic.otf


+ 0 - 0
PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/fonts/Test-AzoCollection/__MACOSX/Test-AzoMono/AzoMonoTest-Regular.otf


+ 0 - 0
PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/fonts/Test-AzoCollection/__MACOSX/Test-AzoMono/AzoMonoTest-Thin.otf


+ 0 - 0
PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/fonts/Test-AzoCollection/__MACOSX/Test-AzoMono/AzoMonoTest-ThinItalic.otf


+ 0 - 0
PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/fonts/Test-AzoCollection/__MACOSX/Test-AzoSans/AzoSansTest-Black.otf


+ 0 - 0
PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/fonts/Test-AzoCollection/__MACOSX/Test-AzoSans/AzoSansTest-BlackItalic.otf


+ 0 - 0
PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/fonts/Test-AzoCollection/__MACOSX/Test-AzoSans/AzoSansTest-Bold.otf


+ 0 - 0
PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/fonts/Test-AzoCollection/__MACOSX/Test-AzoSans/AzoSansTest-BoldItalic.otf


+ 0 - 0
PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/fonts/Test-AzoCollection/__MACOSX/Test-AzoSans/AzoSansTest-Italic.otf


+ 0 - 0
PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/fonts/Test-AzoCollection/__MACOSX/Test-AzoSans/AzoSansTest-Light.otf


+ 0 - 0
PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/fonts/Test-AzoCollection/__MACOSX/Test-AzoSans/AzoSansTest-LightItalic.otf


+ 0 - 0
PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/fonts/Test-AzoCollection/__MACOSX/Test-AzoSans/AzoSansTest-Medium.otf


+ 0 - 0
PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/fonts/Test-AzoCollection/__MACOSX/Test-AzoSans/AzoSansTest-MediumItalic.otf


+ 0 - 0
PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/fonts/Test-AzoCollection/__MACOSX/Test-AzoSans/AzoSansTest-Regular.otf


+ 0 - 0
PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/fonts/Test-AzoCollection/__MACOSX/Test-AzoSans/AzoSansTest-Thin.otf


+ 0 - 0
PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/fonts/Test-AzoCollection/__MACOSX/Test-AzoSans/AzoSansTest-ThinItalic.otf


+ 0 - 0
PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/fonts/Test-AzoCollection/__MACOSX/Test-AzoSuper/AzoSuperTest.otf


Datei-Diff unterdrückt, da er zu groß ist
+ 18485 - 0
PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/package-lock.json


+ 47 - 0
PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/package.json

@@ -0,0 +1,47 @@
+{
+  "name": "code-ninjas-react-server",
+  "version": "0.1.0",
+  "private": true,
+  "dependencies": {
+    "@fortawesome/fontawesome-svg-core": "^6.5.1",
+    "@fortawesome/free-solid-svg-icons": "^6.5.1",
+    "@fortawesome/react-fontawesome": "^0.2.0",
+    "@testing-library/jest-dom": "^5.17.0",
+    "@testing-library/react": "^13.4.0",
+    "@testing-library/user-event": "^13.5.0",
+    "gasp": "^0.0.2",
+    "gsap": "^3.12.5",
+    "html2canvas": "^1.4.1",
+    "jquery": "^3.7.1",
+    "react": "^18.2.0",
+    "react-dom": "^18.2.0",
+    "react-router-dom": "^5.2.0",
+    "react-scripts": "^5.0.1",
+    "three": "^0.161.0",
+    "web-vitals": "^2.1.4"
+  },
+  "scripts": {
+    "start": "react-scripts start",
+    "build": "react-scripts build",
+    "test": "react-scripts test",
+    "eject": "react-scripts eject"
+  },
+  "eslintConfig": {
+    "extends": [
+      "react-app",
+      "react-app/jest"
+    ]
+  },
+  "browserslist": {
+    "production": [
+      ">0.2%",
+      "not dead",
+      "not op_mini all"
+    ],
+    "development": [
+      "last 1 chrome version",
+      "last 1 firefox version",
+      "last 1 safari version"
+    ]
+  }
+}

BIN
PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/public/favicon.ico


+ 45 - 0
PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/public/index.html

@@ -0,0 +1,45 @@
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <meta charset="utf-8" />
+    <link rel="icon" href="%PUBLIC_URL%/favicon.ico" />
+    <meta name="viewport" content="width=device-width, initial-scale=1" />
+    <meta name="theme-color" content="#000000" />
+    <meta
+      name="description"
+      content="Web site created using create-react-app"
+    />
+    <link rel="apple-touch-icon" href="%PUBLIC_URL%/logo192.png" />
+    <!--
+      manifest.json provides metadata used when your web app is installed on a
+      user's mobile device or desktop. See https://developers.google.com/web/fundamentals/web-app-manifest/
+    -->
+    <link rel="manifest" href="%PUBLIC_URL%/manifest.json" />
+    <!--
+      Notice the use of %PUBLIC_URL% in the tags above.
+      It will be replaced with the URL of the `public` folder during the build.
+      Only files inside the `public` folder can be referenced from the HTML.
+
+      Unlike "/favicon.ico" or "favicon.ico", "%PUBLIC_URL%/favicon.ico" will
+      work correctly both with client-side routing and a non-root public URL.
+      Learn how to configure a non-root public URL by running `npm run build`.
+    -->
+    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/all.min.css">
+    <title>React App</title>
+    <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
+  </head>
+  <body>
+    <noscript>You need to enable JavaScript to run this app.</noscript>
+    <div id="root"></div>
+    <!--
+      This HTML file is a template.
+      If you open it directly in the browser, you will see an empty page.
+
+      You can add webfonts, meta tags, or analytics to this file.
+      The build step will place the bundled scripts into the <body> tag.
+
+      To begin the development, run `npm start` or `yarn start`.
+      To create a production bundle, use `npm run build` or `yarn build`.
+    -->
+  </body>
+</html>

BIN
PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/public/logo192.png


BIN
PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/public/logo512.png


+ 25 - 0
PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/public/manifest.json

@@ -0,0 +1,25 @@
+{
+  "short_name": "React App",
+  "name": "Create React App Sample",
+  "icons": [
+    {
+      "src": "favicon.ico",
+      "sizes": "64x64 32x32 24x24 16x16",
+      "type": "image/x-icon"
+    },
+    {
+      "src": "logo192.png",
+      "type": "image/png",
+      "sizes": "192x192"
+    },
+    {
+      "src": "logo512.png",
+      "type": "image/png",
+      "sizes": "512x512"
+    }
+  ],
+  "start_url": ".",
+  "display": "standalone",
+  "theme_color": "#000000",
+  "background_color": "#ffffff"
+}

+ 3 - 0
PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/public/robots.txt

@@ -0,0 +1,3 @@
+# https://www.robotstxt.org/robotstxt.html
+User-agent: *
+Disallow:

+ 248 - 0
PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/src/AnimatedBackground.js

@@ -0,0 +1,248 @@
+import React, { useEffect } from 'react';
+
+const AnimatedBackground = () => {
+    useEffect(() => {
+        var canvas = document.querySelectorAll('#bg canvas'),
+            background = canvas[0],
+            foreground1 = canvas[1],
+            foreground2 = canvas[2],
+            config = {
+                star: {
+                    amount: 18,
+                    layer: 3,
+                    color: [157, 97, 207],
+                    alpha: 0.3
+                },
+                line: {
+                    amount: 12,
+                    layer: 3,
+                    color: [255, 255, 255],
+                    alpha: 0.3
+                },
+                speed: 0.5,
+                angle: 20
+            };
+
+        if (background.getContext) {
+            var bctx = background.getContext('2d'),
+                fctx1 = foreground1.getContext('2d'),
+                fctx2 = foreground2.getContext('2d'),
+                M = window.Math, // Cached Math
+                degree = config.angle / 360 * M.PI * 2,
+                stars = [],
+                lines = [],
+                wWidth, wHeight, timer;
+
+            var setCanvasHeight = function () {
+                wWidth = window.innerWidth;
+                wHeight = window.innerHeight;
+
+                canvas.forEach(function (item) {
+                    item.width = wWidth;
+                    item.height = wHeight;
+                });
+            };
+
+            var drawStar = function (x, y, radius, color, alpha) {
+                fctx1.beginPath();
+                fctx1.moveTo(x, y - radius);
+
+                for (var i = 0; i < 5; i++) {
+                    fctx1.lineTo(x + Math.sin((i * 2 * Math.PI) / 5) * radius, y - Math.cos((i * 2 * Math.PI) / 5) * radius);
+                    fctx1.lineTo(x + Math.sin(((i + 0.5) * 2 * Math.PI) / 5) * (radius / 2), y - Math.cos(((i + 0.5) * 2 * Math.PI) / 5) * (radius / 2));
+                }
+
+                fctx1.closePath();
+
+                var gradient = fctx1.createRadialGradient(x, y, radius, x, y, 0);
+                gradient.addColorStop(0, 'rgba(' + color[0] + ',' + color[1] + ',' + color[2] + ',' + alpha + ')');
+                gradient.addColorStop(1, 'rgba(' + color[0] + ',' + color[1] + ',' + color[2] + ',' + (alpha - 0.1) + ')');
+
+                fctx1.fillStyle = gradient;
+                fctx1.fill();
+            };
+
+            var drawLine = function (x, y, width, color, alpha) {
+                var endX = x + M.sin(degree) * width,
+                    endY = y - M.cos(degree) * width,
+                    gradient = fctx2.createLinearGradient(x, y, endX, endY);
+                gradient.addColorStop(0, 'rgba(' + color[0] + ',' + color[1] + ',' + color[2] + ',' + alpha + ')');
+                gradient.addColorStop(1, 'rgba(' + color[0] + ',' + color[1] + ',' + color[2] + ',' + (alpha - 0.1) + ')');
+
+                fctx2.beginPath();
+                fctx2.moveTo(x, y);
+                fctx2.lineTo(endX, endY);
+                fctx2.lineWidth = 3;
+                fctx2.lineCap = 'round';
+                fctx2.strokeStyle = gradient;
+                fctx2.stroke();
+            };
+
+            var drawBack = function () {
+                bctx.clearRect(0, 0, wWidth, wHeight);
+
+                var gradient = [];
+
+                gradient[0] = bctx.createRadialGradient(wWidth * 0.3, wHeight * 0.1, 0, wWidth * 0.3, wHeight * 0.1, wWidth * 0.9);
+                gradient[0].addColorStop(0, '#1ab7e5');
+                gradient[0].addColorStop(1, 'transparent');
+
+                bctx.translate(wWidth, 0);
+                bctx.scale(-1, 1);
+                bctx.beginPath();
+                bctx.fillStyle = gradient[0];
+                bctx.fillRect(0, 0, wWidth, wHeight);
+
+                gradient[1] = bctx.createRadialGradient(wWidth * 0.1, wHeight * 0.1, 0, wWidth * 0.3, wHeight * 0.1, wWidth);
+                gradient[1].addColorStop(0, '#090d00');
+                gradient[1].addColorStop(0.8, 'transparent');
+
+                bctx.translate(wWidth, 0);
+                bctx.scale(-1, 1);
+                bctx.beginPath();
+                bctx.fillStyle = gradient[1];
+                bctx.fillRect(0, 0, wWidth, wHeight);
+
+                gradient[2] = bctx.createRadialGradient(wWidth * 0.1, wHeight * 0.5, 0, wWidth * 0.1, wHeight * 0.5, wWidth * 0.5);
+                gradient[2].addColorStop(0, '#a0349f');
+                gradient[2].addColorStop(1, 'transparent');
+
+                bctx.beginPath();
+                bctx.fillStyle = gradient[2];
+                bctx.fillRect(0, 0, wWidth, wHeight);
+            };
+
+            var animate = function () {
+                var sin = M.sin(degree),
+                    cos = M.cos(degree);
+
+                if (config.star.amount > 0 && config.star.layer > 0) {
+                    fctx1.clearRect(0, 0, wWidth, wHeight);
+                    for (var i = 0, starLen = stars.length; i < starLen; i++) {
+                        var starItem = stars[i],
+                            starX = starItem.x,
+                            starY = starItem.y,
+                            starRadius = starItem.radius,
+                            starSpeed = starItem.speed;
+
+                        if (starX > wWidth + starRadius) {
+                            starX = -starRadius;
+                        } else if (starX < -starRadius) {
+                            starX = wWidth + starRadius;
+                        } else {
+                            starX += sin * starSpeed;
+                        }
+
+                        if (starY > wHeight + starRadius) {
+                            starY = -starRadius;
+                        } else if (starY < -starRadius) {
+                            starY = wHeight + starRadius;
+                        } else {
+                            starY -= cos * starSpeed;
+                        }
+
+                        starItem.x = starX;
+                        starItem.y = starY;
+                        drawStar(starX, starY, starRadius, starItem.color, starItem.alpha);
+                    }
+                }
+
+                if (config.line.amount > 0 && config.line.layer > 0) {
+                    fctx2.clearRect(0, 0, wWidth, wHeight);
+                    for (var j = 0, lineLen = lines.length; j < lineLen; j++) {
+                        var lineItem = lines[j],
+                            lineX = lineItem.x,
+                            lineY = lineItem.y,
+                            lineWidth = lineItem.width,
+                            lineSpeed = lineItem.speed;
+
+                        if (lineX > wWidth + lineWidth * sin) {
+                            lineX = -lineWidth * sin;
+                        } else if (lineX < -lineWidth * sin) {
+                            lineX = wWidth + lineWidth * sin;
+                        } else {
+                            lineX += sin * lineSpeed;
+                        }
+
+                        if (lineY > wHeight + lineWidth * cos) {
+                            lineY = -lineWidth * cos;
+                        } else if (lineY < -lineWidth * cos) {
+                            lineY = wHeight + lineWidth * cos;
+                        } else {
+                            lineY -= cos * lineSpeed;
+                        }
+
+                        lineItem.x = lineX;
+                        lineItem.y = lineY;
+                        drawLine(lineX, lineY, lineWidth, lineItem.color, lineItem.alpha);
+                    }
+                }
+
+                timer = requestAnimationFrame(animate);
+            };
+
+            var createItem = function () {
+                stars = [];
+                lines = [];
+
+                if (config.star.amount > 0 && config.star.layer > 0) {
+                    for (var i = 0; i < config.star.amount / config.star.layer; i++) {
+                        for (var j = 0; j < config.star.layer; j++) {
+                            stars.push({
+                                x: M.random() * wWidth,
+                                y: M.random() * wHeight,
+                                radius: M.random() * (20 + j * 5) + (20 + j * 5),
+                                color: config.star.color,
+                                alpha: M.random() * 0.2 + (config.star.alpha - j * 0.1),
+                                speed: config.speed * (1 + j * 0.5)
+                            });
+                        }
+                    }
+                }
+
+                if (config.line.amount > 0 && config.line.layer > 0) {
+                    for (var m = 0; m < config.line.amount / config.line.layer; m++) {
+                        for (var n = 0; n < config.line.layer; n++) {
+                            lines.push({
+                                x: M.random() * wWidth,
+                                y: M.random() * wHeight,
+                                width: M.random() * (20 + n * 5) + (20 + n * 5),
+                                color: config.line.color,
+                                alpha: M.random() * 0.2 + (config.line.alpha - n * 0.1),
+                                speed: config.speed * (5 + n * 0.5)
+                            });
+                        }
+                    }
+                }
+
+                cancelAnimationFrame(timer);
+                timer = requestAnimationFrame(animate);
+                drawBack();
+            };
+
+            var resizeHandler = function () {
+                setCanvasHeight();
+                createItem();
+            };
+
+            setCanvasHeight();
+            createItem();
+
+            window.addEventListener('resize', resizeHandler);
+
+            return () => {
+                window.removeEventListener('resize', resizeHandler);
+            };
+        }
+    }, []);
+
+    return (
+        <div id="bg" className="animation-container">
+            <canvas></canvas>
+            <canvas></canvas>
+            <canvas></canvas>
+        </div>
+    );
+};
+
+export default AnimatedBackground;

+ 56 - 0
PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/src/App.css

@@ -0,0 +1,56 @@
+.App {
+  text-align: center;
+}
+
+.App-logo {
+  height: 40vmin;
+  pointer-events: none;
+}
+
+@media (prefers-reduced-motion: no-preference) {
+  .App-logo {
+    animation: App-logo-spin infinite 20s linear;
+  }
+}
+
+.App-header {
+  background-color: #282c34;
+  min-height: 100vh;
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+  justify-content: center;
+  font-size: calc(10px + 2vmin);
+  color: white;
+}
+
+.App-link {
+  color: #61dafb;
+}
+
+@keyframes App-logo-spin {
+  from {
+    transform: rotate(0deg);
+  }
+  to {
+    transform: rotate(360deg);
+  }
+}
+
+#bg {
+  position: fixed;
+  top: 0;
+  left: 0;
+  width: 100%;
+  height: 100%;
+  z-index: 2;
+}
+
+#bg canvas {
+  position: absolute;
+  top: 0;
+  left: 0;
+  width: 100%;
+  height: 100%;
+}
+

+ 41 - 0
PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/src/App.js

@@ -0,0 +1,41 @@
+import './App.css';
+import React from 'react';
+import { BrowserRouter as Router, Route, Switch, useLocation } from 'react-router-dom';
+import Home from './home';
+import Admin from './admin';
+import About from './about';
+import CreateAccount from './createAccount';
+import Profile from './profile';
+import AdminHome from './adminHome';
+import AnimatedBackground from './AnimatedBackground';
+import HamburgerMenu from './hamburgerMenu';
+
+function App() {
+  return (
+    <Router>
+      <AnimatedBackground />
+      <Switch>
+        <Route path="/admin/home" exact component={AdminHome} />
+        <Route path="/admin/about" exact component={About} />
+        <Route path="/admin/createAccount" exact component={CreateAccount} />
+        <Route path="/admin/profile" exact component={Profile} />
+        <Route path="/admin" component={Admin} />
+        <Route path="/" exact component={Home} />
+      </Switch>
+      <HamburgerMenuWithCondition />
+    </Router>
+  );
+}
+
+
+// Create a separate component to conditionally render HamburgerMenu
+function HamburgerMenuWithCondition() {
+  const location = useLocation();
+
+  // Check if the current path is neither '/' nor '/admin', if yes, render HamburgerMenu
+  const shouldRenderHamburgerMenu = !['/', '/admin'].includes(location.pathname);
+
+  return shouldRenderHamburgerMenu ? <HamburgerMenu /> : null;
+}
+
+export default App;

+ 8 - 0
PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/src/App.test.js

@@ -0,0 +1,8 @@
+import { render, screen } from '@testing-library/react';
+import App from './App';
+
+test('renders learn react link', () => {
+  render(<App />);
+  const linkElement = screen.getByText(/learn react/i);
+  expect(linkElement).toBeInTheDocument();
+});

+ 14 - 0
PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/src/about.js

@@ -0,0 +1,14 @@
+import React from 'react';
+import './styles.css';
+
+const About = () => {
+  return (
+    <div className="home-container">
+      <h1 className="custom-font-admin center-text">About Page</h1>
+      <div className="admin-container">
+      </div>
+    </div>
+  );
+};
+
+export default About;

+ 67 - 0
PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/src/admin.css

@@ -0,0 +1,67 @@
+.login-panel {
+  padding: 40px;
+  border-radius: 20px;
+  background: #ffffff; 
+  box-shadow: 0 4px 30px rgba(0, 0, 0, 0.1);
+  width: 80%; 
+  max-width: 400px; 
+}
+
+.logo-container {
+  margin-bottom: 0px;
+}
+
+.logo {
+  width: 390px; 
+}
+
+.login-title {
+  color: #333; 
+  text-align: center;
+  margin-bottom: 30px;
+  font-size: 24px;
+}
+
+.form-group {
+  margin-bottom: 20px;
+}
+
+label {
+  display: block;
+  margin-bottom: 8px;
+  color: #333; 
+}
+
+input[type="email"],
+input[type="password"] {
+  width: 100%;
+  padding: 12px;
+  border: 1px solid #ccc; 
+  border-radius: 10px;
+  background-color: #fff; 
+  color: #333; 
+  font-size: 16px;
+}
+
+input[type="email"]:focus,
+input[type="password"]:focus {
+  outline: none;
+  border-color: #6422b5; 
+  box-shadow: 0 0 8px #6422b5; 
+}
+
+.login-button {
+  width: 100%;
+  padding: 12px;
+  margin-top: 10px;
+  border: none;
+  border-radius: 10px;
+  background-color: #6f73e3;
+  color: #fff; 
+  cursor: pointer;
+  font-size: 16px;
+}
+
+.login-button:hover {
+  background-color: #6422b5; 
+}

+ 33 - 0
PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/src/admin.js

@@ -0,0 +1,33 @@
+import React from 'react';
+import './admin.css';
+import './styles.css'
+import logoImage from './images/logo.png'
+
+const Admin = () => {
+  return (
+    <div className="home-container">
+      <h1 className="custom-font-admin center-text">Admin Portal</h1>
+      <div className="admin-container">
+        <div className="login-panel">
+          <div className="logo-container">
+            <img src={logoImage} alt="Admin Logo" className="logo" />
+          </div>
+          <h1 className="login-title">Admin Portal</h1>
+          <form className="login-form">
+            <div className="form-group">
+              <label htmlFor="email">Email:</label>
+              <input type="email" id="email" name="email" placeholder="Enter your email" required />
+            </div>
+            <div className="form-group">
+              <label htmlFor="password">Password:</label>
+              <input type="password" id="password" name="password" placeholder="Enter your password" required />
+            </div>
+            <button type="submit" className="login-button">Login</button>
+          </form>
+        </div>
+      </div>
+    </div>
+  );
+};
+
+export default Admin;

+ 50 - 0
PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/src/adminHome.css

@@ -0,0 +1,50 @@
+.welcome-image {
+  width: 80%;
+  height:50%;
+  object-fit: cover;
+  border-radius: 20px 20px 20px 20px; 
+  box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2);
+  border: 4px solid #fff;
+  position: relative;
+  filter: brightness(1.1) contrast(1.2);
+}
+
+.welcome-message h2, .welcome-message p {
+  color: #FFFFFF;
+  text-align: center;
+}
+
+.action-items {
+  display: flex;
+  justify-content: center;
+  gap: 20px; 
+  margin-top: 20px;
+}
+
+.action-button {
+  padding: 10px 20px;
+  background-color: #6f73e3;
+  color: #FFFFFF;
+  border: none;
+  border-radius: 5px;
+  cursor: pointer;
+  transition: background-color 0.3s ease;
+}
+
+.action-button:hover {
+  background-color: #6422b5;
+}
+
+.inspirational-quote {
+  margin-top: 30px;
+  font-style: italic;
+  text-align: center;
+  color: #FFFFFF;
+}
+
+.admin-container {
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+  padding: 20px;
+}

+ 30 - 0
PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/src/adminHome.js

@@ -0,0 +1,30 @@
+import React from 'react';
+import './styles.css';
+import './adminHome.css';
+import welcomeImage from './images/welcome.jpg';
+
+const AdminHome = () => {
+  return (
+    <div className="home-container">
+      <h1 className="custom-font-admin center-text">Admin Dashboard</h1>
+      <div className="admin-container">
+        <img src={welcomeImage} alt="Welcome" className="welcome-image" />
+        <div className="welcome-message">
+          <h2>Welcome, Admin!</h2>
+          <p>Choose what you'd like to do next:</p>
+        </div>
+        <div className="action-items">
+          <button className="action-button">N/A</button>
+          <button className="action-button">Manage Profile</button>
+          <button className="action-button">Create An Account</button>
+        </div>
+        <div className="inspirational-quote">
+          <p>"The secret of getting ahead is getting started." - Mark Twain</p>
+        </div>
+      </div>
+    </div>
+  );
+};
+
+
+export default AdminHome;

+ 63 - 0
PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/src/createAccount.css

@@ -0,0 +1,63 @@
+.create-account-container {
+    width: 340px;
+    margin: 150px auto;
+    position: relative;
+    top: 50%; 
+    transform: translateY(-50%);
+    padding: 30px;
+    border-radius: 10px;
+    background-color: transparent;
+  }
+  
+  .create-account-form input[type="text"] {
+    width: calc(100% - 12px);
+    padding: 12px;
+    margin-bottom: 20px;
+    border: 2px solid #fff;
+    border-radius: 10px;
+    background-color: transparent;
+    color: #fff;
+    font-size: 16px;
+    transition: border-color 0.3s ease;
+  }
+  
+  .create-account-form label {
+    display: block;
+    margin-bottom: 10px;
+    color: #fff;
+    font-size: 16px;
+  }
+  
+  .create-account-form button {
+    width: 100%;
+    padding: 12px;
+    border: none;
+    border-radius: 10px;
+    background-color: #6f73e3;
+    color: #fff;
+    cursor: pointer;
+    font-size: 16px;
+    transition: background-color 0.3s ease;
+  }
+  
+  .create-account-form button:hover {
+    background-color: #6422b5;
+  }
+
+  input[type="text"]:focus,
+  input[type="checkbox"]:focus {
+  outline: none;
+  border-color: #6422b5;
+}
+
+
+.name-inputs {
+    display: flex;
+    justify-content: space-between;
+    padding-bottom:30px;
+}
+  
+.name-inputs .form-group {
+    width: calc(45% - 10px); 
+}
+  

+ 32 - 0
PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/src/createAccount.js

@@ -0,0 +1,32 @@
+import React from 'react';
+import './styles.css';
+import './createAccount.css'
+
+const CreateAccount = () => {
+  return (
+    <div className="home-container">
+      <h1 className="custom-font-admin center-text">Create Account Page</h1>
+      <div className="admin-container">
+        <div className="create-account-container"> 
+          <form className="create-account-form" action="#" method="post">
+            <div className="form-group">
+              <div className="name-inputs">
+                <div className="form-group">
+                  <label htmlFor="firstName">First Name:</label>
+                  <input type="text" id="firstName" name="firstName" placeholder="Enter student's first name" required />
+                </div>
+                <div className="form-group">
+                  <label htmlFor="lastName">Last Name:</label>
+                  <input type="text" id="lastName" name="lastName" placeholder="Enter student's last name" required />
+                </div>
+              </div>
+            </div>
+            <button type="submit">Submit</button>
+          </form>
+        </div>
+      </div>
+    </div>
+  );
+};
+
+export default CreateAccount;

+ 81 - 0
PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/src/hamburgerMenu.css

@@ -0,0 +1,81 @@
+.hamburger-menu {
+    position: fixed;
+    top: 20px;
+    left: 20px;
+    z-index: 1000;
+  }
+  
+  #toggle {
+    display: none;
+  }
+  
+  .hamburger {
+    display: block;
+    width: 30px;
+    height: 30px;
+    cursor: pointer;
+    padding: 10px;
+  }
+  
+  .bar1,
+  .bar2,
+  .bar3 {
+    width: 100%;
+    height: 3px;
+    background-color: #fff;
+    margin: 6px 0;
+    transition: 0.4s;
+  }
+  
+  /* Rotate animation */
+  #toggle:checked + .hamburger .bar1 {
+    transform: rotate(-45deg) translate(-5px, 5px);
+  }
+  
+  #toggle:checked + .hamburger .bar2 {
+    opacity: 0;
+  }
+  
+  #toggle:checked + .hamburger .bar3 {
+    transform: rotate(45deg) translate(-8px, -8px);
+  }
+  
+  .nav {
+    position: fixed;
+    width: 100%;
+    height: 100%;
+    top: 0;
+    left: -100%; 
+    z-index: 999;
+    transition: 0.5s;
+    cursor: pointer; 
+  }
+  
+  .hamburger-menu.open .nav { 
+    left: 0; 
+  }
+  
+  .nav-wrapper {
+    position: relative;
+    width: 100%;
+    height: 100%;
+    padding: 30px;
+    margin-top: 70px;
+  }
+  
+  nav {
+    text-align: left;
+  }
+  
+  nav a {
+    display: block;
+    font-size: 24px;
+    color: #fff; 
+    margin-bottom: 20px;
+    text-decoration: none;
+    padding-bottom: 10px;
+  }
+  
+  nav a:hover {
+    color: #ccc;
+  }

+ 40 - 0
PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/src/hamburgerMenu.js

@@ -0,0 +1,40 @@
+import React, { useState } from 'react';
+import { Link, useLocation } from 'react-router-dom';
+import './hamburgerMenu.css';
+
+const HamburgerMenu = () => {
+  const [isOpen, setIsOpen] = useState(false);
+  const location = useLocation();
+
+  const toggleMenu = () => {
+    setIsOpen(!isOpen);
+  };
+
+  const closeMenu = () => {
+    setIsOpen(false);
+  };
+
+  return (
+    <div className={`hamburger-menu ${isOpen ? 'open' : ''}`}>
+      <input id="toggle" type="checkbox" checked={isOpen} onChange={toggleMenu}></input>
+      <label htmlFor="toggle" className="hamburger">
+        <div className="bar1"></div>
+        <div className="bar2"></div>
+        <div className="bar3"></div>
+      </label>
+      <div className="nav" onClick={closeMenu}>
+        <div className="nav-wrapper">
+          <nav>
+            <Link to="/admin/home" className={location.pathname === '/admin/home' ? 'active' : ''}>Home</Link>
+            <Link to="/admin/about" className={location.pathname === '/admin/about' ? 'active' : ''}>About</Link>
+            <Link to="/admin/manage" className={location.pathname === '/admin/manage' ? 'active' : ''}>Manage Stars</Link>
+            <Link to="/admin/createAccount" className={location.pathname === '/admin/createAccount' ? 'active' : ''}>Create Account</Link>
+            <Link to="/admin/profile" className={location.pathname === '/admin/profile' ? 'active' : ''}>Add/Remove Tags</Link>
+          </nav>
+        </div>
+      </div>
+    </div>
+  );
+};
+
+export default HamburgerMenu;

+ 183 - 0
PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/src/home.js

@@ -0,0 +1,183 @@
+import React, { useState } from 'react';
+import './styles.css';
+import cornerImage from './images/Ninjas in Costumes.png';
+import './loader.css'
+import { transition } from './loader.js'
+
+const Home = () => {
+  const [transitionDone, setTransitionDone] = useState(false);
+  const [welcomeDone, setWelcomeDone] = useState(false);
+
+  const handleTransition = () => {
+    // Reset states before starting the transition
+    setTransitionDone(false);
+    setWelcomeDone(false);
+
+    // Start the transition after a short delay
+    setTimeout(() => {
+      setTransitionDone(true);
+      transition();
+    }, 100);
+
+    // Set welcomeDone to true after the first animation completes
+    setTimeout(() => {
+      setWelcomeDone(true);
+    }, 2200);
+
+    // Reset states and text after the second animation completes
+    setTimeout(() => {
+      setTransitionDone(false);
+      transition();
+    }, 13200); 
+  };
+  
+
+  return (
+    <div className="home-container">
+      {/* Overlay elements for animation */}
+      <div className="overlay top"></div>
+      <div className="overlay bottom"></div>
+
+      {/* Loader animation */}
+      <div className="loader">
+        <div className="bar1"></div>
+        <div className="bar2"></div>
+        <div className="bar3"></div>
+        <div className="bar4"></div>
+        <div className="bar5"></div>
+        <div className="bar6"></div>
+      </div>
+
+      <h1 className={`custom-font center-text`}>
+        {!transitionDone ? (
+          <div className="waviy">
+            <span style={{ '--i': 1 }}>W</span>
+            <span style={{ '--i': 2 }}>e</span>
+            <span style={{ '--i': 3 }}>l</span>
+            <span style={{ '--i': 4 }}>c</span>
+            <span style={{ '--i': 5 }}>o</span>
+            <span style={{ '--i': 6 }}>m</span>
+            <span style={{ '--i': 7 }}>e</span>
+            <span style={{ '--i': 8 }}>&nbsp;</span>
+            <span style={{ '--i': 9 }}>N</span>
+            <span style={{ '--i': 10 }}>i</span>
+            <span style={{ '--i': 11 }}>n</span>
+            <span style={{ '--i': 12 }}>j</span>
+            <span style={{ '--i': 13 }}>a</span>
+            <span style={{ '--i': 14 }}>s</span>
+            <span style={{ '--i': 15 }}>!</span>
+            <br />
+            <br />
+            <span style={{ '--i': 16 }}>P</span>
+            <span style={{ '--i': 17 }}>l</span>
+            <span style={{ '--i': 18 }}>e</span>
+            <span style={{ '--i': 19 }}>a</span>
+            <span style={{ '--i': 20 }}>s</span>
+            <span style={{ '--i': 21 }}>e</span>
+            <span style={{ '--i': 22 }}>&nbsp;</span>
+            <span style={{ '--i': 23 }}>s</span>
+            <span style={{ '--i': 24 }}>c</span>
+            <span style={{ '--i': 25 }}>a</span>
+            <span style={{ '--i': 26 }}>n</span>
+            <span style={{ '--i': 27 }}>&nbsp;</span>
+            <span style={{ '--i': 28 }}>y</span>
+            <span style={{ '--i': 29 }}>o</span>
+            <span style={{ '--i': 30 }}>u</span>
+            <span style={{ '--i': 31 }}>r</span>
+            <span style={{ '--i': 32 }}>&nbsp;</span>
+            <span style={{ '--i': 33 }}>w</span>
+            <span style={{ '--i': 34 }}>r</span>
+            <span style={{ '--i': 35 }}>i</span>
+            <span style={{ '--i': 36 }}>s</span>
+            <span style={{ '--i': 37 }}>t</span>
+            <span style={{ '--i': 38 }}>&nbsp;</span>
+            <span style={{ '--i': 39 }}>b</span>
+            <span style={{ '--i': 40 }}>a</span>
+            <span style={{ '--i': 41 }}>n</span>
+            <span style={{ '--i': 42 }}>d</span>
+            <span style={{ '--i': 43 }}>s</span>
+            <br />
+
+            <span style={{ '--i': 44 }}>t</span>
+            <span style={{ '--i': 45 }}>o</span>
+            <span style={{ '--i': 46 }}>&nbsp;</span>
+            <span style={{ '--i': 47 }}>s</span>
+            <span style={{ '--i': 48 }}>e</span>
+            <span style={{ '--i': 49 }}>e</span>
+            <span style={{ '--i': 50 }}>&nbsp;</span>
+            <span style={{ '--i': 51 }}>y</span>
+            <span style={{ '--i': 52 }}>o</span>
+            <span style={{ '--i': 53 }}>u</span>
+            <span style={{ '--i': 54 }}>r</span>
+            <span style={{ '--i': 55 }}>&nbsp;</span>
+            <span style={{ '--i': 56 }}>s</span>
+            <span style={{ '--i': 57 }}>t</span>
+            <span style={{ '--i': 58 }}>a</span>
+            <span style={{ '--i': 59 }}>r</span>
+            <span style={{ '--i': 60 }}>s</span>
+          </div>
+        ) : (
+          welcomeDone ? (
+            <div className="waviy">
+              <span style={{ '--i': 1 }}>C</span>
+              <span style={{ '--i': 2 }}>o</span>
+              <span style={{ '--i': 3 }}>n</span>
+              <span style={{ '--i': 4 }}>g</span>
+              <span style={{ '--i': 5 }}>r</span>
+              <span style={{ '--i': 6 }}>a</span>
+              <span style={{ '--i': 7 }}>t</span>
+              <span style={{ '--i': 8 }}>u</span>
+              <span style={{ '--i': 9 }}>l</span>
+              <span style={{ '--i': 10 }}>a</span>
+              <span style={{ '--i': 11 }}>t</span>
+              <span style={{ '--i': 12 }}>i</span>
+              <span style={{ '--i': 13 }}>o</span>
+              <span style={{ '--i': 14 }}>n</span>
+              <span style={{ '--i': 15 }}>s</span>
+              <span style={{ '--i': 16 }}>!</span>
+              <span style={{ '--i': 17 }}>&nbsp;</span>
+              <span style={{ '--i': 18 }}>Y</span>
+              <span style={{ '--i': 19 }}>o</span>
+              <span style={{ '--i': 20 }}>u</span>
+              <span style={{ '--i': 21 }}>&nbsp;</span>
+              <span style={{ '--i': 22 }}>H</span>
+              <span style={{ '--i': 23 }}>a</span>
+              <span style={{ '--i': 24 }}>v</span>
+              <span style={{ '--i': 25 }}>e</span>
+              <span style={{ '--i': 26 }}>&nbsp;</span>
+              <span style={{ '--i': 27 }}>E</span>
+              <span style={{ '--i': 28 }}>a</span>
+              <span style={{ '--i': 29 }}>r</span>
+              <span style={{ '--i': 30 }}>n</span>
+              <span style={{ '--i': 31 }}>e</span>
+              <span style={{ '--i': 32 }}>d</span>
+              <br />
+              <span style={{ '--i': 33 }}>X</span>
+              <br />
+              <span style={{ '--i': 34 }}>A</span>
+              <span style={{ '--i': 35 }}>m</span>
+              <span style={{ '--i': 36 }}>o</span>
+              <span style={{ '--i': 37 }}>u</span>
+              <span style={{ '--i': 38 }}>n</span>
+              <span style={{ '--i': 39 }}>t</span>
+              <span style={{ '--i': 40 }}>&nbsp;</span>
+              <span style={{ '--i': 41 }}>o</span>
+              <span style={{ '--i': 42 }}>f</span>
+              <span style={{ '--i': 43 }}>&nbsp;</span>
+              <span style={{ '--i': 44 }}>S</span>
+              <span style={{ '--i': 45 }}>t</span>
+              <span style={{ '--i': 46 }}>a</span>
+              <span style={{ '--i': 47 }}>r</span>
+              <span style={{ '--i': 48 }}>s</span>
+            </div>
+          ) : null 
+          )}
+      </h1>
+      <button className="btn" onClick={handleTransition}>Begin Transition</button>
+      <img src={cornerImage} alt=';' className="bottom-right-image" />
+    </div>
+
+  );
+};
+
+export default Home;

BIN
PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/src/images/Ninjas in Costumes.png


BIN
PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/src/images/logo.png


BIN
PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/src/images/vines.jpg


BIN
PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/src/images/vinesV2.png


BIN
PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/src/images/welcome.jpg


+ 13 - 0
PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/src/index.css

@@ -0,0 +1,13 @@
+body {
+  margin: 0;
+  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',
+    'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',
+    sans-serif;
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
+}
+
+code {
+  font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New',
+    monospace;
+}

+ 17 - 0
PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/src/index.js

@@ -0,0 +1,17 @@
+import React from 'react';
+import ReactDOM from 'react-dom/client';
+import './index.css';
+import App from './App';
+import reportWebVitals from './reportWebVitals';
+
+const root = ReactDOM.createRoot(document.getElementById('root'));
+root.render(
+  <React.StrictMode>
+    <App />
+  </React.StrictMode>
+);
+
+// If you want to start measuring performance in your app, pass a function
+// to log results (for example: reportWebVitals(console.log))
+// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals
+reportWebVitals();

+ 26 - 0
PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/src/inputBlocks.css

@@ -0,0 +1,26 @@
+.input-block {
+    background: #ffffff10; 
+    border: 2px solid #fff;
+    border-radius: 10px;
+    color: #fff;
+    font-size: 16px; 
+    margin-bottom: 25px;
+    padding: 12px;
+    width: 100%;
+  }
+  
+  .input-block:focus {
+    outline: none;
+    border-color: #6422b5;
+    background: #ffffff20; 
+  }
+  
+  .input-label {
+    color: #fff;
+    display: block;
+    margin-bottom: 10px;
+    font-size: 16px;
+  }
+  
+
+  

+ 87 - 0
PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/src/loader.css

@@ -0,0 +1,87 @@
+@keyframes delay {
+    0%, 40%, 100% { 
+      transform: scaleY(0.05);
+    }
+    20% { 
+      transform: scaleY(1.0);
+    }
+  }
+  
+  .overlay {
+    position: fixed;
+    height: 50vh;
+    width: 100%;
+    left: 0;
+    background: #1c2020;
+    z-index: 9999;
+  }
+  
+  .overlay.top {
+    top: 0;
+    transform: translateY(-100%);
+  }
+  
+  .overlay.bottom {
+    bottom: 0;
+    transform: translateY(100%);
+  }
+  
+  
+  .loader {
+    display: flex;
+    justify-content: center; 
+    align-items: center;
+    margin: 0 auto;
+    width: 60px;
+    height: 50px;
+    text-align: center;
+    font-size: 10px;
+    position: absolute;
+    top: 50%;
+    left: 50%;
+    transform: translate(-50%, -50%);
+    opacity: 0; 
+    z-index: 9999;
+  }
+  
+  .loader > div {
+    height: 100%;
+    width: 8px;
+    margin: 0 2px;
+    animation: delay 0.8s infinite ease-in-out;
+    z-index: 9999;
+  }
+  
+  .loader .bar1 { background-color: #754fa0; }
+  .loader .bar2 { background-color: #09b7bf; animation-delay: -0.7s; }
+  .loader .bar3 { background-color: #90d36b; animation-delay: -0.6s; }
+  .loader .bar4 { background-color: #f2d40d; animation-delay: -0.5s; }
+  .loader .bar5 { background-color: #fcb12b; animation-delay: -0.4s; }
+  .loader .bar6 { background-color: #ed1b72; animation-delay: -0.3s; }
+
+  .btn {
+    position: fixed; 
+    bottom: 20px; 
+    left: 45%;
+    padding: 0.6em 1.2em;
+    border-radius: 50em;
+    background-color: #1c2020;
+    max-width: 200px;
+    width: auto;
+    color: #ffffff;
+    font-weight: bold;
+    font-size: 0.8rem;
+    letter-spacing: 1px;
+    text-transform: uppercase;
+    text-decoration: none;
+    border: none;
+    cursor: pointer;
+    transition: background-color 0.3s ease;
+    z-index: 9998; 
+  }
+  
+  .btn:hover {
+    background-color: #333; 
+  }
+  
+  

+ 29 - 0
PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/src/loader.js

@@ -0,0 +1,29 @@
+import $ from 'jquery';
+import { gsap } from 'gsap';
+import { CSSRulePlugin } from 'gsap/CSSRulePlugin';
+
+gsap.registerPlugin(CSSRulePlugin);
+
+export function transition() {
+    const overlayTop = document.querySelector('.overlay.top');
+    const overlayBottom = document.querySelector('.overlay.bottom');
+    const loader = document.querySelector('.loader');
+
+    // Reset the initial state
+    gsap.set([overlayTop, overlayBottom, loader], { clearProps: 'all', autoAlpha: 1 });
+  
+    const tl = gsap.timeline({
+      onComplete: () => {
+        // Hide the overlay and loader elements after the animation completes
+        gsap.set([overlayTop, overlayBottom, loader], { autoAlpha: 0 });
+      }
+    });
+  
+    tl.to(overlayTop, {y: 0, duration: 0.2, ease: 'power2.out'}, 'close')
+      .to(overlayBottom, {y: 0, duration: 0.2, ease: 'power2.out'}, 'close')
+      .to(loader, {opacity: 1, duration: 0.2}, 'close')
+      .to({}, {duration: 1.5})
+      .to(overlayTop, {y: '-100%', duration: 0.2, ease: 'power2.out'}, '+=1.5', 'open')
+      .to(overlayBottom, {y: '100%', duration: 0.2, ease: 'power2.out'}, '-=0.2', 'open')
+      .to(loader, {opacity: 0, duration: 0.2}, '-=0.2');
+  }

+ 143 - 0
PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/src/profile.css

@@ -0,0 +1,143 @@
+.name-input-container {
+  margin-bottom: 20px; 
+}
+
+.name-input-container .form-group {
+  margin-top: 125px;
+  margin-bottom: 10px; 
+}
+
+.name-input-container .form-group:last-child {
+  margin-bottom: 0; 
+  
+}
+
+.name-input-container label {
+  display: block;
+  margin-bottom: 5px;
+}
+
+.button-group {
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+  gap: 50px;
+}
+
+.tag-buttons {
+  margin-top: 25px;
+  display: flex;
+  gap: 50px;
+  margin-right: 200px;
+}
+
+.add-tag-button,
+.remove-tag-button {
+  padding: 12px;
+  border: none;
+  border-radius: 10px;
+  background-color: #6f73e3;
+  color: #fff;
+  cursor: pointer;
+  font-size: 16px;
+  width: 150px;
+  transition: transform 0.2s ease; 
+}
+
+
+.add-tag-button:hover,
+.remove-tag-button:hover {
+  background-color: #6422b5;
+  transform: scale(1.05); 
+}
+
+.confirmation-container {
+  display: none;
+}
+
+.button-group.show-confirmation .confirmation-container {
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+  gap: 10px;
+  margin-right: 200px;
+}
+
+.confirmation-container p {
+  margin-bottom: 10px;
+  color: #fff; 
+  font-size: 18px
+}
+
+.confirmation-buttons {
+  display: flex;
+  justify-content: center;
+  gap: 35px;
+}
+
+.confirm-yes-button,
+.confirm-no-button {
+  padding: 14px;
+  border: none;
+  border-radius: 10px;
+  background-color: #6f73e3;
+  color: #fff;
+  cursor: pointer;
+  font-size: 16px;
+  transition: background-color 0.3s ease;
+  max-width: 100px;
+}
+
+.confirm-yes-button:hover,
+.confirm-no-button:hover {
+  background-color: #6422b5;
+  transform: scale(1.05); 
+}
+
+.heading-container {
+  width: 500%;
+}
+
+.heading-container h2 {
+  margin-top: 100px;
+  transform: translateX(85%);
+  color: #ffffff;
+  text-align: center;
+  font-size: 30px;
+  border-bottom: 2px solid #fff;
+  width: 175%;
+}
+.custom-font-admin {
+  padding-left: 160px;
+}
+
+.scan-message-container {
+  margin-top: 20px; 
+  margin-right: 190px;
+}
+
+.scan-message-container p {
+  color: #ffffff;
+  font-size: 25px;
+}
+
+.scan-message-container .cancel-scan-button {
+  padding: 12px 16px;
+  margin-top: 10px;
+  border: none;
+  border-radius: 10px;
+  background-color: #6f73e3;
+  color: #fff;
+  cursor: pointer;
+  font-size: 16px;
+  max-width: 100px;
+}
+
+.scan-message-container .cancel-scan-button:hover {
+  background-color: #6422b5;
+  transform: scale(1.05); 
+}
+
+.scan-cancel {
+  margin-left: 80px;
+}

+ 124 - 0
PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/src/profile.js

@@ -0,0 +1,124 @@
+import React, { useState } from "react";
+import "./styles.css";
+import "./profile.css";
+
+const Profile = () => {
+  const [showConfirm, setShowConfirm] = useState(false);
+  const [showScanMessage, setShowScanMessage] = useState(false); 
+  const [buttonActive, setButtonActive] = useState(false); 
+
+  const handleRemoveTagClick = () => {
+    if (!buttonActive) {
+      setShowConfirm(true);
+      setButtonActive(true);
+    }
+  };
+
+  const handleAddTagClick = () => {
+    if (!buttonActive) {
+      setShowScanMessage(true);
+      setButtonActive(true);
+    }
+  };
+
+  const handleCancelScan = () => {
+    setShowScanMessage(false);
+    setButtonActive(false);
+  };
+
+  const handleConfirmYes = () => {
+    setShowConfirm(false);
+    setButtonActive(false);
+  };
+
+  const handleConfirmNo = () => {
+    setShowConfirm(false);
+    setButtonActive(false);
+  };
+
+  return (
+    <div className="home-container">
+      <h1 className="custom-font-admin center-text">Profile Page</h1>
+      <div className="admin-container">
+        <div className="heading-container">
+          <h2>Add or Remove Wristbands</h2>
+        </div>
+        <div className="form-container">
+          <div className="name-input-container">
+            <div className="form-group">
+              <label htmlFor="firstName">First Name:</label>
+              <input
+                type="text"
+                id="firstName"
+                name="firstName"
+                placeholder="Enter student's first name"
+                required
+              />
+            </div>
+            <div className="form-group">
+              <label htmlFor="lastName">Last Name:</label>
+              <input
+                type="text"
+                id="lastName"
+                name="lastName"
+                placeholder="Enter student's last name"
+                required
+              />
+            </div>
+          </div>
+          <div
+            className={`button-group ${showConfirm ? "show-confirmation" : ""}`}
+          >
+            <div className="tag-buttons">
+              <button
+                className={`add-tag-button ${buttonActive ? "disabled" : ""}`}
+                onClick={handleAddTagClick}
+                disabled={buttonActive}
+              >
+                Add Tag
+              </button>
+              <button
+                className={`remove-tag-button ${buttonActive ? "disabled" : ""}`}
+                onClick={handleRemoveTagClick}
+                disabled={buttonActive}
+              >
+                Remove Tag
+              </button>
+            </div>
+            {showConfirm && (
+              <div className="confirmation-container">
+                <p>Are you sure you want to remove tag?</p>
+                <div className="confirmation-buttons">
+                  <button
+                    className="confirm-yes-button"
+                    onClick={handleConfirmYes}
+                  >
+                    Yes
+                  </button>
+                  <button
+                    className="confirm-no-button"
+                    onClick={handleConfirmNo}
+                  >
+                    No
+                  </button>
+                </div>
+              </div>
+            )}
+            {showScanMessage && (
+              <div className="scan-message-container">
+                <p>Ready to scan wristband</p>
+                <div className="scan-cancel">
+                  <button className="cancel-scan-button" onClick={handleCancelScan}>
+                    Cancel
+                  </button>
+                </div>
+              </div>
+            )}
+          </div>
+        </div>
+      </div>
+    </div>
+  );
+};
+
+export default Profile;

+ 13 - 0
PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/src/reportWebVitals.js

@@ -0,0 +1,13 @@
+const reportWebVitals = onPerfEntry => {
+  if (onPerfEntry && onPerfEntry instanceof Function) {
+    import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {
+      getCLS(onPerfEntry);
+      getFID(onPerfEntry);
+      getFCP(onPerfEntry);
+      getLCP(onPerfEntry);
+      getTTFB(onPerfEntry);
+    });
+  }
+};
+
+export default reportWebVitals;

+ 5 - 0
PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/src/setupTests.js

@@ -0,0 +1,5 @@
+// jest-dom adds custom jest matchers for asserting on DOM nodes.
+// allows you to do things like:
+// expect(element).toHaveTextContent(/react/i)
+// learn more: https://github.com/testing-library/jest-dom
+import '@testing-library/jest-dom';

+ 94 - 0
PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/src/styles.css

@@ -0,0 +1,94 @@
+@keyframes flip {
+  0%, 80% {
+    transform: rotateY(360deg) 
+  }
+}
+
+.waviy {
+  position: relative;
+  display: inline-block;
+}
+
+.waviy span {
+  position: relative;
+  display: inline-block;
+  font-size: 55px;
+  color: #fff;
+  text-transform: uppercase;
+  animation: flip 4s infinite;
+  animation-delay: calc(.03s * var(--i));
+}
+
+
+@font-face {
+    font-family: 'AzoSansTest-Black';
+    src: url('../fonts/Test-AzoCollection/Test-AzoSans/AzoSansTest-Thin.otf') format('opentype');
+    font-weight: normal;
+    font-style: normal;
+  }
+
+  .custom-font {
+    font-family: 'AzoSansTest-Black', sans-serif; 
+    font-size: 6em;
+    margin: 10px 0;
+    color: white;
+  }
+  
+  .custom-font-admin {
+    font-family: 'AzoSansTest-Black', sans-serif; 
+    font-size: 3em;
+    color: white;
+    text-align: left;
+    margin-left: -1150px;
+    z-index:100;
+  }
+  
+  .home-container {
+    display: flex;
+    flex-direction: column;
+    justify-content: center;
+    height: 100vh;
+    background: #090d00;
+    z-index: 0;
+  }
+  
+  .admin-container {
+    position: fixed;
+    right: 0; 
+    top: 0; 
+    width: 50%; 
+    height: 100%; 
+    background: rgba(226, 8, 255, 0.15); 
+    backdrop-filter: blur(10px); 
+    display: flex;
+    flex-direction: column;
+    align-items: center;
+    justify-content: center;
+    box-shadow: -5px 0 15px rgba(0, 0, 0, 0.1); 
+    border-left: 1px solid rgba(255, 255, 255, 0.3); 
+    z-index:2;
+  }
+  
+   .admin-container h1 {
+    text-align: left;
+    margin: 20px; 
+    color: white;
+  }
+  
+  .center-text {
+    text-align: center;
+    z-index:10;
+  }
+
+  .bottom-right-image {
+    position: fixed;
+    bottom: 0px;
+    right: -39px;
+    width: 1000px; 
+    height: auto; 
+    z-index:20
+  }
+
+
+
+  

+ 17 - 0
PrizeRewardsSystem-FrontEnd-Front-End/code-ninjas-react-server/src/textBlocks.css

@@ -0,0 +1,17 @@
+.text-block {
+    width: calc(100% - 20px);
+    padding: 12px; 
+    border: 2px solid #fff;
+    border-radius: 10px;
+    background-color: transparent;
+    color: #fff;
+    font-size: 16px; 
+    transition: border-color 0.3s ease;
+    height: auto; 
+    resize: vertical; 
+  }
+  
+  .text-block:focus {
+    outline: none;
+    border-color: #6422b5;
+  }