Projects & Updates
- Selected work, recent milestones, and technical writeups.
+ Braeden Sowinski projects, milestones, and technical writeups.
A collection of backend, infrastructure, data-driven, and full-stack projects,
including personal tools, student work, freelance websites, and technical writeups.
diff --git a/public/css/style.css b/public/css/style.css
index d734692..df25029 100755
--- a/public/css/style.css
+++ b/public/css/style.css
@@ -318,7 +318,7 @@ ul {
transition: 0.8s;
font-size: 30px;
font-weight: 900;
- margin-bottom: 10pt;
+ margin: 16pt 0 10pt;
transform: translate(0, -64pt);
}
@@ -624,15 +624,25 @@ body.menu-open .overlay * {
@media only screen and (max-width: 740pt) {
.nav__links li a,
- .svg-wrapper#main-wrapper {
+ .svg-wrapper#main-wrapper svg {
display: none;
}
- .menu,
- .mobile-name {
+ .menu {
display: block;
}
+ .svg-wrapper#main-wrapper {
+ width: auto;
+ height: auto;
+ overflow: visible;
+ }
+
+ .svg-wrapper#main-wrapper .name {
+ margin: 2pt 0 10pt;
+ transform: none;
+ }
+
.logo {
margin-top: 12pt;
}
diff --git a/public/scripts/content.js b/public/scripts/content.js
index 161bc4b..3d0ca0b 100644
--- a/public/scripts/content.js
+++ b/public/scripts/content.js
@@ -77,6 +77,41 @@
canonical.setAttribute("href", href);
};
+ const setEntryJsonLd = (entry, url, image) => {
+ let script = document.getElementById("entry-jsonld");
+
+ if (!script) {
+ script = document.createElement("script");
+ script.id = "entry-jsonld";
+ script.type = "application/ld+json";
+ document.head.appendChild(script);
+ }
+
+ script.textContent = JSON.stringify({
+ "@context": "https://schema.org",
+ "@type": "Article",
+ "@id": `${url}#article`,
+ "url": url,
+ "headline": entry.title,
+ "description": entry.summary || "Project entry or update from Braeden Sowinski.",
+ "datePublished": entry.date || undefined,
+ "dateModified": entry.date || undefined,
+ "image": image,
+ "author": {
+ "@id": "https://sowinski.dev/#person",
+ "name": "Braeden Sowinski",
+ "url": "https://sowinski.dev/"
+ },
+ "publisher": {
+ "@id": "https://sowinski.dev/#person"
+ },
+ "mainEntityOfPage": url,
+ "isPartOf": {
+ "@id": "https://sowinski.dev/#website"
+ }
+ });
+ };
+
const updateEntryMeta = (entry) => {
const baseUrl = "https://sowinski.dev";
const title = `${entry.title} | Braeden Sowinski`;
@@ -94,6 +129,7 @@
setMetaContent("meta[name='twitter:title']", title);
setMetaContent("meta[name='twitter:description']", description);
setMetaContent("meta[name='twitter:image']", image);
+ setEntryJsonLd(entry, url, image);
};
const renderLinks = (entry, className) => {
diff --git a/sitemap.xml b/sitemap.xml
index 6dd802a..6cbbd24 100644
--- a/sitemap.xml
+++ b/sitemap.xml
@@ -2,41 +2,75 @@
https://sowinski.dev/
+ 2026-05-29
+ monthly
+ 1.0
https://sowinski.dev/about.html
+ 2026-05-29
+ monthly
+ 0.8
https://sowinski.dev/projects.html
+ 2026-05-29
+ weekly
+ 0.7
https://sowinski.dev/entry.html?type=projects&slug=schedule-generator-app
+ 2023-08-01
+ 0.5
https://sowinski.dev/entry.html?type=projects&slug=boker
+ 2026-03-22
+ 0.5
https://sowinski.dev/entry.html?type=projects&slug=dayz-reforger-bot
+ 2024-11-08
+ 0.5
+
+
+ https://sowinski.dev/entry.html?type=projects&slug=vairo-performance-website
+ 2026-03-01
+ 0.5
https://sowinski.dev/entry.html?type=projects&slug=lines-police-cad
+ 2022-06-01
+ 0.5
https://sowinski.dev/entry.html?type=projects&slug=portfolio
+ 2026-03-14
+ 0.5
https://sowinski.dev/entry.html?type=projects&slug=school-management-api
+ 2023-09-01
+ 0.5
https://sowinski.dev/entry.html?type=projects&slug=xp-system
+ 2021-05-01
+ 0.5
https://sowinski.dev/entry.html?type=updates&slug=appointed-president-c4a
+ 2026-05-04
+ 0.5
https://sowinski.dev/entry.html?type=updates&slug=red-team-hackathon-2026
+ 2026-03-12
+ 0.5
https://sowinski.dev/entry.html?type=updates&slug=joined-bcit-computing-club
+ 2025-12-24
+ 0.5