Compare commits

...

9 Commits

14 changed files with 224 additions and 170 deletions

View File

@ -2,6 +2,7 @@
<html lang="en"> <html lang="en">
<head> <head>
<meta charset="utf-8" /> <meta charset="utf-8" />
<meta name="google-site-verification" content="lsAs9c2Pv7c6Sm26z1hd2YqR2depbp4sJddIDYKHkxY" />
<link rel="icon" href="%sveltekit.assets%/favicon.ico" /> <link rel="icon" href="%sveltekit.assets%/favicon.ico" />
<meta name="viewport" content="width=device-width, initial-scale=1" /> <meta name="viewport" content="width=device-width, initial-scale=1" />
%sveltekit.head% %sveltekit.head%

View File

@ -102,6 +102,7 @@
div div ul div { div div ul div {
display: flex; display: flex;
flex-direction: row; flex-direction: row;
gap: 0px;
} }
a { a {

View File

@ -0,0 +1,69 @@
<script>
export const prerender = true;
</script>
<footer>
<p>Brock Tomlinson © 2025</p>
<div>
<a href="mailto:darkicewolf50@gmail.com">
<img src="https://www.svgrepo.com/show/491226/email.svg" alt="Email's logo/icon" />
<p>Email</p>
</a>
<a href="https://www.youtube.com/@darkicewolf50">
<img src="https://www.svgrepo.com/show/521936/youtube.svg" alt="Youtube's logo/icon" />
<p>Youtube</p>
</a>
<a href="https://www.linkedin.com/in/brock-tomlinson/">
<img src="https://www.svgrepo.com/show/521725/linkedin.svg" alt="LinkedIn's logo/icon" />
<p>LinkedIn</p>
</a>
<a href="https://www.twitch.tv/darkicewolf50">
<img src="https://www.svgrepo.com/show/519925/twitch.svg" alt="Twitch's logo/icon" />
<p>Twitch</p>
</a>
<a href="https://github.com/darkicewolf50">
<img src="https://www.svgrepo.com/show/512317/github-142.svg" alt="Github's logo/icon" />
<p>Github</p>
</a>
</div>
</footer>
<style>
footer {
display: flex;
flex-direction: column;
text-align: center;
background-color: var(--card-background-color);
border-radius: var(--card-border-radius);
/* background-color: #d3d3d3; */
}
footer div {
display: flex;
flex-direction: row;
flex: 1 1 2;
justify-content: space-evenly;
}
footer img {
height: 60px;
filter: invert() hue-rotate(180deg);
}
footer a {
display: flex;
flex-direction: column;
align-items: center;
text-decoration: none;
color: inherit;
}
footer a:hover {
color: #91a4d2;
cursor: pointer;
filter: brightness(0) saturate(100%) invert(65%) sepia(13%) saturate(733%) hue-rotate(187deg)
brightness(95%) contrast(90%);
}
</style>

View File

@ -0,0 +1,31 @@
<script>
export const prerender = true;
</script>
<header>
<nav>
<a href="/">Home</a>
<a href="/projects">Projects</a>
<a href="/blogs/0">Blogs</a>
<a href="/contact">Contact</a>
</nav>
</header>
<style>
nav {
display: flex;
flex-direction: row;
}
nav a {
color: #ffffff;
margin-right: 20px;
text-decoration: none;
transition: color 0.2s ease;
}
nav a:hover {
cursor: pointer;
color: #91a4d2;
}
</style>

View File

@ -3,7 +3,7 @@
let { independent_page = true, techTablePromise = null } = $props(); let { independent_page = true, techTablePromise = null } = $props();
let limitProjects = $derived(independent_page ? 0 : 8); let limitProjects = $derived(independent_page ? 0 : 6);
let projectsPromise = $state(null); let projectsPromise = $state(null);
let techPromise = $state(null); let techPromise = $state(null);
@ -171,5 +171,6 @@
flex-direction: row; flex-direction: row;
flex-wrap: wrap; flex-wrap: wrap;
column-gap: 1svw; column-gap: 1svw;
justify-content: space-evenly;
} }
</style> </style>

View File

@ -108,7 +108,7 @@
justify-self: center; justify-self: center;
margin: 0svh 1svw; margin: 0svh 0svw;
padding-top: 1svh; padding-top: 1svh;
object-fit: contain; object-fit: contain;
color: transparent; color: transparent;
@ -125,6 +125,7 @@
border-radius: var(--underlineTitleBorderRadius); border-radius: var(--underlineTitleBorderRadius);
margin: 0px 2svw; margin: 0px 2svw;
padding: 0px 2svw; padding: 0px 2svw;
padding-right: 0px;
justify-content: space-between; justify-content: space-between;
align-items: center; align-items: center;
@ -173,9 +174,10 @@
.project-title-info div { .project-title-info div {
display: flex; display: flex;
gap: 1svw; gap: 20px;
justify-content: flex-end; justify-content: flex-end;
border-bottom: none; border-bottom: none;
margin: 0svh 10px;
} }
.project-card div p { .project-card div p {

24
src/lib/style/globals.css Normal file
View File

@ -0,0 +1,24 @@
:root {
--underlineTitle: 4px solid purple;
--underlineTitleBorderRadius: 4px;
--img-width: 32px;
--img-height: 32px;
--card-background-color: rgba(38, 38, 38, 0.5);
--card-border-radius: 0.5rem;
}
body {
background-color: #0f1116;
color: #ffffff;
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
margin: 20px;
}
h2 {
border-bottom: var(--underlineTitle);
border-radius: var(--underlineTitleBorderRadius);
display: flex;
margin: 2svh 2svw;
padding: 0svh 2svw;
padding-bottom: 1svh;
}

View File

@ -1,7 +1,5 @@
<script> <script>
import { page } from '$app/state'; import { page } from '$app/state';
// $inspect(page.status);
</script> </script>
<title>Brock Tomlinson - Not Found</title> <title>Brock Tomlinson - Not Found</title>

View File

@ -1 +0,0 @@
export const prerender = true;

View File

@ -1,122 +1,11 @@
<script> <script>
let { children } = $props(); let { children } = $props();
import Top from '$lib/components/layout/Top.svelte';
import Bottom from '$lib/components/layout/Bottom.svelte';
import '$lib/style/globals.css';
</script> </script>
<header> <Top />
<nav>
<a href="/">Home</a>
<a href="/projects">Projects</a>
<a href="/blogs/0">Blogs</a>
<a href="/contact">Contact</a>
</nav>
</header>
{@render children()} {@render children()}
<Bottom />
<footer>
<p>Brock Tomlinson © 2025</p>
<div>
<a href="mailto:darkicewolf50@gmail.com">
<img src="https://www.svgrepo.com/show/491226/email.svg" alt="Email's logo/icon" />
<p>Email</p>
</a>
<a href="https://www.youtube.com/@darkicewolf50">
<img src="https://www.svgrepo.com/show/521936/youtube.svg" alt="Youtube's logo/icon" />
<p>Youtube</p>
</a>
<a href="https://www.linkedin.com/in/brock-tomlinson/">
<img src="https://www.svgrepo.com/show/521725/linkedin.svg" alt="LinkedIn's logo/icon" />
<p>LinkedIn</p>
</a>
<a href="https://www.twitch.tv/darkicewolf50">
<img src="https://www.svgrepo.com/show/519925/twitch.svg" alt="Twitch's logo/icon" />
<p>Twitch</p>
</a>
<a href="https://github.com/darkicewolf50">
<img src="https://www.svgrepo.com/show/512317/github-142.svg" alt="Github's logo/icon" />
<p>Github</p>
</a>
</div>
</footer>
<style>
:global(:root) {
--underlineTitle: 4px solid purple;
--underlineTitleBorderRadius: 4px;
--img-width: 32px;
--img-height: 32px;
--card-background-color: rgba(38, 38, 38, 0.5);
--card-border-radius: 0.5rem;
}
:global(body) {
background-color: #0f1116;
color: #ffffff;
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
margin: 20px;
}
:global(h2) {
border-bottom: var(--underlineTitle);
border-radius: var(--underlineTitleBorderRadius);
display: flex;
margin: 2svh 2svw;
padding: 0svh 2svw;
padding-bottom: 1svh;
}
nav {
display: flex;
flex-direction: row;
}
nav a {
color: #ffffff;
margin-right: 20px;
text-decoration: none;
transition: color 0.2s ease;
}
nav a:hover {
cursor: pointer;
color: #91a4d2;
}
footer {
display: flex;
flex-direction: column;
text-align: center;
background-color: var(--card-background-color);
border-radius: var(--card-border-radius);
/* background-color: #d3d3d3; */
}
footer div {
display: flex;
flex-direction: row;
flex: 1 1 2;
justify-content: space-evenly;
}
footer img {
height: 60px;
filter: invert() hue-rotate(180deg);
}
footer a {
display: flex;
flex-direction: column;
align-items: center;
text-decoration: none;
color: inherit;
}
footer a:hover {
color: #91a4d2;
cursor: pointer;
filter: brightness(0) saturate(100%) invert(65%) sepia(13%) saturate(733%) hue-rotate(187deg)
brightness(95%) contrast(90%);
}
</style>

View File

@ -1,11 +1,41 @@
<script> <script>
import Contact from '$lib/components/contact.svelte'; import Contact from '$lib/components/contact.svelte';
let contactName = $state('');
let contactEmail = $state('');
let contactMessage = $state('');
let error_box_message = $state(''); let error_box_message = $state('');
let submitButtonEnable = $state(true);
let submitButtonText = $derived(submitButtonEnable ? 'Submit' : 'Submitting');
const formSubmit = async (event) => {
event.preventDefault();
submitButtonEnable = false;
const formData = new FormData(event.target);
const formObject = Object.fromEntries(formData.entries());
try {
let json_to_send = {
content: `***New Message***\n*Name*: ${formObject.name}\n*Email*: [${formObject.email}](mailto:${formObject.email})\n*Message*: ${formObject.message}`
};
const res = await fetch(
'https://discord.com/api/webhooks/1374798951475187732/zOL9aD1wWn9rCywjqVAy3oUMnzPu25SVIMCDaLD4N8C_V9OqPK8Hj2Wmm-7Ts5QHTbzN',
{
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(json_to_send)
}
);
if (!res.ok) {
throw new Error(`Discord webhook error: ${res.status} ${res.statusText}`);
}
} catch (err) {
error_box_message = 'An error has occurred';
console.error(err);
}
submitButtonEnable = true;
};
</script> </script>
<title>Brock Tomlinson - Contact</title> <title>Brock Tomlinson - Contact</title>
@ -18,22 +48,23 @@
to either fill out this form or contact me through one of the many of the platforms below to either fill out this form or contact me through one of the many of the platforms below
</p> </p>
</div> </div>
<form <form onsubmit={formSubmit}>
onsubmit={(e) => {
e.preventDefault();
}}
>
<label for="name">Name</label> <label for="name">Name</label>
<input type="text" id="name" bind:value={contactName} /> <input type="text" id="name" name="name" />
<label for="email">Email</label> <label for="email">Email</label>
<input type="email" id="email" bind:value={contactEmail} /> <input type="email" id="email" name="email" />
<label for="message">Message</label> <label for="message">Message</label>
<textarea id="message" bind:value={contactMessage}></textarea> <textarea id="message" name="message"></textarea>
<p>{error_box_message}</p> <p>{error_box_message}</p>
<button onclick={() => console.log('Clicked')}> Submit </button> <input
type="submit"
disabled={!submitButtonEnable}
class="submitButton"
id={submitButtonEnable ? '' : 'disabledSubmitButton'}
/>
</form> </form>
</div> </div>
<Contact /> <Contact />
@ -72,7 +103,7 @@
border-radius: var(--card-border-radius); border-radius: var(--card-border-radius);
border-color: rgba(245, 245, 245, 0.5); border-color: rgba(245, 245, 245, 0.5);
border-width: 2px; border-width: 2px;
padding: 1svh 0svw; padding: 1svh 1ch;
margin: 1svh 0.5svw; margin: 1svh 0.5svw;
color: inherit; color: inherit;
align-items: start; align-items: start;
@ -83,14 +114,14 @@
border-radius: var(--card-border-radius); border-radius: var(--card-border-radius);
border-color: rgba(245, 245, 245, 0.4); border-color: rgba(245, 245, 245, 0.4);
border-width: 2px; border-width: 2px;
padding: 1svh 0svw; padding: 1svh 1ch;
margin: 1svh 0.5svw; margin: 1svh 0.5svw;
color: inherit; color: inherit;
align-items: start; align-items: start;
min-height: 25svh; min-height: 25svh;
} }
button { .submitButton {
border-radius: var(--card-border-radius); border-radius: var(--card-border-radius);
border-color: rgba(245, 245, 245, 0.5); border-color: rgba(245, 245, 245, 0.5);
padding: 1svh 0svw; padding: 1svh 0svw;
@ -101,9 +132,17 @@
border-color: transparent; border-color: transparent;
} }
button:hover { .submitButton:hover {
cursor: pointer; cursor: pointer;
color: #91a4d2; color: #91a4d2;
background-color: rgba(0, 150, 0, 0.6); background-color: rgba(0, 150, 0, 0.6);
} }
#disabledSubmitButton {
background-color: rgba(211, 211, 211, 0.6);
}
#disabledSubmitButton:hover {
background-color: rgba(180, 180, 180, 0.6);
}
</style> </style>

View File

@ -1,13 +1,13 @@
// src/routes/sitemap.xml/+server.ts (or +server.js) import { format } from 'date-fns';
import { format } from 'date-fns'; // Optional, if you want <lastmod> etc.
export async function GET() { export const GET = async () => {
const baseUrl = 'https://yourdomain.com'; // Replace with your domain const baseUrl = 'https://darkicewolf50.pages.dev';
const staticPages = [ const staticPages = [
'', // Home page '', // homepage
'contact', 'contact',
'projects' 'projects'
// Add other pages here
]; ];
const urls = staticPages const urls = staticPages
@ -22,23 +22,21 @@ export async function GET() {
) )
.join(''); .join('');
return new Response( const sitemap = `<?xml version="1.0" encoding="UTF-8"?>
` <urlset
<?xml version="1.0" encoding="UTF-8" ?>
<urlset
xmlns="https://www.sitemaps.org/schemas/sitemap/0.9" xmlns="https://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:xhtml="https://www.w3.org/1999/xhtml" xmlns:xhtml="https://www.w3.org/1999/xhtml"
xmlns:mobile="https://www.google.com/schemas/sitemap-mobile/1.0" xmlns:mobile="https://www.google.com/schemas/sitemap-mobile/1.0"
xmlns:news="https://www.google.com/schemas/sitemap-news/0.9" xmlns:news="https://www.google.com/schemas/sitemap-news/0.9"
xmlns:image="https://www.google.com/schemas/sitemap-image/1.1" xmlns:image="https://www.google.com/schemas/sitemap-image/1.1"
xmlns:video="https://www.google.com/schemas/sitemap-video/1.1" xmlns:video="https://www.google.com/schemas/sitemap-video/1.1"
> >
${urls} ${urls}
</urlset>`.trim(), </urlset>`;
{
return new Response(sitemap, {
headers: { headers: {
'Content-Type': 'application/xml' 'Content-Type': 'application/xml'
} }
} });
); };
}

View File

@ -1,2 +1,4 @@
User-agent: * User-agent: *
Disallow: /blogs/ Disallow: /blogs/
Sitemap: https://darkicewolf50.pages.dev/sitemap.xml