From da6bb612d95b1487ce62e371ebc3cbf20383c1c6 Mon Sep 17 00:00:00 2001 From: Elijah Melton Date: Sun, 21 Jul 2024 15:45:16 -0700 Subject: [PATCH] added workflow --- .github/workflows/deploy.yml | 30 ++++ package-lock.json | 340 +++++++++++++++++++++++++++++++++++ package.json | 6 +- src/App.tsx | 2 +- src/assets/hcplogo.webp | Bin 0 -> 12736 bytes src/components/Layout.tsx | 133 +++++++++++--- src/pages/JoinPage.tsx | 96 +++++++++- 7 files changed, 571 insertions(+), 36 deletions(-) create mode 100644 .github/workflows/deploy.yml create mode 100644 src/assets/hcplogo.webp diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml new file mode 100644 index 0000000..7a4b86f --- /dev/null +++ b/.github/workflows/deploy.yml @@ -0,0 +1,30 @@ +name: Deploy to GitHub Pages + +on: + push: + branches: + - main + +jobs: + build-and-deploy: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v2 + + - name: Setup Node.js + uses: actions/setup-node@v2 + with: + node-version: '14' + + - name: Install dependencies + run: npm ci + + - name: Build + run: npm run build + + - name: Deploy + uses: JamesIves/github-pages-deploy-action@4.1.5 + with: + branch: gh-pages + folder: build \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index b791977..ac6fef0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -29,6 +29,7 @@ "eslint": "^8.57.0", "eslint-plugin-react-hooks": "^4.6.2", "eslint-plugin-react-refresh": "^0.4.7", + "gh-pages": "^6.1.1", "typescript": "^5.2.2", "vite": "^5.3.4" } @@ -2936,6 +2937,21 @@ "node": ">=8" } }, + "node_modules/array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/async": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", + "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==", + "dev": true + }, "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -3115,6 +3131,21 @@ "node": ">= 0.8" } }, + "node_modules/commander": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", + "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==", + "dev": true, + "engines": { + "node": ">=16" + } + }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "dev": true + }, "node_modules/compute-scroll-into-view": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/compute-scroll-into-view/-/compute-scroll-into-view-3.0.3.tgz", @@ -3255,6 +3286,12 @@ "integrity": "sha512-cTen3SB0H2SGU7x467NRe1eVcQgcuS6jckKfWJHia2eo0cHIGOqHoAxevIYZD4eRHcWjkvFzo93bi3vJ9W+1lA==", "dev": true }, + "node_modules/email-addresses": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/email-addresses/-/email-addresses-5.0.0.tgz", + "integrity": "sha512-4OIPYlA6JXqtVn8zpHpGiI7vE6EQOAg16aGnDMIAlZVinnoZ8208tW1hAbjWydgN/4PLTT9q+O1K6AH/vALJGw==", + "dev": true + }, "node_modules/error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -3658,6 +3695,32 @@ "node": "^10.12.0 || >=12.0.0" } }, + "node_modules/filename-reserved-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz", + "integrity": "sha512-lc1bnsSr4L4Bdif8Xb/qrtokGbq5zlsms/CYH8PP+WtCkGNF65DPiQY8vG3SakEdRn8Dlnm+gW/qWKKjS5sZzQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/filenamify": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-4.3.0.tgz", + "integrity": "sha512-hcFKyUG57yWGAzu1CMt/dPzYZuv+jAJUT85bL8mrXvNe6hWj6yEHEc4EdcgiA6Z3oi1/9wXJdZPXF2dZNgwgOg==", + "dev": true, + "dependencies": { + "filename-reserved-regex": "^2.0.0", + "strip-outer": "^1.0.1", + "trim-repeated": "^1.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/fill-range": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", @@ -3670,6 +3733,23 @@ "node": ">=8" } }, + "node_modules/find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "dev": true, + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + } + }, "node_modules/find-root": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", @@ -3791,6 +3871,20 @@ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" }, + "node_modules/fs-extra": { + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", + "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -3836,6 +3930,56 @@ "node": ">=6" } }, + "node_modules/gh-pages": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/gh-pages/-/gh-pages-6.1.1.tgz", + "integrity": "sha512-upnohfjBwN5hBP9w2dPE7HO5JJTHzSGMV1JrLrHvNuqmjoYHg6TBrCcnEoorjG/e0ejbuvnwyKMdTyM40PEByw==", + "dev": true, + "dependencies": { + "async": "^3.2.4", + "commander": "^11.0.0", + "email-addresses": "^5.0.0", + "filenamify": "^4.3.0", + "find-cache-dir": "^3.3.1", + "fs-extra": "^11.1.1", + "globby": "^6.1.0" + }, + "bin": { + "gh-pages": "bin/gh-pages.js", + "gh-pages-clean": "bin/gh-pages-clean.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/gh-pages/node_modules/array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==", + "dev": true, + "dependencies": { + "array-uniq": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gh-pages/node_modules/globby": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "integrity": "sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw==", + "dev": true, + "dependencies": { + "array-union": "^1.0.1", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", @@ -3919,6 +4063,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, "node_modules/graphemer": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", @@ -4137,6 +4287,18 @@ "node": ">=6" } }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, "node_modules/keyv": { "version": "4.5.4", "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", @@ -4210,6 +4372,30 @@ "yallist": "^3.0.2" } }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", @@ -4365,6 +4551,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -4450,6 +4645,100 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", + "dev": true, + "dependencies": { + "pinkie": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/postcss": { "version": "8.4.39", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.39.tgz", @@ -4966,6 +5255,27 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/strip-outer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz", + "integrity": "sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^1.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-outer/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/stylis": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz", @@ -5029,6 +5339,27 @@ "resolved": "https://registry.npmjs.org/toggle-selection/-/toggle-selection-1.0.6.tgz", "integrity": "sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==" }, + "node_modules/trim-repeated": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz", + "integrity": "sha512-pkonvlKk8/ZuR0D5tLW8ljt5I8kmxp2XKymhepUeOdCEfKpZaktSArkLHZt76OB1ZvO9bssUsDty4SWhLvZpLg==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^1.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/trim-repeated/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/ts-api-utils": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", @@ -5083,6 +5414,15 @@ "node": ">=14.17" } }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, "node_modules/update-browserslist-db": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", diff --git a/package.json b/package.json index 538d398..f15bc92 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,6 @@ { "name": "club-website-v2", + "homepage": "https://hcp-uw.github.io/club-website-v2", "private": true, "version": "0.0.0", "type": "module", @@ -7,7 +8,9 @@ "dev": "vite", "build": "tsc -b && vite build", "lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0", - "preview": "vite preview" + "preview": "vite preview", + "predeploy": "npm run build", + "deploy": "gh-pages -d build" }, "dependencies": { "@chakra-ui/icons": "^2.1.1", @@ -31,6 +34,7 @@ "eslint": "^8.57.0", "eslint-plugin-react-hooks": "^4.6.2", "eslint-plugin-react-refresh": "^0.4.7", + "gh-pages": "^6.1.1", "typescript": "^5.2.2", "vite": "^5.3.4" } diff --git a/src/App.tsx b/src/App.tsx index 6cbf99a..5f33f7c 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1,6 +1,6 @@ import React from 'react'; import { ChakraProvider, theme } from '@chakra-ui/react'; -import { BrowserRouter as Router, Route, Routes } from 'react-router-dom'; +import { HashRouter as Router, Route, Routes } from 'react-router-dom'; import { MembersPage } from './pages/MembersPage'; import { TeamsPage } from './pages/TeamsPage'; import { EventsPage } from './pages/EventsPage'; diff --git a/src/assets/hcplogo.webp b/src/assets/hcplogo.webp new file mode 100644 index 0000000000000000000000000000000000000000..96ea2099f33ab05766727143c58731adad141067 GIT binary patch literal 12736 zcmV;xF+a{yNk&GvF#rHpMM6+kP&il$0000G000230RWx=06|PpNJ%dM00I9eBuMc8 zcxyzY?%@yH|MgA#|GTH|r7nR&afZt%P~3|Tx8W{B#)iAYaCdiiD6WMHb$3nO(?;6d z{%DftBhP2{_Rr^t=>G)J|HIs)NwXFmyhjY^+`e^lPpALhXfk2xna|})XjJ7r*|l)S zh&KN{VK(JX9GF%_`#rjTZ2OAg{~F#l{}o~}CSC>gg;~YgX{;&_A7%5e;Q6KXe**gV zFc!}=rVcjbQirIqss3sDR0RNqp^xt0II{0t8H<`J+dH}HJ)i5{PNsY-x#dP08sUC#hyb49wtDypEq^Zb6s+_SYC{6M~+NROcnhL z4Z3bt@0BYp+e@^~-sC`Yp4&Hq|M+_NtFF0ET9_HWk z)MqwvIRl4DpF0lz+DBx_?Nsr3Lw)DLU{Rt=_sq$)9tSzJ{M@{L>`b1#h;d(%-MkN8 zI$n%qzYPkU z$Zbu!cyR6>$INV3uc%JHr0?Q~<>v&qm6Gm*@y+d3l6ahCxLz5Zqm*o%@C4OB#>-NE z070Y7^i<1?ipk57-Q~FKpzYyQSHr1V7@aHkYur9feo(Is&8nCs;&eJkJXZC)(a>|Go?Sc|q_DFn2;)hsL;5t2PqCV-Lsf-%GDF?_qFyek_HD6G5r?y_QxF8E| z8i6}KvP#?a$@^sMQ)Hl_w%b@B>DP4?uaHj_1q4H7z&0j1{W#rZ=wR@(1Qib3T}8*C4*6?*#-lLzUZa zk_}7o(~%c_kz4nZWaMN7H%F!Ywd@)C!zn^`+w+mUGRS8_41nA(pR{|qYu@p4R)Fe~ zx!y5Lgs)o>?zAZ?Z9k|eQ#>bqnFi;liroF_z_%50#5?OLuOwwavrXkiecDcU)aI9J zrB4V#x}(~0vSiB%gt_oyF!JgbmX7)x!HpqzjH;ZXHw+#q9=Cq3DB9KH9{{o|_a7%~ zr|ar>p8952wW|LOD7yzK9@Pqz@AQmFaZQbyg3TIGSf@LvQXf?QYPE! zlakg>o0g~^UV_MFP&sVN-uVsD{1}CNPbfwlLU2bY?4_8bFGQ;=QapFbq+@Em1QZ8` z1(ZXrT&1S6LPtPU2mRumho`?wadW$@c+^Unq~*cN!=^-JWZ1tncg_wV;{c#~D1&0B zfgYM%fvR~U%MmasUvbygrje!&P>q)(>M&Hb?&R)ILJU8~B1a76h^zS788WLXjMf(o zatqsaEvQ^#aadXLt^2@KC6FHZ@!Hm9Cu)Qo*;}D2l#J6SwvSOd`w8;@OvbzJg}B_M zB&P!rIX@a`>QhqK_Y8mps8x(K);qJxfy13+ftx>(+f{u1u_iC5rc|T42rAofq=7Hv zkW&{`KA-W!8!}s9h@P+x#sRZW6?-lIF3(@q>3Eqea^>$`T%23~5d{89x9gG7z~|Y( z+tZLPx`=`aFL95E$T}l`w(-1@+@a^8rM$DgnVbi_9i9ZW7utWXm@d*V9I6Q_08m+1 z;H!!+3y{+dRlQU3wI5{mKtDZkSXtU(e1)%FkNouZPUmE@6ZOd4aqRV^f}i8rfJ*&pbnAKc<`+$pwbxM_511Iy`B<#r%Zfo z)(!uC&XNrW&phyp&M1=V4n>{y#cAOFdf@p9VD4Qg=D$Uljhb5DQN5zR1Tm-NT429k zX;%WsPX2(}h*5EhmnQvXinTS2PXe1XsBlb)0B1fpMj-tts#^k?ageS6TI+{_vfS>Y zE53_26wb74P$XYw(RqK$r$241#FnJlWB&0+QAIjJQ78S-Q;O;drBIBkgnwrx{D)L4 z7Lod%g;33T3OtF>rr2ALG>8W9=o8dR_N5@cMXw4})Tv?e4yaVu6i@H+RMRXG8dVce^CB7@l zErrTg0pH6id^iZqBh8+LU^!P`7rjuIbRs=EX1QRoxf zAw*&OEY^OuT_DZscu5|Smh8~sdz)V*&uuvok;!kb^O+&QU3ji3sCpZYnk8q8fYl|4 zanXXNGRd{m6CFyS?T15ve}}g~!6;H|QL2Ud{k)j14#1IWHBIzG&EM>3>KwC$MI#Ju zN;)Uzxpa!`-=sRtkp&TTy;Q;qH!KBr2*`T`wIQE?FQ0+6q^rc=8+_TEuyCpAfic)7rL_UeEaM4&`9p%tmaUCeR zSA>K{T9KEOMddVoP(Ptso3d*vR4hFK;I^R#OF5^td=UBRz3usnM4vtby>=&>ae+>tOKECR1^>y1jRbi-ejko0TLPruhv6otNQp8_`I(YxM@flJr$gm z@FJd*s(Mi5{^)h>@^<%?0ONIiP4m+U^DC!F+Hm-H#aRID80gQOWcqXvmg zuvR$r%UBF1hE5qQutQKzufg_j()x-ZdUGqTt7jTX@!bn$4a=)$4o2p3ptg>vVJMSa zYoQqWf#FMg7PN**c1I!Y0^4_X+C3A*vT{yY9(tyU0>Rx--at{kW)yPQ1C4b>Es9vE z)(B;GB?HwcV(J>e0uK#^(^1Ms(t)&pCy3qPoTP7BR3WMzDm$rEI~O2tFW{{+qlFa= z@IxSVW5MvVF&p|#&O$oaP$*{cV5-FHSz@>etIaYU6 zKZgPK3!Gbuu^*npK)k&u_Q-hD529A^GYrEZPE@e*h{iw(&w7$ROR4 zcYjy1I8M5K$|TN?ceNtHRJDk>Pn2-$!-K9d+-9&7*`KL|TG`KQGloTJC@;wlSmji! z`{mRMdC7DWCRrPx^*#|FXf*?s72oQof?>Ibjy&ZoaE^By!1kU2gE`>dlLtdexlLo& zGy-Z%0uBs%PyvqdTY5Egne(Bz?5HcJ_CW3-?N0E+D~}tN@yzHjSnecUFK43k=2@du zHqrHn;hzk8@L&SCPhmDA6Y4{LWI*$y8|Nu7Rm+D6w3_pgRv{F_^?i^j8U(W+W%ZMcf|mIqH3> ztRnS*mHp1rj8+^5gY#v6&;bU~{4xv%%jrfsqcJiTrDJ&28%&i~jhO7@R@H?E3mJ@N zBig8h4pr5~7khdiOaro)I?XIgZEvL21a7x^(oDrI+k{v1z%ocoy0`qn0{$*MGEZWY zWJ^r{;il-wgTELIVRKjk#vfj$pr*X!=K}9-843iBJE$t`q}42L4|!r%&aG$wpFBcX zRLmnj4v@0I6dtXqVp7qW*dF3m(T)eJ84P5yM+)w#$MygS_fNsMor8y*jV~(=n$qbl zAio~3%KufH72KZj#59c?R`6*vScVWk?=VTU~2DjB%{ zeJr&S>Z_#1etoS61jtHPn(r$Ho`oxu8)~tE+Y6o;U1qS4M~*p6#_+@>n+1;XW*wM* zaVEy+xV>+|gFW0rIx|?T01tnRusc#&alC2MS5?)!K1d(hXfWB!?JZAeE`wwI5nThz zPa>Ys3MNHuc;b@GB)>ngzRm5G84u2J^Q*;ebP;smzVu>nhClt~ERx<#RhpF)a(8|2dbQmhEg7{@al4|O(FiG6=k2#OCe4PXgHI+aUNrWTpEC7% zMB1Cb;ug%8&J0fS#IBIZMdG(Z7z@=Doz;s1!~8a+!`=+ERF(T5nL46xJ2P%x;C@cK z=6PUTaJ(ULHhWa$(=_NkaW;Q1n86J8^W*_oR=Vwq$Tfs{>%Gyx<~YLOU)IOY^Tn5$)n8UBC+)Kd?+|NW5=b z!6L+6H`Bl{w<+m#C~q{Xs>&lyZDg=bo4)02@+XLhwTMjsw+NmXf900nkr$&CEMzN4 zfPb;TG(%mOrm{Fex*f(h098em4AyGl{2ok0IuXCke+tE{m|MC5AFPAGGQmO!CLdX3 z*V4seIfKmRIvUQe2djqn>)n6AJ_d`lm0i0YG(m6%bxJ)1)?sql+Dn z0oz`ys{&Lv0L66D{d(R(RaMC#UW1o}LDg9L_wcIX7TZ8~hL6Cqq9+NtvjljO3)SLm z01BY&9S~8c$=fMf8IH|d8wA9csRQuiJ@B4*xRYl)`qi&rubz@yw1(AS_(LR&3_+Ma z1osQ1`~E5>k4V^SfyjS=@7X}i9^l7h;Iv0z!3>e6Kd(BP`4?8n3IS<}hRM~)apJ>a zo>i7f0*?$u$b`$xae_!!+de zRi|DKRq4oHsSh+*Tr9up10bP>Z=~6K%8GRd9)DM=YN)Cd@`}>!GbB|o9THa7^;5N-9j+^ll0*wt%Cf3u*bl5(zcHj2nN@;j(l)E!|k&c zYDG=k{@SHmSMSbV9e-`#w)rna#yhyF=GSPL%^;TkC0swq!Sb1v&g=@A#F^-W;l*0j zyq^jjGSI@}sWJ%+#~AW}j_8c(eg*?-ER!=>uSb$~(j)~Mza(f=+>>;^2TX^O9<+!9 z%b2uYTJ*^NIi5vkEk5iJ!a)YjYMcc3a(m&F@X38sF`x)30TB2Y+MXw!H%VpUYpVxD z=fN^g92o4O=}74akFN~y4P7`KPrqyLxRi3;5`69JkjzxW}!+ zfym+*gPkOxVm>q(bRh>Qf4%v5Du9?KD@e2Cyu2*8{e3V40lV)@VR*XHwrMtE0)8&u&f<78t|7Cp>t?E!UQ)wwzm1 z1N~F0cB8d^5~&;js`CQ(G_W2LTm=-L9~TDgbDEOwU9y>MH`D{?z%r!%yMq>ngPk>y zHJPMNG#;27$s*lSS0lLH<-u!i=`~c`-jH5Nt>10L#t$;6PycaxQOCO7rYE2Z@keK# zRaGPUyB3LF#KZMq8QXw_Kdg+&mRhYJH6ZOB_gOmo{WF~f_ULLjw<|pO%q`58s2RAQ z)h}h?8R_|jDxfOr&X#lcZyY>$`FSE#2%b0QpDdvK7g)-MYs-QkA_`&*)9s?g&0jiio`;-9iA`(DIJK|%lXcnr4 zB>Z2>ncOra=5yc1vrzTX%@A&@gm8jL6v(a2M86dO`8Yz&j(I3{s=`si|@<4}NkxNF++; zCNb16@&Nx2-|rvZKH9re^Ex)x_KjA5$b+mZW$TbjF;bxV^}c91kUPnW_?gH;-id_2 zt%^lSJJP9DJPS=kx{Adk3*mVef}!khL*3A7CYdg}7@#J15ugN6h03Nv z*g<3<;TC2js0?no?FWyZIC-6pDy~U$rugUKS0QNR5}P@HIYFsH$Ou`rE-%+M1+Tj1b%ye zap{DSJzCUhHv7CkAghkq*02ArL{#I;2s`5K$TAk!N%-@?Qrd}hZFYo7R(l=v2A+ID zT7Ojjt-_DvC^r+rLL#F=ZZCwDz%A3haic~J>p0uHy0|x=dE#Sc1t7~g=WW^OLXI4= zZ+)zYzgEw{u(FBpn#h^#BHg#oWr53rSd9iIgs-1(CAj4eIMkbI`*^|@w!tbi`^vr*I?;y!vi|Pq}rREcXj#d z8;J2jMQ=H7u1B#T1`*X}aM@T;q1=ie234qlA{hY0-`YH_?}&xhLL~Wlp@$~cA$}X) z2g4i(;mwz_C>%k2w9IFLKtpC;%F?M95Yh(aP0Db5DGK=z&aE#|O9nR#g=F%boBYA) zcOePkcaE+a)3rhUwi8bTN^(omKP>jDOT2HZVo*KONN}DpV0ni4xsnO~WY)f{WWX_e zYlpJN1|LxQ5V>=d&8{XNJ1bqn%-;>~LC4=Q%W8Sz1Gs$Yih+buim*Z$F zNNQit@g53){=Cmr<5vK5ClX1x#R`hHaVu|LyH0I4(u2QdF{o}XIK#b47MV?mzvC)d z;Fb}iXQ|@lk}WM%sqSa98xO^6p4>0R#dtM0GXXCmQ7pGCVJ+j9VNCkbbT1el6bY_- z1sGPYBpw^QW>VFK(Y;jhGRdMARdKEdGsVMXS9o%)7<*&Y97%<$1Ci)6w_;(9(OVuB z3=-;)(5)YX?fYr4q<_mCQMF6i5F&eaQODb_0LqXPx5k} ztjWW$pLlZ?SRR9yRz$R#f$x7r_Cou-tAJt}3H~ZrhScI4O=p7rOb!Q&=cd=E4|iOb zC5ihd&fv+CTnzHZ!^6PrXj~&A>dhdxlaSizsfI~FnHH);Wx#g>!3`{8p&CoPH+{vV zpgxnI;+d)L^zw>$X@a~b$K|5m5A0q842;C48t!ri zB`pQiQl*#NLQwWtj-(fAN=`|D6Q)8l8dlAsuptR?4wLF>4EBF_9~bXNw@!%{Mu|K9 z9LSF^gL2UG2R1GPx<+Di4ePfI;3J@>ReEUx5by|97n0O`y#=H-C80ayg5`V?WUa?6 zkm$%{M6?@SIwoEaDQ@rApC8YAWyAX`*8hQoUn8-u22Ex$Pe6^z^^ws}RF766az9W2 zR4z^jc9P(afaPa%VNm-_7FB;6bJ`y0?i1}s$IrUVi553|`x`&5b;u0u_yw!x;d{$S zELGD!lfeU1;WUuwqmjVbr@(+LsP+Q4_X7EK1lLN+BBv<{b%lZf%3E<-6XxD4v=JS@ z>pUsSjb6><$Nt8del0&?@r=wj4I?pEjpzY`G)v*QKU95nY{r8wNCF8C*5>wRB zat8QSICNf3>~%H%PxZot3T(R%`HU<`ugmcFSs=zfHtHym0WR3^sCLR&(?xrU+NfEgChDY`kGu6jUzvRM zZsd#%L-Ki*?C-t6LqoxhP@?p76_;xy?9=LS-%ktqY7Qn*t?1r0rwLK!^!9hr9zTAp zaL>3b_D%L4lzmbh8fm2A8w;%F(X#J0b;1{$HV!hTK4!E~P2@h{{ujJntOqPEA*O4* zeEn=x9es=Vfr%*SPC~cO0=5T%W4x!p#Ifp>TXHlZv6*%hKEwLTJIC(vX7q5A)0!|- zUMzCYxF~)W>(DX#pj&7lY23)9pa*X(U;0@6mEvS}__e7^m;)UK(lZgU3Ap?ezH{|J zT@`w+tcb1m14*NR8LNOBB>1C1#71zeo=igTu2O@*`6Zfg%tE`LYn%^#H#AN$qgzK@ z7DSoxVy1h>8S&Fd(-xBLZlPZ_*~?fU$$~F~U)t1*dtuQbyp!p&Hx@QQz=!t;{}VWN z1Fxp)flKlS9?8-PeSu*gtA02pL*86)-bE-JB0=UCtzKIRj{a1Ko#&PKBvT{rpxuvM zE;~XDL}Au+^`hJ4NPdiUPd_HUA7aobca>Y{drhLFNoW(Gk2T^>Itt=YIb?)z4q#7W7IJdFC^b9pgvWXZ4%r zhc)s}pJXyF(1W(z2dpkB|mtUv^tM2QH7rnXL%*@yEK|csW>b^-{{b|E_%P;EQ{s zrDa1_SK|+3p&9$5+GmZdU}AqL2x2RA>EPxY<9EuWTF> z>1y-+g}qbMc6x{7e;}m!E394%-yUTGbNQB5XK?Oq+v63tx+a(RpN`7KBy@|Eiv2d5 z%Z@ZCSEIO*0&F0C>6orYzHXDMXk`F!_$$KPnea9^h>Q{!x?O%ncBRJT_m5UIS;?ko zw2nNVwKD2i;ODr#=r@z$Mg2_w&hVo9IK2QNjUQswQuuZZ%P{Ttv5u&N`bpYNFJA>{5GZpxxXeVb{YxkD;XwC zb35~btV@Z$t=CR;lnqKJSm>gO-!x+z-&B_tNso;!uRJmFh`dU43zw%MwApPepA6rY z0U4G;GX4}U7E2CWuBqH#Kdz`rSKxQS)r*m~Ge288wq6m^BY|j#BFI~k9=!~_USB3V z)+eKU@u+It>6=o}R7hXQFk!sgsYhg$PV{Y#cI5Dk4RHHcX7&qHw_8~Joi)|ubaE@B z{z3K4SH`##UB<1^s)$xMv34}xHh7n5E2MVm3#|{wwsK60Z!)Fqy2B%Rkb&S9W{)y% zpY_u95O6aCxuYKgvq_(NCIj>5l^1$>rDrwUUMU?jt{~J_STUW>WOtYcC-Ppx<&zN`pz z6kNZUcGNs=SFL|gG9t42sl#g|H6}fK3D_mRU9sGBZ05#JspZQ}w@D@%3#w5KqY$DG zVoo$qJG}W`S>t;W04QEB>F3>0jb-DG`%=oYZ#6To_quqC@h@*a+nP+v>}JwSGL496 zDc-jTOB}QZ$2-J)7vIkAB%po4mYyN!%ziI9VDDQt)>DGnBy^GQ1w)f#Va|;+%cl-1 ziLN`LsQfq5xAkI?+t~eUMoXhrk!{*b3dS1mjqN3rpc)p+H`idc2pp$6twAD=d5b^z$_77dPLye$+!zjnVmjE&Y?n zuE)7X5dm&jvS$dV;g<;}Q{p`A9%R?=o9pNF7b5Eju71W`YL>mp;!Ndrs|SU>ouXv_ zkp3N^R30~Xh`(uTe)_h}z@oz5_SdpI3Bvf0Q>AP$WNe6j+!DbTtrNqW&A5*(`DUEN|t@NJLR(YhA9uh5=XLm9h zmgQq)dv}`UN@-zdmrq&kgz@D)8AhrLBYNGC0U6xkp!)dRgEBxNkNKmHt+>OuRXbPC z8X$JFZQS*0O1WgaMV&n*{GzT3^( zgfub#C&{L9^e3}{g}F|GYnc4Ve4PBD{mY8!mXVTywPlz@`qMMYSVC5RKZ0ji{Xhc-Hp0LPA8377;*f9v(M8W)7RaBAufWemFOki&lJQhO=Blw#$1g2yFG>%aHx0XL zD1>WY$S|~-(Uv=87)|tgEE96~)#gGbQ1NtR+b(~6P(fJ?^@W95!DlBnwV&Z%9yPI+ z*_!N|4o2RYTS%iQ1;dVGL)+}9wcjNUURrfrFi&5KU1R20E=uZR5#a0Kl#wMCT%)9` zR`WQ{qr<1F(u;L^W!7x)pBlkB3>%JVP{hJMa4NY zBk$a8##%&R!kU8Zp4o5fKgZ-LITwZUOTi|K?NKc);$AxSOr2n|x#FOi(2TFAxH*NE z)axRdX)?O>iNj@t)zVkgB|E6G*=5NpORH1IES%rQJDaQx5W?C3G79_MZS4~>EGBxk zmJt~q(FB|tc_0ck<#{)!^={a(L8B(kJ9rH|6<1W8c59HC`~1v|r8X9mVwRG&{`h@r z-ac{0x0W|Cw_nb6p`1@@;ShV>d`!V2o40;0cF8#%Na!sSmRl?<+h=|w%(>S4jC$R3 zq(e!6Pb~`baSkavXzB6h594ML7tO843SoRG8HdkxU;B&IP2pwFNf9({c|6-HED1vegGX6I6zPxFPVYSFZhDzaUY?zuol#UAy|+vI z2F_lWlS@;6w>29TnKGEPKP8>-k#oi)D!A)<=?3?l2f`5TEbQv=GTy#t?j_3|iFUT1 zN`?uKi2g|$V)-$qiK*W^m)dz*o}|x>?<(?Jdl#0BGF|e=ymos;%oU2Y>4CHyrtrl z+x7j>Z(Qy!_vDwtsGs6***$ry)w=v9bw95)>6aHsda;Ckp3B=hu_fK)`t7g|!zqQKU>l*Q15Qh7UMp~UruTwYdk>!YB7xR6^!}S9Z zJ^0|{6!6HVNkKqu((|st@)tHe)5eh4RWMD$jZDMmx@`0%!&E!bvy-|Z+X0U?Buv`) zzM@)Mm@lbDcD5u}QucNIuuh(JXJ1LpJnTu_-6fmq{P@~%rDRg=^!=`HzZnX_LlPwR zNWWw?J*%hnr9I~LW4;>e4R3dgHEAB^$IFM3-ZzhvPj_9to&?+_SY#YM(P`%sGRQR{ z--9|LGH-n?R{;PCch<59!f1p({<=#ayI+!FDML<|OFxU&$c7 zwZ-|XWLrY?d9}`n$Yk=Zc&L?!Z5+^}OYa^%`%YSago~`i$e=gsvWG zb6tL(vHT;gmjFarVV?DJKh~X6G|%GH9eb;wkM{b+WSoV~wKvB91~e(gP+0W_6I~(N zI)_~D6211~0}(Zvyy;#h02MSB8nH3w%kA@Ka_~D>$tm@K#eof3RtgWrB zEG*1TNXMq*M@wF-`X;al|+w5P58Kc7GmW(jj4r$?(F_^k3RbzBK+NanF0V-P&gn+0ssK8F94kZDy{*a z06v8>lt-l^q9HXNr~sf4iD_=&!4vpr;0Ndj@t=7l1>g_R58xP}7GOVsegJ-ee<0Z5 zS!)XapdY|L06#!K|Nj2>_*xm1{of`dS#Ruj#5xOiAbxikqB3+C1en1OjnXDri%N@8 za3=hVZ(3(2Tq5~I(y5V(WeBvua{1x=-L;}|I)H^r-iomB z$#wmw1l6`Qp$%6DMwD$f*q-}edUR@)A}wfUdWonnaZ@0iswM{ZqSO>P!T)MN2ZH0f zO&DchIGj?xiViPReOdI{P)EV30pccZ>*BJvtaCqF$Tsc&S-->bhoQ!c#M`sp6lWWN zqb$bb{U`#aNZ3YH@>sNy7mV-X8AH_u6{Th5p5OJwJ^ms<@CG8R3nt&eQ-mGyQW>I2 zWAgG%qj^S}czmIJ7PWhu-~jX*9V1k~|MP73?U9Dxh~`tRX zxW|;bc1dY9_;+-Zs;iE`gz;jM`2rx+No9NLrae81G`E6sD3$gy=!B7KNq6f@qG#_; zF%rqML+e-Yf-8M}MbAk>kwtV-#h4B&Nvs=yI4E~gD7B!#|NiVN|NYhhf@YlO^HeoE GfB*m`;pnOW literal 0 HcmV?d00001 diff --git a/src/components/Layout.tsx b/src/components/Layout.tsx index 7cff381..b832289 100644 --- a/src/components/Layout.tsx +++ b/src/components/Layout.tsx @@ -1,48 +1,131 @@ -import React from 'react'; -import { Box, Flex, Container, useColorModeValue, Image } from '@chakra-ui/react'; -import { Link as RouterLink } from 'react-router-dom'; +import React, { useState } from 'react' +import { + Box, + Flex, + Container, + useColorModeValue, + Text, + Link, + HStack, + Button, +} from '@chakra-ui/react' +import { Link as RouterLink } from 'react-router-dom' +import { FaGithub, FaEnvelope, FaTwitter, FaLinkedin, FaInstagram, FaChevronRight } from 'react-icons/fa' +import { motion, AnimatePresence } from 'framer-motion' -const NavItem = ({ children, to }: { children: React.ReactNode; to: string }) => ( +const NavItem = ({ + children, + to +}: { + children: React.ReactNode + to: string +}) => ( {children} -); +) -export const Layout: React.FC<{ children: React.ReactNode }> = ({ children }) => { - const bgColor = useColorModeValue('gray.50', 'gray.900'); - const navBgColor = useColorModeValue('white', 'gray.800'); +const FooterLink = ({ href, icon }: { href: string; icon: React.ReactElement }) => ( + + + {icon} + + +) + +const MotionBox = motion(Box) + +export const Layout: React.FC<{ children: React.ReactNode }> = ({ + children +}) => { + const [isExpanded, setIsExpanded] = useState(false) + const bgColor = useColorModeValue('gray.50', 'gray.900') + const navBgColor = useColorModeValue('white', 'gray.800') + const footerBgColor = useColorModeValue('gray.50', 'gray.900') + const Logo = () => ( + + {""} + + ) + + const toggleExpand = () => setIsExpanded(!isExpanded) return ( - - - - - - - Logo + + + + + + + - Members - Teams - Events - About - Join + Members + Teams + Events + About + Join - + {children} + + + + + + + {isExpanded && ( + + + } /> + } /> + } /> + } /> + } /> + + + )} + + + © {new Date().getFullYear()} Husky Coding Project. All rights reserved. + + + - ); -}; \ No newline at end of file + ) +} \ No newline at end of file diff --git a/src/pages/JoinPage.tsx b/src/pages/JoinPage.tsx index aab6ac8..2036055 100644 --- a/src/pages/JoinPage.tsx +++ b/src/pages/JoinPage.tsx @@ -1,14 +1,92 @@ -import { Layout } from "../components/Layout"; +import React from 'react' +import { + Box, + Text, + Button, + VStack, + Heading, + keyframes, + useColorModeValue +} from '@chakra-ui/react' +import { FaDiscord } from 'react-icons/fa' +import { motion } from 'framer-motion' +import { Layout } from '../components/Layout' + +const pulseKeyframe = keyframes` + 0% { box-shadow: 0 0 0 0 rgba(88, 101, 242, 0.7); } + 70% { box-shadow: 0 0 0 15px rgba(88, 101, 242, 0); } + 100% { box-shadow: 0 0 0 0 rgba(88, 101, 242, 0); } +` + +const MotionBox = motion(Box) export const JoinPage: React.FC = () => { + + const bgColor = useColorModeValue('grey.100', 'gray.800') + const textColor = useColorModeValue('gray.800', 'gray.100') + return ( -

Join Us

-

- We are always looking for new members to join our community and help us - grow. If you are interested in joining us, please reach out to us on - Discord or LinkedIn. -

+ + + + + Join Our Community + + + + + + Connect with like-minded developers, share your projects, and grow + your skills. Our Discord community is the perfect place to + collaborate and learn! + + + + } + size='lg' + colorScheme='purple' + _hover={{ transform: 'translateY(-5px)' }} + transition='all 0.2s' + onClick={() => + window.open('https://discord.gg/your-invite-link', '_blank') + } + animation={`${pulseKeyframe} 2s infinite`} + whileHover={{ scale: 1.05 }} + whileTap={{ scale: 0.95 }} + > + Join our Discord + + + + + By joining, you agree to our community guidelines and code of + conduct. + + + +
- ); -} \ No newline at end of file + ) +}