diff --git a/.vscode/settings.json b/.vscode/settings.json
new file mode 100644
index 0000000..57fe598
--- /dev/null
+++ b/.vscode/settings.json
@@ -0,0 +1,19 @@
+{
+ "files.exclude": {
+ "**/.git": true,
+ "**/.svn": true,
+ "**/.hg": true,
+ "**/CVS": true,
+ "**/.DS_Store": true,
+ "**/Thumbs.db": true,
+ "**/.classpath": true,
+ "**/.factorypath": true,
+ "**/.project": true,
+ "**/.settings": true,
+ "**/.vscode": true,
+ "**/dist-electron": true,
+ "**/node_modules": true,
+ "**/target": true
+ },
+ "hide-files.files": []
+}
\ No newline at end of file
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..ae46d4d
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,29 @@
+BSD 3-Clause License
+
+Copyright (c) 2023-2024, Bamboooz
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice, this
+ list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+ * Neither the name of the bamboooz.github.io authors nor the names of its contributors
+ may be used to endorse or promote products derived from this software without
+ specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/README.md b/README.md
index daf51f6..439b679 100644
--- a/README.md
+++ b/README.md
@@ -1,3 +1,6 @@
-# my website :D
->The font used in this website is [AlphaCentauri](https://joannavu.gumroad.com/l/iHUgj)
->Star animation taken from [here](https://codesandbox.io/p/sandbox/css-shooting-stars-animation-w96ut)
\ No newline at end of file
+# bamboooz.github.io
+
+My cool website.
+
+> The font used in this website is [AlphaCentauri](https://joannavu.gumroad.com/l/iHUgj)
+> Star animation taken from [here](https://codesandbox.io/p/sandbox/css-shooting-stars-animation-w96ut)
diff --git a/package-lock.json b/package-lock.json
index ac62b72..20ad11a 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -18,12 +18,15 @@
"react": "^18.2.0",
"react-dom": "^18.2.0",
"react-icons": "^5.0.1",
+ "react-router-dom": "^6.22.1",
"react-scripts": "5.0.1",
+ "tailwindcss-animation-delay": "^1.2.0",
"typescript": "^4.9.5",
"web-vitals": "^2.1.4"
},
"devDependencies": {
- "gh-pages": "^6.1.1"
+ "gh-pages": "^6.1.1",
+ "tailwindcss": "^3.4.1"
}
},
"node_modules/@aashutoshrathi/word-wrap": {
@@ -3342,6 +3345,14 @@
}
}
},
+ "node_modules/@remix-run/router": {
+ "version": "1.15.1",
+ "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.15.1.tgz",
+ "integrity": "sha512-zcU0gM3z+3iqj8UX45AmWY810l3oUmXM7uH4dt5xtzvMhRtYVhKGOmgOd1877dOPPepfCjUv57w+syamWIYe7w==",
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
"node_modules/@rollup/plugin-babel": {
"version": "5.3.1",
"resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz",
@@ -14821,6 +14832,36 @@
"node": ">=0.10.0"
}
},
+ "node_modules/react-router": {
+ "version": "6.22.1",
+ "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.22.1.tgz",
+ "integrity": "sha512-0pdoRGwLtemnJqn1K0XHUbnKiX0S4X8CgvVVmHGOWmofESj31msHo/1YiqcJWK7Wxfq2a4uvvtS01KAQyWK/CQ==",
+ "dependencies": {
+ "@remix-run/router": "1.15.1"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "peerDependencies": {
+ "react": ">=16.8"
+ }
+ },
+ "node_modules/react-router-dom": {
+ "version": "6.22.1",
+ "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.22.1.tgz",
+ "integrity": "sha512-iwMyyyrbL7zkKY7MRjOVRy+TMnS/OPusaFVxM2P11x9dzSzGmLsebkCvYirGq0DWB9K9hOspHYYtDz33gE5Duw==",
+ "dependencies": {
+ "@remix-run/router": "1.15.1",
+ "react-router": "6.22.1"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "peerDependencies": {
+ "react": ">=16.8",
+ "react-dom": ">=16.8"
+ }
+ },
"node_modules/react-scripts": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-5.0.1.tgz",
@@ -16477,6 +16518,14 @@
"node": ">=14.0.0"
}
},
+ "node_modules/tailwindcss-animation-delay": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/tailwindcss-animation-delay/-/tailwindcss-animation-delay-1.2.0.tgz",
+ "integrity": "sha512-fyDXWrBKZoTb6phV+bgtGFpxwWlvtlM+387gdpVc/mNgKJinayD1859vQ1aPmzDZ1DWbDZ/lpexukXRmc95Z6g==",
+ "peerDependencies": {
+ "tailwindcss": ">=2.0.0 || >=3.0.0"
+ }
+ },
"node_modules/tapable": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz",
diff --git a/package.json b/package.json
index 213afc2..367e41c 100644
--- a/package.json
+++ b/package.json
@@ -14,7 +14,9 @@
"react": "^18.2.0",
"react-dom": "^18.2.0",
"react-icons": "^5.0.1",
+ "react-router-dom": "^6.22.1",
"react-scripts": "5.0.1",
+ "tailwindcss-animation-delay": "^1.2.0",
"typescript": "^4.9.5",
"web-vitals": "^2.1.4"
},
@@ -45,6 +47,7 @@
]
},
"devDependencies": {
- "gh-pages": "^6.1.1"
+ "gh-pages": "^6.1.1",
+ "tailwindcss": "^3.4.1"
}
}
diff --git a/src/App.css b/src/App.css
index 384b001..5044b2e 100644
--- a/src/App.css
+++ b/src/App.css
@@ -1,138 +1,6 @@
-html, body, .App {
- width: 100vw;
- height: 100vh;
- background: #141414;
- overflow: hidden!important;
- margin: 0;
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
- position: relative;
-}
-
-.App {
- display: flex;
- flex-direction: column;
- align-items: center;
- justify-content: center;
- user-select: none;
-}
-
-span {
- position: absolute;
- top: 0;
- left: 0;
- width: 4px;
- height: 4px;
- background: #fff;
- border-radius: 50%;
- box-shadow: 0 0 0 4px rgba(255, 255, 255, 0.1),
- 0 0 0 8px rgba(255, 255, 255, 0.1), 0 0 20px rgba(255, 255, 255, 1);
- animation: animate 3s linear infinite;
-}
-
-span::before {
- content: "";
- position: absolute;
- top: 50%;
- transform: translateY(-50%);
- width: 300px;
- height: 1px;
- background: linear-gradient(90deg, #fff, transparent);
-}
-
-@keyframes animate {
- 0% {
- transform: rotate(315deg) translateX(0);
- opacity: 1;
- }
- 70% {
- opacity: 1;
- }
- 100% {
- transform: rotate(315deg) translateX(-1500px);
- opacity: 0;
- }
-}
-
-span:nth-child(1) {
- top: -25px;
- right: 0;
- left: initial;
- animation-delay: 4s;
- animation-duration: 1s;
-}
-
-span:nth-child(2) {
- top: -25px;
- right: 80px;
- left: initial;
- animation-delay: 4.2s;
- animation-duration: 3s;
-}
-
-span:nth-child(3) {
- top: -25px;
- right: 0px;
- left: initial;
- animation-delay: 4.4s;
- animation-duration: 2s;
-}
-
-span:nth-child(4) {
- top: -25px;
- right: 180px;
- left: initial;
- animation-delay: 4.6s;
- animation-duration: 1.5s;
-}
-
-span:nth-child(5) {
- top: -25px;
- right: 400px;
- left: initial;
- animation-delay: 4.8s;
- animation-duration: 2.5s;
-}
-
-span:nth-child(6) {
- top: -25px;
- right: 600px;
- left: initial;
- animation-delay: 5s;
- animation-duration: 3s;
-}
-
-span:nth-child(7) {
- top: 300px;
- right: -25px;
- left: initial;
- animation-delay: 5s;
- animation-duration: 1.75s;
-}
-
-span:nth-child(8) {
- top: -25px;
- right: 700px;
- left: initial;
- animation-delay: 5.4s;
- animation-duration: 1.25s;
-}
-
-span:nth-child(9) {
- top: -25px;
- right: 1000px;
- left: initial;
- animation-delay: 4.75s;
- animation-duration: 2.25s;
-}
-
-span:nth-child(10) {
- top: -25px;
- right: 1000px;
- left: initial;
- animation-delay: 6.75s;
- animation-duration: 2.25s;
-}
+@tailwind base;
+@tailwind components;
+@tailwind utilities;
@font-face {
font-family: 'AlphaCentauri';
@@ -147,90 +15,15 @@ span:nth-child(10) {
font-display: swap;
}
-.star-container {
- display: flex;
- justify-content: center;
- align-items: center;
- height: 100vh;
+html, body, .App {
width: 100vw;
- overflow: hidden!important;
-}
-
-.text-container {
- position: absolute;
- display: flex;
- justify-content: center;
- align-items: left;
- flex-direction: column;
-}
-
-.username {
- font-family: 'AlphaCentauri';
- font-weight: 500;
- font-style: normal;
- line-height: 1.3;
- white-space: nowrap;
- position: relative;
- font-size: 72px;
- margin-bottom: -5px;
- color: #fff;
- animation: fadeInAnimation ease 3s;
- animation-iteration-count: 1;
- animation-fill-mode: forwards;
- z-index: 99;
-}
-
-.me-container {
- opacity: 0;
- transform: translateX(100%);
- animation: fadeInMoveAnimation ease 3s forwards;
- animation-delay: 1s;
- display: flex;
- outline: none;
- display: flex;
- justify-content: flex-start;
- align-items: center;
-}
-
-.page-button {
- background: transparent;
- height: 32px;
- width: 32px;
- color: white;
- border-radius: 8px;
- display: flex;
- justify-content: center;
- align-items: center;
- border: 0;
- margin-left: 6px;
- z-index: 99;
- outline: none;
-}
-
-.page-button:hover {
- color: darkgrey!important;
-}
-
-.page-button:hover:active {
- color: grey!important;
-}
-
-.who-am-i {
- font-family: 'AlphaCentauri';
- font-weight: 500;
- font-style: normal;
- line-height: 1.3;
- white-space: nowrap;
+ height: 100vh;
+ background: #141414;
+ overflow: hidden;
position: relative;
- font-size: 30px;
- margin-left: 4px;
- margin-right: 6px;
- color: #fff;
- z-index: 99;
-}
-
-.icon {
- font-size: 32px;
+ margin: 0;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
}
@media screen and (max-width: 750px) {
@@ -273,22 +66,18 @@ span:nth-child(10) {
}
}
-@keyframes fadeInAnimation {
- 0% {
- opacity: 0;
- }
- 100% {
- opacity: 1;
- }
+::-webkit-scrollbar {
+ width: 12px;
}
-
-@keyframes fadeInMoveAnimation {
- 0% {
- opacity: 0;
- transform: translateX(100%);
- }
- 100% {
- opacity: 1;
- transform: translateX(0%);
- }
+
+::-webkit-scrollbar-track {
+ background-color: #f1f1f1;
+}
+
+::-webkit-scrollbar-thumb {
+ background-color: #c1c1c1;
+}
+
+::-webkit-scrollbar-thumb:hover {
+ background-color: #a8a8a8;
}
diff --git a/src/App.tsx b/src/App.tsx
index 3711072..44e7eba 100644
--- a/src/App.tsx
+++ b/src/App.tsx
@@ -1,45 +1,18 @@
-import "./App.css";
-import { PiGithubLogo } from "react-icons/pi";
-import { CiCoffeeBean } from "react-icons/ci";
+import React from "react";
+import { Routes, Route } from "react-router-dom";
-const App = () => {
- const openGithubPage = () => {
- window.open("https://github.com/Bamboooz", "_blank");
- }
+import MainPage from "./pages/main/Main";
+import ProjectsPage from "./pages/projects/Projects";
- const openBuyMeACoffeePage = () => {
- window.open("https://www.buymeacoffee.com/Bamboooz", "_blank");
- }
+import "./App.css";
+import "./animations.css";
+const App = () => {
return (
-
BAMBOOOZ
-web developer
- - -BAMBOOOZ
+{name}
+{description}
+