Files
SowinskiBraedenandClaude Opus 5 7078cda6c5 render an ASCII torus behind thicker glass, drop the light theme
- Replace the flat dither backdrop with a lit, rotating torus drawn the
  way donut.c does it: a z-buffer per cell and a luminance ramp from a
  dot to a solid block, sized against the shorter viewport axis. The
  dither field stays underneath as dust. It leads on the landing page
  and fades back where there is reading to do, and a scrim keeps the
  projects heading legible over it.
- Thicken the glass: one .surface treatment with a heavier blur, more
  transparency and an SVG film grain, shared by the header, hero,
  cards, panels and footer.
- Give the landing page labelled contact cards for LinkedIn, Gitea and
  email in place of three bare icons.
- Drop the status chips from project cards and entry headers.
- Remove the light theme, its toggle and theme.js outright.
- Add restrained motion: underlines growing from the left on links and
  nav items, a lift on cards, buttons and contact cards, and tags
  brightening with their card. All of it is off under
  prefers-reduced-motion.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-10-18 00:10:00 -07:00

168 lines
9.3 KiB
HTML
Executable File

<!DOCTYPE html>
<html lang='en'>
<head>
<title>Braeden Sowinski Projects and Updates | Software Portfolio</title>
<meta charset='utf-8'>
<meta name='description' content="Browse selected software projects, technical writeups, and recent updates from Braeden Sowinski, including backend systems, APIs, and student leadership milestones." />
<meta name='author' content="Braeden Sowinski" />
<meta name='keywords' content="Braeden Sowinski, sowinski.dev, projects, updates, portfolio, software engineer, BCIT" />
<meta name='viewport' content='width=device-width, initial-scale=1.0'>
<meta name='robots' content='index, follow'>
<meta name='theme-color' content='#0c0d10'>
<link rel='canonical' href='https://sowinski.dev/projects.html'>
<meta property='og:type' content='website'>
<meta property='og:title' content='Braeden Sowinski Projects and Updates | Software Portfolio'>
<meta property='og:description' content='Browse selected software projects, technical writeups, and recent updates from Braeden Sowinski.'>
<meta property='og:url' content='https://sowinski.dev/projects.html'>
<meta property='og:site_name' content='Braeden Sowinski'>
<meta property='og:image' content='https://avatars.githubusercontent.com/u/48144618?v=4'>
<meta property='og:image:alt' content='Braeden Sowinski profile photo'>
<meta name='twitter:card' content='summary_large_image'>
<meta name='twitter:title' content='Braeden Sowinski Projects and Updates | Software Portfolio'>
<meta name='twitter:description' content='Browse selected software projects, technical writeups, and recent updates from Braeden Sowinski.'>
<meta name='twitter:image' content='https://avatars.githubusercontent.com/u/48144618?v=4'>
<script type='application/ld+json'>
{
"@context": "https://schema.org",
"@type": "CollectionPage",
"@id": "https://sowinski.dev/projects.html#collection",
"url": "https://sowinski.dev/projects.html",
"name": "Braeden Sowinski Projects and Updates",
"description": "Selected software projects, technical writeups, and recent updates from Braeden Sowinski.",
"isPartOf": {
"@id": "https://sowinski.dev/#website"
},
"about": {
"@id": "https://sowinski.dev/#person"
},
"author": {
"@id": "https://sowinski.dev/#person"
},
"inLanguage": "en-CA"
}
</script>
<link rel="icon" type="image/svg+xml" href="./public/images/favicon.svg">
<link rel="stylesheet" href="./public/css/style.css">
<link rel="stylesheet" href="./public/css/projects.css">
</head>
<body data-page="projects">
<canvas id="ascii-bg" aria-hidden="true"></canvas>
<header class="header surface">
<nav class="nav">
<div class="logo">
<a href="./" title="sowinski.dev (Alt + H)">
<img src="https://avatars.githubusercontent.com/u/48144618?v=4" alt="Braeden Sowinski profile photo" style="border-radius:50%;"
aria-label="Braeden Sowinski profile photo" height="32">sowinski.dev
</a>
</div>
<ul id="menu" class="nav__links">
<li id="home-link">
<a href="./" title="Home">
<span class="active">Home</span>
</a>
</li>
<li id="about-link">
<a href="./about.html" title="About">
<span class="active">About</span>
</a>
</li>
<li id="projects-link">
<a href="./projects.html" title="Projects">
<span class="active">Projects</span>
</a>
</li>
</ul>
<p class="menu cta">Menu</p>
</nav>
<div id="mobile__menu" class="overlay">
<button type="button" class="close" aria-label="Close menu">&times;</button>
<div class="overlay__content">
<a href="./" title="Home"><span class="active">Home</span></a>
<a href="./about.html" title="About"><span class="active">About</span></a>
<a href="./projects.html" title="Projects"><span class="active">Projects</span></a>
</div>
</div>
</header>
<main class="projects-page page-shell">
<section class="projects-hero">
<h1>Braeden Sowinski projects, milestones, and technical writeups.</h1>
<p class="projects-intro">
A collection of backend, infrastructure, data-driven, and full-stack projects,
including personal tools, student work, freelance websites, and technical writeups.
</p>
</section>
<section class="content-section">
<div class="section-heading">
<h2>Selected Projects</h2>
<div class="section-heading__right">
<span id="projects-count" class="section-count"></span>
<a class="section-link" href="https://git.sowinski.dev/SowinskiBraeden" target="_blank" rel="noopener noreferrer">Gitea</a>
</div>
</div>
<div id="projects-grid" class="content-grid">
<p class="loading-state">Loading projects...</p>
</div>
<div id="projects-toggle-shell" class="projects-toggle-shell" hidden>
<button id="projects-toggle" class="projects-toggle" type="button" aria-expanded="false">
Show more projects
</button>
</div>
</section>
<section class="content-section updates-section">
<div class="section-heading">
<h2>Updates &amp; Achievements</h2>
<div class="section-heading__right">
<span id="updates-count" class="section-count"></span>
</div>
</div>
<div id="updates-grid" class="content-grid updates-grid">
<p class="loading-state">Loading updates...</p>
</div>
</section>
<footer class="footer flex-container site-footer surface">
<p>Get in touch with me!</p>
<div class="social-icons">
<a class="icon" href="https://www.linkedin.com/in/SowinskiBraeden" target="_blank" rel="noopener noreferrer me"
title="LinkedIn">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-linkedin"
viewBox="0 0 16 16">
<path
d="M0 1.146C0 .513.526 0 1.175 0h13.65C15.474 0 16 .513 16 1.146v13.708c0 .633-.526 1.146-1.175 1.146H1.175C.526 16 0 15.487 0 14.854zm4.943 12.248V6.169H2.542v7.225zm-1.2-8.212c.837 0 1.358-.554 1.358-1.248-.015-.709-.52-1.248-1.342-1.248S2.4 3.226 2.4 3.934c0 .694.521 1.248 1.327 1.248zm4.908 8.212V9.359c0-.216.016-.432.08-.586.173-.431.568-.878 1.232-.878.869 0 1.216.662 1.216 1.634v3.865h2.401V9.25c0-2.22-1.184-3.252-2.764-3.252-1.274 0-1.845.7-2.165 1.193v.025h-.016l.016-.025V6.169h-2.4c.03.678 0 7.225 0 7.225z" />
</svg>
</a>
<a class="icon" href="https://git.sowinski.dev/SowinskiBraeden" target="_blank" rel="noopener noreferrer me" title="Gitea" aria-label="Gitea">
<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" fill="currentColor">
<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>
<a class="icon" href="mailto:braeden@sowinski.dev" target="_blank" rel="noopener noreferrer me" title="Email">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 21" fill="none" stroke="currentcolor" stroke-width="2"
stroke-linecap="round" stroke-linejoin="round">
<path d="M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z" />
<polyline points="22,6 12,13 2,6" />
</svg>
</a>
</div>
</footer>
</main>
<script src="./public/scripts/mobile.js"></script>
<script src="./public/scripts/ascii-bg.js"></script>
<script src="https://cdn.jsdelivr.net/npm/marked/marked.min.js"></script>
<script src="./public/scripts/content.js"></script>
<script>
window.PORTFOLIO_CONTENT.initListPage();
</script>
</body>
</html>