Compare commits
14 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
f072b215fe
|
|||
|
be4d32556f
|
|||
|
e6164752b1
|
|||
|
40930d2117
|
|||
|
a330f7caf5
|
|||
|
941eacfb3f
|
|||
|
2017ca50f1
|
|||
|
86035dc9e5
|
|||
|
14b8028449
|
|||
|
e2630f287a
|
|||
|
9798ae913f
|
|||
|
7c959769f7
|
|||
|
9e3c0fa389
|
|||
|
e9ec5b8ef9
|
+26
-25
@@ -3,7 +3,7 @@
|
||||
"version": "0.0.1",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"dev": "vite dev",
|
||||
"dev": "CF_PAGES=1 vite dev",
|
||||
"build": "vite build",
|
||||
"preview": "vite preview",
|
||||
"check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json",
|
||||
@@ -12,32 +12,33 @@
|
||||
"format": "prettier --write ."
|
||||
},
|
||||
"devDependencies": {
|
||||
"@eslint/js": "^9.0.0",
|
||||
"@sveltejs/adapter-auto": "^3.2.0",
|
||||
"@sveltejs/adapter-cloudflare": "^4.4.0",
|
||||
"@sveltejs/kit": "^2.5.6",
|
||||
"@sveltejs/vite-plugin-svelte": "^3.1.0",
|
||||
"autoprefixer": "^10.4.19",
|
||||
"daisyui": "latest",
|
||||
"eslint": "^9.0.0",
|
||||
"eslint-config-prettier": "^9.1.0",
|
||||
"eslint-plugin-svelte": "^2.37.0",
|
||||
"globals": "^15.0.0",
|
||||
"postcss": "^8.4.38",
|
||||
"prettier": "^3.2.5",
|
||||
"prettier-plugin-svelte": "^3.2.3",
|
||||
"svelte": "^4.2.15",
|
||||
"svelte-check": "^3.6.9",
|
||||
"svelte-eslint-parser": "^0.34.1",
|
||||
"svelte-preprocess": "^5.1.4",
|
||||
"tailwindcss": "^3.4.3",
|
||||
"tslib": "^2.6.2",
|
||||
"typescript": "^5.4.5",
|
||||
"typescript-eslint": "^7.7.0",
|
||||
"vite": "^5.2.9"
|
||||
"@eslint/js": "^9.12.0",
|
||||
"@sveltejs/adapter-auto": "6.0.1",
|
||||
"@sveltejs/adapter-cloudflare": "^7.0.3",
|
||||
"@sveltejs/kit": "^2.7.1",
|
||||
"@sveltejs/vite-plugin-svelte": "5.0.3",
|
||||
"@tailwindcss/postcss": "^4.1.6",
|
||||
"daisyui": "5.0.35",
|
||||
"eslint": "^9.12.0",
|
||||
"eslint-config-prettier": "10.1.5",
|
||||
"eslint-plugin-svelte": "3.6.0",
|
||||
"globals": "16.1.0",
|
||||
"postcss": "^8.4.47",
|
||||
"prettier": "^3.3.3",
|
||||
"prettier-plugin-svelte": "^3.2.7",
|
||||
"svelte": "^5",
|
||||
"svelte-check": "^4.0.5",
|
||||
"svelte-eslint-parser": "1.1.3",
|
||||
"svelte-preprocess": "^6.0.3",
|
||||
"tailwindcss": "^4.1.6",
|
||||
"tslib": "^2.7.0",
|
||||
"typescript": "^5.6.3",
|
||||
"typescript-eslint": "^8.9.0",
|
||||
"vite": "6.3.5"
|
||||
},
|
||||
"type": "module",
|
||||
"dependencies": {
|
||||
"lucide-svelte": "^0.372.0"
|
||||
"@tailwindcss/vite": "^4.1.6",
|
||||
"lucide-svelte": "0.510.0"
|
||||
}
|
||||
}
|
||||
|
||||
+1
-2
@@ -1,6 +1,5 @@
|
||||
export default {
|
||||
plugins: {
|
||||
tailwindcss: {},
|
||||
autoprefixer: {},
|
||||
"@tailwindcss/postcss": {},
|
||||
},
|
||||
};
|
||||
|
||||
+26
-3
@@ -1,6 +1,29 @@
|
||||
@tailwind base;
|
||||
@tailwind components;
|
||||
@tailwind utilities;
|
||||
@import "tailwindcss";
|
||||
@import "tailwindcss";
|
||||
|
||||
@plugin "daisyui" {
|
||||
themes:
|
||||
sunset --default,
|
||||
cmyk;
|
||||
}
|
||||
|
||||
/*
|
||||
The default border color has changed to `currentcolor` in Tailwind CSS v4,
|
||||
so we've added these compatibility styles to make sure everything still
|
||||
looks the same as it did with Tailwind CSS v3.
|
||||
|
||||
If we ever want to remove these styles, we need to add an explicit border
|
||||
color utility to any element that depends on these defaults.
|
||||
*/
|
||||
@layer base {
|
||||
*,
|
||||
::after,
|
||||
::before,
|
||||
::backdrop,
|
||||
::file-selector-button {
|
||||
border-color: var(--color-gray-200, currentcolor);
|
||||
}
|
||||
}
|
||||
|
||||
.height-minus-nav {
|
||||
min-height: calc(100vh - 4.75rem);
|
||||
|
||||
+4
-1
@@ -3,7 +3,10 @@
|
||||
<head>
|
||||
<title>nickbland.dev</title>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="description" content="This is my personal website as a way to navigate through some of the projects I've done or am working on." />
|
||||
<meta
|
||||
name="description"
|
||||
content="This is my personal website as a way to navigate through some of the projects I've done or am working on."
|
||||
/>
|
||||
<link
|
||||
rel="apple-touch-icon"
|
||||
sizes="180x180"
|
||||
|
||||
@@ -1,33 +1,49 @@
|
||||
<script lang="ts">
|
||||
import Github from "lucide-svelte/icons/github";
|
||||
import Gitlab from "lucide-svelte/icons/gitlab";
|
||||
</script>
|
||||
|
||||
<footer class="footer items-center py-4 bg-neutral text-neutral-content">
|
||||
<footer
|
||||
class="footer sm:footer-horizontal bg-neutral text-neutral-content items-center p-4"
|
||||
>
|
||||
<aside class="items-center grid-flow-col mx-2">
|
||||
<a class="btn text-xl btn-ghost" href="/">nickbland.dev</a>
|
||||
<p>
|
||||
Copyright © 2024 - All right reserved | <a
|
||||
class="link"
|
||||
href="https://git.nickbland.dev/NickBland/website-2">Source Code</a
|
||||
> | Made with ❤️ using SvelteKit
|
||||
Copyright © {new Date().getFullYear()} - All right reserved |
|
||||
<a class="link" href="https://git.nickbland.dev/NickBland/website-2">Source Code</a>
|
||||
| Made with ❤️ using SvelteKit
|
||||
</p>
|
||||
</aside>
|
||||
<nav class="grid-flow-col gap-4 md:place-self-center md:justify-self-end mx-2">
|
||||
<nav class="grid-flow-col gap-4 md:place-self-center md:justify-self-end">
|
||||
<div class="tooltip" data-tip="GitHub">
|
||||
<a
|
||||
role="button"
|
||||
class="btn btn-ghost hover:shadow-lg"
|
||||
aria-label="Find me at my GitHub"
|
||||
href="https://github.com/NickBland"><Github /></a
|
||||
href="https://github.com/NickBland"
|
||||
><svg
|
||||
class="fill-current"
|
||||
width="32"
|
||||
height="32"
|
||||
viewBox="0 0 24 24"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
><path
|
||||
d="M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12"
|
||||
/></svg
|
||||
></a
|
||||
>
|
||||
</div>
|
||||
<div class="tooltip" data-tip="GitLab">
|
||||
<div class="tooltip" data-tip="Gitea">
|
||||
<a
|
||||
role="button"
|
||||
class="btn btn-ghost hover:shadow-lg"
|
||||
aria-label="Find me at my GitLab"
|
||||
href="https://git.nickbland.dev/NickBland"><Gitlab /></a
|
||||
aria-label="Find me at my Gitea"
|
||||
href="https://git.nickbland.dev/NickBland"
|
||||
><svg
|
||||
class="fill-current"
|
||||
width="32"
|
||||
height="32"
|
||||
viewBox="0 0 24 24"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
><path
|
||||
d="M4.209 4.603c-.247 0-.525.02-.84.088-.333.07-1.28.283-2.054 1.027C-.403 7.25.035 9.685.089 10.052c.065.446.263 1.687 1.21 2.768 1.749 2.141 5.513 2.092 5.513 2.092s.462 1.103 1.168 2.119c.955 1.263 1.936 2.248 2.89 2.367 2.406 0 7.212-.004 7.212-.004s.458.004 1.08-.394c.535-.324 1.013-.893 1.013-.893s.492-.527 1.18-1.73c.21-.37.385-.729.538-1.068 0 0 2.107-4.471 2.107-8.823-.042-1.318-.367-1.55-.443-1.627-.156-.156-.366-.153-.366-.153s-4.475.252-6.792.306c-.508.011-1.012.023-1.512.027v4.474l-.634-.301c0-1.39-.004-4.17-.004-4.17-1.107.016-3.405-.084-3.405-.084s-5.399-.27-5.987-.324c-.187-.011-.401-.032-.648-.032zm.354 1.832h.111s.271 2.269.6 3.597C5.549 11.147 6.22 13 6.22 13s-.996-.119-1.641-.348c-.99-.324-1.409-.714-1.409-.714s-.73-.511-1.096-1.52C1.444 8.73 2.021 7.7 2.021 7.7s.32-.859 1.47-1.145c.395-.106.863-.12 1.072-.12zm8.33 2.554c.26.003.509.127.509.127l.868.422-.529 1.075a.686.686 0 0 0-.614.359.685.685 0 0 0 .072.756l-.939 1.924a.69.69 0 0 0-.66.527.687.687 0 0 0 .347.763.686.686 0 0 0 .867-.206.688.688 0 0 0-.069-.882l.916-1.874a.667.667 0 0 0 .237-.02.657.657 0 0 0 .271-.137 8.826 8.826 0 0 1 1.016.512.761.761 0 0 1 .286.282c.073.21-.073.569-.073.569-.087.29-.702 1.55-.702 1.55a.692.692 0 0 0-.676.477.681.681 0 1 0 1.157-.252c.073-.141.141-.282.214-.431.19-.397.515-1.16.515-1.16.035-.066.218-.394.103-.814-.095-.435-.48-.638-.48-.638-.467-.301-1.116-.58-1.116-.58s0-.156-.042-.27a.688.688 0 0 0-.148-.241l.516-1.062 2.89 1.401s.48.218.583.619c.073.282-.019.534-.069.657-.24.587-2.1 4.317-2.1 4.317s-.232.554-.748.588a1.065 1.065 0 0 1-.393-.045l-.202-.08-4.31-2.1s-.417-.218-.49-.596c-.083-.31.104-.691.104-.691l2.073-4.272s.183-.37.466-.497a.855.855 0 0 1 .35-.077z"
|
||||
/></svg
|
||||
></a
|
||||
>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
@@ -1,37 +1,11 @@
|
||||
<script>
|
||||
import ThemeController from "./themeController.svelte";
|
||||
// import Menu from "lucide-svelte/icons/menu";
|
||||
</script>
|
||||
|
||||
<div class="navbar bg-neutral text-neutral-content">
|
||||
<div class="navbar-start">
|
||||
<!-- <div class="dropdown">
|
||||
<div
|
||||
tabindex="0"
|
||||
role="button"
|
||||
aria-label="menu button"
|
||||
class="btn btn-ghost lg:hidden"
|
||||
>
|
||||
<Menu class="w-5 h-5 fill-current" />
|
||||
</div>
|
||||
<ul
|
||||
tabindex="-1"
|
||||
class="tablist menu menu-sm dropdown-content mt-3 z-[1] p-2 shadow bg-neutral rounded-box w-52 text-neutral-content"
|
||||
>
|
||||
<li><a href="/">Home</a></li>
|
||||
<li><a href="/portfolio">Portfolio</a></li>
|
||||
</ul>
|
||||
</div> -->
|
||||
<a class="btn btn-ghost text-xl hover:shadow-lg" href="/">nickbland.dev</a>
|
||||
</div>
|
||||
<!-- <div class="navbar-center hidden lg:flex">
|
||||
<ul class="menu menu-horizontal px-1">
|
||||
<li><a href="/" class="btn btn-ghost text-lg hover:shadow-lg">Home</a></li>
|
||||
<li>
|
||||
<a href="/portfolio" class="btn btn-ghost text-lg hover:shadow-lg">Portfolio</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div> -->
|
||||
<div class="navbar-end">
|
||||
<ul class="menu menu-horizontal px-1">
|
||||
<li class="focus:"><ThemeController /></li>
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
<input
|
||||
type="checkbox"
|
||||
class="theme-controller"
|
||||
value="winter"
|
||||
value="cmyk"
|
||||
aria-label="Theme toggle button"
|
||||
/>
|
||||
|
||||
|
||||
@@ -1,21 +1,21 @@
|
||||
<script lang="ts">
|
||||
import { onMount } from "svelte";
|
||||
|
||||
let w: number = 0; // Width of the screen, using the svelte binding
|
||||
let w: number = $state(0); // Width of the screen, using the svelte binding
|
||||
|
||||
const GRADUATION = new Date(1753797600000).valueOf();
|
||||
const FORMATTED = new Date(1753797600000).toDateString();
|
||||
let interval: ReturnType<typeof setInterval>;
|
||||
|
||||
let timeTo = Math.abs(GRADUATION - Date.now().valueOf()) / 1000;
|
||||
let timeTo = $state(Math.abs(GRADUATION - Date.now().valueOf()) / 1000);
|
||||
|
||||
// Calculate time remaining from milliseconds to graduation (30 Jul, 2025)
|
||||
$: years = Math.floor(timeTo / 31556926);
|
||||
$: months = Math.floor(timeTo / 2629743) % 12;
|
||||
$: days = Math.floor(timeTo / 86400) % 30;
|
||||
$: hours = Math.floor(timeTo / 3600) % 24;
|
||||
$: minutes = Math.floor(timeTo / 60) % 60;
|
||||
$: seconds = Math.floor(timeTo % 60);
|
||||
let years = $derived(Math.floor(timeTo / 31556926));
|
||||
let months = $derived(Math.floor(timeTo / 2629743) % 12);
|
||||
let days = $derived(Math.floor(timeTo / 86400) % 30);
|
||||
let hours = $derived(Math.floor(timeTo / 3600) % 24);
|
||||
let minutes = $derived(Math.floor(timeTo / 60) % 60);
|
||||
let seconds = $derived(Math.floor(timeTo % 60));
|
||||
|
||||
// Update the timeTo variable every 1000 milliseconds
|
||||
// Don't go past 0 though! Stop the updates afterwards
|
||||
|
||||
@@ -6,8 +6,8 @@
|
||||
>
|
||||
<defs>
|
||||
<linearGradient x1="50%" y1="0%" x2="50%" y2="100%" id="oooscillate-grad">
|
||||
<stop style="stop-color:oklch(var(--p))" stop-opacity="1" offset="0%"></stop>
|
||||
<stop style="stop-color:oklch(var(--a))" stop-opacity="1" offset="100%"></stop>
|
||||
<stop style="stop-color:var(--color-primary)" stop-opacity="1" offset="0%"></stop>
|
||||
<stop style="stop-color:var(--color-accent)" stop-opacity="1" offset="100%"></stop>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<g stroke-width="4" stroke="url(#oooscillate-grad)" fill="none" stroke-linecap="round">
|
||||
|
||||
|
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 1.6 KiB |
@@ -1,9 +1,13 @@
|
||||
<script lang="ts">
|
||||
import { onMount } from "svelte";
|
||||
export let src: string;
|
||||
export let altText: string = "";
|
||||
interface Props {
|
||||
src: string;
|
||||
altText?: string;
|
||||
}
|
||||
|
||||
let loaded = false;
|
||||
let { src, altText = "" }: Props = $props();
|
||||
|
||||
let loaded = $state(false);
|
||||
|
||||
onMount(() => {
|
||||
const img = new Image();
|
||||
@@ -18,5 +22,5 @@
|
||||
{#if loaded}
|
||||
<img {src} class="w-48 h-64 shadow-2xl max-w-sm rounded-2xl" alt={altText} />
|
||||
{:else}
|
||||
<div class="skeleton w-48 h-64 shadow-2xl max-w-sm rounded-2xl" />
|
||||
<div class="skeleton w-48 h-64 shadow-2xl max-w-sm rounded-2xl"></div>
|
||||
{/if}
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -2,8 +2,12 @@
|
||||
import Star from "lucide-svelte/icons/star";
|
||||
import HalfStar from "lucide-svelte/icons/star-half";
|
||||
|
||||
export let count: number = 5;
|
||||
export let half: boolean = false;
|
||||
interface Props {
|
||||
count?: number;
|
||||
half?: boolean;
|
||||
}
|
||||
|
||||
let { count = 5, half = false }: Props = $props();
|
||||
</script>
|
||||
|
||||
<div class="flex">
|
||||
|
||||
@@ -1,6 +1,11 @@
|
||||
<script lang="ts">
|
||||
export let middle: boolean = false;
|
||||
export let classes: string = ""; // Further classes to pass through
|
||||
interface Props {
|
||||
middle?: boolean;
|
||||
classes?: string;
|
||||
children?: import("svelte").Snippet;
|
||||
}
|
||||
|
||||
let { middle = false, classes = "", children }: Props = $props();
|
||||
</script>
|
||||
|
||||
<!-- If the text is between some other text, adjust padding to not seperate it out too much -->
|
||||
@@ -9,11 +14,11 @@
|
||||
<div>
|
||||
{#if middle}
|
||||
<p class="px-5 mx-auto text-xl max-w-3xl {classes}">
|
||||
<slot />
|
||||
{@render children?.()}
|
||||
</p>
|
||||
{:else}
|
||||
<p class="p-5 mx-auto text-xl max-w-3xl {classes}">
|
||||
<slot />
|
||||
{@render children?.()}
|
||||
</p>
|
||||
{/if}
|
||||
</div>
|
||||
|
||||
@@ -5,12 +5,152 @@
|
||||
<h3 class="p-5 text-4xl text-center">Work Experience</h3>
|
||||
<ul class="timeline timeline-snap-icon max-md:timeline-compact timeline-vertical pb-8">
|
||||
<li>
|
||||
<div class="timeline-middle"><Circle class="fill-base-300" /></div>
|
||||
<div class="timeline-end timeline-box bg-base-300 mb-10 max-w-3xl shadow-lg">
|
||||
<div class="timeline-middle"><Circle class="fill-neutral" /></div>
|
||||
<div
|
||||
class="timeline-start timeline-box bg-neutral mb-10 max-w-3xl shadow-lg text-neutral-content text-base"
|
||||
>
|
||||
<time class="font-mono" datetime="2024-11">Nov 2024 - Present</time>
|
||||
<div class="text-xl">Villanova College</div>
|
||||
<div class="text-sm pb-2">Casual Relief + Placement</div>
|
||||
<div class="divider my-1"></div>
|
||||
Casual Relief:
|
||||
<ul class="list-disc list-inside mt-2">
|
||||
<li>Casual relief in the IT department while continuing with uni</li>
|
||||
</ul>
|
||||
<div class="divider my-1"></div>
|
||||
Placement:
|
||||
<ul class="list-disc list-inside mt-2">
|
||||
<li>Placement project was beginning the migration process from SCCM to Intune</li>
|
||||
<li>
|
||||
Required careful documentation of current systems and assessing the feasability
|
||||
of moving to an Intune/Autopilot environment.
|
||||
</li>
|
||||
<li>
|
||||
Worked closely with different members of the department to gain access and
|
||||
assessing what improvements could be made for the new system.
|
||||
</li>
|
||||
</ul>
|
||||
<div class="divider my-1"></div>
|
||||
Key Experiences and Takeaways:
|
||||
<ul class="list-disc list-inside mt-2">
|
||||
<li>
|
||||
Gained more experience in the Azure ecosystem, exposing me to AzureAD (Entra)
|
||||
and Intune.
|
||||
</li>
|
||||
<li>
|
||||
Important lessons in taking careful note of what is currently in place, how it
|
||||
works, and how to migrate functionality to new platforms.
|
||||
</li>
|
||||
<li>
|
||||
Gained further understanding on the importance of documentation, and how it can
|
||||
be used by future staff members to understand the new environment.
|
||||
</li>
|
||||
<li>
|
||||
Important experience gained in doing in-place migrations without affecting the
|
||||
end-user experience and functionality of current systems.
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<hr class="bg-neutral-content" />
|
||||
</li>
|
||||
<li>
|
||||
<hr class="bg-neutral-content" />
|
||||
<div class="timeline-middle"><Circle class="fill-neutral" /></div>
|
||||
<div class="timeline-end timeline-box bg-neutral mb-10 max-w-3xl shadow-lg text-neutral-content text-base">
|
||||
<time class="font-mono" datetime="2023-07">Jul 2023</time>
|
||||
<div class="text-xl">Back to University</div>
|
||||
</div>
|
||||
<hr class="bg-neutral-content" />
|
||||
</li>
|
||||
<li>
|
||||
<hr class="bg-neutral-content" />
|
||||
<div class="timeline-middle"><Circle class="fill-neutral" /></div>
|
||||
<div
|
||||
class="timeline-start timeline-box bg-neutral mb-10 max-w-3xl shadow-lg text-neutral-content text-base"
|
||||
>
|
||||
<time class="font-mono" datetime="2022-10">Oct 2022 - Feb 2023</time>
|
||||
<div class="text-xl">St Pauls School</div>
|
||||
<div class="text-sm pb-2">System Administrator</div>
|
||||
<div class="divider my-1"></div>
|
||||
System Administrator Role:
|
||||
<ul class="list-disc list-inside mt-2">
|
||||
<li>
|
||||
Became more experienced in scripting languages, and streamlining legacy scripts
|
||||
in use.
|
||||
</li>
|
||||
<li>
|
||||
Continually worked on improving my knowledge in Python, Powershell, and
|
||||
Bashscript for automation tasks, and small projects.
|
||||
</li>
|
||||
<li>
|
||||
Assisted in streamlining SDS (Student Data Sync service) scripts, including
|
||||
importing new users into TASS and AD.
|
||||
</li>
|
||||
</ul>
|
||||
<div class="divider my-1"></div>
|
||||
Key Experiences and Takeaways:
|
||||
<ul class="list-disc list-inside mt-2">
|
||||
<li>There is always something to be improved upon if you look hard enough.</li>
|
||||
<li>
|
||||
Gained significant experience in deploying Autotune and Intune, as well as how
|
||||
AzureAD works under the hood.
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<hr class="bg-neutral-content" />
|
||||
</li>
|
||||
<li>
|
||||
<hr class="bg-neutral-content" />
|
||||
<div class="timeline-middle"><Circle class="fill-neutral" /></div>
|
||||
<div
|
||||
class="timeline-end timeline-box bg-neutral mb-10 max-w-3xl shadow-lg text-neutral-content text-base"
|
||||
>
|
||||
<div class="md:text-end">
|
||||
<time class="font-mono" datetime="2020-8">Aug 2020 - Oct 2022</time>
|
||||
<div class="text-xl">St Pauls School</div>
|
||||
<div class="text-sm pb-2">Information Technology Officer</div>
|
||||
</div>
|
||||
<div class="divider my-1"></div>
|
||||
Help Desk Role:
|
||||
<ul class="list-disc list-inside mt-2">
|
||||
<li>
|
||||
Assisted students and teachers with level 1 and 2 issues, and logged warranty
|
||||
jobs. Continued triaging until issue was resolved.
|
||||
</li>
|
||||
<li>
|
||||
Gained experience in cloud-based solutions in the enterprise environment, namely
|
||||
AWS. I was able to apply some of the teaching for my homelab setup.
|
||||
</li>
|
||||
<li>
|
||||
Gained more experience in Azure ecosystem, SCCM deployment, and networking.
|
||||
</li>
|
||||
</ul>
|
||||
<div class="divider my-1"></div>
|
||||
Key Experiences and Takeaways:
|
||||
<ul class="list-disc list-inside mt-2">
|
||||
<li>Working in a larger group to cover more ground</li>
|
||||
<li>
|
||||
The importance of relationships with end-users and suppliers to get issues
|
||||
sorted in a timely manner.
|
||||
</li>
|
||||
<li>
|
||||
Much more experience in networking (both Cisco and Unifi), and configuration in
|
||||
an enterprise environment.
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<hr class="bg-neutral-content" />
|
||||
</li>
|
||||
<li>
|
||||
<hr class="bg-neutral-content" />
|
||||
<div class="timeline-middle"><Circle class="fill-neutral" /></div>
|
||||
<div
|
||||
class="timeline-start timeline-box bg-neutral max-w-3xl shadow-lg text-neutral-content text-base"
|
||||
>
|
||||
<time class="font-mono" datetime="2020-3">Mar 2020 - Jul 2020</time>
|
||||
<div class="text-xl">Villanova College</div>
|
||||
<div class="text-sm">Information Technology Officer</div>
|
||||
<div class="divider my-1" />
|
||||
<div class="divider my-1"></div>
|
||||
Help Desk Role:
|
||||
<ul class="list-disc list-inside mt-2">
|
||||
<li>Performed repairs and troubleshooting for both students and teachers.</li>
|
||||
@@ -27,7 +167,7 @@
|
||||
configuration throughout school.
|
||||
</li>
|
||||
</ul>
|
||||
<div class="divider my-1" />
|
||||
<div class="divider my-1"></div>
|
||||
Key Experiences and Takeaways:
|
||||
<ul class="list-disc list-inside mt-2">
|
||||
<li>Became more comfortable and confident in an end-user facing role.</li>
|
||||
@@ -41,80 +181,5 @@
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<hr />
|
||||
</li>
|
||||
<li>
|
||||
<hr />
|
||||
<div class="timeline-middle"><Circle class="fill-base-300" /></div>
|
||||
<div class="timeline-start timeline-box bg-base-300 mb-10 max-w-3xl shadow-lg">
|
||||
<div class="md:text-end">
|
||||
<time class="font-mono" datetime="2020-8">Aug 2020 - Oct 2022</time>
|
||||
<div class="text-xl">St Pauls School</div>
|
||||
<div class="text-sm pb-2">Information Technology Officer</div>
|
||||
</div>
|
||||
<div class="divider my-1" />
|
||||
Help Desk Role:
|
||||
<ul class="list-disc list-inside mt-2">
|
||||
<li>
|
||||
Assisted students and teachers with level 1 and 2 issues, and logged warranty
|
||||
jobs. Continued triaging until issue was resolved.
|
||||
</li>
|
||||
<li>
|
||||
Gained experience in cloud-based solutions in the enterprise environment, namely
|
||||
AWS. I was able to apply some of the teaching for my homelab setup.
|
||||
</li>
|
||||
<li>
|
||||
Gained more experience in Azure ecosystem, SCCM deployment, and networking.
|
||||
</li>
|
||||
</ul>
|
||||
<div class="divider my-1" />
|
||||
Key Experiences and Takeaways:
|
||||
<ul class="list-disc list-inside mt-2">
|
||||
<li>Working in a larger group to cover more ground</li>
|
||||
<li>
|
||||
The importance of relationships with end-users and suppliers to get issues
|
||||
sorted in a timely manner.
|
||||
</li>
|
||||
<li>
|
||||
Much more experience in networking (both Cisco and Unifi), and configuration in
|
||||
an enterprise environment.
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<hr />
|
||||
</li>
|
||||
<li>
|
||||
<hr />
|
||||
<div class="timeline-middle"><Circle class="fill-base-300" /></div>
|
||||
<div class="timeline-end timeline-box bg-base-300 max-w-3xl shadow-lg">
|
||||
<time class="font-mono" datetime="2022-10">Oct 2022 - Feb 2023</time>
|
||||
<div class="text-xl">St Pauls School</div>
|
||||
<div class="text-sm pb-2">System Administrator</div>
|
||||
<div class="divider my-1" />
|
||||
System Administrator Role:
|
||||
<ul class="list-disc list-inside mt-2">
|
||||
<li>
|
||||
Became more experienced in scripting languages, and streamlining legacy scripts
|
||||
in use.
|
||||
</li>
|
||||
<li>
|
||||
Continually worked on improving my knowledge in Python, Powershell, and
|
||||
Bashscript for automation tasks, and small projects.
|
||||
</li>
|
||||
<li>
|
||||
Assisted in streamlining SDS (Student Data Sync service) scripts, including
|
||||
importing new users into TASS and AD.
|
||||
</li>
|
||||
</ul>
|
||||
<div class="divider my-1" />
|
||||
Key Experiences and Takeaways:
|
||||
<ul class="list-disc list-inside mt-2">
|
||||
<li>There is always something to be improved upon if you look hard enough.</li>
|
||||
<li>
|
||||
Gained significant experience in deploying Autotune and Intune, as well as how
|
||||
AzureAD works under the hood.
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
+259
-10
@@ -1,24 +1,273 @@
|
||||
<!-- Glitch effect from: https://10015.io/tools/css-text-glitch-effect-generator -->
|
||||
<style>
|
||||
.glitch {
|
||||
position: relative;
|
||||
font-size: 103px;
|
||||
font-weight: 700;
|
||||
line-height: 1.2;
|
||||
color: var(--color-primary-content);
|
||||
letter-spacing: 6px;
|
||||
animation: shift 4s ease-in-out infinite alternate;
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
.glitch:before {
|
||||
content: attr(data-glitch);
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: -2px;
|
||||
text-shadow: -1px 0 var(--color-info);
|
||||
width: 100%;
|
||||
color: var(--color-primary-content);
|
||||
overflow: hidden;
|
||||
clip: rect(0, 900px, 0, 0);
|
||||
animation: noise-before 3s infinite linear alternate-reverse;
|
||||
}
|
||||
|
||||
.glitch:after {
|
||||
content: attr(data-glitch);
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 2px;
|
||||
text-shadow: 1px 0 var(--color-error);
|
||||
width: 100%;
|
||||
color: var(--color-primary-content);
|
||||
overflow: hidden;
|
||||
clip: rect(0, 900px, 0, 0);
|
||||
animation: noise-after 2s infinite linear alternate-reverse;
|
||||
}
|
||||
|
||||
@keyframes noise-before {
|
||||
0% {
|
||||
clip: rect(61px, 9999px, 52px, 0);
|
||||
}
|
||||
|
||||
5% {
|
||||
clip: rect(33px, 9999px, 144px, 0);
|
||||
}
|
||||
|
||||
10% {
|
||||
clip: rect(121px, 9999px, 115px, 0);
|
||||
}
|
||||
|
||||
15% {
|
||||
clip: rect(144px, 9999px, 162px, 0);
|
||||
}
|
||||
|
||||
20% {
|
||||
clip: rect(62px, 9999px, 180px, 0);
|
||||
}
|
||||
|
||||
25% {
|
||||
clip: rect(34px, 9999px, 42px, 0);
|
||||
}
|
||||
|
||||
30% {
|
||||
clip: rect(147px, 9999px, 179px, 0);
|
||||
}
|
||||
|
||||
35% {
|
||||
clip: rect(99px, 9999px, 63px, 0);
|
||||
}
|
||||
|
||||
40% {
|
||||
clip: rect(188px, 9999px, 122px, 0);
|
||||
}
|
||||
|
||||
45% {
|
||||
clip: rect(154px, 9999px, 14px, 0);
|
||||
}
|
||||
|
||||
50% {
|
||||
clip: rect(63px, 9999px, 37px, 0);
|
||||
}
|
||||
|
||||
55% {
|
||||
clip: rect(161px, 9999px, 147px, 0);
|
||||
}
|
||||
|
||||
60% {
|
||||
clip: rect(109px, 9999px, 175px, 0);
|
||||
}
|
||||
|
||||
65% {
|
||||
clip: rect(157px, 9999px, 88px, 0);
|
||||
}
|
||||
|
||||
70% {
|
||||
clip: rect(173px, 9999px, 131px, 0);
|
||||
}
|
||||
|
||||
75% {
|
||||
clip: rect(62px, 9999px, 70px, 0);
|
||||
}
|
||||
|
||||
80% {
|
||||
clip: rect(24px, 9999px, 153px, 0);
|
||||
}
|
||||
|
||||
85% {
|
||||
clip: rect(138px, 9999px, 40px, 0);
|
||||
}
|
||||
|
||||
90% {
|
||||
clip: rect(79px, 9999px, 136px, 0);
|
||||
}
|
||||
|
||||
95% {
|
||||
clip: rect(25px, 9999px, 34px, 0);
|
||||
}
|
||||
|
||||
100% {
|
||||
clip: rect(173px, 9999px, 166px, 0);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes noise-after {
|
||||
0% {
|
||||
clip: rect(26px, 9999px, 33px, 0);
|
||||
}
|
||||
|
||||
5% {
|
||||
clip: rect(140px, 9999px, 198px, 0);
|
||||
}
|
||||
|
||||
10% {
|
||||
clip: rect(184px, 9999px, 89px, 0);
|
||||
}
|
||||
|
||||
15% {
|
||||
clip: rect(121px, 9999px, 6px, 0);
|
||||
}
|
||||
|
||||
20% {
|
||||
clip: rect(181px, 9999px, 99px, 0);
|
||||
}
|
||||
|
||||
25% {
|
||||
clip: rect(154px, 9999px, 133px, 0);
|
||||
}
|
||||
|
||||
30% {
|
||||
clip: rect(134px, 9999px, 169px, 0);
|
||||
}
|
||||
|
||||
35% {
|
||||
clip: rect(26px, 9999px, 187px, 0);
|
||||
}
|
||||
|
||||
40% {
|
||||
clip: rect(147px, 9999px, 137px, 0);
|
||||
}
|
||||
|
||||
45% {
|
||||
clip: rect(31px, 9999px, 52px, 0);
|
||||
}
|
||||
|
||||
50% {
|
||||
clip: rect(191px, 9999px, 109px, 0);
|
||||
}
|
||||
|
||||
55% {
|
||||
clip: rect(74px, 9999px, 54px, 0);
|
||||
}
|
||||
|
||||
60% {
|
||||
clip: rect(145px, 9999px, 75px, 0);
|
||||
}
|
||||
|
||||
65% {
|
||||
clip: rect(153px, 9999px, 198px, 0);
|
||||
}
|
||||
|
||||
70% {
|
||||
clip: rect(99px, 9999px, 136px, 0);
|
||||
}
|
||||
|
||||
75% {
|
||||
clip: rect(118px, 9999px, 192px, 0);
|
||||
}
|
||||
|
||||
80% {
|
||||
clip: rect(1px, 9999px, 83px, 0);
|
||||
}
|
||||
|
||||
85% {
|
||||
clip: rect(145px, 9999px, 98px, 0);
|
||||
}
|
||||
|
||||
90% {
|
||||
clip: rect(121px, 9999px, 154px, 0);
|
||||
}
|
||||
|
||||
95% {
|
||||
clip: rect(156px, 9999px, 44px, 0);
|
||||
}
|
||||
|
||||
100% {
|
||||
clip: rect(67px, 9999px, 122px, 0);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes shift {
|
||||
0%,
|
||||
40%,
|
||||
44%,
|
||||
58%,
|
||||
61%,
|
||||
65%,
|
||||
69%,
|
||||
73%,
|
||||
100% {
|
||||
transform: skewX(0deg);
|
||||
}
|
||||
|
||||
41% {
|
||||
transform: skewX(10deg);
|
||||
}
|
||||
|
||||
42% {
|
||||
transform: skewX(-10deg);
|
||||
}
|
||||
|
||||
59% {
|
||||
transform: skewX(40deg) skewY(10deg);
|
||||
}
|
||||
|
||||
60% {
|
||||
transform: skewX(-40deg) skewY(-10deg);
|
||||
}
|
||||
|
||||
63% {
|
||||
transform: skewX(10deg) skewY(-5deg);
|
||||
}
|
||||
|
||||
70% {
|
||||
transform: skewX(-50deg) skewY(-20deg);
|
||||
}
|
||||
|
||||
71% {
|
||||
transform: skewX(10deg) skewY(-10deg);
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
<script lang="ts">
|
||||
import { page } from "$app/stores";
|
||||
</script>
|
||||
|
||||
<div
|
||||
class="hero height-minus-nav bg-gradient-to-br from-primary from-10% to-accent to-80%"
|
||||
>
|
||||
<div class="hero height-minus-nav bg-linear-to-br from-primary from-10% to-accent to-80%">
|
||||
<div class="hero-overlay bg-opacity-30"></div>
|
||||
<div class="hero-content text-left text-accent-content flex-col lg:flex-row">
|
||||
<div>
|
||||
<h1
|
||||
class="mb-6 text-5xl md:text-7xl lg:text-9xl font-bold text-primary-content text-center"
|
||||
>
|
||||
Whoah!
|
||||
</h1>
|
||||
<h3
|
||||
class="text-3xl md:text-5xl lg:text-7xl font-bold text-primary-content text-center"
|
||||
class="text-3xl md:text-5xl lg:text-7xl font-bold text-primary-content text-center glitch"
|
||||
data-glitch="{$page.status}:
|
||||
{$page.error?.message}"
|
||||
>
|
||||
{$page.status}:
|
||||
{$page.error?.message}
|
||||
</h3>
|
||||
</h1>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -2,10 +2,15 @@
|
||||
import "../app.css";
|
||||
import Navbar from "$lib/components/navbar/navbar.svelte";
|
||||
import Footer from "$lib/components/footer.svelte";
|
||||
interface Props {
|
||||
children?: import("svelte").Snippet;
|
||||
}
|
||||
|
||||
let { children }: Props = $props();
|
||||
</script>
|
||||
|
||||
<Navbar />
|
||||
|
||||
<slot />
|
||||
{@render children?.()}
|
||||
|
||||
<Footer />
|
||||
|
||||
@@ -7,9 +7,7 @@
|
||||
import Timeline from "$lib/components/portfolio/timeline.svelte";
|
||||
</script>
|
||||
|
||||
<div
|
||||
class="hero height-minus-nav bg-gradient-to-br from-primary from-10% to-accent to-80%"
|
||||
>
|
||||
<div class="hero height-minus-nav bg-linear-to-br from-primary from-10% to-accent to-80%">
|
||||
<div class="hero-overlay bg-opacity-30"></div>
|
||||
<div class="hero-content text-left text-accent-content flex-col lg:flex-row">
|
||||
<SkeletonImage
|
||||
@@ -102,7 +100,7 @@
|
||||
time. For example, the website you are reading this on was built by hand, by me. You can
|
||||
find the source code for this project, and others at my personal <a
|
||||
class="link"
|
||||
href="https://git.nickbland.dev">GitLab instance here</a
|
||||
href="https://git.nickbland.dev">Gitea instance here</a
|
||||
>
|
||||
or my <a class="link" href="https://github.com/NickBland">GitHub here</a>.
|
||||
</TextContent>
|
||||
@@ -111,7 +109,7 @@
|
||||
virtual machines and containers for various services that I use for myself and my
|
||||
friends. For a list of services that I am running, you can visit my <a
|
||||
class="link"
|
||||
href="https://status.nickbland.dev/">AWS-hosted status page here</a
|
||||
href="https://status.nickbland.dev/">Digital Ocean-hosted status page here</a
|
||||
>.
|
||||
</TextContent>
|
||||
<TextContent>
|
||||
|
||||
+3
-12
@@ -1,22 +1,13 @@
|
||||
import adapter from "@sveltejs/adapter-cloudflare";
|
||||
import sveltePreprocess from "svelte-preprocess";
|
||||
|
||||
/** @type {import('@sveltejs/kit').Config} */
|
||||
const config = {
|
||||
// Consult https://kit.svelte.dev/docs/integrations#preprocessors
|
||||
// for more information about preprocessors
|
||||
preprocess: sveltePreprocess(),
|
||||
|
||||
export default {
|
||||
kit: {
|
||||
// adapter-auto only supports some environments, see https://kit.svelte.dev/docs/adapter-auto for a list.
|
||||
// If your environment is not supported or you settled on a specific environment, switch out the adapter.
|
||||
// See https://kit.svelte.dev/docs/adapters for more information about adapters.
|
||||
adapter: adapter({
|
||||
fallback: "plaintext",
|
||||
routes: {
|
||||
include: ["/*"],
|
||||
exclude: ["<all>"],
|
||||
},
|
||||
}),
|
||||
},
|
||||
};
|
||||
|
||||
export default config;
|
||||
|
||||
@@ -1,12 +0,0 @@
|
||||
/** @type {import('tailwindcss').Config} */
|
||||
module.exports = {
|
||||
content: ["./index.html", "./src/**/*.{html,js,svelte,ts}"],
|
||||
theme: {
|
||||
extend: {},
|
||||
},
|
||||
plugins: [require("daisyui")],
|
||||
daisyui: {
|
||||
themes: ["night", "winter"],
|
||||
},
|
||||
darkMode: "selector",
|
||||
};
|
||||
+2
-1
@@ -1,6 +1,7 @@
|
||||
import { sveltekit } from "@sveltejs/kit/vite";
|
||||
import { defineConfig } from "vite";
|
||||
import tailwindcss from "@tailwindcss/vite";
|
||||
|
||||
export default defineConfig({
|
||||
plugins: [sveltekit()],
|
||||
plugins: [tailwindcss(), sveltekit()],
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user