Compare commits

...

No commits in common. "main" and "nextjs" have entirely different histories.
main ... nextjs

120 changed files with 2928 additions and 44291 deletions

3
.eslintrc.json Normal file
View File

@ -0,0 +1,3 @@
{
"extends": "next/core-web-vitals"
}

View File

@ -1,11 +0,0 @@
- name: Build and deploy the website
uses: nekiro/ssh-job@main
with:
host: ${{ secrets.HOST }}
password: ${{ secrets.PASSWORD }}
user: ${{ secrets.USER }}
command: |
cd /var/www/ITR-Website
git pull
npm run build
service nginx restart

37
.gitignore vendored
View File

@ -1 +1,36 @@
node_modules # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
# dependencies
/node_modules
/.pnp
.pnp.js
.yarn/install-state.gz
# testing
/coverage
# next.js
/.next/
/out/
# production
/build
# misc
.DS_Store
*.pem
# debug
npm-debug.log*
yarn-debug.log*
yarn-error.log*
# local env files
.env*.local
# vercel
.vercel
# typescript
*.tsbuildinfo
next-env.d.ts

36
README.md Normal file
View File

@ -0,0 +1,36 @@
This is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app).
## Getting Started
First, run the development server:
```bash
npm run dev
# or
yarn dev
# or
pnpm dev
# or
bun dev
```
Open [http://localhost:3000](http://localhost:3000) with your browser to see the result.
You can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file.
This project uses [`next/font`](https://nextjs.org/docs/basic-features/font-optimization) to automatically optimize and load Inter, a custom Google Font.
## Learn More
To learn more about Next.js, take a look at the following resources:
- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API.
- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial.
You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions are welcome!
## Deploy on Vercel
The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js.
Check out our [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details.

View File

@ -1,26 +0,0 @@
{
"files": {
"main.css": "/static/css/main.9f3cb76e.css",
"main.js": "/static/js/main.be418809.js",
"static/js/787.d8522671.chunk.js": "/static/js/787.d8522671.chunk.js",
"static/media/video.mp4": "/static/media/video.5e8658c8eba15fe43d62.mp4",
"static/media/fenrir.png": "/static/media/fenrir.c36a65b36a574bef476e.png",
"static/media/xperror.png": "/static/media/xperror.cf90407f62ede1a194db.png",
"static/media/error.jpg": "/static/media/error.627d84472392a479d18d.jpg",
"static/media/LeagueSpartan-ExtraBold.ttf": "/static/media/LeagueSpartan-ExtraBold.313960b9ece03f269643.ttf",
"static/media/LeagueSpartan-Medium.ttf": "/static/media/LeagueSpartan-Medium.e855e0cd01fed78be96f.ttf",
"static/media/github.svg": "/static/media/github.3367ea62e04dfe3c6fad6a88f90ee1ec.svg",
"static/media/facebook.svg": "/static/media/facebook.c524426ad554fc45940d657e219663c9.svg",
"static/media/discord.svg": "/static/media/discord.cec9e1a200bfbe88c1d3a787b0ede95f.svg",
"static/media/instagram.svg": "/static/media/instagram.eca0902ae08f6ebdf1f23da142658f92.svg",
"static/media/twitter.svg": "/static/media/twitter.0ad7f5518b1249fb5ec229971e13807f.svg",
"index.html": "/index.html",
"main.9f3cb76e.css.map": "/static/css/main.9f3cb76e.css.map",
"main.be418809.js.map": "/static/js/main.be418809.js.map",
"787.d8522671.chunk.js.map": "/static/js/787.d8522671.chunk.js.map"
},
"entrypoints": [
"static/css/main.9f3cb76e.css",
"static/js/main.be418809.js"
]
}

View File

@ -1 +0,0 @@
<!doctype html><html lang="en"><head><meta charset="utf-8"/><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="/logo192.png"/><link rel="manifest" href="/manifest.json"/><title>ITR - Home</title><script defer="defer" src="/static/js/main.be418809.js"></script><link href="/static/css/main.9f3cb76e.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div></body></html>

View File

@ -1,8 +0,0 @@
{
"short_name": "ITR",
"name": "ITR - Home",
"start_url": ".",
"display": "standalone",
"theme_color": "#000000",
"background_color": "#ffffff"
}

View File

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

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,2 +0,0 @@
"use strict";(self.webpackChunkitr=self.webpackChunkitr||[]).push([[787],{787:function(e,t,n){n.r(t),n.d(t,{getCLS:function(){return y},getFCP:function(){return g},getFID:function(){return C},getLCP:function(){return P},getTTFB:function(){return D}});var i,r,a,o,u=function(e,t){return{name:e,value:void 0===t?-1:t,delta:0,entries:[],id:"v2-".concat(Date.now(),"-").concat(Math.floor(8999999999999*Math.random())+1e12)}},c=function(e,t){try{if(PerformanceObserver.supportedEntryTypes.includes(e)){if("first-input"===e&&!("PerformanceEventTiming"in self))return;var n=new PerformanceObserver((function(e){return e.getEntries().map(t)}));return n.observe({type:e,buffered:!0}),n}}catch(e){}},f=function(e,t){var n=function n(i){"pagehide"!==i.type&&"hidden"!==document.visibilityState||(e(i),t&&(removeEventListener("visibilitychange",n,!0),removeEventListener("pagehide",n,!0)))};addEventListener("visibilitychange",n,!0),addEventListener("pagehide",n,!0)},s=function(e){addEventListener("pageshow",(function(t){t.persisted&&e(t)}),!0)},m=function(e,t,n){var i;return function(r){t.value>=0&&(r||n)&&(t.delta=t.value-(i||0),(t.delta||void 0===i)&&(i=t.value,e(t)))}},v=-1,p=function(){return"hidden"===document.visibilityState?0:1/0},d=function(){f((function(e){var t=e.timeStamp;v=t}),!0)},l=function(){return v<0&&(v=p(),d(),s((function(){setTimeout((function(){v=p(),d()}),0)}))),{get firstHiddenTime(){return v}}},g=function(e,t){var n,i=l(),r=u("FCP"),a=function(e){"first-contentful-paint"===e.name&&(f&&f.disconnect(),e.startTime<i.firstHiddenTime&&(r.value=e.startTime,r.entries.push(e),n(!0)))},o=window.performance&&performance.getEntriesByName&&performance.getEntriesByName("first-contentful-paint")[0],f=o?null:c("paint",a);(o||f)&&(n=m(e,r,t),o&&a(o),s((function(i){r=u("FCP"),n=m(e,r,t),requestAnimationFrame((function(){requestAnimationFrame((function(){r.value=performance.now()-i.timeStamp,n(!0)}))}))})))},h=!1,T=-1,y=function(e,t){h||(g((function(e){T=e.value})),h=!0);var n,i=function(t){T>-1&&e(t)},r=u("CLS",0),a=0,o=[],v=function(e){if(!e.hadRecentInput){var t=o[0],i=o[o.length-1];a&&e.startTime-i.startTime<1e3&&e.startTime-t.startTime<5e3?(a+=e.value,o.push(e)):(a=e.value,o=[e]),a>r.value&&(r.value=a,r.entries=o,n())}},p=c("layout-shift",v);p&&(n=m(i,r,t),f((function(){p.takeRecords().map(v),n(!0)})),s((function(){a=0,T=-1,r=u("CLS",0),n=m(i,r,t)})))},E={passive:!0,capture:!0},w=new Date,L=function(e,t){i||(i=t,r=e,a=new Date,F(removeEventListener),S())},S=function(){if(r>=0&&r<a-w){var e={entryType:"first-input",name:i.type,target:i.target,cancelable:i.cancelable,startTime:i.timeStamp,processingStart:i.timeStamp+r};o.forEach((function(t){t(e)})),o=[]}},b=function(e){if(e.cancelable){var t=(e.timeStamp>1e12?new Date:performance.now())-e.timeStamp;"pointerdown"==e.type?function(e,t){var n=function(){L(e,t),r()},i=function(){r()},r=function(){removeEventListener("pointerup",n,E),removeEventListener("pointercancel",i,E)};addEventListener("pointerup",n,E),addEventListener("pointercancel",i,E)}(t,e):L(t,e)}},F=function(e){["mousedown","keydown","touchstart","pointerdown"].forEach((function(t){return e(t,b,E)}))},C=function(e,t){var n,a=l(),v=u("FID"),p=function(e){e.startTime<a.firstHiddenTime&&(v.value=e.processingStart-e.startTime,v.entries.push(e),n(!0))},d=c("first-input",p);n=m(e,v,t),d&&f((function(){d.takeRecords().map(p),d.disconnect()}),!0),d&&s((function(){var a;v=u("FID"),n=m(e,v,t),o=[],r=-1,i=null,F(addEventListener),a=p,o.push(a),S()}))},k={},P=function(e,t){var n,i=l(),r=u("LCP"),a=function(e){var t=e.startTime;t<i.firstHiddenTime&&(r.value=t,r.entries.push(e),n())},o=c("largest-contentful-paint",a);if(o){n=m(e,r,t);var v=function(){k[r.id]||(o.takeRecords().map(a),o.disconnect(),k[r.id]=!0,n(!0))};["keydown","click"].forEach((function(e){addEventListener(e,v,{once:!0,capture:!0})})),f(v,!0),s((function(i){r=u("LCP"),n=m(e,r,t),requestAnimationFrame((function(){requestAnimationFrame((function(){r.value=performance.now()-i.timeStamp,k[r.id]=!0,n(!0)}))}))}))}},D=function(e){var t,n=u("TTFB");t=function(){try{var t=performance.getEntriesByType("navigation")[0]||function(){var e=performance.timing,t={entryType:"navigation",startTime:0};for(var n in e)"navigationStart"!==n&&"toJSON"!==n&&(t[n]=Math.max(e[n]-e.navigationStart,0));return t}();if(n.value=n.delta=t.responseStart,n.value<0||n.value>performance.now())return;n.entries=[t],e(n)}catch(e){}},"complete"===document.readyState?setTimeout(t,0):addEventListener("load",(function(){return setTimeout(t,0)}))}}}]);
//# sourceMappingURL=787.d8522671.chunk.js.map

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,74 +0,0 @@
/*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */
/**
* @license React
* react-dom.production.min.js
*
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
/**
* @license React
* react-jsx-runtime.production.min.js
*
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
/**
* @license React
* react.production.min.js
*
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
/**
* @license React
* scheduler.production.min.js
*
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
/**
* @remix-run/router v1.3.2
*
* Copyright (c) Remix Software Inc.
*
* This source code is licensed under the MIT license found in the
* LICENSE.md file in the root directory of this source tree.
*
* @license MIT
*/
/**
* React Router DOM v6.8.1
*
* Copyright (c) Remix Software Inc.
*
* This source code is licensed under the MIT license found in the
* LICENSE.md file in the root directory of this source tree.
*
* @license MIT
*/
/**
* React Router v6.8.1
*
* Copyright (c) Remix Software Inc.
*
* This source code is licensed under the MIT license found in the
* LICENSE.md file in the root directory of this source tree.
*
* @license MIT
*/

File diff suppressed because one or more lines are too long

View File

@ -1,28 +0,0 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
width="100%" height="100%" viewBox="0 0 800.000000 800.000000"
preserveAspectRatio="xMidYMid meet">
<g transform="translate(0.000000,800.000000) scale(0.100000,-0.100000)"
fill="#000000" stroke="none">
<path
d="M3000 6195 c-309 -68 -597 -158 -877 -275 l-152 -63 -42 -66 c-366
-568 -599 -1105 -728 -1681 -79 -351 -109 -599 -118 -962 -6 -252 10 -612 28
-634 16 -20 267 -187 403 -269 193 -116 468 -252 674 -334 215 -85 393 -144
401 -133 92 127 297 460 304 495 1 4 -34 23 -78 41 -197 81 -406 190 -404 210
0 6 27 30 59 54 l59 43 42 -22 c54 -27 269 -109 391 -148 585 -187 1258 -211
1855 -66 172 42 362 105 542 179 l133 55 57 -45 c31 -26 57 -49 59 -53 3 -10
-268 -148 -394 -201 l-102 -42 66 -117 c68 -122 223 -361 245 -379 10 -8 43
-1 127 27 306 103 684 275 935 426 97 59 361 232 407 268 28 22 41 256 35 616
-5 318 -17 458 -62 726 -110 658 -364 1301 -747 1891 l-78 121 -137 58 c-311
131 -606 221 -947 291 -113 23 -119 23 -132 7 -7 -10 -44 -82 -81 -161 -58
-122 -71 -142 -88 -138 -186 44 -849 57 -1130 23 -82 -10 -158 -19 -168 -20
-14 -2 -36 33 -96 153 -42 85 -84 156 -92 157 -7 1 -84 -14 -169 -32z m155
-1839 c180 -48 338 -216 390 -417 81 -307 -103 -662 -380 -734 -128 -33 -284
-11 -385 53 -192 122 -306 375 -271 601 29 193 113 333 260 434 102 70 262 96
386 63z m1968 -6 c163 -51 297 -191 359 -375 19 -59 23 -89 22 -195 0 -107 -4
-136 -27 -205 -61 -184 -203 -327 -370 -371 -66 -18 -187 -18 -253 0 -179 47
-331 215 -384 422 -63 246 35 522 235 659 120 83 280 108 418 65z" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 57 KiB

View File

@ -1,30 +0,0 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
width="100%" height="100%" viewBox="0 0 800.000000 800.000000"
preserveAspectRatio="xMidYMid meet">
<g transform="translate(0.000000,800.000000) scale(0.100000,-0.100000)"
fill="#000000" stroke="none">
<path
d="M1077 7210 c-117 -20 -224 -107 -269 -218 l-23 -57 0 -2935 0 -2935
24 -60 c33 -81 115 -163 196 -196 l60 -24 1573 -3 1572 -2 0 1242 0 1243 -420
-3 -420 -2 0 500 0 500 419 -2 419 -3 5 460 c5 495 9 537 63 715 15 47 27 90
28 95 1 6 10 24 19 41 9 17 13 34 10 38 -4 3 -1 6 6 6 7 0 9 5 6 10 -3 6 -1
10 5 10 6 0 8 5 5 10 -3 6 -1 10 5 10 6 0 8 5 5 10 -3 6 -1 10 6 10 7 0 10 3
6 6 -3 3 3 15 13 27 11 11 17 23 15 27 -3 5 2 11 11 14 8 3 13 10 10 15 -3 5
1 12 10 15 9 4 14 9 11 12 -3 3 6 17 21 31 15 13 22 22 15 19 -6 -4 25 30 70
76 45 45 86 82 90 82 5 1 14 9 21 18 7 10 16 15 19 11 4 -3 9 2 13 11 3 9 12
16 20 16 8 0 14 5 14 10 0 6 7 10 15 10 8 0 15 5 15 11 0 5 4 7 10 4 6 -3 10
-1 10 4 0 6 3 10 8 9 4 -1 27 9 52 22 25 13 50 25 55 26 6 1 42 14 80 29 39
15 77 28 85 30 8 2 51 10 95 20 149 31 293 37 575 25 146 -6 308 -15 360 -20
52 -5 105 -10 118 -10 l22 0 0 -444 0 -444 -342 -4 c-322 -4 -347 -6 -410 -26
-37 -13 -74 -29 -82 -38 -8 -8 -18 -14 -21 -14 -3 0 -22 -15 -42 -35 -20 -19
-32 -35 -28 -35 5 0 0 -7 -11 -15 -10 -8 -14 -15 -9 -15 6 0 4 -4 -2 -8 -7 -4
-14 -17 -16 -27 -1 -11 -5 -25 -9 -30 -18 -30 -28 -201 -28 -498 l0 -332 480
3 480 2 0 -24 c0 -13 -27 -232 -60 -487 -33 -255 -60 -470 -60 -477 0 -10 -85
-12 -420 -10 l-420 3 0 -1243 0 -1243 853 3 852 3 60 24 c81 33 163 115 196
196 l24 60 0 2935 0 2935 -24 60 c-33 81 -115 163 -196 196 l-60 24 -2905 1
c-1598 1 -2927 -2 -2953 -6z" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 977 KiB

View File

@ -1,31 +0,0 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
width="100%" height="100%" viewBox="0 0 800.000000 800.000000"
preserveAspectRatio="xMidYMid meet">
<g transform="translate(0.000000,800.000000) scale(0.100000,-0.100000)"
fill="#000000" stroke="none">
<path
d="M3692 7010 c-498 -52 -992 -234 -1407 -519 -326 -223 -654 -569 -860
-905 -212 -347 -342 -700 -416 -1136 -21 -121 -23 -168 -24 -450 0 -333 10
-434 66 -680 204 -883 813 -1644 1634 -2040 207 -100 346 -150 414 -150 77 0
106 12 131 52 19 31 20 51 20 317 l0 284 -47 -7 c-289 -41 -487 -21 -653 65
-78 40 -105 60 -172 125 -71 70 -115 135 -158 234 -78 179 -186 329 -293 405
-34 25 -79 57 -100 72 -108 78 -78 144 66 144 168 0 349 -112 468 -289 107
-161 173 -228 275 -280 145 -74 343 -73 552 1 51 18 64 27 68 47 33 161 75
255 145 328 23 23 39 45 36 48 -2 3 -36 10 -73 15 -207 29 -445 98 -595 173
-381 191 -590 499 -666 982 -24 156 -24 460 0 572 46 210 127 380 258 543 l21
27 -20 58 c-35 99 -45 186 -39 343 5 145 30 278 72 378 l15 36 108 -5 c84 -4
128 -12 202 -37 116 -39 329 -142 430 -210 41 -28 84 -51 95 -51 11 0 58 9
105 21 228 54 562 83 806 68 169 -10 377 -38 504 -68 47 -12 93 -21 103 -21
10 0 62 27 116 60 125 77 323 171 431 205 59 19 116 28 187 32 l103 6 15 -36
c42 -100 67 -233 72 -378 6 -155 -3 -232 -37 -338 l-21 -62 64 -80 c103 -128
175 -290 214 -476 25 -121 24 -442 -1 -598 -54 -340 -167 -577 -360 -763 -139
-134 -289 -220 -503 -290 -107 -36 -314 -82 -437 -97 l-48 -7 20 -21 c35 -39
90 -133 116 -198 57 -142 59 -173 65 -724 6 -554 5 -539 64 -575 59 -37 89
-31 352 70 152 59 422 212 605 344 256 184 523 460 712 736 454 662 625 1520
463 2329 -25 124 -30 143 -75 291 -192 628 -628 1209 -1188 1583 -373 249
-767 401 -1232 478 -100 17 -182 21 -405 24 -154 2 -317 0 -363 -5z" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 1.9 KiB

View File

@ -1,30 +0,0 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
width="100%" height="100%" viewBox="0 0 800.000000 800.000000"
preserveAspectRatio="xMidYMid meet">
<g transform="translate(0.000000,800.000000) scale(0.100000,-0.100000)"
fill="#000000" stroke="none">
<path
d="M2465 7213 c-778 -51 -1420 -574 -1619 -1317 -64 -238 -61 -152 -61
-1896 0 -1744 -3 -1658 61 -1896 165 -616 641 -1093 1255 -1257 242 -65 153
-62 1899 -62 1746 0 1657 -3 1899 62 613 164 1090 641 1254 1254 65 242 62
153 62 1899 0 1746 3 1657 -62 1899 -162 606 -634 1083 -1239 1251 -43 12
-131 31 -194 43 -113 21 -136 21 -1660 22 -850 1 -1567 0 -1595 -2z m3172
-578 c327 -53 627 -246 808 -519 104 -158 161 -303 190 -479 22 -138 22 -3136
0 -3274 -83 -510 -488 -915 -998 -998 -138 -22 -3136 -22 -3274 0 -510 83
-915 488 -998 998 -22 138 -22 3136 0 3274 82 506 486 913 989 997 126 22
3152 22 3283 1z" />
<path
d="M5620 6121 c-259 -70 -377 -353 -250 -600 74 -146 285 -239 448 -197
199 51 322 204 322 401 0 193 -124 350 -317 400 -73 19 -122 18 -203 -4z" />
<path
d="M3890 5649 c-644 -44 -1193 -449 -1434 -1057 -96 -242 -133 -583 -91
-837 61 -365 203 -650 454 -908 421 -433 1028 -598 1618 -441 555 148 1009
602 1157 1157 78 293 78 581 0 874 -121 454 -456 854 -884 1055 -259 122 -543
176 -820 157z m295 -575 c226 -39 424 -142 586 -304 425 -425 425 -1115 -1
-1540 -295 -296 -733 -396 -1129 -259 -566 196 -867 819 -670 1388 173 501
692 806 1214 715z" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 1.6 KiB

View File

@ -1,27 +0,0 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
width="100%" height="100%" viewBox="0 0 800.000000 800.000000"
preserveAspectRatio="xMidYMid meet">
<g transform="translate(0.000000,800.000000) scale(0.100000,-0.100000)"
fill="#000000" stroke="none">
<path
d="M5170 6790 c-323 -40 -610 -179 -835 -405 -337 -337 -471 -780 -389
-1277 l7 -37 -69 5 c-924 74 -1737 421 -2416 1030 -113 101 -279 274 -374 388
l-41 49 -45 -94 c-96 -197 -138 -386 -138 -614 0 -352 114 -659 345 -928 60
-70 220 -212 252 -224 30 -12 9 -20 -40 -16 -160 13 -339 61 -485 129 l-94 44
7 -93 c10 -138 32 -250 70 -364 72 -215 177 -385 340 -549 176 -177 375 -295
608 -361 54 -15 92 -30 85 -34 -7 -4 -56 -14 -108 -24 -106 -20 -347 -23 -440
-7 -30 6 -57 8 -58 7 -7 -6 36 -112 79 -197 150 -298 412 -542 720 -667 150
-61 308 -97 442 -102 31 -1 57 -5 57 -9 0 -9 -136 -106 -245 -175 -127 -80
-360 -194 -511 -250 -165 -60 -393 -118 -570 -145 -171 -26 -469 -36 -619 -22
-60 6 -111 9 -113 8 -7 -7 233 -142 383 -216 592 -290 1231 -427 1895 -406
1013 31 1890 386 2595 1050 616 580 1054 1399 1209 2261 40 220 57 402 62 645
l4 225 90 71 c203 161 374 338 531 550 38 51 69 95 69 97 0 3 -35 -10 -78 -28
-105 -44 -282 -101 -408 -131 -111 -26 -294 -57 -300 -51 -2 2 29 26 69 53
148 100 326 294 413 451 39 69 114 236 114 253 0 5 -55 -20 -123 -55 -212
-111 -558 -236 -720 -260 l-47 -7 -73 69 c-180 171 -434 298 -696 347 -104 20
-312 28 -411 16z" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 125 KiB

4
next.config.mjs Normal file
View File

@ -0,0 +1,4 @@
/** @type {import('next').NextConfig} */
const nextConfig = {};
export default nextConfig;

43484
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -1,53 +1,29 @@
{ {
"name": "itr", "name": "itrweb",
"version": "0.1.0", "version": "0.1.0",
"private": true, "private": true,
"dependencies": {
"@testing-library/jest-dom": "^5.16.5",
"@testing-library/react": "^13.4.0",
"@testing-library/user-event": "^13.5.0",
"ahooks": "^3.7.8",
"animate.css": "^4.1.1",
"antd": "^5.9.2",
"axios": "^1.3.2",
"hamburger-react": "^2.5.0",
"nodemon": "^2.0.20",
"nth-check": "^2.1.1",
"react": "^18.2.0",
"react-animation-on-scroll": "^5.1.0",
"react-dom": "^18.2.0",
"react-router-dom": "^6.8.1",
"react-scripts": "^5.0.1",
"react-scroll": "^1.8.9",
"react-spring": "^9.6.1",
"react-toastify": "^9.1.1",
"sass": "^1.58.0",
"unstated-next": "^1.1.0",
"uuid": "^9.0.0",
"web-vitals": "^2.1.4"
},
"scripts": { "scripts": {
"start": "react-scripts start", "dev": "next dev",
"build": "react-scripts build", "build": "next build",
"test": "react-scripts test", "start": "next start",
"eject": "react-scripts eject" "lint": "next lint"
}, },
"eslintConfig": { "dependencies": {
"extends": [ "animate.css": "^4.1.1",
"react-app", "axios": "^1.7.2",
"react-app/jest" "next": "14.2.3",
] "react": "^18",
"react-dom": "^18",
"react-modal": "^3.16.1",
"sass": "^1.77.2"
}, },
"browserslist": { "devDependencies": {
"production": [ "@types/node": "^20",
">0.2%", "@types/react": "^18",
"not dead", "@types/react-dom": "^18",
"not op_mini all" "@types/react-modal": "^3.16.3",
], "eslint": "^8",
"development": [ "eslint-config-next": "14.2.3",
"last 1 chrome version", "typescript": "^5"
"last 1 firefox version",
"last 1 safari version"
]
} }
} }

View File

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

View File

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

View File

Before

Width:  |  Height:  |  Size: 1.9 KiB

After

Width:  |  Height:  |  Size: 1.9 KiB

View File

@ -1,42 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="theme-color" content="#000000" />
<meta
name="Illinois Tech Robotics"
content="Welcome to the Illinois Tech Robotics Club! We are a student-run organization that promotes the field of robotics through hands-on projects, competitions and events. Open to students of all majors and skill levels, we meet every week at 6:30pm CST to work on exciting robotics projects."
/>
<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`.
-->
<title>ITR - Home</title>
</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>

View File

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

View File

@ -1,8 +0,0 @@
{
"short_name": "ITR",
"name": "ITR React App",
"start_url": ".",
"display": "standalone",
"theme_color": "#000000",
"background_color": "#ffffff"
}

View File

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

View File

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

24
src/app/global.scss Normal file
View File

@ -0,0 +1,24 @@
* {
padding: 0px;
margin: 0px;
background-color: transparent;
}
.container {
width: 100vw;
height: auto;
min-height: 100vh;
margin: 0px;
padding: 0px;
background-color: #232323;
display: flex;
flex-direction: column;
justify-content: space-between;
align-items: center;
}
@keyframes fade {
0% {
opacity: 0;
}
}

24
src/app/layout.tsx Normal file
View File

@ -0,0 +1,24 @@
import Navbar from "@/components/Navbar";
import Footer from "@/components/Footer";
import "@/app/global.scss";
export default function Layout({ children }: { children: React.ReactNode }) {
return (
<div className="container">
<Navbar />
<main
style={{
backgroundColor: "red",
width: "100%",
height: "auto",
position: "relative",
marginTop: "70px",
animation: "fade 0.9s ease-in"
}}
>
{children}
</main>
<Footer></Footer>
</div>
);
}

View File

@ -1,108 +0,0 @@
import pic0 from "../pics/gallery/IMG_0796.jpg";
import pic1 from "../pics/gallery/IMG_6390.jpg";
import pic2 from "../pics/gallery/IMG_6392.jpg";
import pic3 from "../pics/gallery/IMG_6393.jpg";
import pic4 from "../pics/gallery/IMG_8547.jpg";
import pic5 from "../pics/gallery/IMG_8548.jpg";
import pic6 from "../pics/gallery/IMG_8549.jpg";
import pic7 from "../pics/gallery/JSDC2011.jpg";
import pic8 from "../pics/gallery/JSDC2012.jpg";
import pic9 from "../pics/gallery/dsc_0001.jpg";
import pic10 from "../pics/gallery/dsc_0003.jpg";
import pic11 from "../pics/gallery/dsc_0235.jpg";
import pic12 from "../pics/gallery/dsc_0238.jpg";
import pic13 from "../pics/gallery/dsc_0243.jpg";
import pic14 from "../pics/gallery/jsdc2015_001.jpg";
import pic15 from "../pics/gallery/jsdc2015_002.jpg";
import pic16 from "../pics/gallery/jsdc2015_003.jpg";
const gallery = {
pic: [
{
title: "",
content: "",
img: pic0,
},
{
title: "",
content: "",
img: pic1,
},
{
title: "",
content: "",
img: pic2,
},
{
title: "",
content: "",
img: pic3,
},
{
title: "",
content: "",
img: pic4,
},
{
title: "",
content: "",
img: pic5,
},
{
title: "",
content: "",
img: pic6,
},
{
title: "",
content: "",
img: pic7,
},
{
title: "",
content: "",
img: pic8,
},
{
title: "",
content: "",
img: pic9,
},
{
title: "",
content: "",
img: pic10,
},
{
title: "",
content: "",
img: pic11,
},
{
title: "",
content: "",
img: pic12,
},
{
title: "",
content: "",
img: pic13,
},
{
title: "",
content: "",
img: pic14,
},
{
title: "",
content: "",
img: pic15,
},
{
title: "",
content: "",
img: pic16,
}
],
};
export default gallery;

View File

@ -1,80 +0,0 @@
import fenrir from "../pics/fenrir.jpg";
import roslund from "../pics/roslund.jpg";
import goliath from "../pics/goliath.jpg";
import icarus from "../pics/icarus.jpg";
import mach2 from "../pics/mach2.jpg";
import osiris from "../pics/osiris.jpg";
import Modulus from "../pics/modulus.jpg";
import Roomba from "../pics/roomba.jpg";
import MRK from "../pics/fancypants.jpg";
import Mongol from "../pics/mongol.jpg";
import ma from "../pics/matchlock.jpg";
const projects = {
active: [
{
title: "⏩ Goliath",
content: `Golaith is designed to effectively compete in the annual MRDC. Goliath is based on a relatively simple drive base consisting of a basic square steel frame, 2 large drive wheels powered by 3HP Ampflow Magmotors and two steel ball casters. The simplicity of this design makes Goliath a very durable and reliable robot that is able to easily withstand encounters with other robots and course obstacles. In addition, this robot was designed such that the center of mass is low to the ground and as close as possible to the drive wheels which, when coupled with its powerful drivetrain, allows it to easily climb and descend relatively steep inclines as well as move very slowly and precisely when necessary. Overall, these design features enable Goliath to reliably perform many competition tasks with minimal impact from any obstacles encountered along the way.`,
img: goliath,
sub: "💪"
},
{
title: "⏩ Modulus",
content: `Modulus uses a crab drive propulsion system and is primarily based off the FIRST robotics kit. A crab drive system consists of a 4 wheel base where each wheel can rotate independently without turning the entire body. This can be very useful for competitions where mobility is important such as MRDC.`,
img: Modulus,
sub: "🧠"
},
{
title: "⏩ Roslund",
content: `Roslund is a simple frame robot with mechanum drive. Mechanum wheels have rollers at a 45° angle to the wheel plane, which allows the robot to have omnidirectional movement. Roslund was the winner of MRDC in 2010 and 2011. Roslund was also awarded the best design award by Grant Imahara (from the Mythbusters) a couple years back.`,
img: roslund,
sub: "✨"
}
],
inactive: [
{
title: "⏩ Fenrir",
content: `Fenrir is a two-wheeled gravity-drive robot. Fenrir's unique design makes it a very fast and agile robot, but also an interesting challenge to control. You can find the current controller code at our github repo: https://github.com/illinoistechrobotics/fenrir.`,
img: fenrir,
sub: "🔜"
},
{
title: "⏩ C-Force",
content: `C-Force is our award winning pumpkin launcher which uses centripetal force to launch pumpkins. A 5HP, 3 phase industrial motor and variable frequency drive is used to spin up the launching arm to approximately 200 RPM and then a second custom designed control system releases the pumpkin on command from a laptop connected via WiFi. There is an optical sensor on the launcher providing input to the controller to signal when the arm is at the proper angle to release the pumpkin. This allows the launcher to consistently throw the pumpkin at the ideal launch angle to acheive the maximum possible distance.`,
img: mach2,
sub: "🔜"
},
{
title: "⏩ Icarus",
content: `Icarus is a quadcopter (a four-rotor helicopter) that is able to lift more weight and is more agile than a standard helicopter. But these benefits come at a cost of stability and require many electronic sensors to maintain stable flight. We are currently working on an RC car to tether to Icarus toact as a manipulator. This way it can pull Icarus close to balls without blowing them away and pick them up. The manipulator will be used during competitions such as MRDC.`,
img: icarus,
sub: "🪁"
},
{
title: "⏩ Osiris",
content: `A full body spinner prototype design with a hexagonal pyramid shell. Used MPU-6050 Gyroscope/Accelerameter package, Yumo/Omron rotary encoders, and I2C communication between Arduino Unos for PID and translational drift control. Required a soldered interface board between Open Source Motor Controller (OSMC) and Arduino Mega consisting of a L7805 voltage regulator, line driver, and optocoupler packages to provide current and signal isolation. Each of 3 Ampflow magmotors has a peak of 4.6 horsepower and draws 150 Amps at full load. Future improvements include fabricating metal body and shell, and integrating the OSMC interface board into a PCB with motor controller components that can operate at 48 V.`,
img: osiris,
sub: "🤖"
},
{
title: '⏩ Roombotics',
content: `Our club received a donation of 30 Roombas. We have decided to build a robotic swarm using them. This swarm will be able to communicate with each other to work together to fulfill a task. Possible tasks that we have thought of include mapping, search and rescue, and playing sports. We are currently using Arduinos to control the Roombas through their on-board commands.`,
img: Roomba,
sub: "🧼"
},
{
title: '⏩ Fancy Pants',
content: `Fancy Pants is a lower extremity exoskeleton and is one of the older projects at ITR. It is currently undergoing a significant redesign with the goals of increasing precision, comfort and safety. Although this exo needs a lot of work before it will be hurling someone 15 feet into the air safely, it has potential for greatness.`,
img: MRK,
sub: "🦾"
},
{
title: '⏩ Mongol',
content: `Mongol is designed to compete in Mech-Warfare. In Mech-Warfare, all robots must walk on 2 or 4 legs as a means of propulsion. Each robot is also equipped with airsoft cannons and impact sensor plates. Each robot is given a certain number of 'hits' and is pitted against competitors in model cityscape to where the object of the competition is to reduce each opponents hits to zero before falling to zero themselves. Meanwhile, though able to be remote controlled, each robot's pilot cannot view the robot directly and must control the robot with visual information coming only from a wireless camera on the robot itself. Mongol was designed entirely in SolidWorks. For more information about Mech-Warfare visit mech-warfare.com`,
img: Mongol,
sub: "🖐️"
}
],
};
export default projects;

Binary file not shown.

Before

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 87 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 278 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 977 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 440 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 637 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 444 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 537 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 581 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 542 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 554 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 913 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 898 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1022 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 MiB

View File

@ -1,26 +0,0 @@
const fs = require("fs");
let res = "";
let json = `const gallery = {
pic: [`;
let jsonEnd = `
],
};`;
fs.readdir("./", (err, files) => {
files.forEach((file, index) => {
if (file === "readimg.js") {
return;
}
console.log(file);
res += `import pic${index} from "../pics/gallery/${file}";\n`;
json += `{
title: "",
content: "",
img: pic${index}
},`;
});
console.log(res);
console.log(json + jsonEnd);
});

Binary file not shown.

Before

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 135 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 173 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 147 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 117 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 220 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.6 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 75 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 113 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 125 KiB

View File

@ -1,158 +0,0 @@
@font-face {
font-family: itrFont;
src: url(../font/LeagueSpartan-ExtraBold.ttf);
}
@font-face {
font-family: itrFontMedium;
src: url(../font/LeagueSpartan-Medium.ttf);
}
.about {
background-color: #232323;
width: 100%;
min-height: 100vh;
height: auto;
opacity: 100%;
overflow-x: hidden;
display: flex;
-webkit-animation: fade 0.9s ease-in;
-moz-animation: fade 0.9s ease-in;
-ms-animation: fade 0.9s ease-in;
-o-animation: fade 0.9s ease-in;
animation: fade 0.9s ease-in;
background: linear-gradient(#3b3b3b, #1a1a1a);
}
.about__content {
position: relative;
margin-top: 70px;
width: 100%;
height: auto;
overflow: hidden;
}
.about__content__main {
width: 100vw;
height: auto;
margin-top: 5vh;
display: flex;
justify-content: center;
align-items: center;
}
.about__content__main__container {
padding: 10px 10px 20px 10px;
border-radius: 10px;
background-color: rgb(66, 66, 66);
width: 80vw;
height: auto;
display: flex;
flex-direction: column;
transition: 0.3s;
cursor: default;
}
.about__content__main__container h1,
.about__content__blocks_block h1 {
color: white;
opacity: 100%;
font-size: 40px;
font-weight: bold;
font-family: "itrFont";
padding: 10px;
}
.about__content__main__container span,
.about__content__blocks_block span {
color: rgb(238, 238, 238);
opacity: 100%;
font-size: 20px;
font-family: "itrFontMedium";
padding: 10px;
line-height: 32px;
border-radius: 10px;
}
.about__content__blocks_block span {
margin-bottom: 30px;
}
.about__content__blocks {
margin-top: 6vh;
display: flex;
flex-direction: row;
justify-content: center;
align-items: center;
height: auto;
margin-right: calc(-1 * (100vw - 100%));
}
.about__content__blocks_block {
position: relative;
border-radius: 10px;
background-color: rgb(66, 66, 66);
width: 25vw;
margin-left: 3vw;
margin-right: 3vw;
min-height: 38vh;
height: auto;
padding: 10px;
display: flex;
flex-direction: column;
transition: 0.3s;
cursor: pointer;
}
.about__content__blocks_block p {
position: absolute;
bottom: 0;
color: rgb(136, 136, 136);
opacity: 100%;
font-size: 20px;
font-family: "itrFontMedium";
padding: 10px;
line-height: 32px;
border-radius: 10px;
}
.about__content__blocks_block:hover,
.about__content__main__container:hover {
background-color: #666666;
}
@media screen and (max-width: 1550px) {
.about__content__blocks {
flex-direction: column;
}
.about__content__blocks_block {
margin-bottom: 6vh;
width: 80vw;
}
.about__content__blocks_block h1 {
font-size: 35px;
}
}
@media screen and (max-width: 650px) {
.about__content__main__container {
width: 90vw;
}
.about__content__blocks_block {
width: 90vw;
}
.about__content__main__container span,
.about__content__blocks_block span {
font-size: 18px;
}
}
@keyframes fade {
0% {
opacity: 0;
}
}

View File

@ -1,18 +0,0 @@
* {
padding: 0px;
margin: 0px;
background-color: transparent;
}
.container {
padding: 0px;
margin: 0px;
display: flex;
flex-direction: column;
height: 100%;
background-color: #232323;
}
html {
overflow-y: scroll;
}

View File

@ -1,41 +0,0 @@
@font-face {
font-family: itrFont;
src: url(../font/LeagueSpartan-ExtraBold.ttf);
}
@font-face {
font-family: itrFontMedium;
src: url(../font/LeagueSpartan-Medium.ttf);
}
.awards {
position: relative;
width: 100vw;
height: 100vh;
background-color: rgb(54, 54, 54);
display: flex;
justify-content: center;
align-items: center;
}
.awards__content {
background-color: red;
width: 80%;
height: auto;
padding: 10px;
}
.awards__content__title {
font-weight: bold;
font-size: 300%;
color: rgb(255, 255, 255);
font-family: "itrFont";
margin-bottom: 1%;
}
.awards__content__list_item {
border-top: 1px solid black;
border-bottom: 1px solid black;
width: 100%;
height: 100px;
}

View File

@ -1,78 +0,0 @@
@font-face {
font-family: itrFont;
src: url(../font/LeagueSpartan-ExtraBold.ttf);
}
@font-face {
font-family: itrFontMedium;
src: url(../font/LeagueSpartan-Medium.ttf);
}
.bubble {
color: rgb(255, 255, 255);
font-family: "itrFontMedium";
display: flex;
flex-direction: column;
position: relative;
margin: 30px;
}
.bubble_main {
width: 100%;
}
.bubble_main h1 {
font-weight: bold;
font-size: 300%;
border-left: 5px solid rgb(255, 142, 142);
padding-left: 15px;
border-top-left-radius: 10px;
margin-bottom: -5px;
}
.bubble_main h2 {
font-weight: bold;
font-size: 400%;
border-left: 5px solid rgb(255, 142, 142);
padding-left: 15px;
border-bottom-left-radius: 10px;
margin-bottom: 25px;
}
.bubble_main div {
height: auto;
display: flex;
overflow-wrap: break-word;
font-weight: normal;
font-size: 150%;
color: #d6d6d6;
background-color: rgb(59, 59, 59);
border-radius: 10px;
line-height: 35px;
padding: 15px;
flex-direction: column;
}
.bubble_main a {
color: rgb(141, 238, 255);
}
@media screen and (max-width: 650px) {
// Phones
.bubble_main {
width: auto;
}
.bubble_main h1 {
font-size: 150%;
}
.bubble_main h2 {
font-size: 250%;
}
.bubble_main div {
font-size: 100%;
line-height: 25px;
}
}

View File

@ -1,146 +0,0 @@
@font-face {
font-family: itrFont;
src: url(../font/LeagueSpartan-ExtraBold.ttf);
}
@font-face {
font-family: itrFontMedium;
src: url(../font/LeagueSpartan-Medium.ttf);
}
.mobile {
position: fixed!important;
padding: 20px!important;
padding: 20px!important;
background-color: rgb(35, 35, 35)!important;
z-index: 999!important;
width: 100%!important;
box-sizing: border-box;
height: 100vh!important;
justify-content: start!important;
}
@media screen and (max-width: 650px) {
.c {
position: fixed;
width: 100%;
height: 100%;
background: linear-gradient(#353535, #232323);
z-index: 10000000;
overflow: hidden;
display: flex;
flex-direction: column;
align-items: center;
// animation: slide .6s ease;
// animation-iteration-count: 1;
}
.home__content__info {
.c {
padding: 0;
width: 100%;
}
}
.dd {
display: flex;
flex-direction: column;
width: 100%;
margin-top: 45px;
}
li {
margin-bottom: 20px;
// margin-left: 8px;
}
.dd__link {
color: white;
font-size: 24px;
padding: 0;
width: 100%;
display: flex;
}
.dd__link_label {
position: relative;
width: 90%;
cursor: pointer;
line-height: 33px;
height: 33px;
}
.dd__link_arrow {
text-align: center;
color: white;
// padding-top: 7px;
height: 33px;
line-height: 33px;
width: 10%;
font-size: 30px;
cursor: pointer;
opacity: 0%;
transition: 0.2s;
}
.dd__link_arrow:hover:focus {
opacity: 100%;
}
.dd__link_label:hover + .dd__link_arrow {
opacity: 100%;
}
.header {
margin-top: 10px;
display: inline-block;
flex-direction: row;
width: 90%;
}
.header__text {
color: white;
font-size: 50px;
font-family: "itrFont";
}
.header__x {
color: white;
font-size: 25px;
font-family: "itrFont";
border: none;
float: right;
margin-top: 13px;
margin-right: 5px;
cursor: pointer;
}
}
.slideIn{
animation: slideIn .6s ease;
}
.slideOut{
animation: slideOut .6s ease;
}
@keyframes slideIn {
0% {
margin-top: -100vh;
opacity: 0%;
}
100% {
margin-top: 0vh;
opacity: 100%;
}
}
@keyframes slideOut {
0% {
margin-top: 0vh;
opacity: 100%;
}
100% {
margin-top: -100vh;
opacity: 0%;
}
}

View File

@ -1,104 +0,0 @@
.c {
opacity: 100%;
-webkit-animation: fade 0.9s ease-in;
-moz-animation: fade 0.9s ease-in;
-ms-animation: fade 0.9s ease-in;
-o-animation: fade 0.9s ease-in;
animation: fade 0.9s ease-in;
background: linear-gradient(#3b3b3b, #1a1a1a);
position: relative;
margin: 0px;
padding: 0px;
width: 100vw;
}
.error {
background-color: #3d3d3d;
width: 100%;
overflow: hidden;
display: flex;
height: calc(100vh - 101px);
position: relative;
top: 0;
left: 0;
}
.error__photo { margin: 0px;
width: 100%;
min-width: 900px;
}
.e {
margin: 0px;
position: absolute;
width: 100vw;
max-width: 500px;
aspect-ratio: 16/9;
border-radius: 30px;
left: 0;
right: 0;
top: 0;
bottom: 0;
margin: auto
}
.e__background {
margin: 0px;
position: relative;
width: 100vw;
max-width: 500px;
aspect-ratio: 16/9;
}
.e__container {
margin: 0px;
width: 100px;
height: 100px;
position: absolute;
border-radius: 20px;
top: 0;
width: 100vw;
max-width: 500px;
aspect-ratio: 16/9;
height: auto;
display: flex;
justify-content: center;
align-items: center;
flex-direction: column;
}
.e__container__titleCon {
width: 100%;
height: 15%;
}
.e__container__messageCon {
width: 100%;
height: 77%;
}
.e__container__titleCon__title {
font-family: "Tahoma";
margin-top: 1%;
margin-left: 12%;
font-size: 1.5rem;
color: white;
}
.e__container__messageCon__message {
font-family: "Tahoma";
margin-top: 1%;
margin-left: 12%;
font-size: 1.3rem;
color: black;
margin-left: 24%;
margin-top: 10%;
margin-right: 20px;
line-height: 35px;
}
@keyframes fade {
0% {
opacity: 0;
}
}

View File

@ -1,121 +0,0 @@
@font-face {
font-family: itrFont;
src: url(../font/LeagueSpartan-ExtraBold.ttf);
}
@font-face {
font-family: itrFontMedium;
src: url(../font/LeagueSpartan-Medium.ttf);
}
.footer {
background-color: #232323;
width: 100%;
height: 100px;
border-top: 1px solid rgb(46, 46, 46);
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
margin: 0px;
padding: 0px;
overflow: hidden;
}
.footer__links {
width: 80vw;
height: 50px;
padding: 0px;
margin: 0px;
position: relative;
display: flex;
justify-content: center;
align-items: center;
}
.footer__links_ul {
margin: 0px;
padding: 0px;
width: 80vw;
height: 50px;
display: flex;
justify-content: center;
align-items: center;
}
.footer__links_ul_li {
padding: 0px;
margin: 20px;
height: 50px;
display: flex;
justify-content: center;
align-items: center;
}
.footer__links_ul_li_a {
margin: 0px;
padding: 0px;
display: flex;
justify-content: center;
align-items: center;
}
.footer__links_ul_li_svg {
width: 40px;
height: 40px;
filter: invert(100%) sepia(10%) saturate(1000%) hue-rotate(10deg)
brightness(100%) contrast(100%);
opacity: 30%;
transition: 0.3s;
padding: 0px;
margin: 0px;
}
.footer__links_ul_li_svg:hover {
opacity: 70%;
}
.footer__toes {
display: flex;
width: 80vw;
height: 30px;
display: flex;
justify-content: center;
align-items: center;
margin-top: 10px;
}
.footer__toes__links {
display: flex;
}
.footer__toes__links_link {
text-align: center;
width: 100px;
justify-content: center;
align-items: center;
display: flex;
height: 30px;
padding: 0px;
margin: 0px;
}
@media screen and (max-width: 650px) {
// Phones
.footer__links_ul_li_svg {
width: 30px;
height: 30px;
}
.footer__links_ul_li {
margin: 15px;
}
.footer__toes__links_link_a {
font-size: 17px;
}
.footer__toes__links_link {
width: 80px;
}
}

View File

@ -1,40 +0,0 @@
@font-face {
font-family: itrFont;
src: url(../font/LeagueSpartan-ExtraBold.ttf);
}
@font-face {
font-family: itrFontMedium;
src: url(../font/LeagueSpartan-Medium.ttf);
}
.gallery {
background-color: #232323;
width: 100%;
min-height: 100vh;
height: auto;
opacity: 100%;
overflow-x: hidden;
display: flex;
-webkit-animation: fade 0.9s ease-in;
-moz-animation: fade 0.9s ease-in;
-ms-animation: fade 0.9s ease-in;
-o-animation: fade 0.9s ease-in;
animation: fade 0.9s ease-in;
background: linear-gradient(#3b3b3b, #1a1a1a);
}
.gallery_wrap {
flex-wrap: wrap;
padding: 24px;
margin-left: 20px;
display: flex;
flex-direction: row;
justify-content: start;
}
.gallery__title {
margin: 20px 0 20px 20px;
font-family: itrFontMedium;
color: #fff;
text-align: center;
}

View File

@ -1,108 +0,0 @@
@font-face {
font-family: itrFont;
src: url(../font/LeagueSpartan-ExtraBold.ttf);
}
@font-face {
font-family: itrFontMedium;
src: url(../font/LeagueSpartan-Medium.ttf);
}
.home {
width: 100%;
opacity: 100%;
-webkit-animation: fade 0.9s ease-in;
-moz-animation: fade 0.9s ease-in;
-ms-animation: fade 0.9s ease-in;
-o-animation: fade 0.9s ease-in;
animation: fade 0.9s ease-in;
}
.home__content__panel {
background-color: transparent;
width: 100%;
height: 100vh;
display: flex;
justify-content: center;
align-items: center;
flex-wrap: wrap;
overflow: hidden;
}
.home__content__panel__video {
width: 100%;
height: 100%;
object-fit: cover;
}
.home__content__panel__title {
position: absolute;
color: white;
text-align: center;
font-size: 70px;
font-family: "itrFont";
animation: textSlide 1s ease;
animation-iteration-count: 1;
opacity: 100%;
width: 100%;
letter-spacing: 2px;
filter: drop-shadow(0 0 0.75rem rgb(77, 77, 77));
z-index: 1;
}
.home__content__info {
height: auto;
width: 100%;
margin: 0px;
padding: 0px;
background: linear-gradient(#353535, #232323);
display: flex;
align-items: center;
justify-content: center;
}
.c {
margin: 0px;
padding: 0px;
width: 90%;
padding: 50px;
height: auto;
position: relative;
display: flex;
opacity: 100%;
flex-direction: column;
justify-content: center;
background: transparent;
z-index: 0;
}
.dropdown {
position: fixed;
z-index: 999;
background-color: #232323;
}
@media screen and (max-width: 650px) {
// Phones
.home__content__panel__title {
font-size: 45px;
}
}
// Animations
@keyframes textSlide {
0% {
margin-top: 50vw;
}
0% {
opacity: 0%;
}
}
@keyframes fade {
0% {
opacity: 0;
}
}

View File

@ -1,212 +0,0 @@
@font-face {
font-family: itrFont;
src: url(../font/LeagueSpartan-ExtraBold.ttf);
}
@font-face {
font-family: itrFontMedium;
src: url(../font/LeagueSpartan-Medium.ttf);
}
.navbar {
display: flex;
align-items: center;
justify-content: space-between;
height: 70px;
background-color: transparent;
position: fixed;
width: 100%;
overflow-y: hidden;
transition: 0.5s;
z-index: 1000;
}
.navbar__logotext {
color: white;
font-size: 50px;
font-family: "itrFont";
margin-top: 6px;
margin-left: 50px;
transition: 0.5s;
background: linear-gradient(
to right,
#ff0000,
#ff7300,
#fffb00,
#48ff00,
#00ffd5,
#002bff,
#7a00ff,
#ff00c8,
#ff0000
);
-webkit-background-clip: text;
background-clip: text;
animation: navbar__logotext 6s ease-in-out infinite;
background-size: 400% 100%;
cursor: pointer;
}
#logo {
text-decoration: none;
}
.navbar__logotext:hover {
color: transparent;
}
@keyframes navbar__logotext {
0%,
100% {
background-position: 0 0;
}
50% {
background-position: 100% 0;
}
}
li {
display: inline;
}
li a {
color: rgb(216, 216, 216);
text-decoration: none;
font-family: "itrFontMedium";
font-size: 20px;
margin-left: 3px;
margin-right: 3px;
padding-left: 20px;
padding-right: 20px;
padding-top: 5px;
padding-bottom: 5px;
transition: 0.3s;
}
li a:hover {
color: white;
}
.nav__placeholder {
padding: 10px;
width: 70px;
height: 20px;
border: none;
outline: none;
background: transparent;
position: relative;
z-index: 0;
border-radius: 10px;
margin-right: 50px;
}
.nav__login {
padding: 10px;
text-decoration: none;
font-size: 20px;
text-align: center;
font-family: "itrFontMedium";
width: 70px;
height: 20px;
border: none;
outline: none;
color: #ffffff;
background: #111;
cursor: pointer;
position: relative;
z-index: 0;
border-radius: 10px;
margin-right: 50px;
}
.nav__login::before {
content: "";
background: linear-gradient(
to right,
#ff0000,
#ff7300,
#fffb00,
#48ff00,
#00ffd5,
#002bff,
#7a00ff,
#ff00c8,
#ff0000
);
position: absolute;
top: -2px;
left: -2px;
background-size: 400%;
z-index: -1;
width: calc(100% + 4px);
height: calc(100% + 4px);
animation: glow 30s linear infinite;
opacity: 0;
transition: opacity 0.3s ease-in-out;
border-radius: 10px;
}
@keyframes glow {
0% {
background-position: 0 0;
}
50% {
background-position: 400% 0;
}
100% {
background-position: 0 0;
}
}
.nav__login:active {
color: #000;
}
.nav__login:active:after {
background: transparent;
}
.nav__login:hover:before {
opacity: 1;
}
.navbar__hamburger {
display: none;
}
.hamburger-react {
display: none;
}
@media screen and (max-width: 912px) {
// Tablets
}
@media screen and (max-width: 650px) {
// Phones
.navbar__logotext {
margin-top: 6px;
margin-left: 20px;
}
ul {
display: none;
}
.hamburger-react {
color: #fff;
display: block;
margin-right: 10px;
}
.navbar__hamburger {
display: flex;
flex-direction: column;
margin-right: 20px;
cursor: pointer;
}
.navbar__hamburger_line {
background-color: rgb(255, 255, 255);
width: 30px;
height: 3px;
margin: 2px;
border: none;
border-radius: 10px;
}
}

View File

@ -1,174 +0,0 @@
@font-face {
font-family: itrFont;
src: url(../font/LeagueSpartan-ExtraBold.ttf);
}
@font-face {
font-family: itrFontMedium;
src: url(../font/LeagueSpartan-Medium.ttf);
}
.project {
background-color: #232323;
width: 100%;
min-height: 100vh;
height: auto;
opacity: 100%;
overflow-x: hidden;
display: flex;
-webkit-animation: fade 0.9s ease-in;
-moz-animation: fade 0.9s ease-in;
-ms-animation: fade 0.9s ease-in;
-o-animation: fade 0.9s ease-in;
animation: fade 0.9s ease-in;
background: linear-gradient(#3b3b3b, #1a1a1a);
}
.projects_wrap {
flex-wrap: wrap;
padding: 24px;
margin-left: 20px;
display: flex;
flex-direction: row;
justify-content: start;
}
.projects__title {
margin: 20px 0 20px 20px;
font-family: itrFontMedium;
color: #fff;
text-align: center;
}
.project__content {
position: relative;
width: 100%;
height: auto;
overflow: hidden;
}
.project__content__main {
width: 100vw;
height: auto;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
padding-top: 24px;
}
.project__content__main__container {
padding: 20px;
border-radius: 10px;
background-color: rgb(66, 66, 66);
box-sizing: border-box;
display: flex;
flex-direction: column;
transition: 0.3s;
cursor: default;
overflow: hidden;
}
.project_item_content {
flex-grow: 1;
overflow: scroll;
}
.project_item_content_image {
border-radius: 10px;
transition: .1s;
}
.project_item_content_image:hover {
border-radius: 0px;
}
.project__content__main__container h1,
.project__content__blocks_block h1 {
color: white;
opacity: 100%;
font-size: 40px;
font-weight: bold;
font-family: "itrFont";
padding: 10px;
}
.project__content__main__container span,
.project__content__blocks_block span {
color: rgb(238, 238, 238);
opacity: 100%;
font-size: 18px;
font-family: itrFontMedium;
padding: 10px;
line-height: 20px;
border-radius: 10px;
display: block;
overflow: hidden;
width: 100%;
box-sizing: border-box;
}
.project__content__blocks_block span {
margin-bottom: 30px;
}
.project__content__blocks {
margin-top: 6vh;
display: flex;
flex-direction: row;
justify-content: center;
align-items: center;
height: auto;
margin-right: calc(-1 * (100vw - 100%));
}
.project__content__blocks_block {
position: relative;
border-radius: 10px;
background-color: rgb(66, 66, 66);
width: 25vw;
margin-left: 3vw;
margin-right: 3vw;
min-height: 38vh;
height: auto;
padding: 10px;
display: flex;
flex-direction: column;
transition: 0.3s;
cursor: pointer;
}
.project__content__blocks_block p {
position: absolute;
bottom: 0;
color: rgb(136, 136, 136);
opacity: 100%;
font-size: 20px;
font-family: itrFontMedium;
padding: 10px;
line-height: 32px;
border-radius: 10px;
}
.project__content__blocks_block:hover,
.project__content__main__container:hover {
background-color: #666666;
}
@media screen and (max-width: 1550px) {
.project__content__blocks {
flex-direction: column;
}
.project__content__blocks_block {
margin-bottom: 6vh;
width: 80vw;
}
.project__content__blocks_block h1 {
font-size: 35px;
}
}
@keyframes fade {
0% {
opacity: 0;
}
}

View File

@ -1,8 +0,0 @@
.waterfallContainer {
display: flex;
flex-wrap: wrap;
justify-content: space-evenly;
.waterfallItem {
margin-bottom: 12px;
}
}

Binary file not shown.

View File

@ -1,110 +0,0 @@
import React, { Component } from "react";
import { AnimationOnScroll } from "react-animation-on-scroll";
import "../assets/stylesheets/about.scss";
export default class About extends Component {
componentDidMount() {
window.scrollTo(0, 0);
}
click() {}
render() {
return (
<div className="about">
<div className="about__content">
<div className="about__content__main">
<AnimationOnScroll
animateIn="animate__fadeInDown"
animateOnce="true"
duration={1}
delay={0}
>
<div className="about__content__main__container">
<h1>About Us 📌</h1>
<span>
The Illinois Tech Robotics Club at IIT is a student-run
organization dedicated to promoting the development and
application of robotics technology. We aim to provide a
platform for students to learn, design, build, and compete
with robots. Our members come from a variety of disciplines
and backgrounds, including computer science, electrical
engineering, mechanical engineering, and beyond. We host
regular meetings, workshops, and events to encourage hands-on
experience and collaboration among members. Our club also
participates in various national and international robotics
competitions, providing opportunities for members to showcase
their skills and put their knowledge to the test. Whether you
are a seasoned robotics enthusiast or just starting out, the
Illinois Tech Robotics Club is a welcoming community for
anyone interested in the field. Join us in exploring the
exciting world of robotics and pushing the boundaries of what
is possible.
</span>
</div>
</AnimationOnScroll>
</div>
<div className="about__content__blocks">
<AnimationOnScroll
animateIn="animate__fadeInUp"
animateOnce="true"
duration={1}
delay={500}
>
<div className="about__content__blocks_block">
<h1>Awards 🏆</h1>
<span>
Illinois Tech Robotics has received numerous awards for our
contributions to the field of robotics. Our team has been
recognized at local competitions for our commitment to
innovation and excellence. We take pride in our recognition
and continue to push the boundaries of robotics technology.
</span>
<p>(Click for more info)</p>
</div>
</AnimationOnScroll>
<AnimationOnScroll
animateIn="animate__fadeInUp"
animateOnce="true"
duration={1.2}
delay={500}
>
<div className="about__content__blocks_block">
<h1>Officers 👩💼</h1>
<span>
Illinois Tech Robotics is led by a team of student officers
committed to advancing robotics. Our diverse officers bring
unique skills and perspectives, leading events and projects.
We are proud to have a talented and passionate group guiding
us forward.
</span>
<p>(Click for more info)</p>
</div>
</AnimationOnScroll>
<AnimationOnScroll
animateIn="animate__fadeInUp"
animateOnce="true"
duration={1.4}
delay={500}
>
<div
className="about__content__blocks_block"
onClick={this.click}
>
<h1>Constitution 📜</h1>
<span>
Illinois Tech Robotics operates under a Constitution outlining
our purpose, rules, and processes. It outlines
responsibilities, decision-making, and governance to maintain
fairness, transparency, and accountability within our team.
</span>
<p>(Click for more info)</p>
</div>
</AnimationOnScroll>
</div>
</div>
</div>
);
}
}

View File

@ -1,27 +0,0 @@
import { useContainer } from "unstated-next";
import DropdownContainer from "../components/DropdownContainer";
import GlobalStore from "../store/global";
import NavBar from "../components/NavBar";
import Footer from "../components/Footer";
import { useLocation } from "react-router-dom";
import { useEffect } from "react";
const AppOuter = ({ children }) => {
const { isHamburger, setIsHamburger } = useContainer(GlobalStore);
const location = useLocation();
useEffect(() => {
setIsHamburger(false);
}, [location.pathname]);
return (
<div className="container">
{isHamburger ? (
<DropdownContainer hamburgerToggle={setIsHamburger} />
) : null}
<div style={{ marginTop: 70 }}>{children}</div>
<NavBar hamburgerToggle={setIsHamburger}></NavBar>
<Footer></Footer>
</div>
);
};
export default AppOuter;

View File

@ -1,21 +0,0 @@
import React, { Component } from "react";
import "../assets/stylesheets/awards.scss";
export default class Awards extends Component {
render() {
return (
<div className="awards">
<div className="awards__content">
<h1 className="awards__content__title">Awards & Recognition 🏆</h1>
<ol className="awards__content__list">
<i>
<div className="awards__content__list_item">
<h2>2019</h2>
</div>
</i>
</ol>
</div>
</div>
);
}
}

View File

@ -1,46 +0,0 @@
import React, { Component } from "react";
import "../assets/stylesheets/bubble.scss";
import { AnimationOnScroll } from "react-animation-on-scroll";
export default class Bubble extends Component {
render() {
return (
<div
// style={{
// marginLeft: `${this.props.left}`,
// paddingTop: `${this.props.top}`,
// }}
>
<div className="bubble">
<AnimationOnScroll
className="bubble_main"
animateIn="animate__fadeInUp"
animateOnce="true"
duration={1}
delay={0}
>
<h1>{this.props.h1}</h1>
</AnimationOnScroll>
<AnimationOnScroll
className="bubble_main"
animateIn="animate__fadeInUp"
animateOnce="true"
duration={1.2}
delay={0}
>
<h2>{this.props.h2}</h2>
</AnimationOnScroll>
<AnimationOnScroll
className="bubble_main"
animateIn="animate__fadeIn"
animateOnce="true"
duration={3}
delay={500}
>
<div>{this.props.children}</div>
</AnimationOnScroll>
</div>
</div>
);
}
}

View File

@ -1,54 +0,0 @@
import React, { useEffect, useRef } from "react";
import { NavLink } from "react-router-dom";
import "../assets/stylesheets/dropdown.scss";
import { useSize } from "ahooks";
import { useContainer } from "unstated-next";
import GlobalStore from "../store/global";
const DropdownContainer = () => {
const container = useRef();
const { isMobile, toggleMenu } = useContainer(GlobalStore);
const toggleHamburger = () => {
container.current.className = "slideOut c";
setTimeout(() => {
toggleMenu();
}, 500);
};
return (
<nav ref={container} className={`dropdown c slideIn ${isMobile ? 'mobile' : ''}`}>
{!isMobile && (
<div className="header">
<label className="header__text">ITR</label>
<button className="header__x" onClick={() => toggleHamburger()}>X</button>
</div>)}
<div className="dd">
<li>
<NavLink className="dd__link" to="/">
<label className="dd__link_label">Home</label>
<label className="dd__link_arrow">{">"}</label>
</NavLink>
</li>
<li>
<NavLink className="dd__link" to="/about">
<label className="dd__link_label">About</label>
<label className="dd__link_arrow">{">"}</label>
</NavLink>
</li>
<li>
<NavLink className="dd__link" to="/projects">
<label className="dd__link_label">Projects</label>
<label className="dd__link_arrow">{">"}</label>
</NavLink>
</li>
<li>
<NavLink className="dd__link" to="/gallery">
<label className="dd__link_label">Gallery</label>
<label className="dd__link_arrow">{">"}</label>
</NavLink>
</li>
</div>
</nav>
);
}
export default DropdownContainer;

View File

@ -1,40 +0,0 @@
import React, { Component } from "react";
import "../assets/stylesheets/error.scss";
export default class Error extends Component {
status = this.props.err.item.status;
statusText = this.props.err.item.statusText;
message = this.props.err.item.message;
render() {
return (
<div className="c">
<div className="error">
<img
className="error__photo"
src={require("../assets/pics/error.jpg")}
alt="background"
></img>
</div>
<div className="e">
<img
className="e__background"
src={require("../assets/pics/xperror.png")}
alt="background"
></img>
<div className="e__container">
<div className="e__container__titleCon">
<h1 className="e__container__titleCon__title">
{this.status}: {this.statusText}
</h1>
</div>
<div className="e__container__messageCon">
<p className="e__container__messageCon__message">If you believe this is unintentional, please contact a site developer!</p>
</div>
</div>
</div>
</div>
);
}
}

View File

@ -1,87 +0,0 @@
import React, { Component } from "react";
import "../assets/stylesheets/footer.scss";
import { ReactComponent as DiscordSVG } from "../assets/svg/discord.svg";
import { ReactComponent as TwitterSVG } from "../assets/svg/twitter.svg";
import { ReactComponent as FacebookSVG } from "../assets/svg/facebook.svg";
import { ReactComponent as InstagramSVG } from "../assets/svg/instagram.svg";
import { ReactComponent as GithubSVG } from "../assets/svg/github.svg";
export default class Footer extends Component {
render() {
return (
<div className="footer">
<div className="footer__links">
<ul className="footer__links_ul">
<li className="footer__links_ul_li">
<a
href="https://discord.gg/GA6mvMEzSu"
target="_blank"
rel="noreferrer"
className="footer__links_ul_li_a"
>
<DiscordSVG className="footer__links_ul_li_svg"></DiscordSVG>
</a>
</li>
<li className="footer__links_ul_li">
<a
href="https://twitter.com/ILTech_Robotics"
target="_blank"
rel="noreferrer"
className="footer__links_ul_li_a"
>
<TwitterSVG className="footer__links_ul_li_svg"></TwitterSVG>
</a>
</li>
<li className="footer__links_ul_li">
<a
href="https://www.facebook.com/IllinoisTechRobotics/"
target="_blank"
rel="noreferrer"
className="footer__links_ul_li_a"
>
<FacebookSVG className="footer__links_ul_li_svg"></FacebookSVG>
</a>
</li>
<li className="footer__links_ul_li">
<a
href="https://www.instagram.com/illinoistechrobotics/"
target="_blank"
rel="noreferrer"
className="footer__links_ul_li_a"
>
<InstagramSVG className="footer__links_ul_li_svg"></InstagramSVG>
</a>
</li>
<li className="footer__links_ul_li">
<a
href="https://github.com/illinoistechrobotics"
target="_blank"
rel="noreferrer"
className="footer__links_ul_li_a"
>
<GithubSVG className="footer__links_ul_li_svg"></GithubSVG>
</a>
</li>
</ul>
</div>
<div className="footer__toes">
<ul className="footer__toes__links">
<li className="footer__toes__links_link">
<a href="http://localhost:3000/about" className="footer__toes__links_link_a">About</a>
</li>
<li className="footer__toes__links_link">
<a href="http://localhost:3000/contact" className="footer__toes__links_link_a">Contact</a>
</li>
<li className="footer__toes__links_link">
<a href="http://localhost:3000/projects" className="footer__toes__links_link_a">Projects</a>
</li>
<li className="footer__toes__links_link">
<a href="http://localhost:3000/gallery" className="footer__toes__links_link_a">Gallery</a>
</li>
</ul>
</div>
</div>
);
}
}

125
src/components/Footer.tsx Normal file
View File

@ -0,0 +1,125 @@
import React from "react";
import Image from "next/image";
import DiscordSVG from "../../public/discord.svg";
import TwitterSVG from "../../public/twitter.svg";
import FacebookSVG from "../../public/facebook.svg";
import InstagramSVG from "../../public/instagram.svg";
import GithubSVG from "../../public/github.svg";
import "../stylesheets/footer.scss";
import Link from "next/link";
const Footer = () => {
return (
<div className="footer">
<div className="footer-links">
<ul className="footer-links-ul">
<li className="footer-links-ul-li">
<a
href="https://discord.gg/GA6mvMEzSu"
target="_blank"
rel="noreferrer"
className="footer-links-ul-li-a"
>
<Image
priority
className="footer-links-ul-li-svg"
src={DiscordSVG}
alt=""
/>
</a>
</li>
<li className="footer-links-ul-li">
<a
href="https://twitter.com/ILTech_Robotics"
target="_blank"
rel="noreferrer"
className="footer-links-ul-li-a"
>
<Image
priority
className="footer-links-ul-li-svg"
src={TwitterSVG}
alt=""
/>
</a>
</li>
<li className="footer-links-ul-li">
<a
href="https://www.facebook.com/IllinoisTechRobotics/"
target="_blank"
rel="noreferrer"
className="footer-links-ul-li-a"
>
<Image
priority
className="footer-links-ul-li-svg"
src={FacebookSVG}
alt=""
/>
</a>
</li>
<li className="footer-links-ul-li">
<a
href="https://www.instagram.com/illinoistechrobotics/"
target="_blank"
rel="noreferrer"
className="footer-links-ul-li-a"
>
<Image
priority
className="footer-links-ul-li-svg"
src={InstagramSVG}
alt=""
/>
</a>
</li>
<li className="footer-links-ul-li">
<a
href="https://github.com/illinoistechrobotics"
target="_blank"
rel="noreferrer"
className="footer-links-ul-li-a"
>
<Image
priority
className="footer-links-ul-li-svg"
src={GithubSVG}
alt=""
/>
</a>
</li>
</ul>
</div>
<div className="footer-toes">
<ul className="footer-toes-links">
<li className="footer-toes-links-link">
<Link href="/about" className="footer-toes-links-link-a">
About
</Link>
</li>
<li className="footer-toes-links-link">
<Link href="/contact" className="footer-toes-links-link-a">
Contact
</Link>
</li>
<li className="footer-toes-links-link">
<Link href="/projects" className="footer-toes-links-link-a">
Projects
</Link>
</li>
<li className="footer-toes-links-link">
<Link href="/gallery" className="footer-toes-links-link-a">
Gallery
</Link>
</li>
</ul>
</div>
<span className="footer-toes-span">
© {new Date().getFullYear()} Illinois Tech Robotics
</span>
</div>
);
};
export default Footer;

View File

@ -1,62 +0,0 @@
import React, { useEffect, useMemo } from "react";
import "../assets/stylesheets/gallery.scss";
import { useContainer } from "unstated-next";
import GlobalStore from "../store/global";
import gallery from "../assets/data/gallery";
import WaterfallPosition from "./hooks/waterfall";
import { Image } from "antd";
const Render = ({ onLoad, data, sizeRef }) => {
return (
<div className="gallery__content">
<Image
onLoad={() => {
setTimeout(() => {
onLoad(sizeRef.current.size);
}, 100);
}}
onError={() =>
setTimeout(() => {
onLoad(sizeRef.current.size);
}, 100)
}
width={"100%"}
src={data.img}
/>
</div>
);
};
const Gallery = () => {
useEffect(() => {
window.scrollTo(0, 0);
}, []);
const { bodySize } = useContainer(GlobalStore);
const count = useMemo(() => {
if (bodySize.width > 850) {
return 3;
}
if (bodySize.width > 650) {
return 2;
}
return 1;
}, [bodySize]);
return (
<div className="gallery">
<div className="gallery__content">
<div className="gallery__content__main">
<div>
<h1 className="gallery__title">Gallery</h1>
<WaterfallPosition
columnNumber={count}
list={gallery.pic}
Render={Render}
/>
</div>
</div>
</div>
</div>
);
};
export default Gallery;

View File

@ -1,83 +0,0 @@
import React, { Component } from "react";
import backgroundVideo from "../assets/videos/video.mp4";
import "../assets/stylesheets/home.scss";
import Bubble from "./Bubble";
import * as Scroll from "react-scroll";
import "animate.css";
export default class Home extends Component {
scrollToContent() {
var scroll = require("react-scroll");
scroll = Scroll.animateScroll;
scroll.scrollTo(920);
}
componentDidMount() {
window.scrollTo(0, 0);
}
render() {
return (
<div className="home">
<div className="home__content">
<div className="home__content__panel">
<label className="home__content__panel__title">
<p>ILLINOIS TECH</p>
<p>ROBOTICS</p>
</label>
{/* <button
className="home__content__panel__button"
onClick={this.scrollToContent}
>
</button> */}
<video
autoPlay
playsInline
controls={false}
preload="yes"
loop
muted
className="home__content__panel__video"
type="video/mp4"
src={backgroundVideo}
></video>
</div>
<div className="home__content__info">
<div className="c">
<Bubble h1="Join us at our" h2="GBMs 🤝">
<span>
Welcome to the Illinois Tech Robotics Club! We are a
student-run organization that promotes the field of robotics
through hands-on projects, competitions and events. Open to
students of all majors and skill levels, we meet every week at
6:30pm CST to work on exciting robotics projects.
</span>
</Bubble>
<Bubble
h1="Directions to the"
h2="ITR Lab 🗺️"
>
<span>
1. Enter through the{" "}
<a href="https://goo.gl/maps/NJW5LzDDBYoHiD5X6">IIT Tower</a>{" "}
located at 10 W 35 St, Chicago, IL.
<br />
2. Sign in with the front desk, and then take the elevator to
the basement.
<br />
3. Once in the basement, take a right from the elevator and
enter the last door on the left.
<br />
4. Finally, sign in to the Elevate Underground Lab with the
CLA on guard!
</span>
</Bubble>
</div>
</div>
</div>
</div>
);
}
}

View File

@ -1,55 +0,0 @@
import React, { Component, useEffect, useState } from "react";
import { NavLink } from "react-router-dom";
import "../assets/stylesheets/navbar.scss";
import { useContainer } from "unstated-next";
import GlobalStore from "../store/global";
import Hamburger from "hamburger-react";
const NavBar = () => {
const [navBackground, setNavBackground] = useState({ backgroundColor: "transparent" });
const { toggleMenu, isHamburger } = useContainer(GlobalStore);
useEffect(() => {
document.addEventListener("scroll", (event) => {
if (window.scrollY < 10) {
setNavBackground({ backgroundColor: "transparent" });
}
else {
setNavBackground({ backgroundColor: "#232323" });
};
});
}, []);
return (
<nav className="navbar" style={navBackground}>
<a id="logo" href="http://localhost:3000">
<h2 className="navbar__logotext">ITR</h2>
</a>
<ul>
<li>
<NavLink to="/">Home</NavLink>
</li>
<li>
<NavLink to="/about">About</NavLink>
</li>
<li>
<NavLink to="/projects">Projects</NavLink>
</li>
<li>
<NavLink to="/gallery">Gallery</NavLink>
</li>
</ul>
{/* <NavLink className="nav__login" to="/login">
Login
</NavLink> */}
<div className="nav__placeholder"></div>
<Hamburger toggled={isHamburger} toggle={toggleMenu} />
{/* <div className="navbar__hamburger">
<div className="navbar__hamburger_line"></div>
<div className="navbar__hamburger_line"></div>
<div className="navbar__hamburger_line"></div>
</div> */}
</nav>
);
}
export default NavBar;

131
src/components/Navbar.tsx Normal file
View File

@ -0,0 +1,131 @@
"use client";
import React, { useState, useEffect } from "react";
import Link from "next/link";
import Modal from "react-modal";
import "@/stylesheets/navbar.scss";
const Navbar = () => {
const [modal, setModal] = useState(false);
const [modalOpacity, setModalOpacity] = useState(0);
const [navBackground, setNavBackground] = useState({
backgroundColor: "transparent",
});
useEffect(() => {
document.addEventListener("scroll", (event) => {
if (window.scrollY < 10) {
setNavBackground({ backgroundColor: "transparent" });
} else {
setNavBackground({ backgroundColor: "#232323" });
}
});
}, []);
const modalStyle = {
content: {
opacity: modalOpacity,
transition: "opacity 300ms ease-in-out",
top: "50%",
left: "50%",
right: "auto",
bottom: "auto",
marginRight: "-50%",
width: "100vw",
height: "100vh",
transform: "translate(-50%, -50%)",
overflow: "hidden",
display: "flex",
flexDirection: "column",
justifyContent: "flex-start",
alignItems: "center",
backgroundColor: "#232323",
minWidth: "30%",
minHeight: "30%",
animation: "slideUp 500ms ease-in-out",
border: "none",
},
overlay: {
opacity: modalOpacity,
transition: "opacity 300ms ease-in-out",
backgroundColor: "rgba(255, 255, 255, 0.15)",
backdropFilter: "blur(5px)",
zIndex: "1000",
},
};
const openModal = () => {
setModal(true);
setTimeout(() => setModalOpacity(1), 10);
};
const closeModal = () => {
setModalOpacity(0);
setTimeout(() => setModal(false), 300);
};
return (
<div className="navbar" style={navBackground}>
<Link className="navbar-logo" href="/">
ITR
</Link>
<div className="navbar-links">
<Link className="navbar-link" href="/">
🏠 Home
</Link>
<Link className="navbar-link" href="/about">
About
</Link>
<Link className="navbar-link" href="/projects">
🤖 Projects
</Link>
<Link className="navbar-link" href="/gallery">
📸 Gallery
</Link>
</div>
<div
className="navbar-hamburger"
onClick={() => {
openModal();
}}
>
</div>
<Modal
isOpen={modal}
onRequestClose={() => closeModal()}
contentLabel="Menu"
style={modalStyle}
>
<div className="hamburger">
<Link className="navbar-logo" href="/">
ITR
</Link>
<div
className="navbar-x"
onClick={() => {
closeModal();
}}
>
</div>
</div>
<div className="hamburger-links">
<Link className="hamburger-link" href="/">
🏠 Home
</Link>
<Link className="hamburger-link" href="/about">
About
</Link>
<Link className="hamburger-link" href="/projects">
🤖 Projects
</Link>
<Link className="hamburger-link" href="/gallery">
📸 Gallery
</Link>
</div>
</Modal>
</div>
);
};
export default Navbar;

Some files were not shown because too many files have changed in this diff Show More