Update content to data.ts

This commit is contained in:
2024-10-31 00:28:43 -04:00
parent cede237c1c
commit 0b64c4384b
9 changed files with 240 additions and 225 deletions

184
pnpm-lock.yaml generated
View File

@@ -110,7 +110,7 @@ importers:
version: 9.6.1 version: 9.6.1
'@types/node': '@types/node':
specifier: ^22.8.2 specifier: ^22.8.2
version: 22.8.2 version: 22.8.4
'@types/react': '@types/react':
specifier: ^18.3.12 specifier: ^18.3.12
version: 18.3.12 version: 18.3.12
@@ -119,16 +119,16 @@ importers:
version: 18.3.1 version: 18.3.1
'@typescript-eslint/eslint-plugin': '@typescript-eslint/eslint-plugin':
specifier: ^8.12.1 specifier: ^8.12.1
version: 8.12.1(@typescript-eslint/parser@8.12.1(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3))(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3) version: 8.12.2(@typescript-eslint/parser@8.12.2(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3))(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)
'@typescript-eslint/parser': '@typescript-eslint/parser':
specifier: ^8.12.1 specifier: ^8.12.1
version: 8.12.1(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3) version: 8.12.2(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)
eslint: eslint:
specifier: ^9.13.0 specifier: ^9.13.0
version: 9.13.0(jiti@1.21.6) version: 9.13.0(jiti@1.21.6)
eslint-config-next: eslint-config-next:
specifier: ^15.0.1 specifier: ^15.0.1
version: 15.0.1(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3) version: 15.0.2(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)
postcss: postcss:
specifier: ^8.4.47 specifier: ^8.4.47
version: 8.4.47 version: 8.4.47
@@ -195,8 +195,8 @@ packages:
'@floating-ui/core@1.6.8': '@floating-ui/core@1.6.8':
resolution: {integrity: sha512-7XJ9cPU+yI2QeLS+FCSlqNFZJq8arvswefkZrYI1yQBbftw6FyrZOxYSh+9S7z7TpeWlRt9zJ5IhM1WIL334jA==} resolution: {integrity: sha512-7XJ9cPU+yI2QeLS+FCSlqNFZJq8arvswefkZrYI1yQBbftw6FyrZOxYSh+9S7z7TpeWlRt9zJ5IhM1WIL334jA==}
'@floating-ui/dom@1.6.11': '@floating-ui/dom@1.6.12':
resolution: {integrity: sha512-qkMCxSR24v2vGkhYDo/UzxfJN3D4syqSjyuTFz6C7XcpU1pASPRieNI0Kj5VP3/503mOfYiGY891ugBX1GlABQ==} resolution: {integrity: sha512-NP83c0HjokcGVEMeoStg317VD9W7eDlGK7457dMBANbKA6GJZdc7rjujdgqzTaz93jkGgc5P/jeWbaCHnMNc+w==}
'@floating-ui/react-dom@2.1.2': '@floating-ui/react-dom@2.1.2':
resolution: {integrity: sha512-06okr5cgPzMNBy+Ycse2A6udMi4bqwW/zgBF/rwjcNqWkyr82Mcg8b0vjX8OJpZFy/FKjJmw6wV7t44kK6kW7A==} resolution: {integrity: sha512-06okr5cgPzMNBy+Ycse2A6udMi4bqwW/zgBF/rwjcNqWkyr82Mcg8b0vjX8OJpZFy/FKjJmw6wV7t44kK6kW7A==}
@@ -353,8 +353,8 @@ packages:
'@next/env@15.0.2': '@next/env@15.0.2':
resolution: {integrity: sha512-c0Zr0ModK5OX7D4ZV8Jt/wqoXtitLNPwUfG9zElCZztdaZyNVnN40rDXVZ/+FGuR4CcNV5AEfM6N8f+Ener7Dg==} resolution: {integrity: sha512-c0Zr0ModK5OX7D4ZV8Jt/wqoXtitLNPwUfG9zElCZztdaZyNVnN40rDXVZ/+FGuR4CcNV5AEfM6N8f+Ener7Dg==}
'@next/eslint-plugin-next@15.0.1': '@next/eslint-plugin-next@15.0.2':
resolution: {integrity: sha512-bKWsMaGPbiFAaGqrDJvbE8b4Z0uKicGVcgOI77YM2ui3UfjHMr4emFPrZTLeZVchi7fT1mooG2LxREfUUClIKw==} resolution: {integrity: sha512-R9Jc7T6Ge0txjmqpPwqD8vx6onQjynO9JT73ArCYiYPvSrwYXepH/UY/WdKDY8JPWJl72sAE4iGMHPeQ5xdEWg==}
'@next/swc-darwin-arm64@15.0.2': '@next/swc-darwin-arm64@15.0.2':
resolution: {integrity: sha512-GK+8w88z+AFlmt+ondytZo2xpwlfAR8U6CRwXancHImh6EdGfHMIrTSCcx5sOSBei00GyLVL0ioo1JLKTfprgg==} resolution: {integrity: sha512-GK+8w88z+AFlmt+ondytZo2xpwlfAR8U6CRwXancHImh6EdGfHMIrTSCcx5sOSBei00GyLVL0ioo1JLKTfprgg==}
@@ -1138,8 +1138,8 @@ packages:
'@types/json5@0.0.29': '@types/json5@0.0.29':
resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==}
'@types/node@22.8.2': '@types/node@22.8.4':
resolution: {integrity: sha512-NzaRNFV+FZkvK/KLCsNdTvID0SThyrs5SHB6tsD/lajr22FGC73N2QeDPM2wHtVde8mgcXuSsHQkH5cX1pbPLw==} resolution: {integrity: sha512-SpNNxkftTJOPk0oN+y2bIqurEXHTA2AOZ3EJDDKeJ5VzkvvORSvmQXGQarcOzWV1ac7DCaPBEdMDxBsM+d8jWw==}
'@types/prop-types@15.7.13': '@types/prop-types@15.7.13':
resolution: {integrity: sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA==} resolution: {integrity: sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA==}
@@ -1150,8 +1150,8 @@ packages:
'@types/react@18.3.12': '@types/react@18.3.12':
resolution: {integrity: sha512-D2wOSq/d6Agt28q7rSI3jhU7G6aiuzljDGZ2hTZHIkrTLUI+AF3WMeKkEZ9nN2fkBAlcktT6vcZjDFiIhMYEQw==} resolution: {integrity: sha512-D2wOSq/d6Agt28q7rSI3jhU7G6aiuzljDGZ2hTZHIkrTLUI+AF3WMeKkEZ9nN2fkBAlcktT6vcZjDFiIhMYEQw==}
'@typescript-eslint/eslint-plugin@8.12.1': '@typescript-eslint/eslint-plugin@8.12.2':
resolution: {integrity: sha512-gNg/inLRcPoBsKKIe4Vv38SVSOhk4BKWNO0T56sVff33gRqtTpOsrhHtiOKD1lmIOmCtZMPaW2x/h2FlM+sCEg==} resolution: {integrity: sha512-gQxbxM8mcxBwaEmWdtLCIGLfixBMHhQjBqR8sVWNTPpcj45WlYL2IObS/DNMLH1DBP0n8qz+aiiLTGfopPEebw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies: peerDependencies:
'@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0
@@ -1161,8 +1161,8 @@ packages:
typescript: typescript:
optional: true optional: true
'@typescript-eslint/parser@8.12.1': '@typescript-eslint/parser@8.12.2':
resolution: {integrity: sha512-I/I9Bg7qFa8rOgBnUUHIWTgzbB5wVkSLX+04xGUzTcJUtdq/I2uHWR9mbW6qUYJG/UmkuDcTax5JHvoEWOAHOQ==} resolution: {integrity: sha512-MrvlXNfGPLH3Z+r7Tk+Z5moZAc0dzdVjTgUgwsdGweH7lydysQsnSww3nAmsq8blFuRD5VRlAr9YdEFw3e6PBw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies: peerDependencies:
eslint: ^8.57.0 || ^9.0.0 eslint: ^8.57.0 || ^9.0.0
@@ -1171,12 +1171,12 @@ packages:
typescript: typescript:
optional: true optional: true
'@typescript-eslint/scope-manager@8.12.1': '@typescript-eslint/scope-manager@8.12.2':
resolution: {integrity: sha512-bma6sD1iViTt+y9MAwDlBdPTMCqoH/BNdcQk4rKhIZWv3eM0xHmzeSrPJA663PAqFqfpOmtdugycpr0E1mZDVA==} resolution: {integrity: sha512-gPLpLtrj9aMHOvxJkSbDBmbRuYdtiEbnvO25bCMza3DhMjTQw0u7Y1M+YR5JPbMsXXnSPuCf5hfq0nEkQDL/JQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@typescript-eslint/type-utils@8.12.1': '@typescript-eslint/type-utils@8.12.2':
resolution: {integrity: sha512-zJzrvbDVjIzVKV2TGHcjembEhws8RWXJhmqfO9hS2gRXBN0gDwGhRPEdJ6AZglzfJ+YA1q09EWpSLSXjBJpIMQ==} resolution: {integrity: sha512-bwuU4TAogPI+1q/IJSKuD4shBLc/d2vGcRT588q+jzayQyjVK2X6v/fbR4InY2U2sgf8MEvVCqEWUzYzgBNcGQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies: peerDependencies:
typescript: '*' typescript: '*'
@@ -1184,12 +1184,12 @@ packages:
typescript: typescript:
optional: true optional: true
'@typescript-eslint/types@8.12.1': '@typescript-eslint/types@8.12.2':
resolution: {integrity: sha512-anMS4es5lxBe4UVcDXOkcDb3csnm5BvaNIbOFfvy/pJEohorsggdVB8MFbl5EZiEuBnZZ0ei1z7W5b6FdFiV1Q==} resolution: {integrity: sha512-VwDwMF1SZ7wPBUZwmMdnDJ6sIFk4K4s+ALKLP6aIQsISkPv8jhiw65sAK6SuWODN/ix+m+HgbYDkH+zLjrzvOA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@typescript-eslint/typescript-estree@8.12.1': '@typescript-eslint/typescript-estree@8.12.2':
resolution: {integrity: sha512-k/o9khHOckPeDXilFTIPsP9iAYhhdMh3OsOL3i2072PNpFqhqzRHx472/0DeC8H/WZee3bZG0z2ddGRSPgeOKw==} resolution: {integrity: sha512-mME5MDwGe30Pq9zKPvyduyU86PH7aixwqYR2grTglAdB+AN8xXQ1vFGpYaUSJ5o5P/5znsSBeNcs5g5/2aQwow==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies: peerDependencies:
typescript: '*' typescript: '*'
@@ -1197,14 +1197,14 @@ packages:
typescript: typescript:
optional: true optional: true
'@typescript-eslint/utils@8.12.1': '@typescript-eslint/utils@8.12.2':
resolution: {integrity: sha512-sDv9yFHrhKe1WN8EYuzfhKCh/sFRupe9P+m/lZ5YgVvPoCUGHNN50IO4llSu7JAbftUM/QcCh+GeCortXPrBYQ==} resolution: {integrity: sha512-UTTuDIX3fkfAz6iSVa5rTuSfWIYZ6ATtEocQ/umkRSyC9O919lbZ8dcH7mysshrCdrAM03skJOEYaBugxN+M6A==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies: peerDependencies:
eslint: ^8.57.0 || ^9.0.0 eslint: ^8.57.0 || ^9.0.0
'@typescript-eslint/visitor-keys@8.12.1': '@typescript-eslint/visitor-keys@8.12.2':
resolution: {integrity: sha512-2RwdwnNGuOQKdGjuhujQHUqBZhEuodg2sLVPvOfWktvA9sOXOVqARjOyHSyhN2LiJGKxV6c8oOcmOtRcAnEeFw==} resolution: {integrity: sha512-PChz8UaKQAVNHghsHcPyx1OMHoFRUEA7rJSK/mDhdq85bk+PLsUHUBqTQTFt18VJZbmxBovM65fezlheQRsSDA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@vercel/analytics@1.3.2': '@vercel/analytics@1.3.2':
@@ -1405,8 +1405,8 @@ packages:
resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==}
engines: {node: '>= 6'} engines: {node: '>= 6'}
caniuse-lite@1.0.30001674: caniuse-lite@1.0.30001675:
resolution: {integrity: sha512-jOsKlZVRnzfhLojb+Ykb+gyUSp9Xb57So+fAiFlLzzTKpqg8xxSav0e40c8/4F/v9N8QSvrRRaLeVzQbLqomYw==} resolution: {integrity: sha512-/wV1bQwPrkLiQMjaJF5yUMVM/VdRPOCU8QZ+PmG6uW6DvYSrNY1bpwHI/3mOcUosLaJCzYDi5o91IQB51ft6cg==}
chalk@4.1.2: chalk@4.1.2:
resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
@@ -1611,8 +1611,8 @@ packages:
resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
engines: {node: '>=10'} engines: {node: '>=10'}
eslint-config-next@15.0.1: eslint-config-next@15.0.2:
resolution: {integrity: sha512-3cYCrgbH6GS/ufApza7XCKz92vtq4dAdYhx++rMFNlH2cAV+/GsAKkrr4+bohYOACmzG2nAOR+uWprKC1Uld6A==} resolution: {integrity: sha512-N8o6cyUXzlMmQbdc2Kc83g1qomFi3ITqrAZfubipVKET2uR2mCStyGRcx/r8WiAIVMul2KfwRiCHBkTpBvGBmA==}
peerDependencies: peerDependencies:
eslint: ^7.23.0 || ^8.0.0 || ^9.0.0 eslint: ^7.23.0 || ^8.0.0 || ^9.0.0
typescript: '>=3.3.1' typescript: '>=3.3.1'
@@ -1685,16 +1685,16 @@ packages:
peerDependencies: peerDependencies:
eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7
eslint-scope@8.1.0: eslint-scope@8.2.0:
resolution: {integrity: sha512-14dSvlhaVhKKsa9Fx1l8A17s7ah7Ef7wCakJ10LYk6+GYmP9yDti2oq2SEwcyndt6knfcZyhyxwY3i9yL78EQw==} resolution: {integrity: sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
eslint-visitor-keys@3.4.3: eslint-visitor-keys@3.4.3:
resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
eslint-visitor-keys@4.1.0: eslint-visitor-keys@4.2.0:
resolution: {integrity: sha512-Q7lok0mqMUSf5a/AdAZkA5a/gHcO6snwQClVNNvFKCAVlxXucdU8pKydU5ZVZjBx5xr37vGbFFWtLQYreLzrZg==} resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
eslint@9.13.0: eslint@9.13.0:
@@ -1707,8 +1707,8 @@ packages:
jiti: jiti:
optional: true optional: true
espree@10.2.0: espree@10.3.0:
resolution: {integrity: sha512-upbkBJbckcCNBDBDXEbuhjbP68n+scUd3k/U2EkyM9nw+I/jPiL4cLF/Al06CF96wRltFda16sxDFrxsI1v0/g==} resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
esquery@1.6.0: esquery@1.6.0:
@@ -2922,7 +2922,7 @@ snapshots:
dependencies: dependencies:
ajv: 6.12.6 ajv: 6.12.6
debug: 4.3.7 debug: 4.3.7
espree: 10.2.0 espree: 10.3.0
globals: 14.0.0 globals: 14.0.0
ignore: 5.3.2 ignore: 5.3.2
import-fresh: 3.3.0 import-fresh: 3.3.0
@@ -2944,14 +2944,14 @@ snapshots:
dependencies: dependencies:
'@floating-ui/utils': 0.2.8 '@floating-ui/utils': 0.2.8
'@floating-ui/dom@1.6.11': '@floating-ui/dom@1.6.12':
dependencies: dependencies:
'@floating-ui/core': 1.6.8 '@floating-ui/core': 1.6.8
'@floating-ui/utils': 0.2.8 '@floating-ui/utils': 0.2.8
'@floating-ui/react-dom@2.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': '@floating-ui/react-dom@2.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies: dependencies:
'@floating-ui/dom': 1.6.11 '@floating-ui/dom': 1.6.12
react: 18.3.1 react: 18.3.1
react-dom: 18.3.1(react@18.3.1) react-dom: 18.3.1(react@18.3.1)
@@ -3071,7 +3071,7 @@ snapshots:
'@next/env@15.0.2': {} '@next/env@15.0.2': {}
'@next/eslint-plugin-next@15.0.1': '@next/eslint-plugin-next@15.0.2':
dependencies: dependencies:
fast-glob: 3.3.1 fast-glob: 3.3.1
@@ -3930,7 +3930,7 @@ snapshots:
'@types/json5@0.0.29': {} '@types/json5@0.0.29': {}
'@types/node@22.8.2': '@types/node@22.8.4':
dependencies: dependencies:
undici-types: 6.19.8 undici-types: 6.19.8
@@ -3945,14 +3945,14 @@ snapshots:
'@types/prop-types': 15.7.13 '@types/prop-types': 15.7.13
csstype: 3.1.3 csstype: 3.1.3
'@typescript-eslint/eslint-plugin@8.12.1(@typescript-eslint/parser@8.12.1(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3))(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)': '@typescript-eslint/eslint-plugin@8.12.2(@typescript-eslint/parser@8.12.2(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3))(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)':
dependencies: dependencies:
'@eslint-community/regexpp': 4.12.1 '@eslint-community/regexpp': 4.12.1
'@typescript-eslint/parser': 8.12.1(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3) '@typescript-eslint/parser': 8.12.2(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)
'@typescript-eslint/scope-manager': 8.12.1 '@typescript-eslint/scope-manager': 8.12.2
'@typescript-eslint/type-utils': 8.12.1(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3) '@typescript-eslint/type-utils': 8.12.2(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)
'@typescript-eslint/utils': 8.12.1(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3) '@typescript-eslint/utils': 8.12.2(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)
'@typescript-eslint/visitor-keys': 8.12.1 '@typescript-eslint/visitor-keys': 8.12.2
eslint: 9.13.0(jiti@1.21.6) eslint: 9.13.0(jiti@1.21.6)
graphemer: 1.4.0 graphemer: 1.4.0
ignore: 5.3.2 ignore: 5.3.2
@@ -3963,12 +3963,12 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
'@typescript-eslint/parser@8.12.1(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)': '@typescript-eslint/parser@8.12.2(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)':
dependencies: dependencies:
'@typescript-eslint/scope-manager': 8.12.1 '@typescript-eslint/scope-manager': 8.12.2
'@typescript-eslint/types': 8.12.1 '@typescript-eslint/types': 8.12.2
'@typescript-eslint/typescript-estree': 8.12.1(typescript@5.6.3) '@typescript-eslint/typescript-estree': 8.12.2(typescript@5.6.3)
'@typescript-eslint/visitor-keys': 8.12.1 '@typescript-eslint/visitor-keys': 8.12.2
debug: 4.3.7 debug: 4.3.7
eslint: 9.13.0(jiti@1.21.6) eslint: 9.13.0(jiti@1.21.6)
optionalDependencies: optionalDependencies:
@@ -3976,15 +3976,15 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
'@typescript-eslint/scope-manager@8.12.1': '@typescript-eslint/scope-manager@8.12.2':
dependencies: dependencies:
'@typescript-eslint/types': 8.12.1 '@typescript-eslint/types': 8.12.2
'@typescript-eslint/visitor-keys': 8.12.1 '@typescript-eslint/visitor-keys': 8.12.2
'@typescript-eslint/type-utils@8.12.1(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)': '@typescript-eslint/type-utils@8.12.2(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)':
dependencies: dependencies:
'@typescript-eslint/typescript-estree': 8.12.1(typescript@5.6.3) '@typescript-eslint/typescript-estree': 8.12.2(typescript@5.6.3)
'@typescript-eslint/utils': 8.12.1(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3) '@typescript-eslint/utils': 8.12.2(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)
debug: 4.3.7 debug: 4.3.7
ts-api-utils: 1.3.0(typescript@5.6.3) ts-api-utils: 1.3.0(typescript@5.6.3)
optionalDependencies: optionalDependencies:
@@ -3993,12 +3993,12 @@ snapshots:
- eslint - eslint
- supports-color - supports-color
'@typescript-eslint/types@8.12.1': {} '@typescript-eslint/types@8.12.2': {}
'@typescript-eslint/typescript-estree@8.12.1(typescript@5.6.3)': '@typescript-eslint/typescript-estree@8.12.2(typescript@5.6.3)':
dependencies: dependencies:
'@typescript-eslint/types': 8.12.1 '@typescript-eslint/types': 8.12.2
'@typescript-eslint/visitor-keys': 8.12.1 '@typescript-eslint/visitor-keys': 8.12.2
debug: 4.3.7 debug: 4.3.7
fast-glob: 3.3.2 fast-glob: 3.3.2
is-glob: 4.0.3 is-glob: 4.0.3
@@ -4010,20 +4010,20 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
'@typescript-eslint/utils@8.12.1(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)': '@typescript-eslint/utils@8.12.2(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)':
dependencies: dependencies:
'@eslint-community/eslint-utils': 4.4.1(eslint@9.13.0(jiti@1.21.6)) '@eslint-community/eslint-utils': 4.4.1(eslint@9.13.0(jiti@1.21.6))
'@typescript-eslint/scope-manager': 8.12.1 '@typescript-eslint/scope-manager': 8.12.2
'@typescript-eslint/types': 8.12.1 '@typescript-eslint/types': 8.12.2
'@typescript-eslint/typescript-estree': 8.12.1(typescript@5.6.3) '@typescript-eslint/typescript-estree': 8.12.2(typescript@5.6.3)
eslint: 9.13.0(jiti@1.21.6) eslint: 9.13.0(jiti@1.21.6)
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
- typescript - typescript
'@typescript-eslint/visitor-keys@8.12.1': '@typescript-eslint/visitor-keys@8.12.2':
dependencies: dependencies:
'@typescript-eslint/types': 8.12.1 '@typescript-eslint/types': 8.12.2
eslint-visitor-keys: 3.4.3 eslint-visitor-keys: 3.4.3
'@vercel/analytics@1.3.2(next@15.0.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)': '@vercel/analytics@1.3.2(next@15.0.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)':
@@ -4214,7 +4214,7 @@ snapshots:
camelcase-css@2.0.1: {} camelcase-css@2.0.1: {}
caniuse-lite@1.0.30001674: {} caniuse-lite@1.0.30001675: {}
chalk@4.1.2: chalk@4.1.2:
dependencies: dependencies:
@@ -4465,16 +4465,16 @@ snapshots:
escape-string-regexp@4.0.0: {} escape-string-regexp@4.0.0: {}
eslint-config-next@15.0.1(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3): eslint-config-next@15.0.2(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3):
dependencies: dependencies:
'@next/eslint-plugin-next': 15.0.1 '@next/eslint-plugin-next': 15.0.2
'@rushstack/eslint-patch': 1.10.4 '@rushstack/eslint-patch': 1.10.4
'@typescript-eslint/eslint-plugin': 8.12.1(@typescript-eslint/parser@8.12.1(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3))(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3) '@typescript-eslint/eslint-plugin': 8.12.2(@typescript-eslint/parser@8.12.2(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3))(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)
'@typescript-eslint/parser': 8.12.1(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3) '@typescript-eslint/parser': 8.12.2(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)
eslint: 9.13.0(jiti@1.21.6) eslint: 9.13.0(jiti@1.21.6)
eslint-import-resolver-node: 0.3.9 eslint-import-resolver-node: 0.3.9
eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.12.1(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0)(eslint@9.13.0(jiti@1.21.6)) eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.12.2(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0)(eslint@9.13.0(jiti@1.21.6))
eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.12.1(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.3)(eslint@9.13.0(jiti@1.21.6)) eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.12.2(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.3)(eslint@9.13.0(jiti@1.21.6))
eslint-plugin-jsx-a11y: 6.10.2(eslint@9.13.0(jiti@1.21.6)) eslint-plugin-jsx-a11y: 6.10.2(eslint@9.13.0(jiti@1.21.6))
eslint-plugin-react: 7.37.2(eslint@9.13.0(jiti@1.21.6)) eslint-plugin-react: 7.37.2(eslint@9.13.0(jiti@1.21.6))
eslint-plugin-react-hooks: 5.0.0(eslint@9.13.0(jiti@1.21.6)) eslint-plugin-react-hooks: 5.0.0(eslint@9.13.0(jiti@1.21.6))
@@ -4493,37 +4493,37 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.12.1(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0)(eslint@9.13.0(jiti@1.21.6)): eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.12.2(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0)(eslint@9.13.0(jiti@1.21.6)):
dependencies: dependencies:
'@nolyfill/is-core-module': 1.0.39 '@nolyfill/is-core-module': 1.0.39
debug: 4.3.7 debug: 4.3.7
enhanced-resolve: 5.17.1 enhanced-resolve: 5.17.1
eslint: 9.13.0(jiti@1.21.6) eslint: 9.13.0(jiti@1.21.6)
eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.12.1(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@9.13.0(jiti@1.21.6)) eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.12.2(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@9.13.0(jiti@1.21.6))
fast-glob: 3.3.2 fast-glob: 3.3.2
get-tsconfig: 4.8.1 get-tsconfig: 4.8.1
is-bun-module: 1.2.1 is-bun-module: 1.2.1
is-glob: 4.0.3 is-glob: 4.0.3
optionalDependencies: optionalDependencies:
eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.12.1(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.3)(eslint@9.13.0(jiti@1.21.6)) eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.12.2(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.3)(eslint@9.13.0(jiti@1.21.6))
transitivePeerDependencies: transitivePeerDependencies:
- '@typescript-eslint/parser' - '@typescript-eslint/parser'
- eslint-import-resolver-node - eslint-import-resolver-node
- eslint-import-resolver-webpack - eslint-import-resolver-webpack
- supports-color - supports-color
eslint-module-utils@2.12.0(@typescript-eslint/parser@8.12.1(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@9.13.0(jiti@1.21.6)): eslint-module-utils@2.12.0(@typescript-eslint/parser@8.12.2(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@9.13.0(jiti@1.21.6)):
dependencies: dependencies:
debug: 3.2.7 debug: 3.2.7
optionalDependencies: optionalDependencies:
'@typescript-eslint/parser': 8.12.1(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3) '@typescript-eslint/parser': 8.12.2(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)
eslint: 9.13.0(jiti@1.21.6) eslint: 9.13.0(jiti@1.21.6)
eslint-import-resolver-node: 0.3.9 eslint-import-resolver-node: 0.3.9
eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.12.1(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0)(eslint@9.13.0(jiti@1.21.6)) eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.12.2(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0)(eslint@9.13.0(jiti@1.21.6))
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.12.1(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.3)(eslint@9.13.0(jiti@1.21.6)): eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.12.2(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.3)(eslint@9.13.0(jiti@1.21.6)):
dependencies: dependencies:
'@rtsao/scc': 1.1.0 '@rtsao/scc': 1.1.0
array-includes: 3.1.8 array-includes: 3.1.8
@@ -4534,7 +4534,7 @@ snapshots:
doctrine: 2.1.0 doctrine: 2.1.0
eslint: 9.13.0(jiti@1.21.6) eslint: 9.13.0(jiti@1.21.6)
eslint-import-resolver-node: 0.3.9 eslint-import-resolver-node: 0.3.9
eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.12.1(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@9.13.0(jiti@1.21.6)) eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.12.2(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@9.13.0(jiti@1.21.6))
hasown: 2.0.2 hasown: 2.0.2
is-core-module: 2.15.1 is-core-module: 2.15.1
is-glob: 4.0.3 is-glob: 4.0.3
@@ -4546,7 +4546,7 @@ snapshots:
string.prototype.trimend: 1.0.8 string.prototype.trimend: 1.0.8
tsconfig-paths: 3.15.0 tsconfig-paths: 3.15.0
optionalDependencies: optionalDependencies:
'@typescript-eslint/parser': 8.12.1(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3) '@typescript-eslint/parser': 8.12.2(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)
transitivePeerDependencies: transitivePeerDependencies:
- eslint-import-resolver-typescript - eslint-import-resolver-typescript
- eslint-import-resolver-webpack - eslint-import-resolver-webpack
@@ -4597,14 +4597,14 @@ snapshots:
string.prototype.matchall: 4.0.11 string.prototype.matchall: 4.0.11
string.prototype.repeat: 1.0.0 string.prototype.repeat: 1.0.0
eslint-scope@8.1.0: eslint-scope@8.2.0:
dependencies: dependencies:
esrecurse: 4.3.0 esrecurse: 4.3.0
estraverse: 5.3.0 estraverse: 5.3.0
eslint-visitor-keys@3.4.3: {} eslint-visitor-keys@3.4.3: {}
eslint-visitor-keys@4.1.0: {} eslint-visitor-keys@4.2.0: {}
eslint@9.13.0(jiti@1.21.6): eslint@9.13.0(jiti@1.21.6):
dependencies: dependencies:
@@ -4625,9 +4625,9 @@ snapshots:
cross-spawn: 7.0.3 cross-spawn: 7.0.3
debug: 4.3.7 debug: 4.3.7
escape-string-regexp: 4.0.0 escape-string-regexp: 4.0.0
eslint-scope: 8.1.0 eslint-scope: 8.2.0
eslint-visitor-keys: 4.1.0 eslint-visitor-keys: 4.2.0
espree: 10.2.0 espree: 10.3.0
esquery: 1.6.0 esquery: 1.6.0
esutils: 2.0.3 esutils: 2.0.3
fast-deep-equal: 3.1.3 fast-deep-equal: 3.1.3
@@ -4648,11 +4648,11 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
espree@10.2.0: espree@10.3.0:
dependencies: dependencies:
acorn: 8.14.0 acorn: 8.14.0
acorn-jsx: 5.3.2(acorn@8.14.0) acorn-jsx: 5.3.2(acorn@8.14.0)
eslint-visitor-keys: 4.1.0 eslint-visitor-keys: 4.2.0
esquery@1.6.0: esquery@1.6.0:
dependencies: dependencies:
@@ -5117,7 +5117,7 @@ snapshots:
'@swc/counter': 0.1.3 '@swc/counter': 0.1.3
'@swc/helpers': 0.5.13 '@swc/helpers': 0.5.13
busboy: 1.6.0 busboy: 1.6.0
caniuse-lite: 1.0.30001674 caniuse-lite: 1.0.30001675
postcss: 8.4.31 postcss: 8.4.31
react: 18.3.1 react: 18.3.1
react-dom: 18.3.1(react@18.3.1) react-dom: 18.3.1(react@18.3.1)

View File

@@ -5,31 +5,7 @@ import Link from "next/link";
import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "~/components/ui/card"; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "~/components/ui/card";
import { CardSkeleton } from "~/components/ui/skeletons"; import { CardSkeleton } from "~/components/ui/skeletons";
import { useState, useEffect } from 'react'; import { useState, useEffect } from 'react';
import { articles } from '~/lib/data';
const articles = [
{
title: "Positively Innovative: Robotics for Good",
link: "https://magazine.bucknell.edu/issue/fall-2024/robotics-for-good/",
author: "Kate Willard",
description: "Sean OConnor 26 is using his interest in robotics to fuel forward-thinking research and lead important conversations about the impact robots can have on society.",
source: "Bucknell Magazine (Fall 2024)"
},
{
title: "Student Story: Sean O'Connor '26, Computer Science and Engineering",
link: "https://www.bucknell.edu/meet-bucknell/bucknell-stories/student-stories/sean-oconnor-26-computer-science-engineering",
author: "Sarah Downey",
description: "At Bucknell, Sean O'Connor '26 is conducting research to improve the ways robots assist, collaborate and coexist with humans.",
source: "Bucknell Student Stories"
},
{
title: "Shaping the Future: Exploring the Social Impact of Robots",
link: "https://magazine.bucknell.edu/college-of-engineering/2024-college-report/",
author: "Bucknell Publications",
description: "RoboLab provides an environment for scholarly and creative conversations.",
source: "the Bucknell College of Engineering Report 2024"
}
// Add more articles as needed
];
export default function ArticlesPage() { export default function ArticlesPage() {
const [loading, setLoading] = useState(true); const [loading, setLoading] = useState(true);

View File

@@ -5,22 +5,24 @@ import { Footer } from "~/components/Footer"
import { Navigation } from "~/components/Navigation" import { Navigation } from "~/components/Navigation"
import { Sidebar } from "~/components/Sidebar" import { Sidebar } from "~/components/Sidebar"
import { inter } from "~/lib/fonts" import { inter } from "~/lib/fonts"
import { description, name } from "~/lib/data";
import "~/styles/globals.css" import "~/styles/globals.css"
export const metadata = { export const metadata = {
title: "Sean O'Connor", title: `${name[0]?.first} ${name[0]?.last}`,
description: "Personal website and portfolio", description: description,
icons: [{ rel: "icon", url: "/favicon.ico" }], icons: [{ rel: "icon", url: "/favicon.ico" }],
} }
export default function RootLayout({ children }: React.PropsWithChildren) { export default function RootLayout({ children }: React.PropsWithChildren) {
return ( return (
<html lang="en" className={inter.className}> <html lang="en" suppressHydrationWarning className={inter.className}>
<body className="font-sans bg-background text-foreground min-h-screen flex flex-col"> <body className="font-sans bg-background text-foreground min-h-screen flex flex-col" suppressHydrationWarning>
<ThemeProvider <ThemeProvider
attribute="data-theme" attribute="data-theme"
defaultTheme="system" defaultTheme="system"
enableSystem enableSystem
disableTransitionOnChange
> >
<Analytics /> <Analytics />
<SpeedInsights /> <SpeedInsights />

View File

@@ -1,7 +1,7 @@
import { ArrowUpRight, Code, FlaskConical, Users } from 'lucide-react'; import { ArrowUpRight, Code, FlaskConical, Users } from 'lucide-react';
import Link from "next/link"; import Link from "next/link";
import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "~/components/ui/card"; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "~/components/ui/card";
import { projects } from "~/lib/data"; import { projects, name } from "~/lib/data";
export default function HomePage() { export default function HomePage() {
return ( return (
@@ -9,7 +9,7 @@ export default function HomePage() {
{/* About Section */} {/* About Section */}
<section className="space-y-6"> <section className="space-y-6">
<div> <div>
<h1 className="text-2xl font-bold">Hi! I'm Sean. 👋</h1> <h1 className="text-2xl font-bold">Hi! I'm {name[0]?.first}. 👋</h1>
<p className="text-lg text-muted-foreground mt-2"> <p className="text-lg text-muted-foreground mt-2">
I am a Computer Science and Engineering student at Bucknell University, passionate about robotics, I am a Computer Science and Engineering student at Bucknell University, passionate about robotics,
software development, and human-computer interaction. With a strong foundation in both academic software development, and human-computer interaction. With a strong foundation in both academic

View File

@@ -60,7 +60,7 @@ export default function PublicationsPage() {
return ( return (
<div className="space-y-6"> <div className="space-y-6">
<section className="prose prose-zinc dark:prose-invert max-w-none"> <section className="prose prose-zinc dark:prose-invert max-w-none">
<h1 className="text-2xl font-bold">Publications 📚</h1> <h1 className="text-2xl font-bold">Peer-Reviewed Publications 📚</h1>
<p className="text-lg text-muted-foreground mt-2"> <p className="text-lg text-muted-foreground mt-2">
My research publications in human-robot interaction and robotics. My research publications in human-robot interaction and robotics.
</p> </p>

View File

@@ -5,46 +5,7 @@ import { Card, CardHeader, CardTitle, CardContent, CardDescription } from "~/com
import { CardSkeleton } from "~/components/ui/skeletons"; import { CardSkeleton } from "~/components/ui/skeletons";
import Image from "next/image"; import Image from "next/image";
import { Badge } from "~/components/ui/badge"; import { Badge } from "~/components/ui/badge";
import { travel } from "~/lib/data";
const tripsData = [
{
title: "AIChE Annual Student Conference 2024",
description: "With the funding of Bucknell's chemical engineering department, and an amazing team, I was able to attend the 2024 AIChE Annual Student Conference and compete in the national Chem-E-Car competition.",
images: ["/trips/asc2024/IMG_2641.png", "/trips/asc2024/IMG_2631.png", "/trips/asc2024/IMG_7987.png"],
tags: ["Chem-E-Car", "AIChE", "Conference", "Competition"]
},
{
title: "IEEE RO-MAN 2024",
description: "I got to attend the IEEE RO-MAN 2024 conference in Pasadena, California. It was a great opportunity to present my work on my project HRIStudio, and to network with other researchers and industry professionals.",
images: ["/trips/roman2024/IMG_3951.png", "/trips/roman2024/IMG_3978.png", "/trips/roman2024/IMG_3946.png"],
tags: ["RO-MAN", "IEEE", "Conference", "Presentation"]
},
{
title: "ENGR 290: Following da Vinci's Footsteps",
description: "During the summer of 2024, I went on a study abroad program with about thirty of my peers. We explored Italy and France, following the footsteps of Leonardo da Vinci- evaluating the world through his lenses.",
images: ["/trips/engr290/insta290.jpg", "/trips/engr290/P1013747.png"],
tags: ["Italy", "France", "Study Abroad", "Engineering"]
},
{
title: "SCA Specialty Coffee Expo 2024",
description: "As a member of the executive board of the Bucknell Coffee Society, I was able to attend the Specialty Coffee Association's Specialty Coffee Expo in early 2024, traveling to Chicago, IL.",
images: ["/trips/sca2024/group.jpeg", "/trips/sca2024/bean.png", "/trips/sca2024/plane.png"],
tags: ["Coffee Society", "Chicago", "SCA", "Coffee"]
},
{
title: "Formula 1 Gran Premio dell'Emilia Romagna 2024",
description: "While studying abroad with Bucknell Engineering, we were lucky enough to be within a few hours of the Imola Grand Prix! A group of students went to see the race, and it was an amazing experience.",
images: ["/trips/imola2024/IMG_2093.png", "/trips/imola2024/IMG_2050.png", "/trips/imola2024/IMG_2066.png"],
tags: ["Racing", "Formula One", "Italy"]
},
{
title: "Formula 1 British Grand Prix 2024",
description: "As a semi-recent Formula One fan, I was very excited to have the opportunity to attend the British Grand Prix weekend in 2024. I was able to see every event- marking one of my favorite weekends, probably ever.",
images: ["/trips/silverstone/_1035852.png", "/trips/silverstone/P1025274.png", "/trips/silverstone/_1035764.png"],
tags: ["Racing", "Formula One", "Great Britain", "Silverstone"]
}
];
export default function TripsPage() { export default function TripsPage() {
const [loading, setLoading] = useState(true); const [loading, setLoading] = useState(true);
@@ -75,7 +36,7 @@ export default function TripsPage() {
<CardSkeleton /> <CardSkeleton />
</> </>
) : ( ) : (
tripsData.map((trip, index) => ( travel.map((trip, index) => (
<Card key={index} className="rounded-lg overflow-hidden"> <Card key={index} className="rounded-lg overflow-hidden">
<CardHeader className="p-0"> <CardHeader className="p-0">
<div className="flex flex-col"> <div className="flex flex-col">

View File

@@ -1,11 +1,12 @@
import React from 'react'; import React from 'react';
import { name } from '~/lib/data';
export function Footer() { export function Footer() {
return ( return (
<footer className="lg:hidden bg-background text-foreground pb-4"> <footer className="lg:hidden bg-background text-foreground pb-4">
<div className="max-w-screen-xl mx-auto px-4 sm:px-6 lg:px-8"> <div className="max-w-screen-xl mx-auto px-4 sm:px-6 lg:px-8">
<p className="text-sm text-muted-foreground"> <p className="text-sm text-muted-foreground">
&copy; 2024 Sean O'Connor. All rights reserved. &copy; {new Date().getFullYear()} {name[0]?.first}&nbsp;{name[0]?.last}. All rights reserved.
</p> </p>
</div> </div>
</footer> </footer>

View File

@@ -1,55 +1,8 @@
'use client'; 'use client';
import { Github, Globe, GraduationCap, Linkedin, Mail, Phone, School } from 'lucide-react';
import Image from 'next/image'; import Image from 'next/image';
import { usePathname } from 'next/navigation'; import { usePathname } from 'next/navigation';
import { name, contact, location } from '~/lib/data';
const schoolInfo = [
{
icon: School,
label: 'Bucknell University',
href: 'https://bucknell.edu'
},
{
label: 'Computer Science and Engineering',
}
]
const contactInfo = [
{
icon: Mail,
label: 'Personal Email',
href: 'mailto:sean@soconnor.dev'
},
{
icon: Mail,
label: 'University Email',
href: 'mailto:sso005@bucknell.edu'
},
{
icon: Phone,
label: 'Phone',
href: 'tel:+16316016555'
},
{
icon: Globe,
label: 'Website',
href: 'https://soconnor.dev',
external: true
},
{
icon: Linkedin,
label: 'LinkedIn',
href: 'https://linkedin.com/in/bu-soconnor',
external: true
},
{
icon: Github,
label: 'GitHub',
href: 'https://github.com/soconnor0919',
external: true
}
];
export function Sidebar() { export function Sidebar() {
const pathname = usePathname(); const pathname = usePathname();
@@ -64,7 +17,7 @@ export function Sidebar() {
<div className="w-24 h-24 relative overflow-hidden rounded-lg"> <div className="w-24 h-24 relative overflow-hidden rounded-lg">
<Image <Image
src="/headshot.png" src="/headshot.png"
alt="Sean O'Connor" alt={`${name[0]?.first}&nbsp;${name[0]?.last}`}
width={240} width={240}
height={240} height={240}
className="object-cover rounded-xl" className="object-cover rounded-xl"
@@ -72,8 +25,8 @@ export function Sidebar() {
/> />
</div> </div>
<div className="flex flex-col space-y-1"> <div className="flex flex-col space-y-1">
<h2 className="font-bold text-xl hover:text-primary transition-colors">Sean O'Connor</h2> <h2 className="font-bold text-xl hover:text-primary transition-colors">{name[0]?.first}&nbsp;{name[0]?.last}</h2>
{schoolInfo.map((item) => ( {location.map((item) => (
<a <a
key={item.label} key={item.label}
href={item.href} href={item.href}
@@ -89,11 +42,11 @@ export function Sidebar() {
))} ))}
</div> </div>
</div> </div>
<div className="space-y-3"> <div className="space-y-3">
<h3 className="text-xs uppercase text-muted-foreground font-medium">Contact</h3> <h3 className="text-xs uppercase text-muted-foreground font-medium">Contact</h3>
<div className="grid grid-cols-2 gap-2"> <div className="grid grid-cols-2 gap-2">
{contactInfo.map((item) => ( {contact.map((item) => (
<a <a
key={item.href} key={item.href}
href={item.href} href={item.href}
@@ -119,7 +72,7 @@ export function Sidebar() {
<div className="aspect-square relative overflow-hidden rounded-xl w-full"> <div className="aspect-square relative overflow-hidden rounded-xl w-full">
<Image <Image
src="/headshot.png" src="/headshot.png"
alt="Sean O'Connor" alt={`${name[0]?.first}&nbsp;${name[0]?.last}`}
width={240} width={240}
height={240} height={240}
className="object-cover rounded-xl" className="object-cover rounded-xl"
@@ -129,10 +82,10 @@ export function Sidebar() {
/> />
</div> </div>
</div> </div>
<div className="text-center lg:text-left space-y-2"> <div className="text-center lg:text-left space-y-2">
<h2 className="font-bold text-xl hover:text-primary transition-colors">Sean O'Connor</h2> <h2 className="font-bold text-xl hover:text-primary transition-colors">{name[0]?.first}&nbsp;{name[0]?.last}</h2>
{schoolInfo.map((item) => ( {location.map((item) => (
<a <a
key={item.label} key={item.label}
href={item.href} href={item.href}
@@ -152,7 +105,7 @@ export function Sidebar() {
<div> <div>
<h3 className="text-xs uppercase text-muted-foreground font-medium mb-2 text-center lg:text-left">Contact</h3> <h3 className="text-xs uppercase text-muted-foreground font-medium mb-2 text-center lg:text-left">Contact</h3>
<div className="space-y-2"> <div className="space-y-2">
{contactInfo.map((item) => ( {contact.map((item) => (
<a <a
key={item.href} key={item.href}
href={item.href} href={item.href}
@@ -173,7 +126,7 @@ export function Sidebar() {
<div className="mt-6"> <div className="mt-6">
<p className="text-sm text-muted-foreground text-center lg:text-left"> <p className="text-sm text-muted-foreground text-center lg:text-left">
&copy; 2024&nbsp;Sean&nbsp;O'Connor. All&nbsp;rights&nbsp;reserved. &copy;&nbsp;{new Date().getFullYear()}&nbsp;{name[0]?.first}&nbsp;{name[0]?.last}. All&nbsp;rights&nbsp;reserved.
</p> </p>
</div> </div>
</div> </div>

View File

@@ -1,3 +1,86 @@
import { Globe, Mail, Phone, Linkedin, Github, School } from "lucide-react";
export const name = [
{
first: "Sean",
last: "O'Connor"
}
]
export const description = "Personal website and portfolio";
export const location = [
{
icon: School,
label: 'Bucknell University',
href: 'https://bucknell.edu'
},
{
label: 'Computer Science and Engineering',
}
]
export const contact = [
{
icon: Mail,
label: 'Personal Email',
href: 'mailto:sean@soconnor.dev'
},
{
icon: Mail,
label: 'University Email',
href: 'mailto:sso005@bucknell.edu'
},
{
icon: Phone,
label: 'Phone',
href: 'tel:+16316016555'
},
{
icon: Globe,
label: 'Website',
href: 'https://soconnor.dev',
external: true
},
{
icon: Linkedin,
label: 'LinkedIn',
href: 'https://linkedin.com/in/bu-soconnor',
external: true
},
{
icon: Github,
label: 'GitHub',
href: 'https://github.com/soconnor0919',
external: true
}
];
export const articles = [
{
title: "Positively Innovative: Robotics for Good",
link: "https://magazine.bucknell.edu/issue/fall-2024/robotics-for-good/",
author: "Kate Willard",
description: "Sean OConnor 26 is using his interest in robotics to fuel forward-thinking research and lead important conversations about the impact robots can have on society.",
source: "Bucknell Magazine (Fall 2024)"
},
{
title: "Student Story: Sean O'Connor '26, Computer Science and Engineering",
link: "https://www.bucknell.edu/meet-bucknell/bucknell-stories/student-stories/sean-oconnor-26-computer-science-engineering",
author: "Sarah Downey",
description: "At Bucknell, Sean O'Connor '26 is conducting research to improve the ways robots assist, collaborate and coexist with humans.",
source: "Bucknell Student Stories"
},
{
title: "Shaping the Future: Exploring the Social Impact of Robots",
link: "https://magazine.bucknell.edu/college-of-engineering/2024-college-report/",
author: "Bucknell Publications",
description: "RoboLab provides an environment for scholarly and creative conversations.",
source: "the Bucknell College of Engineering Report 2024"
}
// Add more articles as needed
];
export const projects = [ export const projects = [
{ {
title: "HRIStudio", title: "HRIStudio",
@@ -35,3 +118,42 @@ export const projects = [
}, },
]; ];
export const travel = [
{
title: "AIChE Annual Student Conference 2024",
description: "With the funding of Bucknell's chemical engineering department, and an amazing team, I was able to attend the 2024 AIChE Annual Student Conference and compete in the national Chem-E-Car competition.",
images: ["/trips/asc2024/IMG_2641.png", "/trips/asc2024/IMG_2631.png", "/trips/asc2024/IMG_7987.png"],
tags: ["Chem-E-Car", "AIChE", "Conference", "Competition"]
},
{
title: "IEEE RO-MAN 2024",
description: "I got to attend the IEEE RO-MAN 2024 conference in Pasadena, California. It was a great opportunity to present my work on my project HRIStudio, and to network with other researchers and industry professionals.",
images: ["/trips/roman2024/IMG_3951.png", "/trips/roman2024/IMG_3978.png", "/trips/roman2024/IMG_3946.png"],
tags: ["RO-MAN", "IEEE", "Conference", "Presentation"]
},
{
title: "ENGR 290: Following da Vinci's Footsteps",
description: "During the summer of 2024, I went on a study abroad program with about thirty of my peers. We explored Italy and France, following the footsteps of Leonardo da Vinci- evaluating the world through his lenses.",
images: ["/trips/engr290/insta290.jpg", "/trips/engr290/P1013747.png", "/trips/engr290/_1024461.png"],
tags: ["Italy", "France", "Study Abroad", "Engineering"]
},
{
title: "SCA Specialty Coffee Expo 2024",
description: "As a member of the executive board of the Bucknell Coffee Society, I was able to attend the Specialty Coffee Association's Specialty Coffee Expo in early 2024, traveling to Chicago, IL.",
images: ["/trips/sca2024/group.jpeg", "/trips/sca2024/bean.png", "/trips/sca2024/plane.png"],
tags: ["Coffee Society", "Chicago", "SCA", "Coffee"]
},
{
title: "Formula 1 Gran Premio dell'Emilia Romagna 2024",
description: "While studying abroad with Bucknell Engineering, we were lucky enough to be within a few hours of the Imola Grand Prix! A group of students went to see the race, and it was an amazing experience.",
images: ["/trips/imola2024/IMG_2093.png", "/trips/imola2024/IMG_2050.png", "/trips/imola2024/IMG_2066.png"],
tags: ["Racing", "Formula One", "Italy"]
},
{
title: "Formula 1 British Grand Prix 2024",
description: "As a semi-recent Formula One fan, I was very excited to have the opportunity to attend the British Grand Prix weekend in 2024. I was able to see every event- marking one of my favorite weekends, probably ever.",
images: ["/trips/silverstone/_1035852.png", "/trips/silverstone/P1025274.png", "/trips/silverstone/_1035764.png"],
tags: ["Racing", "Formula One", "Great Britain", "Silverstone"]
}
];