diff --git a/package.json b/package.json
index 516eb7a..3dc94ca 100644
--- a/package.json
+++ b/package.json
@@ -33,7 +33,7 @@
"remark-github": "^11.2.4",
"remark-slug": "^7.0.1",
"sass": "^1.55.0",
- "svelte": "^3.51.0",
+ "svelte": "^3.52.0",
"svelte-check": "^2.9.2",
"svelte-preprocess": "^4.10.7",
"tslib": "^2.4.0",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 887b2c9..5d200b6 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -23,7 +23,7 @@ specifiers:
remark-github: ^11.2.4
remark-slug: ^7.0.1
sass: ^1.55.0
- svelte: ^3.51.0
+ svelte: ^3.52.0
svelte-check: ^2.9.2
svelte-preprocess: ^4.10.7
tslib: ^2.4.0
@@ -37,27 +37,27 @@ devDependencies:
'@fec/remark-a11y-emoji': 3.1.0
'@fluentui/svg-icons': 1.1.184
'@neodrag/svelte': 1.2.4
- '@sveltejs/kit': 1.0.0-next.514_svelte@3.51.0+vite@3.1.7
+ '@sveltejs/kit': 1.0.0-next.514_svelte@3.53.1+vite@3.1.7
'@typescript-eslint/eslint-plugin': 5.40.0_25sstg4uu2sk4pm7xcyzuov7xq
'@typescript-eslint/parser': 5.40.0_z4bbprzjrhnsfa24uvmcbu7f5q
autoprefixer: 10.4.12_postcss@8.4.17
cssnano: 5.1.13_postcss@8.4.17
eslint: 8.25.0
eslint-config-prettier: 8.5.0_eslint@8.25.0
- eslint-plugin-svelte3: 3.4.1_pr36k4f4yzzzfpayao7l7fkqni
+ eslint-plugin-svelte3: 3.4.1_wh6k3s2kjjgapidgujbzyd6wmi
fluent-svelte: 1.6.0
- mdsvex: 0.10.6_svelte@3.51.0
+ mdsvex: 0.10.6_svelte@3.53.1
postcss: 8.4.17
postcss-media-minmax: 5.0.0_postcss@8.4.17
prettier: 2.7.1
- prettier-plugin-svelte: 2.8.0_ibge6ami6vq2q2j5g4rcvk62hq
+ prettier-plugin-svelte: 2.8.0_nryolsexf6k3znhuh4uzpugsem
remark-gfm: 3.0.1
remark-github: 11.2.4
remark-slug: 7.0.1
sass: 1.55.0
- svelte: 3.51.0
- svelte-check: 2.9.2_zq4rugmbmdxug4elkcndsqzzae
- svelte-preprocess: 4.10.7_vfvibhcgrfuxcyaos6ilfh4mou
+ svelte: 3.53.1
+ svelte-check: 2.9.2_ynvloq57zp3up66xotwxm5zsvq
+ svelte-preprocess: 4.10.7_g5wsmquatqal3xw3dxoea3c3ym
tslib: 2.4.0
typescript: 4.8.4
vite: 3.1.7_sass@1.55.0
@@ -259,7 +259,7 @@ packages:
rollup: 2.79.1
dev: false
- /@sveltejs/kit/1.0.0-next.514_svelte@3.51.0+vite@3.1.7:
+ /@sveltejs/kit/1.0.0-next.514_svelte@3.53.1+vite@3.1.7:
resolution: {integrity: sha512-1vBKNeLkaQGz/QEQ9bxWwqHwJbBQJTVKReFoFQugGBhiT/Q39Uv+FpXWh+XND9OxMJ947ndqp/EiQj0IAmPwhg==}
engines: {node: '>=16.14'}
hasBin: true
@@ -268,7 +268,7 @@ packages:
svelte: ^3.44.0
vite: ^3.1.0
dependencies:
- '@sveltejs/vite-plugin-svelte': 1.0.9_svelte@3.51.0+vite@3.1.7
+ '@sveltejs/vite-plugin-svelte': 1.0.9_svelte@3.53.1+vite@3.1.7
'@types/cookie': 0.5.1
cookie: 0.5.0
devalue: 4.0.0
@@ -278,7 +278,7 @@ packages:
sade: 1.8.1
set-cookie-parser: 2.5.1
sirv: 2.0.2
- svelte: 3.51.0
+ svelte: 3.53.1
tiny-glob: 0.2.9
undici: 5.11.0
vite: 3.1.7_sass@1.55.0
@@ -287,7 +287,7 @@ packages:
- supports-color
dev: true
- /@sveltejs/vite-plugin-svelte/1.0.9_svelte@3.51.0+vite@3.1.7:
+ /@sveltejs/vite-plugin-svelte/1.0.9_svelte@3.53.1+vite@3.1.7:
resolution: {integrity: sha512-+SDrAnT7TDi8sdj4OfD2SC4s9DNrpNVBrue8fT2PmKks9Ddu0JIfSeX91wXZb/1xHz4EkGb+rli8GTRI0yGOjg==}
engines: {node: ^14.18.0 || >= 16}
peerDependencies:
@@ -303,8 +303,8 @@ packages:
deepmerge: 4.2.2
kleur: 4.1.5
magic-string: 0.26.7
- svelte: 3.51.0
- svelte-hmr: 0.15.0_svelte@3.51.0
+ svelte: 3.53.1
+ svelte-hmr: 0.15.0_svelte@3.53.1
vite: 3.1.7_sass@1.55.0
transitivePeerDependencies:
- supports-color
@@ -1160,7 +1160,7 @@ packages:
eslint: 8.25.0
dev: true
- /eslint-plugin-svelte3/3.4.1_pr36k4f4yzzzfpayao7l7fkqni:
+ /eslint-plugin-svelte3/3.4.1_wh6k3s2kjjgapidgujbzyd6wmi:
resolution: {integrity: sha512-7p59WG8qV8L6wLdl4d/c3mdjkgVglQCdv5XOTk/iNPBKXuuV+Q0eFP5Wa6iJd/G2M1qR3BkLPEzaANOqKAZczw==}
engines: {node: '>=10'}
peerDependencies:
@@ -1168,7 +1168,7 @@ packages:
svelte: ^3.2.0
dependencies:
eslint: 8.25.0
- svelte: 3.51.0
+ svelte: 3.53.1
dev: true
/eslint-scope/5.1.1:
@@ -1767,7 +1767,7 @@ packages:
resolution: {integrity: sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==}
dev: true
- /mdsvex/0.10.6_svelte@3.51.0:
+ /mdsvex/0.10.6_svelte@3.53.1:
resolution: {integrity: sha512-aGRDY0r5jx9+OOgFdyB9Xm3EBr9OUmcrTDPWLB7a7g8VPRxzPy4MOBmcVYgz7ErhAJ7bZ/coUoj6aHio3x/2mA==}
peerDependencies:
svelte: 3.x
@@ -1775,7 +1775,7 @@ packages:
'@types/unist': 2.0.6
prism-svelte: 0.4.7
prismjs: 1.29.0
- svelte: 3.51.0
+ svelte: 3.53.1
vfile-message: 2.0.4
dev: true
@@ -2511,14 +2511,14 @@ packages:
engines: {node: '>= 0.8.0'}
dev: true
- /prettier-plugin-svelte/2.8.0_ibge6ami6vq2q2j5g4rcvk62hq:
+ /prettier-plugin-svelte/2.8.0_nryolsexf6k3znhuh4uzpugsem:
resolution: {integrity: sha512-QlXv/U3bUszks3XYDPsk1fsaQC+fo2lshwKbcbO+lrSVdJ+40mB1BfL8OCAk1W9y4pJxpqO/4gqm6NtF3zNGCw==}
peerDependencies:
prettier: ^1.16.4 || ^2.0.0
svelte: ^3.2.0
dependencies:
prettier: 2.7.1
- svelte: 3.51.0
+ svelte: 3.53.1
dev: true
/prettier/2.7.1:
@@ -2781,7 +2781,7 @@ packages:
resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
engines: {node: '>= 0.4'}
- /svelte-check/2.9.2_zq4rugmbmdxug4elkcndsqzzae:
+ /svelte-check/2.9.2_ynvloq57zp3up66xotwxm5zsvq:
resolution: {integrity: sha512-DRi8HhnCiqiGR2YF9ervPGvtoYrheE09cXieCTEqeTPOTJzfoa54Py8rovIBv4bH4n5HgZYIyTQ3DDLHQLl2uQ==}
hasBin: true
peerDependencies:
@@ -2793,8 +2793,8 @@ packages:
import-fresh: 3.3.0
picocolors: 1.0.0
sade: 1.8.1
- svelte: 3.51.0
- svelte-preprocess: 4.10.7_vfvibhcgrfuxcyaos6ilfh4mou
+ svelte: 3.53.1
+ svelte-preprocess: 4.10.7_g5wsmquatqal3xw3dxoea3c3ym
typescript: 4.8.4
transitivePeerDependencies:
- '@babel/core'
@@ -2809,16 +2809,16 @@ packages:
- sugarss
dev: true
- /svelte-hmr/0.15.0_svelte@3.51.0:
+ /svelte-hmr/0.15.0_svelte@3.53.1:
resolution: {integrity: sha512-Aw21SsyoohyVn4yiKXWPNCSW2DQNH/76kvUnE9kpt4h9hcg9tfyQc6xshx9hzgMfGF0kVx0EGD8oBMWSnATeOg==}
engines: {node: ^12.20 || ^14.13.1 || >= 16}
peerDependencies:
svelte: '>=3.19.0'
dependencies:
- svelte: 3.51.0
+ svelte: 3.53.1
dev: true
- /svelte-preprocess/4.10.7_vfvibhcgrfuxcyaos6ilfh4mou:
+ /svelte-preprocess/4.10.7_g5wsmquatqal3xw3dxoea3c3ym:
resolution: {integrity: sha512-sNPBnqYD6FnmdBrUmBCaqS00RyCsCpj2BG58A1JBswNF7b0OKviwxqVrOL/CKyJrLSClrSeqQv5BXNg2RUbPOw==}
engines: {node: '>= 9.11.2'}
requiresBuild: true
@@ -2867,12 +2867,12 @@ packages:
sass: 1.55.0
sorcery: 0.10.0
strip-indent: 3.0.0
- svelte: 3.51.0
+ svelte: 3.53.1
typescript: 4.8.4
dev: true
- /svelte/3.51.0:
- resolution: {integrity: sha512-PBITYIrsNOuW+Dtds00gSY68raNZQn7i59Dg/fjgf6WwyawPKeBwle692coO7ILZqSO+UJe9899aDn9sMdeOHA==}
+ /svelte/3.53.1:
+ resolution: {integrity: sha512-Q4/hHkktZogGhN5iqxqSi9sjEVoe/NbIxX4hXEHoasTxj+TxEQVAq66LnDMdAZxjmsodkoI5F3slqsS68U7FNw==}
engines: {node: '>= 8'}
dev: true
diff --git a/src/data/docs.ts b/src/data/docs.ts
deleted file mode 100644
index 7721391..0000000
--- a/src/data/docs.ts
+++ /dev/null
@@ -1,61 +0,0 @@
-export type DocsNode = {
- name: string,
- icon?: string,
-}
-
-export type DocsPage = DocsNode & { path: string }
-
-export type DocsCategory = DocsNode & { pages: DocsPage[] }
-
-export const docs: (DocsPage | DocsCategory)[] = [
- {
- name: "Overview",
- path: ""
- },
- {
- name: "Configuring Files",
- pages: [
- {
- name: "Terminal Profiles",
- path: "/configuring/terminal-profiles"
- },
- {
- name: "Date Formats",
- path: "/configuring/date-formats"
- },
- {
- name: "Custom Themes",
- path: "/configuring/custom-themes"
- },
- {
- name: "Keyboard Shortcuts",
- path: "/configuring/keyboard-shortcuts"
- },
- {
- name: "Replacing File Explorer with Files",
- path: "/configuring/replace-file-explorer"
- },
- {
- name: "Troubleshooting Installation Issues",
- path: "/configuring/troubleshooting-installation"
- }
- ]
- },
- {
- name: "Contributing",
- pages: [
- {
- name: "Building Files from Source",
- path: "/contributing/building-from-source"
- },
- {
- name: "Updates",
- path: "/contributing/updates"
- },
- {
- name: "Code Style",
- path: "/contributing/code-style"
- }
- ]
- }
-];
diff --git a/src/data/features.ts b/src/data/features.ts
index c3ebf8c..400da50 100644
--- a/src/data/features.ts
+++ b/src/data/features.ts
@@ -11,7 +11,17 @@ export const previewFiles = [
type: "Programming Language",
description: "I've been using this language for years. For hobby projects and for my degree. I like doing full-stack, multi-layer projects. Backend and frontend are both important to me.",
confidence: "Very Confident!",
- confidenceLevel: "97%"
+ confidenceLevel: "97%",
+ projects: [
+ {
+ name: "Library Manager",
+ link: "/degree/library-manager",
+ },
+ {
+ name: "Lunar Lander SQL",
+ link: "/degree/lunarlandersql",
+ }
+ ]
},
{
name: "Python",
@@ -19,7 +29,31 @@ export const previewFiles = [
type: "Programming Language",
description: "I've been using this language for years. For hobby projects and for my degree. I've used it mostly as a scripting language, but I've also used it for some desktop development using PyQT. I've used it to play around with tensorflow and machine learning.",
confidence: "Pretty Confident",
- confidenceLevel: "85%"
+ confidenceLevel: "85%",
+ projects: [
+ {
+ name: "Python QT Data Analysis Tool",
+ link: "/degree/pythonqtdataanalysis"
+ }
+ ]
+ },
+ {
+ name: "Databases",
+ icon: "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHg9IjBweCIgeT0iMHB4Igp3aWR0aD0iMjQwIiBoZWlnaHQ9IjI0MCIKdmlld0JveD0iMCAwIDQ4IDQ4Ij4KPGxpbmVhckdyYWRpZW50IGlkPSJ3T1FvdXhlbnV+WEZSUVAxbEZGQXlhX1JYck9ONWt5Tjk2QV9ncjEiIHgxPSI5IiB4Mj0iMzkiIHkxPSIzNiIgeTI9IjM2IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjMTE0MDhhIj48L3N0b3A+PHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjMTAzZjhmIj48L3N0b3A+PC9saW5lYXJHcmFkaWVudD48cGF0aCBmaWxsPSJ1cmwoI3dPUW91eGVudX5YRlJRUDFsRkZBeWFfUlhyT041a3lOOTZBX2dyMSkiIGQ9Ik0zOSwyOUg5YzAsMCwwLDguNjU3LDAsOWMwLDIuNzYxLDYuNzE2LDUsMTUsNXMxNS0yLjIzOSwxNS01QzM5LDM3LjY1NywzOSwyOSwzOSwyOXoiPjwvcGF0aD48bGluZWFyR3JhZGllbnQgaWQ9IndPUW91eGVudX5YRlJRUDFsRkZBeWJfUlhyT041a3lOOTZBX2dyMiIgeDE9IjkiIHgyPSIzOSIgeTE9IjI2LjUiIHkyPSIyNi41IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjMWQ1OWIzIj48L3N0b3A+PHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjMTk1YmJjIj48L3N0b3A+PC9saW5lYXJHcmFkaWVudD48cGF0aCBmaWxsPSJ1cmwoI3dPUW91eGVudX5YRlJRUDFsRkZBeWJfUlhyT041a3lOOTZBX2dyMikiIGQ9Ik0zOSwxOUg5YzAsMCwwLDkuNjU3LDAsMTBjMCwyLjc2MSw2LjcxNiw1LDE1LDVzMTUtMi4yMzksMTUtNUMzOSwyOC42NTcsMzksMTksMzksMTl6Ij48L3BhdGg+PGxpbmVhckdyYWRpZW50IGlkPSJ3T1FvdXhlbnV+WEZSUVAxbEZGQXljX1JYck9ONWt5Tjk2QV9ncjMiIHgxPSI5IiB4Mj0iMzkiIHkxPSIxNi43NSIgeTI9IjE2Ljc1IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjMzA3OWQ2Ij48L3N0b3A+PHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjMjk3Y2QyIj48L3N0b3A+PC9saW5lYXJHcmFkaWVudD48cGF0aCBmaWxsPSJ1cmwoI3dPUW91eGVudX5YRlJRUDFsRkZBeWNfUlhyT041a3lOOTZBX2dyMykiIGQ9Ik0zOSw5LjVIOWMwLDAsMCw5LjE1NywwLDkuNWMwLDIuNzYxLDYuNzE2LDUsMTUsNXMxNS0yLjIzOSwxNS01QzM5LDE4LjY1NywzOSw5LjUsMzksOS41eiI+PC9wYXRoPjxsaW5lYXJHcmFkaWVudCBpZD0id09Rb3V4ZW51flhGUlFQMWxGRkF5ZF9SWHJPTjVreU45NkFfZ3I0IiB4MT0iOSIgeDI9IjM5IiB5MT0iOS41IiB5Mj0iOS41IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjNDJhM2YyIj48L3N0b3A+PHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjNDJhNGViIj48L3N0b3A+PC9saW5lYXJHcmFkaWVudD48ZWxsaXBzZSBjeD0iMjQiIGN5PSI5LjUiIGZpbGw9InVybCgjd09Rb3V4ZW51flhGUlFQMWxGRkF5ZF9SWHJPTjVreU45NkFfZ3I0KSIgcng9IjE1IiByeT0iNC41Ij48L2VsbGlwc2U+PGxpbmVhckdyYWRpZW50IGlkPSJ3T1FvdXhlbnV+WEZSUVAxbEZGQXllX1JYck9ONWt5Tjk2QV9ncjUiIHgxPSIzMS4xODkiIHgyPSI0NS40MjYiIHkxPSIzMS4xNjkiIHkyPSI0NS40MDYiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj48c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiM4ODkwOTciPjwvc3RvcD48c3RvcCBvZmZzZXQ9Ii4zMzEiIHN0b3AtY29sb3I9IiM4NDhjOTQiPjwvc3RvcD48c3RvcCBvZmZzZXQ9Ii42NjkiIHN0b3AtY29sb3I9IiM3ODgyOGIiPjwvc3RvcD48c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiM2NDcxN2MiPjwvc3RvcD48L2xpbmVhckdyYWRpZW50PjxwYXRoIGZpbGw9InVybCgjd09Rb3V4ZW51flhGUlFQMWxGRkF5ZV9SWHJPTjVreU45NkFfZ3I1KSIgZD0iTTQ3LjcxNSwzNS42NDdjLTEuMTkzLDAuMTUxLTIuNDE1LTAuNDA3LTMuMDU0LTEuNTE0Yy0wLjYzOS0xLjEwNi0wLjUxMi0yLjQ0NCwwLjIxNi0zLjQwMSBjLTEuMTI5LTEuMDcyLTIuNTA1LTEuODg0LTQuMDM4LTIuMzM4Yy0wLjQ2NCwxLjExMS0xLjU2LDEuODkzLTIuODM5LDEuODkzcy0yLjM3NS0wLjc4MS0yLjgzOS0xLjg5MyBjLTEuNTMzLDAuNDUzLTIuOTA5LDEuMjY2LTQuMDM4LDIuMzM4YzAuNzI3LDAuOTU3LDAuODU0LDIuMjk1LDAuMjE2LDMuNDAxYy0wLjYzOSwxLjEwNi0xLjg2MSwxLjY2NS0zLjA1NCwxLjUxNCBDMjguMTA1LDM2LjM5NiwyOCwzNy4xNzUsMjgsMzcuOTc5YzAsMC44MDUsMC4xMDUsMS41ODMsMC4yODUsMi4zMzJjMS4xOTMtMC4xNTEsMi40MTUsMC40MDcsMy4wNTQsMS41MTQgYzAuNjM5LDEuMTA2LDAuNTEyLDIuNDQ0LTAuMjE2LDMuNDAxYzEuMTI5LDEuMDcyLDIuNTA1LDEuODg0LDQuMDM4LDIuMzM4YzAuNDY0LTEuMTExLDEuNTYtMS44OTMsMi44MzktMS44OTMgczIuMzc1LDAuNzgxLDIuODM5LDEuODkzYzEuNTMzLTAuNDUzLDIuOTA5LTEuMjY2LDQuMDM4LTIuMzM4Yy0wLjcyNy0wLjk1Ny0wLjg1NC0yLjI5NS0wLjIxNi0zLjQwMSBjMC42MzktMS4xMDYsMS44NjEtMS42NjUsMy4wNTQtMS41MTRDNDcuODk1LDM5LjU2Miw0OCwzOC43ODQsNDgsMzcuOTc5QzQ4LDM3LjE3NSw0Ny44OTUsMzYuMzk2LDQ3LjcxNSwzNS42NDd6Ij48L3BhdGg+PGxpbmVhckdyYWRpZW50IGlkPSJ3T1FvdXhlbnV+WEZSUVAxbEZGQXlmX1JYck9ONWt5Tjk2QV9ncjYiIHgxPSI0MS43NTEiIHgyPSIzNC4xOTgiIHkxPSI0MS43MzEiIHkyPSIzNC4xNzgiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj48c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiNmZmYiPjwvc3RvcD48c3RvcCBvZmZzZXQ9Ii4yNDIiIHN0b3AtY29sb3I9IiNmMmYyZjIiPjwvc3RvcD48c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNjY2MiPjwvc3RvcD48L2xpbmVhckdyYWRpZW50PjxjaXJjbGUgY3g9IjM4IiBjeT0iMzcuOTc5IiByPSI1LjM4NSIgZmlsbD0idXJsKCN3T1FvdXhlbnV+WEZSUVAxbEZGQXlmX1JYck9ONWt5Tjk2QV9ncjYpIj48L2NpcmNsZT48bGluZWFyR3JhZGllbnQgaWQ9IndPUW91eGVudX5YRlJRUDFsRkZBeWdfUlhyT041a3lOOTZBX2dyNyIgeDE9IjM0LjkzMyIgeDI9IjQwLjMxMyIgeTE9IjM0LjkxMiIgeTI9IjQwLjI5MiIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iIzBkNjFhOSI+PC9zdG9wPjxzdG9wIG9mZnNldD0iLjM2MyIgc3RvcC1jb2xvcj0iIzBlNWZhNCI+PC9zdG9wPjxzdG9wIG9mZnNldD0iLjc4IiBzdG9wLWNvbG9yPSIjMTM1Nzk2Ij48L3N0b3A+PHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjMTY1MjhjIj48L3N0b3A+PC9saW5lYXJHcmFkaWVudD48Y2lyY2xlIGN4PSIzOCIgY3k9IjM3Ljk3OSIgcj0iMy4yNzgiIGZpbGw9InVybCgjd09Rb3V4ZW51flhGUlFQMWxGRkF5Z19SWHJPTjVreU45NkFfZ3I3KSI+PC9jaXJjbGU+PGxpbmVhckdyYWRpZW50IGlkPSJ3T1FvdXhlbnV+WEZSUVAxbEZGQXloX1JYck9ONWt5Tjk2QV9ncjgiIHgxPSIzMS4xODkiIHgyPSI0NS40MjYiIHkxPSIzMS4yMSIgeTI9IjQ1LjQ0NyIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iIzg4OTA5NyI+PC9zdG9wPjxzdG9wIG9mZnNldD0iLjMzMSIgc3RvcC1jb2xvcj0iIzg0OGM5NCI+PC9zdG9wPjxzdG9wIG9mZnNldD0iLjY2OSIgc3RvcC1jb2xvcj0iIzc4ODI4YiI+PC9zdG9wPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iIzY0NzE3YyI+PC9zdG9wPjwvbGluZWFyR3JhZGllbnQ+PHBhdGggZmlsbD0idXJsKCN3T1FvdXhlbnV+WEZSUVAxbEZGQXloX1JYck9ONWt5Tjk2QV9ncjgpIiBkPSJNNDcuNzE1LDM1LjY4OGMtMS4xOTMsMC4xNTEtMi40MTUtMC40MDctMy4wNTQtMS41MTRjLTAuNjM5LTEuMTA2LTAuNTEyLTIuNDQ0LDAuMjE2LTMuNDAxIGMtMS4xMjktMS4wNzItMi41MDUtMS44ODQtNC4wMzgtMi4zMzhjLTAuNDY0LDEuMTExLTEuNTYsMS44OTMtMi44MzksMS44OTNzLTIuMzc1LTAuNzgxLTIuODM5LTEuODkzIGMtMS41MzMsMC40NTMtMi45MDksMS4yNjYtNC4wMzgsMi4zMzhjMC43MjcsMC45NTcsMC44NTQsMi4yOTUsMC4yMTYsMy40MDFjLTAuNjM5LDEuMTA2LTEuODYxLDEuNjY1LTMuMDU0LDEuNTE0IEMyOC4xMDUsMzYuNDM4LDI4LDM3LjIxNiwyOCwzOC4wMjFjMCwwLjgwNSwwLjEwNSwxLjU4MywwLjI4NSwyLjMzMmMxLjE5My0wLjE1MSwyLjQxNSwwLjQwNywzLjA1NCwxLjUxNCBjMC42MzksMS4xMDYsMC41MTIsMi40NDQtMC4yMTYsMy40MDFjMS4xMjksMS4wNzIsMi41MDUsMS44ODQsNC4wMzgsMi4zMzhjMC40NjQtMS4xMTEsMS41Ni0xLjg5MywyLjgzOS0xLjg5MyBzMi4zNzUsMC43ODEsMi44MzksMS44OTNjMS41MzMtMC40NTMsMi45MDktMS4yNjYsNC4wMzgtMi4zMzhjLTAuNzI3LTAuOTU3LTAuODU0LTIuMjk1LTAuMjE2LTMuNDAxIGMwLjYzOS0xLjEwNiwxLjg2MS0xLjY2NSwzLjA1NC0xLjUxNEM0Ny44OTUsMzkuNjA0LDQ4LDM4LjgyNSw0OCwzOC4wMjFDNDgsMzcuMjE2LDQ3Ljg5NSwzNi40MzgsNDcuNzE1LDM1LjY4OHoiPjwvcGF0aD48bGluZWFyR3JhZGllbnQgaWQ9IndPUW91eGVudX5YRlJRUDFsRkZBeWlfUlhyT041a3lOOTZBX2dyOSIgeDE9IjQxLjQ4MyIgeDI9IjM0LjQ3IiB5MT0iNDEuNTA0IiB5Mj0iMzQuNDkxIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjZmZmIj48L3N0b3A+PHN0b3Agb2Zmc2V0PSIuMjQyIiBzdG9wLWNvbG9yPSIjZjJmMmYyIj48L3N0b3A+PHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjY2NjIj48L3N0b3A+PC9saW5lYXJHcmFkaWVudD48Y2lyY2xlIGN4PSIzOCIgY3k9IjM4LjAyMSIgcj0iNSIgZmlsbD0idXJsKCN3T1FvdXhlbnV+WEZSUVAxbEZGQXlpX1JYck9ONWt5Tjk2QV9ncjkpIj48L2NpcmNsZT48bGluZWFyR3JhZGllbnQgaWQ9IndPUW91eGVudX5YRlJRUDFsRkZBeWpfUlhyT041a3lOOTZBX2dyMTAiIHgxPSIzNS4xOTMiIHgyPSI0MC4xMTciIHkxPSIzNS4yMTQiIHkyPSI0MC4xMzgiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj48c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiMwZDYxYTkiPjwvc3RvcD48c3RvcCBvZmZzZXQ9Ii4zNjMiIHN0b3AtY29sb3I9IiMwZTVmYTQiPjwvc3RvcD48c3RvcCBvZmZzZXQ9Ii43OCIgc3RvcC1jb2xvcj0iIzEzNTc5NiI+PC9zdG9wPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iIzE2NTI4YyI+PC9zdG9wPjwvbGluZWFyR3JhZGllbnQ+PGNpcmNsZSBjeD0iMzgiIGN5PSIzOC4wMjEiIHI9IjMiIGZpbGw9InVybCgjd09Rb3V4ZW51flhGUlFQMWxGRkF5al9SWHJPTjVreU45NkFfZ3IxMCkiPjwvY2lyY2xlPgo8L3N2Zz4=",
+ type: "Skill",
+ description: "Uncommonly, I'm one that quite likes databases and data structures. I've worked with MySQL, SQL Server, SQLite and MongoDB. Both as a hobby and for my degree.",
+ confidence: "Confident!",
+ confidenceLevel: "95%",
+ projects: [
+ {
+ name: "Library Manager",
+ link: "/degree/library-manager"
+ },
+ {
+ name: "Lunar Lander game written in SQL",
+ link: "/degree/lunarlandersql"
+ }
+ ]
},
{
name: "Rust",
@@ -27,7 +61,13 @@ export const previewFiles = [
type: "Programming Language",
description: "This is a language I've been learning as a hobby in my spare time. I hope to use it more in the future for more projects as I like using it.",
confidence: "Confident but no expert",
- confidenceLevel: "55%"
+ confidenceLevel: "55%",
+ projects: [
+ {
+ name: "Raytracer",
+ link: "/personal/raytracer"
+ }
+ ]
},
{
name: "HTML/CSS/JS",
@@ -35,7 +75,13 @@ export const previewFiles = [
type: "'Programming' Language(s)",
description: "I've been making sites for years using these. Some for my degree, some for fun. Although, frontend web frameworks seem like a nightmare situation to me and I much prefer writing backend code.",
confidence: "Somewhat Confident",
- confidenceLevel: "80%"
+ confidenceLevel: "80%",
+ projects: [
+ {
+ name: "Personal website (this site)",
+ link: "/personal/website"
+ }
+ ]
},
{
name: "Windows",
@@ -61,14 +107,7 @@ export const previewFiles = [
confidence: "Confident!",
confidenceLevel: "95%"
},
- {
- name: "Databases",
- icon: "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHg9IjBweCIgeT0iMHB4Igp3aWR0aD0iMjQwIiBoZWlnaHQ9IjI0MCIKdmlld0JveD0iMCAwIDQ4IDQ4Ij4KPGxpbmVhckdyYWRpZW50IGlkPSJ3T1FvdXhlbnV+WEZSUVAxbEZGQXlhX1JYck9ONWt5Tjk2QV9ncjEiIHgxPSI5IiB4Mj0iMzkiIHkxPSIzNiIgeTI9IjM2IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjMTE0MDhhIj48L3N0b3A+PHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjMTAzZjhmIj48L3N0b3A+PC9saW5lYXJHcmFkaWVudD48cGF0aCBmaWxsPSJ1cmwoI3dPUW91eGVudX5YRlJRUDFsRkZBeWFfUlhyT041a3lOOTZBX2dyMSkiIGQ9Ik0zOSwyOUg5YzAsMCwwLDguNjU3LDAsOWMwLDIuNzYxLDYuNzE2LDUsMTUsNXMxNS0yLjIzOSwxNS01QzM5LDM3LjY1NywzOSwyOSwzOSwyOXoiPjwvcGF0aD48bGluZWFyR3JhZGllbnQgaWQ9IndPUW91eGVudX5YRlJRUDFsRkZBeWJfUlhyT041a3lOOTZBX2dyMiIgeDE9IjkiIHgyPSIzOSIgeTE9IjI2LjUiIHkyPSIyNi41IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjMWQ1OWIzIj48L3N0b3A+PHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjMTk1YmJjIj48L3N0b3A+PC9saW5lYXJHcmFkaWVudD48cGF0aCBmaWxsPSJ1cmwoI3dPUW91eGVudX5YRlJRUDFsRkZBeWJfUlhyT041a3lOOTZBX2dyMikiIGQ9Ik0zOSwxOUg5YzAsMCwwLDkuNjU3LDAsMTBjMCwyLjc2MSw2LjcxNiw1LDE1LDVzMTUtMi4yMzksMTUtNUMzOSwyOC42NTcsMzksMTksMzksMTl6Ij48L3BhdGg+PGxpbmVhckdyYWRpZW50IGlkPSJ3T1FvdXhlbnV+WEZSUVAxbEZGQXljX1JYck9ONWt5Tjk2QV9ncjMiIHgxPSI5IiB4Mj0iMzkiIHkxPSIxNi43NSIgeTI9IjE2Ljc1IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjMzA3OWQ2Ij48L3N0b3A+PHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjMjk3Y2QyIj48L3N0b3A+PC9saW5lYXJHcmFkaWVudD48cGF0aCBmaWxsPSJ1cmwoI3dPUW91eGVudX5YRlJRUDFsRkZBeWNfUlhyT041a3lOOTZBX2dyMykiIGQ9Ik0zOSw5LjVIOWMwLDAsMCw5LjE1NywwLDkuNWMwLDIuNzYxLDYuNzE2LDUsMTUsNXMxNS0yLjIzOSwxNS01QzM5LDE4LjY1NywzOSw5LjUsMzksOS41eiI+PC9wYXRoPjxsaW5lYXJHcmFkaWVudCBpZD0id09Rb3V4ZW51flhGUlFQMWxGRkF5ZF9SWHJPTjVreU45NkFfZ3I0IiB4MT0iOSIgeDI9IjM5IiB5MT0iOS41IiB5Mj0iOS41IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjNDJhM2YyIj48L3N0b3A+PHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjNDJhNGViIj48L3N0b3A+PC9saW5lYXJHcmFkaWVudD48ZWxsaXBzZSBjeD0iMjQiIGN5PSI5LjUiIGZpbGw9InVybCgjd09Rb3V4ZW51flhGUlFQMWxGRkF5ZF9SWHJPTjVreU45NkFfZ3I0KSIgcng9IjE1IiByeT0iNC41Ij48L2VsbGlwc2U+PGxpbmVhckdyYWRpZW50IGlkPSJ3T1FvdXhlbnV+WEZSUVAxbEZGQXllX1JYck9ONWt5Tjk2QV9ncjUiIHgxPSIzMS4xODkiIHgyPSI0NS40MjYiIHkxPSIzMS4xNjkiIHkyPSI0NS40MDYiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj48c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiM4ODkwOTciPjwvc3RvcD48c3RvcCBvZmZzZXQ9Ii4zMzEiIHN0b3AtY29sb3I9IiM4NDhjOTQiPjwvc3RvcD48c3RvcCBvZmZzZXQ9Ii42NjkiIHN0b3AtY29sb3I9IiM3ODgyOGIiPjwvc3RvcD48c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiM2NDcxN2MiPjwvc3RvcD48L2xpbmVhckdyYWRpZW50PjxwYXRoIGZpbGw9InVybCgjd09Rb3V4ZW51flhGUlFQMWxGRkF5ZV9SWHJPTjVreU45NkFfZ3I1KSIgZD0iTTQ3LjcxNSwzNS42NDdjLTEuMTkzLDAuMTUxLTIuNDE1LTAuNDA3LTMuMDU0LTEuNTE0Yy0wLjYzOS0xLjEwNi0wLjUxMi0yLjQ0NCwwLjIxNi0zLjQwMSBjLTEuMTI5LTEuMDcyLTIuNTA1LTEuODg0LTQuMDM4LTIuMzM4Yy0wLjQ2NCwxLjExMS0xLjU2LDEuODkzLTIuODM5LDEuODkzcy0yLjM3NS0wLjc4MS0yLjgzOS0xLjg5MyBjLTEuNTMzLDAuNDUzLTIuOTA5LDEuMjY2LTQuMDM4LDIuMzM4YzAuNzI3LDAuOTU3LDAuODU0LDIuMjk1LDAuMjE2LDMuNDAxYy0wLjYzOSwxLjEwNi0xLjg2MSwxLjY2NS0zLjA1NCwxLjUxNCBDMjguMTA1LDM2LjM5NiwyOCwzNy4xNzUsMjgsMzcuOTc5YzAsMC44MDUsMC4xMDUsMS41ODMsMC4yODUsMi4zMzJjMS4xOTMtMC4xNTEsMi40MTUsMC40MDcsMy4wNTQsMS41MTQgYzAuNjM5LDEuMTA2LDAuNTEyLDIuNDQ0LTAuMjE2LDMuNDAxYzEuMTI5LDEuMDcyLDIuNTA1LDEuODg0LDQuMDM4LDIuMzM4YzAuNDY0LTEuMTExLDEuNTYtMS44OTMsMi44MzktMS44OTMgczIuMzc1LDAuNzgxLDIuODM5LDEuODkzYzEuNTMzLTAuNDUzLDIuOTA5LTEuMjY2LDQuMDM4LTIuMzM4Yy0wLjcyNy0wLjk1Ny0wLjg1NC0yLjI5NS0wLjIxNi0zLjQwMSBjMC42MzktMS4xMDYsMS44NjEtMS42NjUsMy4wNTQtMS41MTRDNDcuODk1LDM5LjU2Miw0OCwzOC43ODQsNDgsMzcuOTc5QzQ4LDM3LjE3NSw0Ny44OTUsMzYuMzk2LDQ3LjcxNSwzNS42NDd6Ij48L3BhdGg+PGxpbmVhckdyYWRpZW50IGlkPSJ3T1FvdXhlbnV+WEZSUVAxbEZGQXlmX1JYck9ONWt5Tjk2QV9ncjYiIHgxPSI0MS43NTEiIHgyPSIzNC4xOTgiIHkxPSI0MS43MzEiIHkyPSIzNC4xNzgiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj48c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiNmZmYiPjwvc3RvcD48c3RvcCBvZmZzZXQ9Ii4yNDIiIHN0b3AtY29sb3I9IiNmMmYyZjIiPjwvc3RvcD48c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNjY2MiPjwvc3RvcD48L2xpbmVhckdyYWRpZW50PjxjaXJjbGUgY3g9IjM4IiBjeT0iMzcuOTc5IiByPSI1LjM4NSIgZmlsbD0idXJsKCN3T1FvdXhlbnV+WEZSUVAxbEZGQXlmX1JYck9ONWt5Tjk2QV9ncjYpIj48L2NpcmNsZT48bGluZWFyR3JhZGllbnQgaWQ9IndPUW91eGVudX5YRlJRUDFsRkZBeWdfUlhyT041a3lOOTZBX2dyNyIgeDE9IjM0LjkzMyIgeDI9IjQwLjMxMyIgeTE9IjM0LjkxMiIgeTI9IjQwLjI5MiIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iIzBkNjFhOSI+PC9zdG9wPjxzdG9wIG9mZnNldD0iLjM2MyIgc3RvcC1jb2xvcj0iIzBlNWZhNCI+PC9zdG9wPjxzdG9wIG9mZnNldD0iLjc4IiBzdG9wLWNvbG9yPSIjMTM1Nzk2Ij48L3N0b3A+PHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjMTY1MjhjIj48L3N0b3A+PC9saW5lYXJHcmFkaWVudD48Y2lyY2xlIGN4PSIzOCIgY3k9IjM3Ljk3OSIgcj0iMy4yNzgiIGZpbGw9InVybCgjd09Rb3V4ZW51flhGUlFQMWxGRkF5Z19SWHJPTjVreU45NkFfZ3I3KSI+PC9jaXJjbGU+PGxpbmVhckdyYWRpZW50IGlkPSJ3T1FvdXhlbnV+WEZSUVAxbEZGQXloX1JYck9ONWt5Tjk2QV9ncjgiIHgxPSIzMS4xODkiIHgyPSI0NS40MjYiIHkxPSIzMS4yMSIgeTI9IjQ1LjQ0NyIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iIzg4OTA5NyI+PC9zdG9wPjxzdG9wIG9mZnNldD0iLjMzMSIgc3RvcC1jb2xvcj0iIzg0OGM5NCI+PC9zdG9wPjxzdG9wIG9mZnNldD0iLjY2OSIgc3RvcC1jb2xvcj0iIzc4ODI4YiI+PC9zdG9wPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iIzY0NzE3YyI+PC9zdG9wPjwvbGluZWFyR3JhZGllbnQ+PHBhdGggZmlsbD0idXJsKCN3T1FvdXhlbnV+WEZSUVAxbEZGQXloX1JYck9ONWt5Tjk2QV9ncjgpIiBkPSJNNDcuNzE1LDM1LjY4OGMtMS4xOTMsMC4xNTEtMi40MTUtMC40MDctMy4wNTQtMS41MTRjLTAuNjM5LTEuMTA2LTAuNTEyLTIuNDQ0LDAuMjE2LTMuNDAxIGMtMS4xMjktMS4wNzItMi41MDUtMS44ODQtNC4wMzgtMi4zMzhjLTAuNDY0LDEuMTExLTEuNTYsMS44OTMtMi44MzksMS44OTNzLTIuMzc1LTAuNzgxLTIuODM5LTEuODkzIGMtMS41MzMsMC40NTMtMi45MDksMS4yNjYtNC4wMzgsMi4zMzhjMC43MjcsMC45NTcsMC44NTQsMi4yOTUsMC4yMTYsMy40MDFjLTAuNjM5LDEuMTA2LTEuODYxLDEuNjY1LTMuMDU0LDEuNTE0IEMyOC4xMDUsMzYuNDM4LDI4LDM3LjIxNiwyOCwzOC4wMjFjMCwwLjgwNSwwLjEwNSwxLjU4MywwLjI4NSwyLjMzMmMxLjE5My0wLjE1MSwyLjQxNSwwLjQwNywzLjA1NCwxLjUxNCBjMC42MzksMS4xMDYsMC41MTIsMi40NDQtMC4yMTYsMy40MDFjMS4xMjksMS4wNzIsMi41MDUsMS44ODQsNC4wMzgsMi4zMzhjMC40NjQtMS4xMTEsMS41Ni0xLjg5MywyLjgzOS0xLjg5MyBzMi4zNzUsMC43ODEsMi44MzksMS44OTNjMS41MzMtMC40NTMsMi45MDktMS4yNjYsNC4wMzgtMi4zMzhjLTAuNzI3LTAuOTU3LTAuODU0LTIuMjk1LTAuMjE2LTMuNDAxIGMwLjYzOS0xLjEwNiwxLjg2MS0xLjY2NSwzLjA1NC0xLjUxNEM0Ny44OTUsMzkuNjA0LDQ4LDM4LjgyNSw0OCwzOC4wMjFDNDgsMzcuMjE2LDQ3Ljg5NSwzNi40MzgsNDcuNzE1LDM1LjY4OHoiPjwvcGF0aD48bGluZWFyR3JhZGllbnQgaWQ9IndPUW91eGVudX5YRlJRUDFsRkZBeWlfUlhyT041a3lOOTZBX2dyOSIgeDE9IjQxLjQ4MyIgeDI9IjM0LjQ3IiB5MT0iNDEuNTA0IiB5Mj0iMzQuNDkxIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjZmZmIj48L3N0b3A+PHN0b3Agb2Zmc2V0PSIuMjQyIiBzdG9wLWNvbG9yPSIjZjJmMmYyIj48L3N0b3A+PHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjY2NjIj48L3N0b3A+PC9saW5lYXJHcmFkaWVudD48Y2lyY2xlIGN4PSIzOCIgY3k9IjM4LjAyMSIgcj0iNSIgZmlsbD0idXJsKCN3T1FvdXhlbnV+WEZSUVAxbEZGQXlpX1JYck9ONWt5Tjk2QV9ncjkpIj48L2NpcmNsZT48bGluZWFyR3JhZGllbnQgaWQ9IndPUW91eGVudX5YRlJRUDFsRkZBeWpfUlhyT041a3lOOTZBX2dyMTAiIHgxPSIzNS4xOTMiIHgyPSI0MC4xMTciIHkxPSIzNS4yMTQiIHkyPSI0MC4xMzgiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj48c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiMwZDYxYTkiPjwvc3RvcD48c3RvcCBvZmZzZXQ9Ii4zNjMiIHN0b3AtY29sb3I9IiMwZTVmYTQiPjwvc3RvcD48c3RvcCBvZmZzZXQ9Ii43OCIgc3RvcC1jb2xvcj0iIzEzNTc5NiI+PC9zdG9wPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iIzE2NTI4YyI+PC9zdG9wPjwvbGluZWFyR3JhZGllbnQ+PGNpcmNsZSBjeD0iMzgiIGN5PSIzOC4wMjEiIHI9IjMiIGZpbGw9InVybCgjd09Rb3V4ZW51flhGUlFQMWxGRkF5al9SWHJPTjVreU45NkFfZ3IxMCkiPjwvY2lyY2xlPgo8L3N2Zz4=",
- type: "Skill",
- description: "Uncommonly, I'm one that quite likes databases and data structures. I've worked with MySQL, SQL Server, SQLite and MongoDB. Both as a hobby and for my degree.",
- confidence: "Confident!",
- confidenceLevel: "95%"
- },
+
{
name: "XAML",
icon: "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHg9IjBweCIgeT0iMHB4Igp3aWR0aD0iMjQwIiBoZWlnaHQ9IjI0MCIKdmlld0JveD0iMCAwIDQ4IDQ4Ij4KPHBhdGggZmlsbD0iIzUwZTZmZiIgZD0iTTQwLDZIOEM2LjksNiw2LDYuOSw2LDh2MzJjMCwxLjEsMC45LDIsMiwyaDMyYzEuMSwwLDItMC45LDItMlY4QzQyLDYuOSw0MS4xLDYsNDAsNnoiPjwvcGF0aD48cGF0aCBmaWxsPSIjMGQ2MWE5IiBkPSJNMTAuMiwyNC40bDUuNSw1LjVjMC4yLDAuMiwwLjYsMC4yLDAuOCwwbDEuMi0xLjJjMC4yLTAuMiwwLjItMC42LDAtMC44bC01LjUtNS41Yy0wLjItMC4yLTAuNi0wLjItMC44LDAgbC0xLjIsMS4yQzkuOSwyMy44LDkuOSwyNC4yLDEwLjIsMjQuNHoiPjwvcGF0aD48cGF0aCBmaWxsPSIjMGQ2MWE5IiBkPSJNMTIuMiwyNS42bDUuNS01LjVjMC4yLTAuMiwwLjItMC42LDAtMC44TDE2LjUsMThjLTAuMi0wLjItMC42LTAuMi0wLjgsMGwtNS41LDUuNWMtMC4yLDAuMi0wLjIsMC42LDAsMC44IGwxLjIsMS4yQzExLjYsMjUuOCwxMS45LDI1LjgsMTIuMiwyNS42eiI+PC9wYXRoPjxwYXRoIGZpbGw9IiMwZDYxYTkiIGQ9Ik0zNy44LDI0LjRMMzIuMywzMGMtMC4yLDAuMi0wLjYsMC4yLTAuOCwwbC0xLjItMS4yYy0wLjItMC4yLTAuMi0wLjYsMC0wLjhsNS41LTUuNWMwLjItMC4yLDAuNi0wLjIsMC44LDAgbDEuMiwxLjJDMzguMSwyMy44LDM4LjEsMjQuMiwzNy44LDI0LjR6Ij48L3BhdGg+PHBhdGggZmlsbD0iIzBkNjFhOSIgZD0iTTM1LjgsMjUuNkwzMC4zLDIwYy0wLjItMC4yLTAuMi0wLjYsMC0wLjhsMS4yLTEuMmMwLjItMC4yLDAuNi0wLjIsMC44LDBsNS41LDUuNWMwLjIsMC4yLDAuMiwwLjYsMCwwLjggbC0xLjIsMS4yQzM2LjQsMjUuOCwzNi4xLDI1LjgsMzUuOCwyNS42eiI+PC9wYXRoPjxwYXRoIGZpbGw9IiMwZDYxYTkiIGQ9Ik0yNy4yLDE0LjFoLTIuMWMtMC4zLDAtMC41LDAuMi0wLjYsMC40bC00LjEsMTguOWMtMC4xLDAuMywwLjIsMC41LDAuNCwwLjVoMi4xYzAuMywwLDAuNS0wLjIsMC42LTAuNCBsNC4xLTE4LjlDMjcuNiwxNC4zLDI3LjQsMTQuMSwyNy4yLDE0LjF6Ij48L3BhdGg+Cjwvc3ZnPg==",
diff --git a/src/data/links.ts b/src/data/links.ts
index a9782bc..57624ce 100644
--- a/src/data/links.ts
+++ b/src/data/links.ts
@@ -1,4 +1,4 @@
-import type { DocsPage } from "$data/docs";
+import type { DocsPage } from "$data/projects";
export const links = {
github: {
diff --git a/src/data/projects.ts b/src/data/projects.ts
new file mode 100644
index 0000000..366717a
--- /dev/null
+++ b/src/data/projects.ts
@@ -0,0 +1,45 @@
+export type DocsNode = {
+ name: string,
+ icon?: string,
+}
+
+export type DocsPage = DocsNode & { path: string }
+
+export type DocsCategory = DocsNode & { pages: DocsPage[] }
+
+export const projects: (DocsPage | DocsCategory)[] = [
+ {
+ name: "Overview",
+ path: ""
+ },
+ {
+ name: "Personal",
+ pages: [
+ {
+ name: "Raytracer",
+ path: "/personal/raytracer"
+ },
+ {
+ name: "Personal website (this site)",
+ path: "/personal/website"
+ }
+ ]
+ },
+ {
+ name: "Degree-related",
+ pages: [
+ {
+ name: "Library Manager",
+ path: "/degree/library-manager"
+ },
+ {
+ name: "Python QT Data Analysis Tool",
+ path: "/degree/pythonqtdataanalysis"
+ },
+ {
+ name: "Lunar Lander game written in SQL",
+ path: "/degree/lunarlandersql"
+ }
+ ]
+ }
+];
diff --git a/src/layout/FeaturesSection/FeaturesSection.svelte b/src/layout/FeaturesSection/FeaturesSection.svelte
index c749c4e..3b0e15e 100644
--- a/src/layout/FeaturesSection/FeaturesSection.svelte
+++ b/src/layout/FeaturesSection/FeaturesSection.svelte
@@ -31,7 +31,7 @@
Skills
-
My experience and confidence
+
My experience and interests
I like using a wide-range of technologies and tools to solve problems.
Here's a sample of the ones I like the most and have the most experience with.
diff --git a/src/layout/FeaturesSection/preview/PreviewShowcase.scss b/src/layout/FeaturesSection/preview/PreviewShowcase.scss
index 2fb1c19..273a4df 100644
--- a/src/layout/FeaturesSection/preview/PreviewShowcase.scss
+++ b/src/layout/FeaturesSection/preview/PreviewShowcase.scss
@@ -134,7 +134,14 @@
background-image: linear-gradient(#f0a3a3, #f42323);
}
}
-
+ div.listcontainer {
+ text-align: center;
+ ul {
+ display: inline-block;
+ text-align: left;
+ }
+ }
+
// Metadata elements
h4,
h5,
diff --git a/src/layout/FeaturesSection/preview/PreviewShowcase.svelte b/src/layout/FeaturesSection/preview/PreviewShowcase.svelte
index 5bf8b3a..3ae7fb6 100644
--- a/src/layout/FeaturesSection/preview/PreviewShowcase.svelte
+++ b/src/layout/FeaturesSection/preview/PreviewShowcase.svelte
@@ -1,6 +1,8 @@
@@ -48,6 +50,22 @@