diff --git a/composer.lock b/composer.lock
index aeeb7ea..8708e44 100644
--- a/composer.lock
+++ b/composer.lock
@@ -121,16 +121,16 @@
},
{
"name": "guzzlehttp/psr7",
- "version": "2.4.0",
+ "version": "2.4.3",
"source": {
"type": "git",
"url": "https://github.com/guzzle/psr7.git",
- "reference": "13388f00956b1503577598873fffb5ae994b5737"
+ "reference": "67c26b443f348a51926030c83481b85718457d3d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/guzzle/psr7/zipball/13388f00956b1503577598873fffb5ae994b5737",
- "reference": "13388f00956b1503577598873fffb5ae994b5737",
+ "url": "https://api.github.com/repos/guzzle/psr7/zipball/67c26b443f348a51926030c83481b85718457d3d",
+ "reference": "67c26b443f348a51926030c83481b85718457d3d",
"shasum": ""
},
"require": {
@@ -144,15 +144,19 @@
"psr/http-message-implementation": "1.0"
},
"require-dev": {
- "bamarni/composer-bin-plugin": "^1.4.1",
+ "bamarni/composer-bin-plugin": "^1.8.1",
"http-interop/http-factory-tests": "^0.9",
- "phpunit/phpunit": "^8.5.8 || ^9.3.10"
+ "phpunit/phpunit": "^8.5.29 || ^9.5.23"
},
"suggest": {
"laminas/laminas-httphandlerrunner": "Emit PSR-7 responses"
},
"type": "library",
"extra": {
+ "bamarni-bin": {
+ "bin-links": true,
+ "forward-command": false
+ },
"branch-alias": {
"dev-master": "2.4-dev"
}
@@ -216,7 +220,7 @@
],
"support": {
"issues": "https://github.com/guzzle/psr7/issues",
- "source": "https://github.com/guzzle/psr7/tree/2.4.0"
+ "source": "https://github.com/guzzle/psr7/tree/2.4.3"
},
"funding": [
{
@@ -232,7 +236,7 @@
"type": "tidelift"
}
],
- "time": "2022-06-20T21:43:11+00:00"
+ "time": "2022-10-26T14:07:24+00:00"
},
{
"name": "http-interop/http-factory-guzzle",
@@ -294,25 +298,24 @@
},
{
"name": "laminas/laminas-diactoros",
- "version": "2.14.0",
+ "version": "2.24.0",
"source": {
"type": "git",
"url": "https://github.com/laminas/laminas-diactoros.git",
- "reference": "6cb35f61913f06b2c91075db00f67cfd78869e28"
+ "reference": "6028af6c3b5ced4d063a680d2483cce67578b902"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laminas/laminas-diactoros/zipball/6cb35f61913f06b2c91075db00f67cfd78869e28",
- "reference": "6cb35f61913f06b2c91075db00f67cfd78869e28",
+ "url": "https://api.github.com/repos/laminas/laminas-diactoros/zipball/6028af6c3b5ced4d063a680d2483cce67578b902",
+ "reference": "6028af6c3b5ced4d063a680d2483cce67578b902",
"shasum": ""
},
"require": {
- "php": "^7.3 || ~8.0.0 || ~8.1.0",
+ "php": "~8.0.0 || ~8.1.0 || ~8.2.0",
"psr/http-factory": "^1.0",
"psr/http-message": "^1.0"
},
"conflict": {
- "phpspec/prophecy": "<1.9.0",
"zendframework/zend-diactoros": "*"
},
"provide": {
@@ -325,12 +328,11 @@
"ext-gd": "*",
"ext-libxml": "*",
"http-interop/http-factory-tests": "^0.9.0",
- "laminas/laminas-coding-standard": "~2.3.0",
- "php-http/psr7-integration-tests": "^1.1.1",
- "phpspec/prophecy-phpunit": "^2.0",
- "phpunit/phpunit": "^9.5",
- "psalm/plugin-phpunit": "^0.17.0",
- "vimeo/psalm": "^4.24.0"
+ "laminas/laminas-coding-standard": "^2.4.0",
+ "php-http/psr7-integration-tests": "^1.2",
+ "phpunit/phpunit": "^9.5.27",
+ "psalm/plugin-phpunit": "^0.18.4",
+ "vimeo/psalm": "^5.4"
},
"type": "library",
"extra": {
@@ -389,34 +391,34 @@
"type": "community_bridge"
}
],
- "time": "2022-07-28T12:23:48+00:00"
+ "time": "2022-12-20T12:22:40+00:00"
},
{
"name": "laminas/laminas-httphandlerrunner",
- "version": "2.1.0",
+ "version": "2.4.0",
"source": {
"type": "git",
"url": "https://github.com/laminas/laminas-httphandlerrunner.git",
- "reference": "4d337cde83e6b901a4443b0ab5c3b97cbaa46413"
+ "reference": "d15af53895fd581b5a448a09fd9a4baebc4ae6e5"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laminas/laminas-httphandlerrunner/zipball/4d337cde83e6b901a4443b0ab5c3b97cbaa46413",
- "reference": "4d337cde83e6b901a4443b0ab5c3b97cbaa46413",
+ "url": "https://api.github.com/repos/laminas/laminas-httphandlerrunner/zipball/d15af53895fd581b5a448a09fd9a4baebc4ae6e5",
+ "reference": "d15af53895fd581b5a448a09fd9a4baebc4ae6e5",
"shasum": ""
},
"require": {
- "php": "^7.3 || ~8.0.0 || ~8.1.0",
+ "php": "~8.0.0 || ~8.1.0 || ~8.2.0",
"psr/http-message": "^1.0",
"psr/http-message-implementation": "^1.0",
"psr/http-server-handler": "^1.0"
},
"require-dev": {
- "laminas/laminas-coding-standard": "~2.3.0",
- "laminas/laminas-diactoros": "^2.8.0",
- "phpunit/phpunit": "^9.5.9",
- "psalm/plugin-phpunit": "^0.16.1",
- "vimeo/psalm": "^4.10.0"
+ "laminas/laminas-coding-standard": "~2.4.0",
+ "laminas/laminas-diactoros": "^2.18",
+ "phpunit/phpunit": "^9.5.25",
+ "psalm/plugin-phpunit": "^0.17.0",
+ "vimeo/psalm": "^4.28"
},
"type": "library",
"extra": {
@@ -456,29 +458,30 @@
"type": "community_bridge"
}
],
- "time": "2021-09-22T09:27:36+00:00"
+ "time": "2022-10-25T13:41:39+00:00"
},
{
"name": "laravel/serializable-closure",
- "version": "v1.2.0",
+ "version": "v1.2.2",
"source": {
"type": "git",
"url": "https://github.com/laravel/serializable-closure.git",
- "reference": "09f0e9fb61829f628205b7c94906c28740ff9540"
+ "reference": "47afb7fae28ed29057fdca37e16a84f90cc62fae"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/09f0e9fb61829f628205b7c94906c28740ff9540",
- "reference": "09f0e9fb61829f628205b7c94906c28740ff9540",
+ "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/47afb7fae28ed29057fdca37e16a84f90cc62fae",
+ "reference": "47afb7fae28ed29057fdca37e16a84f90cc62fae",
"shasum": ""
},
"require": {
"php": "^7.3|^8.0"
},
"require-dev": {
- "pestphp/pest": "^1.18",
- "phpstan/phpstan": "^0.12.98",
- "symfony/var-dumper": "^5.3"
+ "nesbot/carbon": "^2.61",
+ "pestphp/pest": "^1.21.3",
+ "phpstan/phpstan": "^1.8.2",
+ "symfony/var-dumper": "^5.4.11"
},
"type": "library",
"extra": {
@@ -515,7 +518,7 @@
"issues": "https://github.com/laravel/serializable-closure/issues",
"source": "https://github.com/laravel/serializable-closure"
},
- "time": "2022-05-16T17:09:47+00:00"
+ "time": "2022-09-08T13:45:54+00:00"
},
{
"name": "monolog/monolog",
@@ -1582,40 +1585,40 @@
},
{
"name": "slim/psr7",
- "version": "1.5",
+ "version": "1.6",
"source": {
"type": "git",
"url": "https://github.com/slimphp/Slim-Psr7.git",
- "reference": "a47b43a8da7c0208b4c228af0cb29ea36080635a"
+ "reference": "3471c22c1a0d26c51c78f6aeb06489d38cf46a4d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/slimphp/Slim-Psr7/zipball/a47b43a8da7c0208b4c228af0cb29ea36080635a",
- "reference": "a47b43a8da7c0208b4c228af0cb29ea36080635a",
+ "url": "https://api.github.com/repos/slimphp/Slim-Psr7/zipball/3471c22c1a0d26c51c78f6aeb06489d38cf46a4d",
+ "reference": "3471c22c1a0d26c51c78f6aeb06489d38cf46a4d",
"shasum": ""
},
"require": {
"fig/http-message-util": "^1.1.5",
- "php": "^7.3 || ^8.0",
+ "php": "^7.4 || ^8.0",
"psr/http-factory": "^1.0",
"psr/http-message": "^1.0",
"ralouphie/getallheaders": "^3.0",
- "symfony/polyfill-php80": "^1.23"
+ "symfony/polyfill-php80": "^1.26"
},
"provide": {
"psr/http-factory-implementation": "1.0",
"psr/http-message-implementation": "1.0"
},
"require-dev": {
- "adriansuter/php-autoload-override": "^1.2",
+ "adriansuter/php-autoload-override": "^1.3",
"ext-json": "*",
"http-interop/http-factory-tests": "^0.9.0",
"php-http/psr7-integration-tests": "dev-master",
- "phpspec/prophecy": "^1.14",
+ "phpspec/prophecy": "^1.15",
"phpspec/prophecy-phpunit": "^2.0",
- "phpstan/phpstan": "^0.12.99",
+ "phpstan/phpstan": "^1.8",
"phpunit/phpunit": "^9.5",
- "squizlabs/php_codesniffer": "^3.6"
+ "squizlabs/php_codesniffer": "^3.7"
},
"type": "library",
"autoload": {
@@ -1658,22 +1661,22 @@
],
"support": {
"issues": "https://github.com/slimphp/Slim-Psr7/issues",
- "source": "https://github.com/slimphp/Slim-Psr7/tree/1.5"
+ "source": "https://github.com/slimphp/Slim-Psr7/tree/1.6"
},
- "time": "2021-09-22T04:33:00+00:00"
+ "time": "2022-11-05T18:50:24+00:00"
},
{
"name": "slim/slim",
- "version": "4.10.0",
+ "version": "4.11.0",
"source": {
"type": "git",
"url": "https://github.com/slimphp/Slim.git",
- "reference": "0dfc7d2fdf2553b361d864d51af3fe8a6ad168b0"
+ "reference": "b0f4ca393ea037be9ac7292ba7d0a34d18bac0c7"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/slimphp/Slim/zipball/0dfc7d2fdf2553b361d864d51af3fe8a6ad168b0",
- "reference": "0dfc7d2fdf2553b361d864d51af3fe8a6ad168b0",
+ "url": "https://api.github.com/repos/slimphp/Slim/zipball/b0f4ca393ea037be9ac7292ba7d0a34d18bac0c7",
+ "reference": "b0f4ca393ea037be9ac7292ba7d0a34d18bac0c7",
"shasum": ""
},
"require": {
@@ -1688,21 +1691,21 @@
"psr/log": "^1.1 || ^2.0 || ^3.0"
},
"require-dev": {
- "adriansuter/php-autoload-override": "^1.2",
+ "adriansuter/php-autoload-override": "^1.3",
"ext-simplexml": "*",
- "guzzlehttp/psr7": "^2.1",
+ "guzzlehttp/psr7": "^2.4",
"httpsoft/http-message": "^1.0",
"httpsoft/http-server-request": "^1.0",
- "laminas/laminas-diactoros": "^2.8",
+ "laminas/laminas-diactoros": "^2.17",
"nyholm/psr7": "^1.5",
"nyholm/psr7-server": "^1.0",
"phpspec/prophecy": "^1.15",
"phpspec/prophecy-phpunit": "^2.0",
- "phpstan/phpstan": "^1.4",
+ "phpstan/phpstan": "^1.8",
"phpunit/phpunit": "^9.5",
"slim/http": "^1.2",
"slim/psr7": "^1.5",
- "squizlabs/php_codesniffer": "^3.6"
+ "squizlabs/php_codesniffer": "^3.7"
},
"suggest": {
"ext-simplexml": "Needed to support XML format in BodyParsingMiddleware",
@@ -1775,37 +1778,37 @@
"type": "tidelift"
}
],
- "time": "2022-03-14T14:18:23+00:00"
+ "time": "2022-11-06T16:33:39+00:00"
},
{
"name": "slim/slim-skeleton",
- "version": "4.4.0",
+ "version": "4.5.0",
"source": {
"type": "git",
"url": "https://github.com/slimphp/Slim-Skeleton.git",
- "reference": "8a91d18b0a8e4623f1af9207e97477c7b8437f57"
+ "reference": "1997d86c18837d26248a2cca204fabb6a430329c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/slimphp/Slim-Skeleton/zipball/8a91d18b0a8e4623f1af9207e97477c7b8437f57",
- "reference": "8a91d18b0a8e4623f1af9207e97477c7b8437f57",
+ "url": "https://api.github.com/repos/slimphp/Slim-Skeleton/zipball/1997d86c18837d26248a2cca204fabb6a430329c",
+ "reference": "1997d86c18837d26248a2cca204fabb6a430329c",
"shasum": ""
},
"require": {
"ext-json": "*",
- "monolog/monolog": "^2.3",
+ "monolog/monolog": "^2.8",
"php": "^7.4 || ^8.0",
- "php-di/php-di": "^6.3",
+ "php-di/php-di": "^6.4",
"slim/psr7": "^1.5",
- "slim/slim": "^4.9"
+ "slim/slim": "^4.10"
},
"require-dev": {
"jangregor/phpstan-prophecy": "^1.0.0",
"phpspec/prophecy-phpunit": "^2.0",
- "phpstan/extension-installer": "^1.1.0",
- "phpstan/phpstan": "^1.3",
- "phpunit/phpunit": "^9.5.11",
- "squizlabs/php_codesniffer": "^3.6"
+ "phpstan/extension-installer": "^1.2.0",
+ "phpstan/phpstan": "^1.8",
+ "phpunit/phpunit": "^9.5.26",
+ "squizlabs/php_codesniffer": "^3.7"
},
"type": "library",
"autoload": {
@@ -1839,22 +1842,22 @@
],
"support": {
"issues": "https://github.com/slimphp/Slim-Skeleton/issues",
- "source": "https://github.com/slimphp/Slim-Skeleton/tree/4.4.0"
+ "source": "https://github.com/slimphp/Slim-Skeleton/tree/4.5.0"
},
- "time": "2022-01-14T19:30:57+00:00"
+ "time": "2022-11-02T21:21:07+00:00"
},
{
"name": "symfony/polyfill-php80",
- "version": "v1.26.0",
+ "version": "v1.27.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php80.git",
- "reference": "cfa0ae98841b9e461207c13ab093d76b0fa7bace"
+ "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/cfa0ae98841b9e461207c13ab093d76b0fa7bace",
- "reference": "cfa0ae98841b9e461207c13ab093d76b0fa7bace",
+ "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936",
+ "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936",
"shasum": ""
},
"require": {
@@ -1863,7 +1866,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "1.26-dev"
+ "dev-main": "1.27-dev"
},
"thanks": {
"name": "symfony/polyfill",
@@ -1908,7 +1911,7 @@
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-php80/tree/v1.26.0"
+ "source": "https://github.com/symfony/polyfill-php80/tree/v1.27.0"
},
"funding": [
{
@@ -1924,7 +1927,7 @@
"type": "tidelift"
}
],
- "time": "2022-05-10T07:21:04+00:00"
+ "time": "2022-11-03T14:55:06+00:00"
},
{
"name": "tuupola/callable-handler",
@@ -2057,34 +2060,34 @@
},
{
"name": "tuupola/slim-jwt-auth",
- "version": "3.6.0",
+ "version": "3.7.0",
"source": {
"type": "git",
"url": "https://github.com/tuupola/slim-jwt-auth.git",
- "reference": "d9ed8bca77a0ef2a95ab48e65ddc26073b99c5ff"
+ "reference": "ef05b93d4dac7307ef6ef3b62feaff30c32e82c1"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/tuupola/slim-jwt-auth/zipball/d9ed8bca77a0ef2a95ab48e65ddc26073b99c5ff",
- "reference": "d9ed8bca77a0ef2a95ab48e65ddc26073b99c5ff",
+ "url": "https://api.github.com/repos/tuupola/slim-jwt-auth/zipball/ef05b93d4dac7307ef6ef3b62feaff30c32e82c1",
+ "reference": "ef05b93d4dac7307ef6ef3b62feaff30c32e82c1",
"shasum": ""
},
"require": {
"firebase/php-jwt": "^3.0|^4.0|^5.0",
- "php": "^7.1|^8.0",
+ "php": "^7.2|^8.0",
"psr/http-message": "^1.0",
"psr/http-server-middleware": "^1.0",
"psr/log": "^1.0|^2.0|^3.0",
- "tuupola/callable-handler": "^0.3.0|^0.4.0|^1.0",
- "tuupola/http-factory": "^0.4.0|^1.0.2"
+ "tuupola/callable-handler": "^1.0",
+ "tuupola/http-factory": "^1.3"
},
"require-dev": {
"equip/dispatch": "^2.0",
"laminas/laminas-diactoros": "^2.0",
"overtrue/phplint": "^1.0",
- "phpstan/phpstan": "^0.12.43",
- "phpunit/phpunit": "^7.0|^8.0|^9.0",
- "squizlabs/php_codesniffer": "^3.4"
+ "phpstan/phpstan": "^1.8",
+ "phpunit/phpunit": "^7.0|^8.5.30|^9.0",
+ "squizlabs/php_codesniffer": "^3.7"
},
"type": "library",
"extra": {
@@ -2121,7 +2124,7 @@
],
"support": {
"issues": "https://github.com/tuupola/slim-jwt-auth/issues",
- "source": "https://github.com/tuupola/slim-jwt-auth/tree/3.6.0"
+ "source": "https://github.com/tuupola/slim-jwt-auth/tree/3.7.0"
},
"funding": [
{
@@ -2129,7 +2132,7 @@
"type": "github"
}
],
- "time": "2022-01-12T11:15:02+00:00"
+ "time": "2022-12-23T11:23:05+00:00"
}
],
"packages-dev": [],
diff --git a/dist/index.html b/dist/index.html
index 3cef133..bc6158f 100644
--- a/dist/index.html
+++ b/dist/index.html
@@ -1 +1 @@
-
Rohit Pai - Portfolio about Lorem ipsum dolor sit amet, consectetur adipisicing elit. Beatae debitis dolore, illum minus molestias officiis quidem similique ut. Autem consectetur eum, fugit illum ipsam laudantium magnam magni minima nesciunt numquam officia, soluta unde, voluptates! Aliquid aut, beatae dignissimos, dolorem ex exercitationem fugiat harum itaque laudantium placeat repellat suscipit velit! Aliquam architecto autem beatae consectetur, dicta dolorum eligendi esse harum hic iure labore, libero molestias nemo neque nisi nostrum odio sed sunt tempora totam voluptatem voluptatibus.
Download CV
\ No newline at end of file
+Rohit Pai - Portfolio about Lorem ipsum dolor sit amet, consectetur adipisicing elit. Beatae debitis dolore, illum minus molestias officiis quidem similique ut. Autem consectetur eum, fugit illum ipsam laudantium magnam magni minima nesciunt numquam officia, soluta unde, voluptates! Aliquid aut, beatae dignissimos, dolorem ex exercitationem fugiat harum itaque laudantium placeat repellat suscipit velit! Aliquam architecto autem beatae consectetur, dicta dolorum eligendi esse harum hic iure labore, libero molestias nemo neque nisi nostrum odio sed sunt tempora totam voluptatem voluptatibus.
Download CV
\ No newline at end of file
diff --git a/dist/js/main.js b/dist/js/main.js
index ae15f45..2fb066d 100644
--- a/dist/js/main.js
+++ b/dist/js/main.js
@@ -1 +1 @@
-const scrollLimit=150;var dataText=["full stack developer","web designer","student","gamer","drummer"];function typeWriter(t,e,n){e_',setTimeout((function(){typeWriter(t,e+1,n)}),100)):"function"==typeof n&&setTimeout(n,700)}function StartTextAnimation(t){void 0===dataText[t]?setTimeout((function(){StartTextAnimation(0)}),1500):t{e.json().then((n=>{e.ok&&n.forEach((e=>{let n=document.createElement("div");n.classList.add("timelineItem"),n.innerHTML=`\n\t\t\t\t\t\n\t\t\t\t\tGrade: ${e.grade} \n\t\t\t\t\t${e.course}
\n\t\t\t\t`,document.getElementById("edu").appendChild(n)}))}))})),fetch("/api/timelineData/work").then((e=>{e.json().then((n=>{e.ok&&n.forEach((e=>{let n=document.createElement("div");n.classList.add("timelineItem");let o=null===e.endPeriod?"Present":new Date(e.endPeriod).toLocaleString("en-gb",t);n.innerHTML=`\n\t\t\t\t\t\n\t\t\t\t\t${e.companyName} - ${e.area} \n\t\t\t\t\t${e.title}
\n\t\t\t\t`,document.getElementById("work").appendChild(n)}))}))}))}function getProjectData(){fetch("/api/projectData").then((t=>{t.json().then((e=>{t.ok&&e.forEach((t=>{if("1"===t.isMainProject)return document.getElementById("mainProj").innerHTML=`\n\t\t\t\t\t\t${t.title} \n\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t
${t.information}
\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t`,null;document.querySelector("#otherProj div").innerHTML+=`\n \n
\n
\n
\n `}))}))}))}window.onscroll=()=>{document.body.scrollTop>=150||document.documentElement.scrollTop>=150?document.querySelector("nav").classList.add("scrolled"):document.querySelector("nav").classList.remove("scrolled");let t="";document.querySelectorAll("section").forEach((e=>{const n=e.offsetTop;window.pageYOffset>=n-60&&(t=e.getAttribute("id"))})),document.querySelectorAll("nav ul li a").forEach((e=>{e.classList.remove("active"),e.href.includes(t)&&""!==t?e.classList.add("active"):""===t&&document.querySelector("nav ul li a").classList.add("active")}))},document.addEventListener("DOMContentLoaded",(()=>{StartTextAnimation(0),getTimelineData(),getProjectData()})),document.querySelector("#contactError .close").addEventListener("click",(()=>document.querySelector("#contactError").classList.toggle("hidden"))),document.querySelector("#goBackToTop").addEventListener("click",(()=>{window.scrollTo(0,0)})),document.querySelector("#contactForm").addEventListener("submit",(t=>{t.preventDefault();let e=new FormData;e.append("fName",document.querySelector("#fName").value),e.append("lName",document.querySelector("#lName").value),e.append("email",document.querySelector("#email").value),e.append("subject",document.querySelector("#subject").value),e.append("message",document.querySelector("#message").value);let n=!1;if(["#fName","#lName","#email","#subject","#message"].forEach((t=>{const e=document.querySelector(t);0===e.value.length?(e.classList.add("invalid"),n=!0):(e.classList.remove("invalid"),document.querySelector("#contactError").classList.remove("error"))})),n)return document.querySelector("#contactError").classList.add("error"),document.querySelector("#contactError").classList.remove("hidden"),void(document.querySelector("#contactError div").innerText="Please fill out all fields.");fetch("/api/contact",{method:"POST",body:e}).then((t=>{t.ok&&(document.querySelector("#contactError").classList.remove("hidden"),document.querySelector("#contactError div").innerText="Thanks for contacting me, I will get back to you as soon as possible.")}))}));
\ No newline at end of file
+const scrollLimit=150;var dataText=["full stack developer","web designer","student","gamer","drummer"];function typeWriter(t,e,n){e_',setTimeout((function(){typeWriter(t,e+1,n)}),100)):"function"==typeof n&&setTimeout(n,700)}function StartTextAnimation(t){void 0===dataText[t]?setTimeout((function(){StartTextAnimation(0)}),1500):t{e.json().then((n=>{e.ok&&n.forEach((e=>{let n=document.createElement("div");n.classList.add("timelineItem"),n.innerHTML=`\n\t\t\t\t\t\n\t\t\t\t\tGrade: ${e.grade} \n\t\t\t\t\t${e.course}
\n\t\t\t\t`,document.getElementById("edu").appendChild(n)}))}))})),fetch("/api/timelineData/work").then((e=>{e.json().then((n=>{e.ok&&n.forEach((e=>{let n=document.createElement("div");n.classList.add("timelineItem");let o=null===e.endPeriod?"Present":new Date(e.endPeriod).toLocaleString("en-gb",t);n.innerHTML=`\n\t\t\t\t\t\n\t\t\t\t\t${e.companyName} - ${e.area} \n\t\t\t\t\t${e.title}
\n\t\t\t\t`,document.getElementById("work").appendChild(n)}))}))}))}function getProjectData(){fetch("/api/projectData").then((t=>{t.json().then((e=>{t.ok&&e.forEach((t=>{if("1"===t.isMainProject)return document.getElementById("mainProj").innerHTML=`\n\t\t\t\t\t\t${t.title} \n\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t
${t.information}
\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t`,null;document.querySelector("#otherProj div").innerHTML+=`\n \n
\n
\n
\n `}))}))}))}window.onscroll=()=>{document.body.scrollTop>=150||document.documentElement.scrollTop>=150?document.querySelector("nav").classList.add("scrolled"):document.querySelector("nav").classList.remove("scrolled");let t="";document.querySelectorAll("section").forEach((e=>{const n=e.offsetTop;window.pageYOffset>=n-60&&(t=e.getAttribute("id"))})),document.querySelectorAll("nav ul li a").forEach((e=>{e.classList.remove("active"),e.href.includes(t)&&""!==t?e.classList.add("active"):""===t&&document.querySelector("nav ul li a").classList.add("active")}))},document.addEventListener("DOMContentLoaded",(()=>{StartTextAnimation(0),getTimelineData(),getProjectData(),document.getElementById("year").innerHTML=(new Date).getFullYear().toString()})),document.querySelector("#contactError .close").addEventListener("click",(()=>document.querySelector("#contactError").classList.toggle("hidden"))),document.querySelector("#goBackToTop").addEventListener("click",(()=>{window.scrollTo(0,0)})),document.querySelector("#contactForm").addEventListener("submit",(t=>{t.preventDefault();let e=new FormData;e.append("fName",document.querySelector("#fName").value),e.append("lName",document.querySelector("#lName").value),e.append("email",document.querySelector("#email").value),e.append("subject",document.querySelector("#subject").value),e.append("message",document.querySelector("#message").value);let n=!1;if(["#fName","#lName","#email","#subject","#message"].forEach((t=>{const e=document.querySelector(t);0===e.value.length?(e.classList.add("invalid"),n=!0):(e.classList.remove("invalid"),document.querySelector("#contactError").classList.remove("error"))})),n)return document.querySelector("#contactError").classList.add("error"),document.querySelector("#contactError").classList.remove("hidden"),void(document.querySelector("#contactError div").innerText="Please fill out all fields.");fetch("/api/contact",{method:"POST",body:e}).then((t=>{t.ok&&(document.querySelector("#contactError").classList.remove("hidden"),document.querySelector("#contactError div").innerText="Thanks for contacting me, I will get back to you as soon as possible.")}))}));
\ No newline at end of file
diff --git a/src/cms.sql b/src/cms.sql
new file mode 100644
index 0000000..512243e
--- /dev/null
+++ b/src/cms.sql
@@ -0,0 +1,145 @@
+-- MariaDB dump 10.19 Distrib 10.9.4-MariaDB, for Linux (x86_64)
+--
+-- Host: sql276.main-hosting.eu Database: u987021215_cms
+-- ------------------------------------------------------
+-- Server version 10.5.12-MariaDB-cll-lve
+
+/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
+/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
+/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
+/*!40101 SET NAMES utf8mb4 */;
+/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
+/*!40103 SET TIME_ZONE='+00:00' */;
+/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
+/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
+/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
+/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
+
+--
+-- Table structure for table `edu`
+--
+
+DROP TABLE IF EXISTS `edu`;
+/*!40101 SET @saved_cs_client = @@character_set_client */;
+/*!40101 SET character_set_client = utf8 */;
+CREATE TABLE `edu` (
+ `ID` int(11) NOT NULL AUTO_INCREMENT,
+ `startPeriod` date NOT NULL,
+ `endPeriod` date NOT NULL,
+ `grade` varchar(20) COLLATE utf8mb4_unicode_ci NOT NULL,
+ `course` varchar(150) COLLATE utf8mb4_unicode_ci NOT NULL,
+ PRIMARY KEY (`ID`)
+) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
+/*!40101 SET character_set_client = @saved_cs_client */;
+
+--
+-- Dumping data for table `edu`
+--
+
+LOCK TABLES `edu` WRITE;
+/*!40000 ALTER TABLE `edu` DISABLE KEYS */;
+INSERT INTO `edu` (`ID`, `startPeriod`, `endPeriod`, `grade`, `course`) VALUES (1,'2016-09-01','2018-07-01','D*D*D*','Chelmsford College - BTEC Level 3 in IT'),
+(2,'2018-09-10','2022-07-20','2(i)','University of Sussex - Computer Science and AI with a placement year'),
+(11,'2022-09-26','2024-08-25','Not completed yet','University of Nottingham - Computer Sciene (Artificial Intelligence)');
+/*!40000 ALTER TABLE `edu` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `projects`
+--
+
+DROP TABLE IF EXISTS `projects`;
+/*!40101 SET @saved_cs_client = @@character_set_client */;
+/*!40101 SET character_set_client = utf8 */;
+CREATE TABLE `projects` (
+ `ID` int(11) NOT NULL AUTO_INCREMENT,
+ `title` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL,
+ `date` date NOT NULL,
+ `isMainProject` tinyint(1) NOT NULL,
+ `information` text COLLATE utf8mb4_unicode_ci NOT NULL,
+ `imgLocation` varchar(200) COLLATE utf8mb4_unicode_ci NOT NULL,
+ `projectLink` text COLLATE utf8mb4_unicode_ci NOT NULL,
+ `githubLink` text COLLATE utf8mb4_unicode_ci NOT NULL,
+ PRIMARY KEY (`ID`)
+) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
+/*!40101 SET character_set_client = @saved_cs_client */;
+
+--
+-- Dumping data for table `projects`
+--
+
+LOCK TABLES `projects` WRITE;
+/*!40000 ALTER TABLE `projects` DISABLE KEYS */;
+INSERT INTO `projects` (`ID`, `title`, `date`, `isMainProject`, `information`, `imgLocation`, `projectLink`, `githubLink`) VALUES (1,'Money Tabs','2021-09-28',1,'This is a web app that should allow users to add friends as tabs so that they can easily manage, who owes them and who they owe.','N/A','N/A','https://github.com/rodude123/money-tabs'),
+(2,'Money Tabs','2021-09-28',0,'This is a web app that should allow users to add friends as tabs so that they can easily manage, who owes them and who they owe.','N/A','N/A','https://github.com/rodude123/money-tabs');
+/*!40000 ALTER TABLE `projects` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `users`
+--
+
+DROP TABLE IF EXISTS `users`;
+/*!40101 SET @saved_cs_client = @@character_set_client */;
+/*!40101 SET character_set_client = utf8 */;
+CREATE TABLE `users` (
+ `ID` int(11) NOT NULL AUTO_INCREMENT,
+ `username` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
+ `email` varchar(200) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
+ `password` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
+ `mfaSecret` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
+ `resetCode` varchar(200) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
+ PRIMARY KEY (`ID`)
+) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
+/*!40101 SET character_set_client = @saved_cs_client */;
+
+--
+-- Dumping data for table `users`
+--
+
+LOCK TABLES `users` WRITE;
+/*!40000 ALTER TABLE `users` DISABLE KEYS */;
+INSERT INTO `users` (`ID`, `username`, `email`, `password`, `mfaSecret`, `resetCode`) VALUES (1,'rodude123','rodude123@gmail.com','$2y$10$oRtVHNLEnMtwEzgGAScALeISUP28HVk.GvwH8naFZZrQKu0OF9xu2','0','0');
+/*!40000 ALTER TABLE `users` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `work`
+--
+
+DROP TABLE IF EXISTS `work`;
+/*!40101 SET @saved_cs_client = @@character_set_client */;
+/*!40101 SET character_set_client = utf8 */;
+CREATE TABLE `work` (
+ `ID` int(11) NOT NULL AUTO_INCREMENT,
+ `startPeriod` date NOT NULL,
+ `endPeriod` date DEFAULT NULL,
+ `companyName` varchar(30) COLLATE utf8mb4_unicode_ci NOT NULL,
+ `area` varchar(30) COLLATE utf8mb4_unicode_ci NOT NULL,
+ `title` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL,
+ PRIMARY KEY (`ID`)
+) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
+/*!40101 SET character_set_client = @saved_cs_client */;
+
+--
+-- Dumping data for table `work`
+--
+
+LOCK TABLES `work` WRITE;
+/*!40000 ALTER TABLE `work` DISABLE KEYS */;
+INSERT INTO `work` (`ID`, `startPeriod`, `endPeriod`, `companyName`, `area`, `title`) VALUES (1,'2016-09-01','2017-08-31','Co-op','Billericay','Retail Assistant'),
+(2,'2019-07-01','2019-08-31','Cerebriu','Copenhagen','Student Intern'),
+(3,'2020-09-01','2021-07-30','Cerebriu','Copenhagen','Intern Consultant');
+/*!40000 ALTER TABLE `work` ENABLE KEYS */;
+UNLOCK TABLES;
+/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
+
+/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
+/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
+/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
+/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
+/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
+/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
+/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
+
+-- Dump completed on 2022-12-24 18:37:29
diff --git a/src/index.html b/src/index.html
index 7348814..3e10bee 100644
--- a/src/index.html
+++ b/src/index.html
@@ -155,7 +155,7 @@