Really trying to clean things up...

This commit is contained in:
2026-03-31 18:04:49 -04:00
parent e49d09106c
commit 8c162a4086
39 changed files with 1780 additions and 2077 deletions
+5 -6
View File
@@ -3,7 +3,6 @@ from __future__ import annotations
from dataclasses import dataclass from dataclasses import dataclass
from types import NoneType from types import NoneType
from typing import Optional from typing import Optional
from result import Result, Ok, Err
import os import os
import sys import sys
@@ -76,25 +75,25 @@ class HTML:
tags.append(Tag(tag, trail)) tags.append(Tag(tag, trail))
return tags return tags
def inflate(self) -> Result[str, str]: def inflate(self) -> str:
file = str() file = str()
for tag in self.tags(): for tag in self.tags():
if tag.type() == 'include': if tag.type() == 'include':
chunk = tag.get_param('src') chunk = tag.get_param('src')
if isinstance(chunk, NoneType): if isinstance(chunk, NoneType):
return Err('FileNotFoundError') raise FileNotFoundError
html = HTML(open(str(WORK_DIR) + '/src/' + chunk, 'rt').read()) html = HTML(open(str(WORK_DIR) + '/src/' + chunk, 'rt').read())
file += html.inflate().expect('FileNotFoundError') file += html.inflate()
else: else:
file += tag.write() file += tag.write()
return Ok(file) return file
# Convert the HTML obj into a str to write to file. # Convert the HTML obj into a str to write to file.
def write(self) -> str: def write(self) -> str:
return self.inflate().unwrap() return self.inflate()
def main() -> None: def main() -> None:
+15 -17
View File
@@ -11,29 +11,27 @@
<include src="includes/nav_header.html" /> <include src="includes/nav_header.html" />
<include src="includes/nav_menu.html" /> <include src="includes/nav_menu.html" />
<div class="location"> <div class="location">
<header><h4>You are here:</h4></header> <p>You are here:</p>
<h5 class="page">Error - 400</h5> <p class="page">Error - 400</p>
</div> </div>
<include src="includes/nav_quick_links.html" /> <include src="includes/nav_quick_links.html" />
</nav> </nav>
<main class="pane error"> <main class="pane error">
<div class="body"> <header>
<header> <h1 class="title">400</h1>
<h1 class="title">400</h1> <h2>Bad Request!</h2>
<h2>Bad Request!</h2> </header>
</header> <hr />
<hr /> <p>
<p> The server cannot or will not process this request due to apparent client-side error
The server cannot or will not process this request due to apparent client-side or deception.
error or deception. </p>
</p>
</div>
<include src="includes/tailer.html" /> <include src="includes/tailer.html" />
</main> </main>
<div class="pane spacer"> <ul class="pane spacer">
<div class="spacer_container"><p>#AD</p></div> <li class="spacer_container">#AD</li>
<div class="spacer_container"><p>#AD</p></div> <li class="spacer_container">#AD</li>
</div> </ul>
<include src="includes/footer.html" /> <include src="includes/footer.html" />
<include src="includes/scripts.html" /> <include src="includes/scripts.html" />
</body> </body>
+10 -12
View File
@@ -11,24 +11,22 @@
<include src="includes/nav_header.html" /> <include src="includes/nav_header.html" />
<include src="includes/nav_menu.html" /> <include src="includes/nav_menu.html" />
<div class="location"> <div class="location">
<header><h4>You are here:</h4></header> <p>You are here:</p>
<h5 class="page">Error - 401</h5> <p class="page">Error - 401</p>
</div> </div>
<include src="includes/nav_quick_links.html" /> <include src="includes/nav_quick_links.html" />
</nav> </nav>
<main class="pane error"> <main class="pane error">
<div class="body"> <header>
<header> <h1 class="title">401</h1>
<h1 class="title">401</h1> <h2>Unauthorized!</h2>
<h2>Unauthorized!</h2> </header>
</header>
</div>
<include src="includes/tailer.html" /> <include src="includes/tailer.html" />
</main> </main>
<div class="pane spacer"> <ul class="pane spacer">
<div class="spacer_container"><p>#AD</p></div> <li class="spacer_container">#AD</li>
<div class="spacer_container"><p>#AD</p></div> <li class="spacer_container">#AD</li>
</div> </ul>
<include src="includes/footer.html" /> <include src="includes/footer.html" />
<include src="includes/scripts.html" /> <include src="includes/scripts.html" />
</body> </body>
+12 -14
View File
@@ -11,26 +11,24 @@
<include src="includes/nav_header.html" /> <include src="includes/nav_header.html" />
<include src="includes/nav_menu.html" /> <include src="includes/nav_menu.html" />
<div class="location"> <div class="location">
<header><h4>You are here:</h4></header> <p>You are here:</p>
<h5 class="page">Error - 403</h5> <p class="page">Error - 403</p>
</div> </div>
<include src="includes/nav_quick_links.html" /> <include src="includes/nav_quick_links.html" />
</nav> </nav>
<main class="pane error"> <main class="pane error">
<div class="body"> <header>
<header> <h1 class="title">403</h1>
<h1 class="title">403</h1> <h2>Forbidden!</h2>
<h2>Forbidden!</h2> </header>
</header> <hr />
<hr /> <p>The server is refusing to act upon your request.</p>
<p>The server is refusing to act upon your request.</p>
</div>
<include src="includes/tailer.html" /> <include src="includes/tailer.html" />
</main> </main>
<div class="pane spacer"> <ul class="pane spacer">
<div class="spacer_container"><p>#AD</p></div> <li class="spacer_container">#AD</li>
<div class="spacer_container"><p>#AD</p></div> <li class="spacer_container">#AD</li>
</div> </ul>
<include src="includes/footer.html" /> <include src="includes/footer.html" />
<include src="includes/scripts.html" /> <include src="includes/scripts.html" />
</body> </body>
+10 -12
View File
@@ -11,24 +11,22 @@
<include src="includes/nav_header.html" /> <include src="includes/nav_header.html" />
<include src="includes/nav_menu.html" /> <include src="includes/nav_menu.html" />
<div class="location"> <div class="location">
<header><h4>You are here:</h4></header> <p>You are here:</p>
<h5 class="page">Error - 404</h5> <p class="page">Error - 404</p>
</div> </div>
<include src="includes/nav_quick_links.html" /> <include src="includes/nav_quick_links.html" />
</nav> </nav>
<main class="pane error"> <main class="pane error">
<div class="body"> <header>
<header> <h1 class="title">404</h1>
<h1 class="title">404</h1> <h2>Page not found!</h2>
<h2>Page not found!</h2> </header>
</header>
</div>
<include src="includes/tailer.html" /> <include src="includes/tailer.html" />
</main> </main>
<div class="pane spacer"> <ul class="pane spacer">
<div class="spacer_container"><p>#AD</p></div> <li class="spacer_container">#AD</li>
<div class="spacer_container"><p>#AD</p></div> <li class="spacer_container">#AD</li>
</div> </ul>
<include src="includes/footer.html" /> <include src="includes/footer.html" />
<include src="includes/scripts.html" /> <include src="includes/scripts.html" />
</body> </body>
+12 -14
View File
@@ -11,26 +11,24 @@
<include src="includes/nav_header.html" /> <include src="includes/nav_header.html" />
<include src="includes/nav_menu.html" /> <include src="includes/nav_menu.html" />
<div class="location"> <div class="location">
<header><h4>You are here:</h4></header> <p>You are here:</p>
<h5 class="page">Error - 500</h5> <p class="page">Error - 500</p>
</div> </div>
<include src="includes/nav_quick_links.html" /> <include src="includes/nav_quick_links.html" />
</nav> </nav>
<main class="pane error"> <main class="pane error">
<div class="body"> <header>
<header> <h1 class="title">500</h1>
<h1 class="title">500</h1> <h2>Internal Server Error!</h2>
<h2>Internal Server Error!</h2> </header>
</header> <hr />
<hr /> <p>The server has no clue WTF happened here.</p>
<p>The server has no clue WTF happened here.</p>
</div>
<include src="includes/tailer.html" /> <include src="includes/tailer.html" />
</main> </main>
<div class="pane spacer"> <ul class="pane spacer">
<div class="spacer_container"><p>#AD</p></div> <li class="spacer_container">#AD</li>
<div class="spacer_container"><p>#AD</p></div> <li class="spacer_container">#AD</li>
</div> </ul>
<include src="includes/footer.html" /> <include src="includes/footer.html" />
<include src="includes/scripts.html" /> <include src="includes/scripts.html" />
</body> </body>
+12 -14
View File
@@ -11,26 +11,24 @@
<include src="includes/nav_header.html" /> <include src="includes/nav_header.html" />
<include src="includes/nav_menu.html" /> <include src="includes/nav_menu.html" />
<div class="location"> <div class="location">
<header><h4>You are here:</h4></header> <p>You are here:</p>
<h5 class="page">Error - 501</h5> <p class="page">Error - 501</p>
</div> </div>
<include src="includes/nav_quick_links.html" /> <include src="includes/nav_quick_links.html" />
</nav> </nav>
<main class="pane error"> <main class="pane error">
<div class="body"> <header>
<header> <h1 class="title">501</h1>
<h1 class="title">501</h1> <h2>Not Implemented!</h2>
<h2>Not Implemented!</h2> </header>
</header> <hr />
<hr /> <p>Whatever you just tried doing, the server doesn't know how to handle it.</p>
<p>Whatever you just tried doing, the server doesn't know how to handle it.</p>
</div>
<include src="includes/tailer.html" /> <include src="includes/tailer.html" />
</main> </main>
<div class="pane spacer"> <ul class="pane spacer">
<div class="spacer_container"><p>#AD</p></div> <li class="spacer_container">#AD</li>
<div class="spacer_container"><p>#AD</p></div> <li class="spacer_container">#AD</li>
</div> </ul>
<include src="includes/footer.html" /> <include src="includes/footer.html" />
<include src="includes/scripts.html" /> <include src="includes/scripts.html" />
</body> </body>
+12 -14
View File
@@ -11,26 +11,24 @@
<include src="includes/nav_header.html" /> <include src="includes/nav_header.html" />
<include src="includes/nav_menu.html" /> <include src="includes/nav_menu.html" />
<div class="location"> <div class="location">
<header><h4>You are here:</h4></header> <p>You are here:</p>
<h5 class="page">Error - 502</h5> <p class="page">Error - 502</p>
</div> </div>
<include src="includes/nav_quick_links.html" /> <include src="includes/nav_quick_links.html" />
</nav> </nav>
<main class="pane error"> <main class="pane error">
<div class="body"> <header>
<header> <h1 class="title">502</h1>
<h1 class="title">502</h1> <h2>Bad Gateway!</h2>
<h2>Bad Gateway!</h2> </header>
</header> <hr />
<hr /> <p>This service may be offline.</p>
<p>This service may be offline.</p>
</div>
<include src="includes/tailer.html" /> <include src="includes/tailer.html" />
</main> </main>
<div class="pane spacer"> <ul class="pane spacer">
<div class="spacer_container"><p>#AD</p></div> <li class="spacer_container">#AD</li>
<div class="spacer_container"><p>#AD</p></div> <li class="spacer_container">#AD</li>
</div> </ul>
<include src="includes/footer.html" /> <include src="includes/footer.html" />
<include src="includes/scripts.html" /> <include src="includes/scripts.html" />
</body> </body>
+12 -14
View File
@@ -11,26 +11,24 @@
<include src="includes/nav_header.html" /> <include src="includes/nav_header.html" />
<include src="includes/nav_menu.html" /> <include src="includes/nav_menu.html" />
<div class="location"> <div class="location">
<header><h4>You are here:</h4></header> <p>You are here:</p>
<h5 class="page">Error - 503</h5> <p class="page">Error - 503</p>
</div> </div>
<include src="includes/nav_quick_links.html" /> <include src="includes/nav_quick_links.html" />
</nav> </nav>
<main class="pane error"> <main class="pane error">
<div class="body"> <header>
<header> <h1 class="title">503</h1>
<h1 class="title">503</h1> <h2>Service Unavailable!</h2>
<h2>Service Unavailable!</h2> </header>
</header> <hr />
<hr /> <p>The server may be overloaded or down for maintenance.</p>
<p>The server may be overloaded or down for maintenance.</p>
</div>
<include src="includes/tailer.html" /> <include src="includes/tailer.html" />
</main> </main>
<div class="pane spacer"> <ul class="pane spacer">
<div class="spacer_container"><p>#AD</p></div> <li class="spacer_container">#AD</li>
<div class="spacer_container"><p>#AD</p></div> <li class="spacer_container">#AD</li>
</div> </ul>
<include src="includes/footer.html" /> <include src="includes/footer.html" />
<include src="includes/scripts.html" /> <include src="includes/scripts.html" />
</body> </body>
+15 -17
View File
@@ -11,29 +11,27 @@
<include src="includes/nav_header.html" /> <include src="includes/nav_header.html" />
<include src="includes/nav_menu.html" /> <include src="includes/nav_menu.html" />
<div class="location"> <div class="location">
<header><h4>You are here:</h4></header> <p>You are here:</p>
<h5 class="page">Error - 504</h5> <p class="page">Error - 504</p>
</div> </div>
<include src="includes/nav_quick_links.html" /> <include src="includes/nav_quick_links.html" />
</nav> </nav>
<main class="pane error"> <main class="pane error">
<div class="body"> <header>
<header> <h1 class="title">504</h1>
<h1 class="title">504</h1> <h2>Gateway Timeout!</h2>
<h2>Gateway Timeout!</h2> </header>
</header> <hr />
<hr /> <p>
<p> The server acted as a proxy and didn't receive a timely response from the upstream
The server acted as a proxy and didn't receive a timely response from the server.
upstream server. </p>
</p>
</div>
<include src="includes/tailer.html" /> <include src="includes/tailer.html" />
</main> </main>
<div class="pane spacer"> <ul class="pane spacer">
<div class="spacer_container"><p>#AD</p></div> <li class="spacer_container">#AD</li>
<div class="spacer_container"><p>#AD</p></div> <li class="spacer_container">#AD</li>
</div> </ul>
<include src="includes/footer.html" /> <include src="includes/footer.html" />
<include src="includes/scripts.html" /> <include src="includes/scripts.html" />
</body> </body>
+52 -68
View File
@@ -1,68 +1,52 @@
<div class="spacer_container blog_recent_posts"> <li class="spacer_container blog_recent_posts">
<h2>Recent Posts</h2> <p>Recent Posts</p>
<div class="section_list"> <section>
<section> <header>
<header> <p class="name">Hack Racing</p>
<div> <p class="subtitle">28 March, 2026</p>
<h3 class="name">Hack Racing</h3> </header>
<span class="subtitle">28 March, 2026</span> <a href="/blog/posts/6_hack_racing.html" class="status">View</a>
</div> </section>
<a href="/blog/posts/6_hack_racing.html" class="status">View</a> <section>
</header> <header>
</section> <p class="name">Optical Recovery</p>
<section> <p class="subtitle">10 January, 2026</p>
<header> </header>
<div> <a href="/blog/posts/5_optical_recovery.html" class="status">View</a>
<h3 class="name">Optical Recovery</h3> </section>
<span class="subtitle">10 January, 2026</span> <section>
</div> <header>
<a href="/blog/posts/5_optical_recovery.html" class="status">View</a> <p class="name">Pointless Plans</p>
</header> <p class="subtitle">18 December, 2025</p>
</section> </header>
<section> <a href="/blog/posts/4_pointless_plans.html" class="status">View</a>
<header> </section>
<div> <section>
<h3 class="name">Pointless Plans</h3> <header>
<span class="subtitle">18 December, 2025</span> <p class="name">Closing Chapters</p>
</div> <p class="subtitle">18 December, 2025</p>
<a href="/blog/posts/4_pointless_plans.html" class="status">View</a> </header>
</header> <a href="/blog/posts/3_closing_chapters.html" class="status">View</a>
</section> </section>
<section> <section>
<header> <header>
<div> <p class="name">Buyer's Anxiety</p>
<h3 class="name">Closing Chapters</h3> <p class="subtitle">11 September, 2025</p>
<span class="subtitle">18 December, 2025</span> </header>
</div> <a href="/blog/posts/2_buyers_anxiety.html" class="status">View</a>
<a href="/blog/posts/3_closing_chapters.html" class="status">View</a> </section>
</header> <section>
</section> <header>
<section> <p class="name">Unsure U.</p>
<header> <p class="subtitle">09 August, 2025</p>
<div> </header>
<h3 class="name">Buyer's Anxiety</h3> <a href="/blog/posts/1_unsure_u.html" class="status">View</a>
<span class="subtitle">11 September, 2025</span> </section>
</div> <section>
<a href="/blog/posts/2_buyers_anxiety.html" class="status">View</a> <header>
</header> <p class="name">Divergent Pathways</p>
</section> <p class="subtitle">29 July, 2025</p>
<section> </header>
<header> <a href="/blog/posts/0_divergent_pathways.html" class="status">View</a>
<div> </section>
<h3 class="name">Unsure U.</h3> </li>
<span class="subtitle">09 August, 2025</span>
</div>
<a href="/blog/posts/1_unsure_u.html" class="status">View</a>
</header>
</section>
<section>
<header>
<div>
<h3 class="name">Divergent Pathways</h3>
<span class="subtitle">29 July, 2025</span>
</div>
<a href="/blog/posts/0_divergent_pathways.html" class="status">View</a>
</header>
</section>
</div>
</div>
+1 -3
View File
@@ -1,3 +1 @@
<footer> <p class="viewport_footer">Made with love in Canada 🇨🇦</p>
<p>Made with love in Canada 🇨🇦</p>
</footer>
+1 -1
View File
@@ -1,5 +1,5 @@
<input id="toggle_nav" type="checkbox" /> <input id="toggle_nav" type="checkbox" />
<label for="toggle_nav" class="nav_header"> <label for="toggle_nav" class="nav_header">
<h2 class="logo">Cutieguwu</h2> <p class="logo">Cutieguwu</p>
<ion-icon name="menu-outline"></ion-icon> <ion-icon name="menu-outline"></ion-icon>
</label> </label>
+30 -18
View File
@@ -1,21 +1,33 @@
<div class="quick_links"> <ul class="quick_links">
<a href="https://gitea.cutieguwu.ca/Cutieguwu/cutieguwu-site" title="Website Source"> <li>
<ion-icon name="git-branch-outline" alt="(Gitea) Website Source" class="green"></ion-icon> <a href="https://gitea.cutieguwu.ca/Cutieguwu/cutieguwu-site" title="Website Source">
</a> <ion-icon
<a name="git-branch-outline"
href="https://gitea.cutieguwu.ca/Cutieguwu/cutieguwu-site/src/branch/main/LICENSE" alt="(Gitea) Website Source"
title="MIT License" class="green"
> ></ion-icon>
<ion-icon name="book-outline" alt="MIT License" class="indigo"></ion-icon> </a>
</a> </li>
<a href="https://gitea.cutieguwu.ca/Cutieguwu/cutieguwu-site/issues" title="Report Issues"> <li>
<ion-icon name="alert-circle-outline" alt="Report Issues" class="magenta"></ion-icon> <a
</a> href="https://gitea.cutieguwu.ca/Cutieguwu/cutieguwu-site/src/branch/main/LICENSE"
<a href="https://www.cutieguwu.ca/feed/rss.xml" title="RSS Feed" download> title="MIT License"
<ion-icon name="logo-rss" alt="RSS Feed" class="orange"></ion-icon> >
</a> <ion-icon name="book-outline" alt="MIT License" class="indigo"></ion-icon>
</a>
</li>
<li>
<a href="https://gitea.cutieguwu.ca/Cutieguwu/cutieguwu-site/issues" title="Report Issues">
<ion-icon name="alert-circle-outline" alt="Report Issues" class="magenta"></ion-icon>
</a>
</li>
<li>
<a href="https://www.cutieguwu.ca/feed/rss.xml" title="RSS Feed" download>
<ion-icon name="logo-rss" alt="RSS Feed" class="orange"></ion-icon>
</a>
</li>
<!-- Mastodon Verification --> <!-- Mastodon Verification -->
<!-- Doubles as the spacer --> <!-- Doubles as the spacer -->
<a rel="me" href="https://mastodon.online/@OliveTheFemboy" class="phantom"></a> <li><a rel="me" href="https://mastodon.online/@OliveTheFemboy" class="phantom"></a></li>
</div> </ul>
+8 -10
View File
@@ -10,19 +10,17 @@
<include src="includes/nav_header.html" /> <include src="includes/nav_header.html" />
<include src="includes/nav_menu.html" /> <include src="includes/nav_menu.html" />
<div class="location"> <div class="location">
<header><h4>You are here:</h4></header> <p class="title">You are here:</p>
<h5 class="page">About</h5> <p class="page">About</p>
</div> </div>
<include src="includes/nav_quick_links.html" /> <include src="includes/nav_quick_links.html" />
</nav> </nav>
<main class="pane"> <main class="pane"><p>This page has not yet been filled out. Sorry!</p></main>
<div class="body"><p>This page has not yet been filled out. Sorry!</p></div> <include src="includes/tailer.html" />
<include src="includes/tailer.html" /> <ul class="pane spacer">
</main> <li class="spacer_container">#AD</li>
<div class="pane spacer"> <li class="spacer_container">#AD</li>
<div class="spacer_container"><p>#AD</p></div> </ul>
<div class="spacer_container"><p>#AD</p></div>
</div>
<include src="includes/footer.html" /> <include src="includes/footer.html" />
<include src="includes/scripts.html" /> <include src="includes/scripts.html" />
</body> </body>
+13 -15
View File
@@ -10,26 +10,24 @@
<include src="includes/nav_header.html" /> <include src="includes/nav_header.html" />
<include src="includes/nav_menu.html" /> <include src="includes/nav_menu.html" />
<div class="location"> <div class="location">
<header><h4>You are here:</h4></header> <p class="title">You are here:</p>
<h5 class="page">Acknowledgements</h5> <p class="page">Acknowledgements</p>
</div> </div>
<include src="includes/nav_quick_links.html" /> <include src="includes/nav_quick_links.html" />
</nav> </nav>
<main class="pane"> <main class="pane">
<div class="body"> <p>There are currently no acknowledgements</p>
<p>There are currently no acknowledgements</p> <p>In terms of security, hopefully that means I'm doing a good-ish job.</p>
<p>In terms of security, hopefully that means I'm doing a good-ish job.</p> <p>
<p> I will get my thanks to various open projects in here in time, but I'm still busy
I will get my thanks to various open projects in here in time, but I'm still getting the basics handled.
busy getting the basics handled. </p>
</p>
</div>
<include src="includes/tailer.html" />
</main> </main>
<div class="pane spacer"> <include src="includes/tailer.html" />
<div class="spacer_container"><p>#AD</p></div> <ul class="pane spacer">
<div class="spacer_container"><p>#AD</p></div> <li class="spacer_container">#AD</li>
</div> <li class="spacer_container">#AD</li>
</ul>
<include src="includes/footer.html" /> <include src="includes/footer.html" />
<include src="includes/scripts.html" /> <include src="includes/scripts.html" />
</body> </body>
+12 -16
View File
@@ -10,28 +10,24 @@
<include src="includes/nav_header.html" /> <include src="includes/nav_header.html" />
<include src="includes/nav_menu.html" /> <include src="includes/nav_menu.html" />
<div class="location"> <div class="location">
<header><h4>You are here:</h4></header> <p class="title">You are here:</p>
<h5 class="page">Blog</h5> <p class="page">Blog</p>
</div> </div>
<include src="includes/nav_quick_links.html" /> <include src="includes/nav_quick_links.html" />
</nav> </nav>
<main class="pane"> <main class="pane">
<div class="body"> <header>
<header> <h1 class="title">Blog</h1>
<h1 class="title">Blog</h1> <p class="date">Last Edited: 03 August, 2025</p>
<p class="date">Last Edited: 03 August, 2025</p> </header>
</header> <h2>I have an RSS feed!</h2>
<div class="body"> <p>Just look for the RSS Quick Link in the Navigation pane.</p>
<h2>I have an RSS feed!</h2>
<p>Just look for the RSS Quick Link in the Navigation pane.</p>
</div>
</div>
<include src="includes/tailer.html" />
</main> </main>
<div class="pane spacer"> <include src="includes/tailer.html" />
<ul class="pane spacer">
<include src="./includes/blog_recent_posts.html" /> <include src="./includes/blog_recent_posts.html" />
<div class="spacer_container"><p>#AD</p></div> <li class="spacer_container">#AD</li>
</div> </ul>
<include src="includes/footer.html" /> <include src="includes/footer.html" />
<include src="includes/scripts.html" /> <include src="includes/scripts.html" />
</body> </body>
+90 -101
View File
@@ -11,113 +11,102 @@
<include src="includes/nav_header.html" /> <include src="includes/nav_header.html" />
<include src="includes/nav_menu.html" /> <include src="includes/nav_menu.html" />
<div class="location"> <div class="location">
<header><h4>You are here:</h4></header> <p class="title">You are here:</p>
<h5 class="page">Blog - Divergent Pathways</h5> <p class="page">Blog - Divergent Pathways</p>
</div> </div>
<include src="includes/nav_quick_links.html" /> <include src="includes/nav_quick_links.html" />
</nav> </nav>
<main class="pane blog"> <main class="pane blog">
<div class="body"> <header>
<header> <h1 class="title">Divergent Pathways</h1>
<h1 class="title">Divergent Pathways</h1> <p class="date">Posted: 29 July, 2025</p>
<p class="date">Posted: 29 July, 2025</p> <p class="date">Last Edited: 29 July, 2025</p>
<p class="date">Last Edited: 29 July, 2025</p> </header>
</header> <p>I can't say that this is how I wanted to start my blog.</p>
<div class="body"> <p>
<p>I can't say that this is how I wanted to start my blog.</p> Although, in all honesty, I didn't really have an idea for how I wanted it to start.
<p> That's not to say I didn't know what I *didn't* want. A meaningless 'Welcome to my
Although, in all honesty, I didn't really have an idea for how I wanted it Blog' filled with my hopes and aspirations that inevitably would never come to light
to start. That's not to say I didn't know what I *didn't* want. A was something I knew I didn't want. I figured it more likely for me to have a
meaningless 'Welcome to my Blog' filled with my hopes and aspirations that semi-respectful rant about whatever's causing me to 'crash out' on that particular
inevitably would never come to light was something I knew I didn't want. I day. That would certainly be in character for me.
figured it more likely for me to have a semi-respectful rant about </p>
whatever's causing me to 'crash out' on that particular day. That would <p>
certainly be in character for me. But no. Instead, I'm starting my blog on one of the last things I ever expected to
</p> write about.
<p> </p>
But no. Instead, I'm starting my blog on one of the last things I ever <p>Love.</p>
expected to write about. <p>Or rather, the passing of it due to life.</p>
</p> <p>
<p>Love.</p> I've been in two relationships now. Both ended mutually, although what I consider
<p>Or rather, the passing of it due to life.</p> mutual may not be everyone else's. We came to see the same side of things, and we
<p> understood that we couldn't sustain our lives together. We're all still friends at
I've been in two relationships now. Both ended mutually, although what I the end.
consider mutual may not be everyone else's. We came to see the same side of </p>
things, and we understood that we couldn't sustain our lives together. We're <p>
all still friends at the end. Me and my ex-boyfriend were struggling a lot with being able to see each other. It's
</p> not like this relationship was geographically long distance; we went to the same
<p> school. The distance came more from our schedules and pathways. I have always been a
Me and my ex-boyfriend were struggling a lot with being able to see each relatively heavy academic. My parents and teachers certainly made sure of that, and
other. It's not like this relationship was geographically long distance; we ultimately helped lead me down a path of being the teacher's pet. Maybe I'll talk
went to the same school. The distance came more from our schedules and about my experiences and struggles related to that another time, but the short of it
pathways. I have always been a relatively heavy academic. My parents and is that I am a high-achieving workaholic as a result. My ex-boyfriend on the other
teachers certainly made sure of that, and ultimately helped lead me down a hand, didn't have that kind of an experience, and ultimately was led down the
path of being the teacher's pet. Maybe I'll talk about my experiences and college-level course stream in high school.
struggles related to that another time, but the short of it is that I am a </p>
high-achieving workaholic as a result. My ex-boyfriend on the other hand, <p>
didn't have that kind of an experience, and ultimately was led down the Now, as I began to struggle in my fourth year, particularly with my mathematics
college-level course stream in high school. continuing their downwards trend, I decided that the life of a software engineer
</p> wasn't for me. I turned around, almost on a dime, and set myself towards a career in
<p> Psychology. Now, on the surface, this may look like it would help with our
Now, as I began to struggle in my fourth year, particularly with my scheduling issues, but no. While I was studying at school, and desperately trying to
mathematics continuing their downwards trend, I decided that the life of a keep up my grades, my boyfriend would be doing a co-op elsewhere. Even when that
software engineer wasn't for me. I turned around, almost on a dime, and set ended at the end of the term, the problem remained. I was too much of a workaholic.
myself towards a career in Psychology. Now, on the surface, this may look </p>
like it would help with our scheduling issues, but no. While I was studying <p>
at school, and desperately trying to keep up my grades, my boyfriend would Ultimately, the break-up that I've just had has left me intent on not spiralling
be doing a co-op elsewhere. Even when that ended at the end of the term, the downward. My first was rough on me, and I was not in a good place for about a week.
problem remained. I was too much of a workaholic. This time, we both kind of saw this coming. Perhaps that makes it easier, but it
</p> still sucks for both of us. And, why squander the motivation I have to better my
<p> self care, my habits, and thus myself? I'm about to go into my first year of
Ultimately, the break-up that I've just had has left me intent on not university. Normally, I'm either scared of my inevitable death, or some past regret
spiralling downward. My first was rough on me, and I was not in a good place of my life that chooses to grip me. But now, I'm also anxious for the life ahead.
for about a week. This time, we both kind of saw this coming. Perhaps that </p>
makes it easier, but it still sucks for both of us. And, why squander the <p>
motivation I have to better my self care, my habits, and thus myself? I'm So what does this all mean in terms of dating for me? Well, it leaves me considering
about to go into my first year of university. Normally, I'm either scared of the idea that some people are meant to walk through life alone. I'm at a point in my
my inevitable death, or some past regret of my life that chooses to grip me. life where dating is probably not a great idea for me. I struggle enough with
But now, I'm also anxious for the life ahead. burnout spells that adding heartbreak on top would likely kill my education.
</p> </p>
<p> <p>
So what does this all mean in terms of dating for me? Well, it leaves me On top of that are my concerns with online dating. Aside from data privacy,
considering the idea that some people are meant to walk through life alone. breaches, and otherwise disgusting people who can't leave these projects to be a
I'm at a point in my life where dating is probably not a great idea for me. good part of the internet, are the risks with being trans. There are far too many
I struggle enough with burnout spells that adding heartbreak on top would stories, even if most of them are probably from the US, of people 'trying it out'
likely kill my education. with a trans person. Ignoring how slimy and disgusting you have to be to even do
</p> that without considering the effects of those actions, the point of dating is for
<p> love (and to meet societal expectations while seeking a dual income for the
On top of that are my concerns with online dating. Aside from data privacy, household, among other things).
breaches, and otherwise disgusting people who can't leave these projects to </p>
be a good part of the internet, are the risks with being trans. There are <p>
far too many stories, even if most of them are probably from the US, of To make it extra clear, love != sex. The point at the end of it isn't so you can run
people 'trying it out' with a trans person. Ignoring how slimy and home and shag every night--this isn't some 1960s Bond film.
disgusting you have to be to even do that without considering the effects of </p>
those actions, the point of dating is for love (and to meet societal <p>
expectations while seeking a dual income for the household, among other If you want to have kids, some trans people who are on HRT, may still be able to if
things). they've gone to the really awkward and expensive effort of cryopreservation.
</p> </p>
<p> <p>
To make it extra clear, love != sex. The point at the end of it isn't so you Anyway, being someone who was a 'test run' is crushing. I certainly don't want to
can run home and shag every night--this isn't some 1960s Bond film. run that risk, and other people are in the same boat.
</p> </p>
<p> <p>Given all this, I'll probably tough it out on my own for a while.</p>
If you want to have kids, some trans people who are on HRT, may still be
able to if they've gone to the really awkward and expensive effort of
cryopreservation.
</p>
<p>
Anyway, being someone who was a 'test run' is crushing. I certainly don't
want to run that risk, and other people are in the same boat.
</p>
<p>Given all this, I'll probably tough it out on my own for a while.</p>
</div>
</div>
<include src="includes/tailer.html" />
</main> </main>
<div class="pane spacer"> <include src="includes/tailer.html" />
<ul class="pane spacer">
<include src="./includes/blog_recent_posts.html" /> <include src="./includes/blog_recent_posts.html" />
<div class="spacer_container"><p>#AD</p></div> <li class="spacer_container">#AD</li>
</div> </ul>
<include src="includes/footer.html" /> <include src="includes/footer.html" />
<include src="includes/scripts.html" /> <include src="includes/scripts.html" />
</body> </body>
+89 -99
View File
@@ -11,111 +11,101 @@
<include src="includes/nav_header.html" /> <include src="includes/nav_header.html" />
<include src="includes/nav_menu.html" /> <include src="includes/nav_menu.html" />
<div class="location"> <div class="location">
<header><h4>You are here:</h4></header> <p class="title">You are here:</p>
<h5 class="page">Blog - Unsure U.</h5> <p class="page">Blog - Unsure U.</p>
</div> </div>
<include src="includes/nav_quick_links.html" /> <include src="includes/nav_quick_links.html" />
</nav> </nav>
<main class="pane blog"> <main class="pane blog">
<div class="body"> <header>
<header> <h1 class="title">Unsure U.</h1>
<h1 class="title">Unsure U.</h1> <p class="date">Posted: 09 August, 2025</p>
<p class="date">Posted: 09 August, 2025</p> <p class="date">Last Edited: 09 August, 2025</p>
<p class="date">Last Edited: 09 August, 2025</p> </header>
</header> <img
<div class="body"> alt="A Coaster which reads 'focus on the good,' placed in front of a window."
<img src="/img/blog/posts/1_unsure_u.webp"
alt="A Coaster which reads 'focus on the good,' placed in front of a window." />
src="/img/blog/posts/1_unsure_u.webp" <p>The little things, it's the little things that count.</p>
/> <p>Or so I'm told.</p>
<p>The little things, it's the little things that count.</p> <p>
<p>Or so I'm told.</p> All around me, all my friends are super excited for university, or college, or
<p> appreticeship, or--post-secondary in general. They're excited about meeting new
All around me, all my friends are super excited for university, or college, [like-minded] people, clubs, increased autonomy, the future promises of
or appreticeship, or--post-secondary in general. They're excited about post-secondary education, and of course, parties (within reason). They look to the
meeting new [like-minded] people, clubs, increased autonomy, the future hopeful side of things.
promises of post-secondary education, and of course, parties (within </p>
reason). They look to the hopeful side of things. <p>
</p> Now, I have this set of coasters which I got a year or so ago at a local market.
<p> They're meant to keep me in a more positive headspace, but half the time they're
Now, I have this set of coasters which I got a year or so ago at a local covered up by drinks... Anyway, one of them advises me to "focus on the good".
market. They're meant to keep me in a more positive headspace, but half the </p>
time they're covered up by drinks... Anyway, one of them advises me to <p>
"focus on the good". And boy, do I try hard to do that. But without a job, I'm left to my hyperfixation
</p> and burnout routine. If I'm lucky, I just start going a bit stir-crazy from sitting
<p> in my room, doing things that I consider productive, with only the occasional break
And boy, do I try hard to do that. But without a job, I'm left to my for the loo and another cup of bean juice. Then, it's back to work, dawn until
hyperfixation and burnout routine. If I'm lucky, I just start going a bit dinner, then maybe I'll play a game briefly, but not until working some more.
stir-crazy from sitting in my room, doing things that I consider productive, </p>
with only the occasional break for the loo and another cup of bean juice. <p>
Then, it's back to work, dawn until dinner, then maybe I'll play a game There are of course plenty of things that I'd like to blame for why I'm like this,
briefly, but not until working some more. but that's not the purpose of this post, nor more than speculation.
</p> </p>
<p> <p>
There are of course plenty of things that I'd like to blame for why I'm like Anyway, I'm currently writing this in a cheerful little café after an appointment so
this, but that's not the purpose of this post, nor more than speculation. that I take a break to process, and perhaps understand, some emotions, while taking
</p> in this little thing. So, back to university, since that's my academic trajectory.
<p> </p>
Anyway, I'm currently writing this in a cheerful little café after an <p>I'm terrified.</p>
appointment so that I take a break to process, and perhaps understand, some <p>
emotions, while taking in this little thing. So, back to university, since I've struggled a lot to plan and get course selections which will allow me to
that's my academic trajectory. fulfill my degree, only to fail rather badly. Seriously, I will probably do poorly
</p> in philosophy, and it doesn't help me with just about any of my requirements. On top
<p>I'm terrified.</p> of that, I'm worried about the teachers that I'll get. It was bad enough in grade 5,
<p> and I'd had a few years to anticipate that teacher. In university, I have no
I've struggled a lot to plan and get course selections which will allow me knowledge going into first year. The best resource I have is something like
to fulfill my degree, only to fail rather badly. Seriously, I will probably RateMyProf which honestly kinda sucks and probably makes things worse unless there's
do poorly in philosophy, and it doesn't help me with just about any of my a resoundingly poor overall rating.
requirements. On top of that, I'm worried about the teachers that I'll get. </p>
It was bad enough in grade 5, and I'd had a few years to anticipate that <p>
teacher. In university, I have no knowledge going into first year. The best That's not to say that all of my course selections are bad; I still have the ones
resource I have is something like RateMyProf which honestly kinda sucks and within the interest of my degree and some in my hobbies, that also contribute
probably makes things worse unless there's a resoundingly poor overall directly to the degree. One friend and I were also able to get some courses together
rating. since I had to take them, and they wanted to. This may sound silly given the
</p> struggles with course availabilities, but I promise these decisions were made
<p> following a lot of logical consideration of both of our degrees' completion.
That's not to say that all of my course selections are bad; I still have the </p>
ones within the interest of my degree and some in my hobbies, that also <p>
contribute directly to the degree. One friend and I were also able to get Another concern is the fact that I know so little, and I get my orientation the day
some courses together since I had to take them, and they wanted to. This may before I need to use it... that's not a lot of time to figure out if you're missing
sound silly given the struggles with course availabilities, but I promise something. That then contributes to my concerns about being able to move around
these decisions were made following a lot of logical consideration of both campus fast enough to not miss classes, on top of the fatigue that I'll have from
of our degrees' completion. waking up at 5h30.
</p> </p>
<p> <p>
Another concern is the fact that I know so little, and I get my orientation Finally, because otherwise I could keep going on, are my concerns regarding the
the day before I need to use it... that's not a lot of time to figure out if ever-shoved-down-our-gullets AIs. I write oddly. This blog, my poetry, and all of my
you're missing something. That then contributes to my concerns about being past essays and analyses. My teachers can attest, especially my grade 9 & 12 English
able to move around campus fast enough to not miss classes, on top of the teacher who had to consult two other teachers and myself to fully understand
fatigue that I'll have from waking up at 5h30. <a href="https://gitea.cutieguwu.ca/cutieguwu/falling_down_building_up"
</p> >Building Up</a
<p> >, a poem I wrote with the rust programming language for symbology.
Finally, because otherwise I could keep going on, are my concerns regarding </p>
the ever-shoved-down-our-gullets AIs. I write oddly. This blog, my poetry, <p>
and all of my past essays and analyses. My teachers can attest, especially The concerns about having to prove that I don't use AI were bad enough in High
my grade 9 & 12 English teacher who had to consult two other teachers and School. Universities have far more strict policies, which likely utilize a guilty
myself to fully understand until proven innocent model.
<a href="https://gitea.cutieguwu.ca/cutieguwu/falling_down_building_up" </p>
>Building Up</a <p>
>, a poem I wrote with the rust programming language for symbology. At the end of the day, I'm trying to take in the little things and not worry too
</p> much.
<p> </p>
The concerns about having to prove that I don't use AI were bad enough in
High School. Universities have far more strict policies, which likely
utilize a guilty until proven innocent model.
</p>
<p>
At the end of the day, I'm trying to take in the little things and not worry
too much.
</p>
</div>
</div>
<include src="includes/tailer.html" />
</main> </main>
<div class="pane spacer"> <include src="includes/tailer.html" />
<ul class="pane spacer">
<include src="./includes/blog_recent_posts.html" /> <include src="./includes/blog_recent_posts.html" />
<div class="spacer_container"><p>#AD</p></div> <li class="spacer_container">#AD</li>
</div> </ul>
<include src="includes/footer.html" /> <include src="includes/footer.html" />
<include src="includes/scripts.html" /> <include src="includes/scripts.html" />
</body> </body>
+126 -140
View File
@@ -11,152 +11,138 @@
<include src="includes/nav_header.html" /> <include src="includes/nav_header.html" />
<include src="includes/nav_menu.html" /> <include src="includes/nav_menu.html" />
<div class="location"> <div class="location">
<header><h4>You are here:</h4></header> <p class="title">You are here:</p>
<h5 class="page">Blog - Buyer's Anxiety</h5> <p class="page">Blog - Buyer's Anxiety</p>
</div> </div>
<include src="includes/nav_quick_links.html" /> <include src="includes/nav_quick_links.html" />
</nav> </nav>
<main class="pane blog"> <main class="pane blog">
<div class="body"> <header>
<header> <h1 class="title">Buyer's Anxiety</h1>
<h1 class="title">Buyer's Anxiety</h1> <p class="date">Posted: 11 September, 2025</p>
<p class="date">Posted: 11 September, 2025</p> <p class="date">Last Edited: 14 September, 2025</p>
<p class="date">Last Edited: 14 September, 2025</p> </header>
</header> <img
<div class="body"> alt="Katie's old laptop, seated upon her clean desk, struggling on. Although, you can't tell how broken the hinge is or the parts that her kitten chewed. I swear, it's in worse condition than it looks."
<img src="/img/blog/posts/2_buyers_anxiety.webp"
alt="Katie's old laptop, seated upon her clean desk, struggling on. Although, you can't tell how broken the hinge is or the parts that her kitten chewed. I swear, it's in worse condition than it looks." />
src="/img/blog/posts/2_buyers_anxiety.webp" <p>
/> I can't say that I'm thrilled that my blog posts have only been when I'm down or
<p> struggling with something. But, here we are: the third one.
I can't say that I'm thrilled that my blog posts have only been when I'm </p>
down or struggling with something. But, here we are: the third one. <p>
</p> I'm stuck with an internal conflict. It feels like remorse, but before the poor
<p> choice has happened, as opposed to fear? But it is fear.
I'm stuck with an internal conflict. It feels like remorse, but before the </p>
poor choice has happened, as opposed to fear? But it is fear. <p>It's no secret that I love my Framework 16, the company's values, and Linux.</p>
</p> <p>I also want to support my friends whenever and however I can.</p>
<p> <p>But what if those two things clash?... Spoiler: they have.</p>
It's no secret that I love my Framework 16, the company's values, and Linux. <p>
</p> To preface this whole thing, my friend is looking for a new laptop. She bought her
<p>I also want to support my friends whenever and however I can.</p> old one because it was in her price range. Four years later, it's... struggling. The
<p>But what if those two things clash?... Spoiler: they have.</p> enshittification of the tech industry took hold, one hinge died a couple years ago,
<p> the whole body is weak, the system is relatively underpowered for her needs, and
To preface this whole thing, my friend is looking for a new laptop. She it's not going to survive university in any good condition, if even that. As a
bought her old one because it was in her price range. Four years later, two-time published author, she needs to be able to type and open this system a lot.
it's... struggling. The enshittification of the tech industry took hold, one That means a good keyboard and good hinges. She also wants to play Minecraft,
hinge died a couple years ago, the whole body is weak, the system is Roblox, and probably Uno on it too. Thus, GPU demands aren't high and she'll want at
relatively underpowered for her needs, and it's not going to survive least a 15" display. She treats her devices well and cares for their longevity.
university in any good condition, if even that. As a two-time published </p>
author, she needs to be able to type and open this system a lot. That means <p>
a good keyboard and good hinges. She also wants to play Minecraft, Roblox, To me, this sounds like a great place for a Framework laptop. Expensive upfront,
and probably Uno on it too. Thus, GPU demands aren't high and she'll want at sure. But the 16" model has an iGPU that runs Minecraft and Roblox just fine, has a
least a 15" display. She treats her devices well and cares for their super easy to replace input module system to replace the keyboard, good hinges, a
longevity. CPU that's total overkill (even for the stuff I do; I wanted a six-core), and it
</p> wears like a tank. A guy at our high school proved that unintentionally. I have the
<p> dent in the lid and the pristene display to prove it. It also has some added
To me, this sounds like a great place for a Framework laptop. Expensive benefits, like the hardware switches for the camera and mic, overall modular design,
upfront, sure. But the 16" model has an iGPU that runs Minecraft and Roblox repairability, and the upgrade paths, which save her from spending more money to buy
just fine, has a super easy to replace input module system to replace the a full tower or another laptop. Framework recently announced the new generation
keyboard, good hinges, a CPU that's total overkill (even for the stuff I do; boards for the FW 16, and knocked down the price of the 7040 series boards slightly,
I wanted a six-core), and it wears like a tank. A guy at our high school but that's a nice-to-have. Even if you're a non-techie, you won't need to get into
proved that unintentionally. I have the dent in the lid and the pristene the hardware unless you're building it or repairing something, and Framework's
display to prove it. It also has some added benefits, like the hardware guides have only gotten better. Even when trying to replace the liquid metal, or
switches for the camera and mic, overall modular design, repairability, and solve an issue that I thought was a loose display cable (it was a linux software
the upgrade paths, which save her from spending more money to buy a full issue of some kind), the guides got me through the wholly unknown to me.
tower or another laptop. Framework recently announced the new generation </p>
boards for the FW 16, and knocked down the price of the 7040 series boards <p>This makes it sound perfect.</p>
slightly, but that's a nice-to-have. Even if you're a non-techie, you won't <p>
need to get into the hardware unless you're building it or repairing The downside? Well, I feel like I'm just succumbing to brand loyalty. A total shill.
something, and Framework's guides have only gotten better. Even when trying The whole above paragraph sounds like a sales pitch without the company's values
to replace the liquid metal, or solve an issue that I thought was a loose explicitly spouted. The one thing I envy of Apple fans, is their ability to convince
display cable (it was a linux software issue of some kind), the guides got others that Apple is great and feel no conflict.
me through the wholly unknown to me. </p>
</p> <p>
<p>This makes it sound perfect.</p> Is this what a parent feels like when buying for a child? Probably not? After all,
<p> the child likely isn't knowledgeable upon the context, or doesn't care enough to
The downside? Well, I feel like I'm just succumbing to brand loyalty. A question the rationale leading to the purchase. But here, I'm buying for a friend.
total shill. The whole above paragraph sounds like a sales pitch without the Someone smart (Before someone starts, I'm not saying that a child can't be smart or
company's values explicitly spouted. The one thing I envy of Apple fans, is that the rest of my friends are dumb). Sure, she's not a techie the way I am, but
their ability to convince others that Apple is great and feel no conflict. she is more than capable of questioning things for herself. What's the price? What's
</p> the rationale? Are you just pushing me into an ecosystem that you love? Are you
<p> buying my friendship? ...and so on down the rabbit hole my train of thought hops.
Is this what a parent feels like when buying for a child? Probably not? </p>
After all, the child likely isn't knowledgeable upon the context, or doesn't <p>
care enough to question the rationale leading to the purchase. But here, I'm I've already convinced two friends to try Linux, but their hardware and personal
buying for a friend. Someone smart (Before someone starts, I'm not saying needs caused too many problems. I also convinced a family member of mine, who was an
that a child can't be smart or that the rest of my friends are dumb). Sure, Apple fan, to shift to a Framework 13 running Linux.
she's not a techie the way I am, but she is more than capable of questioning </p>
things for herself. What's the price? What's the rationale? Are you just <p>
pushing me into an ecosystem that you love? Are you buying my friendship? I feel like a manipulator. I left my proud, cheerful "switch to Linux" chanting
...and so on down the rabbit hole my train of thought hops. phase a while ago. But did I really? Am I so moral-driven that I'm blind? Is this
</p> really a selfless gift to a friend? Is this because I'm afraid of losing my friends?
<p> Or do I subconciously hold an agenda to migrate everyone to Framework and Linux? As
I've already convinced two friends to try Linux, but their hardware and stupid as it sounds, I mean this literally.
personal needs caused too many problems. I also convinced a family member of </p>
mine, who was an Apple fan, to shift to a Framework 13 running Linux. <p>
</p> Even if you consider the idea that "only a good person would think like that,
<p> because a bad person would know it," it doesn't help.
I feel like a manipulator. I left my proud, cheerful "switch to Linux" </p>
chanting phase a while ago. But did I really? Am I so moral-driven that I'm <p>
blind? Is this really a selfless gift to a friend? Is this because I'm To make things worse again, I've long spouted buying something with the intent to
afraid of losing my friends? Or do I subconciously hold an agenda to migrate run it long term, instead of buying a bunch of cheap somethings that die super fast.
everyone to Framework and Linux? As stupid as it sounds, I mean this My previous laptop, which I got from my father, ran for nearly 12 years before the
literally. display started dying; now it's a server. So imagine a teenager with that kind of a
</p> background in keeping a computer running for so long, sees a 3-year old laptop
<p> already in a far worse condition than their 10/11-year old one (with comparable
Even if you consider the idea that "only a good person would think like specs). I was that teenager, and I started a "joke" once I got my new laptop, about
that, because a bad person would know it," it doesn't help. it's easily replaceable hinges... and so on. Of course, I was prideful in a sense,
</p> and I kept that "joke" going too long... So how will it look when the laptop who's
<p> death I foretold gets replaced by the exact laptop that it was compared to?
To make things worse again, I've long spouted buying something with the (Assuming that I didn't start the "joke" about the purchase decisions, age, and
intent to run it long term, instead of buying a bunch of cheap somethings condition of my previous one.)
that die super fast. My previous laptop, which I got from my father, ran for </p>
nearly 12 years before the display started dying; now it's a server. So <p>
imagine a teenager with that kind of a background in keeping a computer The only consolation I get for now, is that I have a few days to see how Katie likes
running for so long, sees a 3-year old laptop already in a far worse the FW 13, which is loaned off the aforementioned family member of mine. The
condition than their 10/11-year old one (with comparable specs). I was that trouble, because of course there's more, is that I need to discern between her
teenager, and I started a "joke" once I got my new laptop, about it's easily impressions of the computer, and the OS, since it's Manjaro Linux. Because of that,
replaceable hinges... and so on. Of course, I was prideful in a sense, and I my plan is to dual boot the gifted system. That way she can finish her computer
kept that "joke" going too long... So how will it look when the laptop who's science stuff in the same environment, and then decide whether or not to scrap the
death I foretold gets replaced by the exact laptop that it was compared to? Linux partition.
(Assuming that I didn't start the "joke" about the purchase decisions, age, </p>
and condition of my previous one.) <p>
</p> Of course, as always, my troubles start just after having had a counselling session.
<p> So, I'm left to deal with this myself for a few weeks.
The only consolation I get for now, is that I have a few days to see how </p>
Katie likes the FW 13, which is loaned off the aforementioned family member <p>Sometimes I wonder why things can't just be simple for me in life...</p>
of mine. The trouble, because of course there's more, is that I need to <hr />
discern between her impressions of the computer, and the OS, since it's <p>
Manjaro Linux. Because of that, my plan is to dual boot the gifted system. Now, as a note, I'm not saying that Framework is perfect. They've had, and continue
That way she can finish her computer science stuff in the same environment, to have, their issues. The difference is that they actually listen and work on them.
and then decide whether or not to scrap the Linux partition. The guides, the incorrect QR codes, the support system, FW16 keyboard deflection,
</p> late UEFI updates, the FW16 keyboard wake-up issue with the screen closed, the
<p> first-gen display expansion cards power draw issue, and so on. And sure, they can be
Of course, as always, my troubles start just after having had a counselling slow. But they're small, and they try to do it right the first time. They release
session. So, I'm left to deal with this myself for a few weeks. the software and hardware patches to affected systems, and listen on to further
</p> critique in the interest of improving.
<p>Sometimes I wonder why things can't just be simple for me in life...</p> </p>
<hr />
<p>
Now, as a note, I'm not saying that Framework is perfect. They've had, and
continue to have, their issues. The difference is that they actually listen
and work on them. The guides, the incorrect QR codes, the support system,
FW16 keyboard deflection, late UEFI updates, the FW16 keyboard wake-up issue
with the screen closed, the first-gen display expansion cards power draw
issue, and so on. And sure, they can be slow. But they're small, and they
try to do it right the first time. They release the software and hardware
patches to affected systems, and listen on to further critique in the
interest of improving.
</p>
</div>
</div>
<include src="includes/tailer.html" />
</main> </main>
<div class="pane spacer"> <include src="includes/tailer.html" />
<ul class="pane spacer">
<include src="./includes/blog_recent_posts.html" /> <include src="./includes/blog_recent_posts.html" />
<div class="spacer_container"><p>#AD</p></div> <li class="spacer_container">#AD</li>
</div> </ul>
<include src="includes/footer.html" /> <include src="includes/footer.html" />
<include src="includes/scripts.html" /> <include src="includes/scripts.html" />
</body> </body>
+6 -6
View File
@@ -11,8 +11,8 @@
<include src="includes/nav_header.html" /> <include src="includes/nav_header.html" />
<include src="includes/nav_menu.html" /> <include src="includes/nav_menu.html" />
<div class="location"> <div class="location">
<header><h4>You are here:</h4></header> <p class="title">You are here:</p>
<h5 class="page">Blog - Closing Chapters</h5> <p class="page">Blog - Closing Chapters</p>
</div> </div>
<include src="includes/nav_quick_links.html" /> <include src="includes/nav_quick_links.html" />
</nav> </nav>
@@ -131,12 +131,12 @@
</p> </p>
</div> </div>
</div> </div>
<include src="includes/tailer.html" />
</main> </main>
<div class="pane spacer"> <include src="includes/tailer.html" />
<ul class="pane spacer">
<include src="./includes/blog_recent_posts.html" /> <include src="./includes/blog_recent_posts.html" />
<div class="spacer_container"><p>#AD</p></div> <li class="spacer_container">#AD</li>
</div> </ul>
<include src="includes/footer.html" /> <include src="includes/footer.html" />
<include src="includes/scripts.html" /> <include src="includes/scripts.html" />
</body> </body>
+109 -119
View File
@@ -11,139 +11,129 @@
<include src="includes/nav_header.html" /> <include src="includes/nav_header.html" />
<include src="includes/nav_menu.html" /> <include src="includes/nav_menu.html" />
<div class="location"> <div class="location">
<header><h4>You are here:</h4></header> <p class="title">You are here:</p>
<h5 class="page">Blog - Pointless Plans</h5> <p class="page">Blog - Pointless Plans</p>
</div> </div>
<include src="includes/nav_quick_links.html" /> <include src="includes/nav_quick_links.html" />
</nav> </nav>
<main class="pane blog"> <main class="pane blog">
<div class="body"> <header>
<header> <h1 class="title">Pointless Plans</h1>
<h1 class="title">Pointless Plans</h1> <p class="date">Posted: 18 December, 2025</p>
<p class="date">Posted: 18 December, 2025</p> <p class="date">Last Edited: 18 December, 2025</p>
<p class="date">Last Edited: 18 December, 2025</p> </header>
</header> <p>
<div class="body"> So... remember my first post where I said that "a meaningless 'Welcome to my Blog'
<p> filled with my hopes and aspirations that inevitably would never come to light was
So... remember my first post where I said that "a meaningless 'Welcome to my something I knew I didn't want." Well...
Blog' filled with my hopes and aspirations that inevitably would never come </p>
to light was something I knew I didn't want." Well... <p>
</p> I've been stuck in a doom and gloom phase here, and with me hopefully concluding my
<p> counselling soon, I definitely don't want to dwell in it.
I've been stuck in a doom and gloom phase here, and with me hopefully </p>
concluding my counselling soon, I definitely don't want to dwell in it. <p>
</p> As a result, I'm making a little list of things that I'd love to write about, and
<p> that you can hopefully expect to read about sometime soon!
As a result, I'm making a little list of things that I'd love to write </p>
about, and that you can hopefully expect to read about sometime soon! <ul>
</p> <li>
<p>CyberSci</p>
<ul> <ul>
<li> <li>
<p>CyberSci</p> I had the fortune to participate at the Regional level, representing
<ul> Carleton University. (Spoiler: We won, barely)
<li>
I had the fortune to participate at the Regional level,
representing Carleton University. (Spoiler: We won, barely)
</li>
<li>
This will probably have a follow up once Nationals happens in
the summer.
</li>
</ul>
</li> </li>
<li> <li>
<p>Creative Writing Work</p> This will probably have a follow up once Nationals happens in the
<ul> summer.
<li>
I've written some good things and some really bad things for the
Creative Writing course this term. Obviously, I'll only publish
works that I believe are well polished.
</li>
</ul>
</li>
<li>
<p>Poetry</p>
<ul>
<li>
I want to get back to writing poetry, but for now I have some
things that are still unpublished.
</li>
<li>
They're nothing like Building Up, so if you can't read [bad]
Rust, don't worry. They're also far less whacky than Falling
Down.
</li>
<li>
<a
href="https://gitea.cutieguwu.ca/cutieguwu/falling_down_building_up"
>Falling Down & Building Up</a
>
</li>
</ul>
</li> </li>
</ul> </ul>
<p> </li>
Also, I've come to realise that I have a thing for memoirs. I never actually <li>
realised it because I usually read book series, but I now have four memoirs <p>Creative Writing Work</p>
in my library. <ul>
</p>
<ol>
<li> <li>
<em>Fatty Legs</em> by Christy Jordan-Fenton and Margaret Pokiak-Fenton I've written some good things and some really bad things for the
Creative Writing course this term. Obviously, I'll only publish works
that I believe are well polished.
</li> </li>
<li>its sequel, <em>A Stranger At Home</em></li> </ul>
<li><em>The Glass Castle</em> by Jeannette Walls</li> </li>
<li><em>Tomboy Survival Guide</em> by Ivan Coyote</li> <li>
</ol> <p>Poetry</p>
<p> <ul>
So, after a creative non-fiction flash writing assignment just didn't work <li>
out well, even after reworking it heavily for the exam, I decided that I I want to get back to writing poetry, but for now I have some things
should actually take it in the direction of a full memoir, rather than the that are still unpublished.
poetic form that it currently has. </li>
</p> <li>
<p> They're nothing like Building Up, so if you can't read [bad] Rust, don't
The problem is that I mean, a <em>full</em> memoir. And the problem with worry. They're also far less whacky than Falling Down.
that is that memory is a complex thing. Many important and relevant things </li>
for a memoir are episodic, iconic, flashbulb memories, which can be <li>
difficult to just retrieve on the spot. (Yes, I referenced my textbook, no I <a href="https://gitea.cutieguwu.ca/cutieguwu/falling_down_building_up"
am not a credible source for interpreting this information.) >Falling Down & Building Up</a
</p> >
<p> </li>
A lot of the time, my writing, particularly my poetry, comes from what can </ul>
best be described as state-dependent memory. If I'm lucky, some random </li>
stimulus or set of stimuli will trigger a recollection of these memories, </ul>
and give me an image from which to write. The problem is that this also <p>
means I cannot write sequentially. Also, I've come to realise that I have a thing for memoirs. I never actually
</p> realised it because I usually read book series, but I now have four memoirs in my
<p> library.
And just to make things even more difficult, memory is unreliable and easily </p>
influenced. So I need to review and consider how much I trust my own <ol>
recollection of events, and work to mitigate my biases whenever possible by <li><em>Fatty Legs</em> by Christy Jordan-Fenton and Margaret Pokiak-Fenton</li>
asking someone else to recount the event and compare details. <li>its sequel, <em>A Stranger At Home</em></li>
</p> <li><em>The Glass Castle</em> by Jeannette Walls</li>
<p> <li><em>Tomboy Survival Guide</em> by Ivan Coyote</li>
So, in the background, I'm going to start working on that. Almost like </ol>
forgetting to write in a diary for a week, then trying to catch up while you <p>
still remember. So, after a creative non-fiction flash writing assignment just didn't work out well,
</p> even after reworking it heavily for the exam, I decided that I should actually take
<p> it in the direction of a full memoir, rather than the poetic form that it currently
Hopefully this will have the added benefit of holding back some of the has.
future doom and gloom from the blog. </p>
</p> <p>
<p> The problem is that I mean, a <em>full</em> memoir. And the problem with that is
And finally, I'm going to try to finish up my blog generator, that memory is a complex thing. Many important and relevant things for a memoir are
<a href="https://gitea.cutieguwu.ca/cutieguwu/cutinews">cutinews</a>. It's episodic, iconic, flashbulb memories, which can be difficult to just retrieve on the
about time I got back and actually finished a programming project. Chances spot. (Yes, I referenced my textbook, no I am not a credible source for interpreting
are that I'll be live on Twitch (yes, eww, ik) working on the code. this information.)
</p> </p>
</div> <p>
</div> A lot of the time, my writing, particularly my poetry, comes from what can best be
<include src="includes/tailer.html" /> described as state-dependent memory. If I'm lucky, some random stimulus or set of
stimuli will trigger a recollection of these memories, and give me an image from
which to write. The problem is that this also means I cannot write sequentially.
</p>
<p>
And just to make things even more difficult, memory is unreliable and easily
influenced. So I need to review and consider how much I trust my own recollection of
events, and work to mitigate my biases whenever possible by asking someone else to
recount the event and compare details.
</p>
<p>
So, in the background, I'm going to start working on that. Almost like forgetting to
write in a diary for a week, then trying to catch up while you still remember.
</p>
<p>
Hopefully this will have the added benefit of holding back some of the future doom
and gloom from the blog.
</p>
<p>
And finally, I'm going to try to finish up my blog generator,
<a href="https://gitea.cutieguwu.ca/cutieguwu/cutinews">cutinews</a>. It's about
time I got back and actually finished a programming project. Chances are that I'll
be live on Twitch (yes, eww, ik) working on the code.
</p>
</main> </main>
<div class="pane spacer"> <include src="includes/tailer.html" />
<ul class="pane spacer">
<include src="./includes/blog_recent_posts.html" /> <include src="./includes/blog_recent_posts.html" />
<div class="spacer_container"><p>#AD</p></div> <li class="spacer_container">#AD</li>
</div> </ul>
<include src="includes/footer.html" /> <include src="includes/footer.html" />
<include src="includes/scripts.html" /> <include src="includes/scripts.html" />
</body> </body>
+111 -122
View File
@@ -11,134 +11,123 @@
<include src="includes/nav_header.html" /> <include src="includes/nav_header.html" />
<include src="includes/nav_menu.html" /> <include src="includes/nav_menu.html" />
<div class="location"> <div class="location">
<header><h4>You are here:</h4></header> <p class="title">You are here:</p>
<h5 class="page">Blog - Optical Recovery</h5> <p class="page">Blog - Optical Recovery</p>
</div> </div>
<include src="includes/nav_quick_links.html" /> <include src="includes/nav_quick_links.html" />
</nav> </nav>
<main class="pane blog"> <main class="pane blog">
<div class="body"> <header>
<header> <h1 class="title">Optical Recovery</h1>
<h1 class="title">Optical Recovery</h1> <p class="date">Posted: 10 January, 2026</p>
<p class="date">Posted: 10 January, 2026</p> <p class="date">Last Edited: 10 January, 2026</p>
<p class="date">Last Edited: 10 January, 2026</p> </header>
</header> <p>
<div class="body"> Data preservation is increasingly threatened in the digital age. That almost sounds
<p> backwards, until you dig into modern architecture.
Data preservation is increasingly threatened in the digital age. That almost </p>
sounds backwards, until you dig into modern architecture. <p>
</p> Once upon a time, the greatest threat to information preservation was nature and
<p> memory retrieval errors. The digital age introduced denser, longer-lasting forms of
Once upon a time, the greatest threat to information preservation was nature data storage. As we progressed from punch card, to tape, to 8 inch floppies, to
and memory retrieval errors. The digital age introduced denser, flash and optical, and ever denser forms of all, we got better at preventing data
longer-lasting forms of data storage. As we progressed from punch card, to loss. Quality control, error correction techniques bundled with file systems, and
tape, to 8 inch floppies, to flash and optical, and ever denser forms of redundancy (parity) in storage virtualizations, like RAID.
all, we got better at preventing data loss. Quality control, error </p>
correction techniques bundled with file systems, and redundancy (parity) in <p>
storage virtualizations, like RAID. But in the modern age, the Enshittocene<sup>1</sup>, some would call it, consumers
</p> are ever strongarmed into corporate-controlled cloud storage. With that, comes a
<p> lack of ownership.
But in the modern age, the Enshittocene<sup>1</sup>, some would call it, </p>
consumers are ever strongarmed into corporate-controlled cloud storage. With <p>
that, comes a lack of ownership. Now, normally that's the lead-up to advocating for homelabbing, FOSS, and
</p> de-Googling. However, in this instance, it's the lead up to optical media
<p> preservation. Why? Because optical media remains a great storage medium today. Even
Now, normally that's the lead-up to advocating for homelabbing, FOSS, and if you don't believe that, many old games in their original form, or other preserved
de-Googling. However, in this instance, it's the lead up to optical media media, are still only available on discs.
preservation. Why? Because optical media remains a great storage medium </p>
today. Even if you don't believe that, many old games in their original <p>
form, or other preserved media, are still only available on discs. However, discs are subject to natural degradation through scratches, delamination,
</p> and disc rot. Especially as the quality control on these discs dwindles. Thus, there
<p> must be additional work put into caring for this medium.
However, discs are subject to natural degradation through scratches, </p>
delamination, and disc rot. Especially as the quality control on these discs <p>
dwindles. Thus, there must be additional work put into caring for this RAID arrays are great as alternatives too, as they already have parity, ddrescue,
medium. and error-correcting filesystems available. The problem is that the arrays
</p> themselves are not. At least not right now. Once again, partly thanks to AI
<p> datacentres demanding obscene amounts of resources, the cost of hard drives has gone
RAID arrays are great as alternatives too, as they already have parity, up significantly since the pandemic.
ddrescue, and error-correcting filesystems available. The problem is that </p>
the arrays themselves are not. At least not right now. Once again, partly <p>
thanks to AI datacentres demanding obscene amounts of resources, the cost of With that, we segue into my latest project, temporarily named
hard drives has gone up significantly since the pandemic. <em>Kramer</em>. I know I did some research to come up with that name, but I
</p> genuinely don't recall who it was in reference to. In fact, having tried tracking
<p> down who it's in reference to, I may have messed up when I picked the name. My best
With that, we segue into my latest project, temporarily named guess is that it's in reference to Kane Kramer, but he helped design the Digital
<em>Kramer</em>. I know I did some research to come up with that name, but I Audio Player, not optical media.
genuinely don't recall who it was in reference to. In fact, having tried </p>
tracking down who it's in reference to, I may have messed up when I picked <p>
the name. My best guess is that it's in reference to Kane Kramer, but he Regardless, it's always been a working name while I figure out if I can finish the
helped design the Digital Audio Player, not optical media. project.
</p> </p>
<p> <p>So, what is Kramer?</p>
Regardless, it's always been a working name while I figure out if I can <p>
finish the project. Kramer is a recovery utility. Conceptually, it's meant to be akin to
</p> ddrescue<sup>2</sup>, but optimized for recovering data from optical media.
<p>So, what is Kramer?</p> </p>
<p> <p>
Kramer is a recovery utility. Conceptually, it's meant to be akin to There are two main problems I've experienced while trying to use ddrescue with
ddrescue<sup>2</sup>, but optimized for recovering data from optical media. optical drives, and both stem from the drive's firmware. Now, I don't know if me
</p> using the <code>--reset-slow</code> flag is contributing to these issues or not, but
<p> I experience more problems without it.
There are two main problems I've experienced while trying to use ddrescue </p>
with optical drives, and both stem from the drive's firmware. Now, I don't <p>
know if me using the <code>--reset-slow</code> flag is contributing to these If you've ever tried working with optical media in Linux, you may be familiar with
issues or not, but I experience more problems without it. <em>The Sleep Bug</em>. Normally, this is when a drive's firmware decides to sleep
</p> after two minutes, and never wakes. In the case of ddrescue, I've noticed that the
<p> drive often sleeps after read errors. When this happens, I can't kill ddrescue, and
If you've ever tried working with optical media in Linux, you may be it just hangs. Even if I forcefully disconnect the drive, it just hangs, awaiting a
familiar with <em>The Sleep Bug</em>. Normally, this is when a drive's response from the block device.
firmware decides to sleep after two minutes, and never wakes. In the case of </p>
ddrescue, I've noticed that the drive often sleeps after read errors. When <p>
this happens, I can't kill ddrescue, and it just hangs. Even if I forcefully For the record, Kramer still has this issue. I've only recently gotten mapping
disconnect the drive, it just hangs, awaiting a response from the block working alongside directIO to get around the Linux kernel's read poisoning.
device. </p>
</p> <p>
<p> Keep in mind that I know very little C, and I don't play this low in the system much
For the record, Kramer still has this issue. I've only recently gotten yet. So, I don't know why, but without the
mapping working alongside directIO to get around the Linux kernel's read <code>O_DIRECT</code> flag to bypass the kernel's buffer (and whatever else directIO
poisoning. technically bypasses), after a single IO error, the kernel will refuse to return
</p> anything but that same IO error until the parent process is restarted. I tried doing
<p> the C calls directly through FFI, since poisoning is something that Rust employs in
Keep in mind that I know very little C, and I don't play this low in the some places for safety. That didn't work, so I tried spawning a child process to
system much yet. So, I don't know why, but without the execute the read, but that also didn't work. Thankfully, I know a guy, and with his
<code>O_DIRECT</code> flag to bypass the kernel's buffer (and whatever else help I was able to track down not only how to implement directIO, but also without
directIO technically bypasses), after a single IO error, the kernel will using FFI to call <code>posix_memalign</code>.
refuse to return anything but that same IO error until the parent process is </p>
restarted. I tried doing the C calls directly through FFI, since poisoning <p>
is something that Rust employs in some places for safety. That didn't work, Back on track, the other issue is the spin-down. As ddrescue reads smaller clusters
so I tried spawning a child process to execute the read, but that also and/or starts hitting a particularly poor section of the disc, some drives' firmware
didn't work. Thankfully, I know a guy, and with his help I was able to track is too quick to spin down, causing the spindle to constantly speed up and slow down,
down not only how to implement directIO, but also without using FFI to call increasing wear.
<code>posix_memalign</code>. </p>
</p> <hr />
<p> <ol>
Back on track, the other issue is the spin-down. As ddrescue reads smaller <li>I would recommend reading <em>Enshittification</em> by Cory Doctorow.</li>
clusters and/or starts hitting a particularly poor section of the disc, some <li>
drives' firmware is too quick to spin down, causing the spindle to As I'm writing Kramer in Rust, I also have to stress the point that this project
constantly speed up and slow down, increasing wear. is not intended as a ddrescue rewrite in rust, for the sake of a rewrite in
</p> rust. I'm not trying to clone or replace ddrescue. Kramer has a different
<hr /> target, and ddrescue is a resource for me to learn from and use as a guide while
<ol> I dig deeper into the system than I ever have.
<li> </li>
I would recommend reading <em>Enshittification</em> by Cory Doctorow. </ol>
</li>
<li>
As I'm writing Kramer in Rust, I also have to stress the point that this
project is not intended as a ddrescue rewrite in rust, for the sake of a
rewrite in rust. I'm not trying to clone or replace ddrescue. Kramer has
a different target, and ddrescue is a resource for me to learn from and
use as a guide while I dig deeper into the system than I ever have.
</li>
</ol>
</div>
</div>
<include src="includes/tailer.html" />
</main> </main>
<div class="pane spacer"> <include src="includes/tailer.html" />
<ul class="pane spacer">
<include src="./includes/blog_recent_posts.html" /> <include src="./includes/blog_recent_posts.html" />
<div class="spacer_container"><p>#AD</p></div> <li class="spacer_container">#AD</li>
</div> </ul>
<include src="includes/footer.html" /> <include src="includes/footer.html" />
<include src="includes/scripts.html" /> <include src="includes/scripts.html" />
</body> </body>
+338 -352
View File
@@ -11,189 +11,183 @@
<include src="includes/nav_header.html" /> <include src="includes/nav_header.html" />
<include src="includes/nav_menu.html" /> <include src="includes/nav_menu.html" />
<div class="location"> <div class="location">
<header><h4>You are here:</h4></header> <p class="title">You are here:</p>
<h5 class="page">Blog - Hack Racing</h5> <p class="page">Blog - Hack Racing</p>
</div> </div>
<include src="includes/nav_quick_links.html" /> <include src="includes/nav_quick_links.html" />
</nav> </nav>
<main class="pane blog"> <main class="pane blog">
<div class="body"> <header>
<header> <h1 class="title">Hack Racing</h1>
<h1 class="title">Hack Racing</h1> <p class="date">Posted: 28 March, 2026</p>
<p class="date">Posted: 28 March, 2026</p> <p class="date">Last Edited: 28 March, 2026</p>
<p class="date">Last Edited: 28 March, 2026</p> </header>
</header> <h1>Hack Racing</h1>
<div class="body"> <p>
<h1>Hack Racing</h1> After many delays in releasing this post, I've decided to make this a multi-part
<p> series to shamelessly boost my meaningless engagement stats.
After many delays in releasing this post, I've decided to make this a </p>
multi-part series to shamelessly boost my meaningless engagement stats. <p>
</p> I have done my best to make this series digestible to all (also for them sweet
<p> engagement stats). So, I hope that this can be informative for seasoned techies,
I have done my best to make this series digestible to all (also for them those new to Cybersecurity (like myself), and you normie folk who've somehow made
sweet engagement stats). So, I hope that this can be informative for your way here (hopefully not as victims).
seasoned techies, those new to Cybersecurity (like myself), and you normie </p>
folk who've somehow made your way here (hopefully not as victims). <p>
</p> It's important to note that this particular attack (and operation) may very well
<p> still be active.
It's important to note that this particular attack (and operation) may very </p>
well still be active. <p>
</p> Also, I apologise in advance if the formatting of this post is really messed up, I
<p> have a lot of work to do overhauling the blog section for converting Markdown to
Also, I apologise in advance if the formatting of this post is really messed HTML, better metadata tracking, and the lovely CSS that goes along with those
up, I have a lot of work to do overhauling the blog section for converting changes.
Markdown to HTML, better metadata tracking, and the lovely CSS that goes </p>
along with those changes. <h2>Prologue</h2>
</p> <h3>February 4th, 2026</h3>
<h2>Prologue</h2> <p>
<h3>February 4th, 2026</h3> This story begins like any other major public security story of early 2026: Discord.
<p> </p>
This story begins like any other major public security story of early 2026: <p>
Discord. I received a message from a friend asking for a quick favour. So naturally, I
</p> responded, only to be ghosted for <em>almost exactly</em> 24 hours.
<p> </p>
I received a message from a friend asking for a quick favour. So naturally, <h3>The Next Day</h3>
I responded, only to be ghosted for <em>almost exactly</em> 24 hours. <p>
</p> Aside from the odd behaviour, the hacker didn't account for the possibility that
<h3>The Next Day</h3> this friend and I might see each other the following day. At which point I was
<p> informed that they were hacked.
Aside from the odd behaviour, the hacker didn't account for the possibility </p>
that this friend and I might see each other the following day. At which <p>Eventually, at 24 hours post-hack,</p>
point I was informed that they were hacked. <blockquote>
</p> <p>
<p>Eventually, at 24 hours post-hack,</p> hi^^ , So I am currently pursuing an IT course where we are developing games.
<blockquote> and I developed a simple car racing simulator , As a part of the assignment, I
<p> require feedback from people who have played the game. Would you give it a try
hi^^ , So I am currently pursuing an IT course where we are developing and provide feedback? It would really help me out and be a big part of my
games. and I developed a simple car racing simulator , As a part of the learning!
assignment, I require feedback from people who have played the game. </p>
Would you give it a try and provide feedback? It would really help me </blockquote>
out and be a big part of my learning! <h3>Setting the bait</h3>
</p> <p>
</blockquote> It had to be right. After all, they could read all of our messages, profile me, and
<h3>Setting the bait</h3> discern that I have enough of a background in computing to not fall for such obvious
<p> bull. Especially as I know the person outside the digital realm, what they're doing
It had to be right. After all, they could read all of our messages, profile course wise, and what certain subject they're distinctly <em>not</em> carrying on
me, and discern that I have enough of a background in computing to not fall with, which happens to be computer science.
for such obvious bull. Especially as I know the person outside the digital </p>
realm, what they're doing course wise, and what certain subject they're <blockquote>
distinctly <em>not</em> carrying on with, which happens to be computer <p>Sure, I'd love to!</p>
science. </blockquote>
</p> <p>Super sophisticated bait, I know.</p>
<blockquote> <blockquote>
<p>Sure, I'd love to!</p> <p>
</blockquote> tysm~! , here you go and also if you could give me your feedback in the next
<p>Super sophisticated bait, I know.</p> 5-10 minutes, let me know if you faced any problem.
<blockquote> https://tinyurl.com/Race-Project-IT
<p> </p>
tysm~! , here you go and also if you could give me your feedback in the </blockquote>
next 5-10 minutes, let me know if you faced any problem. <p>
https://tinyurl.com/Race-Project-IT Bro literally is trying to live off the stereotypical behaviour of a person with a
</p> themed nitro account, and leaves a random comma. Also note the time constraint.
</blockquote> </p>
<p> <p>I was also later sent a second gift:</p>
Bro literally is trying to live off the stereotypical behaviour of a person <blockquote>
with a themed nitro account, and leaves a random comma. Also note the time <p>https://tinyurl.com/Racing-Pro updated</p>
constraint. </blockquote>
</p> <h2>Epidemiology</h2>
<p>I was also later sent a second gift:</p> <p>
<blockquote> This is clearly a token and/or password-stealing trojan, targeting at least Discord.
<p>https://tinyurl.com/Racing-Pro updated</p> </p>
</blockquote> <p>
<h2>Epidemiology</h2> Until much later, I didn't know that this attacked many, <em>many</em> other
<p> services including Steam, Browsers, and Wallets.
This is clearly a token and/or password-stealing trojan, targeting at least </p>
Discord. <p>
</p> Another piece of information gathered by someone else found that the attack is only
<p> designed for Windows.
Until much later, I didn't know that this attacked many, <em>many</em> other </p>
services including Steam, Browsers, and Wallets. <h2>Static Analysis</h2>
</p> <p>
<p> Most of this will center around the first trojan,
Another piece of information gathered by someone else found that the attack <code>Race-Project-IT</code>.
is only designed for Windows. </p>
</p> <h3>Links</h3>
<h2>Static Analysis</h2> <p>
<p> The links aren't markdown spoofed, but they are obscured by
Most of this will center around the first trojan, <code>tinyurl</code>. Using <code>expandurl</code>, I can tell that they go to
<code>Race-Project-IT</code>. Discord's CDN, and that I'm supposedly downloading a zip archive. Why on earth
</p> they'd make this even more suspicious by providing a tinyurl instead of a link to
<h3>Links</h3> Discord's CDN <em>on discord</em>, I have no idea.
<p> </p>
The links aren't markdown spoofed, but they are obscured by <h3>VirusTotal</h3>
<code>tinyurl</code>. Using <code>expandurl</code>, I can tell that they go <p>Tossing both binaries into VirusTotal finds... absolutely nothing?</p>
to Discord's CDN, and that I'm supposedly downloading a zip archive. Why on <p>
earth they'd make this even more suspicious by providing a tinyurl instead These files were last scanned nearly 24 hours ago as of writing. This could
of a link to Discord's CDN <em>on discord</em>, I have no idea. concieveably be the hacker(s) reviewing the quality of their trojan. Other than
</p> that, no vendors are screaming alarm bells. The Yomi Hunter sandbox has flagged the
<h3>VirusTotal</h3> <em>second</em> as malware.
<p>Tossing both binaries into VirusTotal finds... absolutely nothing?</p> </p>
<p> <p>
These files were last scanned nearly 24 hours ago as of writing. This could I'll force a rescan just to see if one of the vendors that timed out will flag one
concieveably be the hacker(s) reviewing the quality of their trojan. Other of them.
than that, no vendors are screaming alarm bells. The Yomi Hunter sandbox has </p>
flagged the <em>second</em> as malware. <p>
</p> And yup. Kapersky managed to not time out during the scan of the first binary,
<p> flagging it as <code>HEUR:Trojan-PSW.Script.Generic</code>. Kapersky timed out while
I'll force a rescan just to see if one of the vendors that timed out will analyzing the second.
flag one of them. </p>
</p> <h3>Strings</h3>
<p> <p>I notice a comment string in the binary:</p>
And yup. Kapersky managed to not time out during the scan of the first <pre><code class="language-plaintext">// feature.h, simple_feature.h, and feature_provider.h..
binary, flagging it as <code>HEUR:Trojan-PSW.Script.Generic</code>. Kapersky
timed out while analyzing the second.
</p>
<h3>Strings</h3>
<p>I notice a comment string in the binary:</p>
<pre><code class="language-plaintext">// feature.h, simple_feature.h, and feature_provider.h..
// This feature is only enabled if the embedder's delegated check returns // This feature is only enabled if the embedder's delegated check returns
// true. // true.
</code></pre> </code></pre>
<p> <p>
Searching for these comments leads to mentions of Chromium, maybe more Searching for these comments leads to mentions of Chromium, maybe more specifically
specifically Microsoft Chromium (Edge). I'll keep that in mind. Microsoft Chromium (Edge). I'll keep that in mind.
</p> </p>
<h3>The Executable</h3> <h3>The Executable</h3>
<p> <p>
Extracting the archive reveals a Windows Executable. Breaking down the Extracting the archive reveals a Windows Executable. Breaking down the executable
executable with <code>binwalk</code> turns up traces of with <code>binwalk</code> turns up traces of <code>electron</code> and more
<code>electron</code> and more Chromium, including: Chromium, including:
</p> </p>
<ul> <ul>
<li>chrome_100_percent.pak</li> <li>chrome_100_percent.pak</li>
<li>chrome_200_percent.pak</li> <li>chrome_200_percent.pak</li>
<li>LICENSE.electron.txt</li> <li>LICENSE.electron.txt</li>
<li>LICENSES.chromium.html</li> <li>LICENSES.chromium.html</li>
<li>app.asar</li> <li>app.asar</li>
<li>Racing_Sim.exe.extracted/A3D5760/image.png</li> <li>Racing_Sim.exe.extracted/A3D5760/image.png</li>
</ul> </ul>
<p> <p>
Within the EXE is another <code>Racing_Sim.exe</code>, and given the Within the EXE is another <code>Racing_Sim.exe</code>, and given the electron image
electron image (image.png above) and node modules within it, I suspect this (image.png above) and node modules within it, I suspect this is the actual payload,
is the actual payload, wrapped in an installer. wrapped in an installer.
</p> </p>
<p> <p>
Doing a bit of dynamic analysis by checking the behaviour seen in the Doing a bit of dynamic analysis by checking the behaviour seen in the VirusTotal
VirusTotal sandboxes, and then comparing that with the files installed on my sandboxes, and then comparing that with the files installed on my friend's system
friend's system confirms this. confirms this.
</p> </p>
<h3>Metadata</h3> <h3>Metadata</h3>
<p>The payload has an interesting bit of metadata:</p> <p>The payload has an interesting bit of metadata:</p>
<pre><code class="language-plaintext">Squirrel Aware Version : 1 <pre><code class="language-plaintext">Squirrel Aware Version : 1
</code></pre> </code></pre>
<p> <p>
With a bit of help from SearXNG, this points me towards the With a bit of help from SearXNG, this points me towards the
<a href="https://github.com/Squirrel/Squirrel.Windows">Squirrel.Windows</a> <a href="https://github.com/Squirrel/Squirrel.Windows">Squirrel.Windows</a>
installer project. From here, I can confirm that installer project. From here, I can confirm that
<code>Squirrel.Windows</code> plays a part in this by identifying common <code>Squirrel.Windows</code> plays a part in this by identifying common metadata
metadata listed at listed at
<a <a
href="https://github.com/Squirrel/Squirrel.Windows/blob/develop/docs/using/custom-squirrel-events-non-cs.md" href="https://github.com/Squirrel/Squirrel.Windows/blob/develop/docs/using/custom-squirrel-events-non-cs.md"
>https://github.com/Squirrel/Squirrel.Windows/blob/develop/docs/using/custom-squirrel-events-non-cs.md</a >https://github.com/Squirrel/Squirrel.Windows/blob/develop/docs/using/custom-squirrel-events-non-cs.md</a
> >
with the metadata on the file: with the metadata on the file:
</p> </p>
<pre><code class="language-plaintext">File Description : Racing_Sim <pre><code class="language-plaintext">File Description : Racing_Sim
File Version : 2.1.1 File Version : 2.1.1
Internal Name : Racing_Sim Internal Name : Racing_Sim
Legal Copyright : Copyright © 2026 Racing_Sim Legal Copyright : Copyright © 2026 Racing_Sim
@@ -205,123 +199,118 @@
PDB Age : 1 PDB Age : 1
PDB File Name : C:\projects\src\out\Default\electron.exe.pdb PDB File Name : C:\projects\src\out\Default\electron.exe.pdb
</code></pre> </code></pre>
<p> <p>
The existence of the PDB metadata leads me to believe that this might be a The existence of the PDB metadata leads me to believe that this might be a debug
debug build, but the PDB isn't present. build, but the PDB isn't present.
</p> </p>
<p> <p>
Reading up on Squirrel.Windows, it uses either <code>squirrel-pack</code> or Reading up on Squirrel.Windows, it uses either <code>squirrel-pack</code> or
<code>electron-builder</code> to package the application. I don't know a lot <code>electron-builder</code> to package the application. I don't know a lot about
about the electron ecosystem, but it seems rather clear that I should the electron ecosystem, but it seems rather clear that I should extract the electron
extract the electron archive. archive.
</p> </p>
<p>And there's our target: <code>4305567d2fbbd1d2.js</code></p> <p>And there's our target: <code>4305567d2fbbd1d2.js</code></p>
<h3>The Payload?</h3> <h3>The Payload?</h3>
<p> <p>
Unsurprisingly, there's a bunch of node modules present. Some are for Unsurprisingly, there's a bunch of node modules present. Some are for interacting
interacting with databases, cryptography, and system information gathering. with databases, cryptography, and system information gathering.
</p> </p>
<p> <p>
One thing that peaks my interest is a bit of metadata on the One thing that peaks my interest is a bit of metadata on the
<code>package.json</code>: <code>package.json</code>:
</p> </p>
<pre><code class="language-plaintext">Copyright : Genesis © 2025 <pre><code class="language-plaintext">Copyright : Genesis © 2025
</code></pre> </code></pre>
<p> <p>
Everything up until now has been crediting the copyright holder as Everything up until now has been crediting the copyright holder as
<code>Racing_Sim</code>. <code>Racing_Sim</code>.
</p> </p>
<h4>Who Art Thou, Genesis?</h4> <h4>Who Art Thou, Genesis?</h4>
<p>Unsurprisingly, Genesis is a fairly generic name.</p> <p>Unsurprisingly, Genesis is a fairly generic name.</p>
<p> <p>
But, narrowing the search to &quot;Copyright Genesis 2025 nodejs&quot; But, narrowing the search to &quot;Copyright Genesis 2025 nodejs&quot; brings up a
brings up a TrendMicro report from November 22, 2023. TrendMicro report from November 22, 2023.
<a <a
href="https://www.trendmicro.com/en_us/research/23/k/attack-signals-possible-return-of-genesis-market.html" href="https://www.trendmicro.com/en_us/research/23/k/attack-signals-possible-return-of-genesis-market.html"
>https://www.trendmicro.com/en_us/research/23/k/attack-signals-possible-return-of-genesis-market.html</a >https://www.trendmicro.com/en_us/research/23/k/attack-signals-possible-return-of-genesis-market.html</a
> >
</p> </p>
<p> <p>
But the modus operandi of the Genesis Market was very different, and there's But the modus operandi of the Genesis Market was very different, and there's been no
been no news about it since 2023 and parts of 2024. All the dates I've found news about it since 2023 and parts of 2024. All the dates I've found are 2026, and
are 2026, and now 2025. now 2025.
</p> </p>
<p> <p>
Trying a cryptocurrency route, there's Genesis Global Capital, a company Trying a cryptocurrency route, there's Genesis Global Capital, a company that went
that went bankrupt in January of 2023. bankrupt in January of 2023.
<a <a
href="https://www.bankingdive.com/news/genesis-crypto-completes-restructuring-begins-payouts/723330/" href="https://www.bankingdive.com/news/genesis-crypto-completes-restructuring-begins-payouts/723330/"
>https://www.bankingdive.com/news/genesis-crypto-completes-restructuring-begins-payouts/723330/</a >https://www.bankingdive.com/news/genesis-crypto-completes-restructuring-begins-payouts/723330/</a
> >
</p> </p>
<p> <p>
There's also <code>genesiscrypto.org</code> which has a rather plain site, There's also <code>genesiscrypto.org</code> which has a rather plain site, and no
and no upcoming events. The blog is a bit more interesting, screaming upcoming events. The blog is a bit more interesting, screaming &quot;I'm a get rich
&quot;I'm a get rich quick scam&quot;. The last post was quick scam&quot;. The last post was &quot;12/18/24&quot;, so it's clearly American.
&quot;12/18/24&quot;, so it's clearly American. </p>
</p> <p>
<p> There's also genesiscoin, but I'm getting tired of reading about crypto, and
There's also genesiscoin, but I'm getting tired of reading about crypto, and otherwise getting nowhere from this line of inquiry.
otherwise getting nowhere from this line of inquiry. </p>
</p> <p>
<p> If you're going to be a hacker group, at least pick something that you can actually
If you're going to be a hacker group, at least pick something that you can be recognized with. Pick a more distinct name.
actually be recognized with. Pick a more distinct name. </p>
</p> <p>
<p> For example, if you're going to pick the brand of your father's brother's nephew's
For example, if you're going to pick the brand of your father's brother's cousin's former roommate's car, at least slap a dollar sign on the end! Something!
nephew's cousin's former roommate's car, at least slap a dollar sign on the </p>
end! Something! <h3>Deobfuscating the Payload</h3>
</p> <p>Oh... lovely.</p>
<h3>Deobfuscating the Payload</h3> <img
<p>Oh... lovely.</p> src="/img/blog/posts/6_hack_racing_cff_script.webp"
<img alt="A wall of obfuscated JavaScript."
src="/img/blog/posts/6_hack_racing_cff_script.webp" />
alt="A wall of obfuscated JavaScript." <p>
/> Tossing the script into
<p> <a href="https://deobfuscate.io">deobfuscate.io</a> makes the linter happy, but not
Tossing the script into much more.
<a href="https://deobfuscate.io">deobfuscate.io</a> makes the linter happy, </p>
but not much more. <p>
</p> All content is minified, substituted against a central table (<code>Ysa8NnK</code>
<p> in this version of the trojan), and control flow flattened, with opaque steps and
All content is minified, substituted against a central table (<code dead clones seemingly present.
>Ysa8NnK</code </p>
> <p>
in this version of the trojan), and control flow flattened, with opaque One of the strings in the script is plain base64 encoded,
steps and dead clones seemingly present. <code
</p> >&quot;bmV3IEZ1bmN0aW9uKCJyZXF1aXJlIiwgZGVjcnlwdGVkKShyZXF1aXJlKTs=&quot;</code
<p> >
One of the strings in the script is plain base64 encoded, which comes out to:
<code </p>
>&quot;bmV3IEZ1bmN0aW9uKCJyZXF1aXJlIiwgZGVjcnlwdGVkKShyZXF1aXJlKTs=&quot;</code <pre><code class="language-javascript">new Function(&quot;require&quot;, decrypted)(require);
>
which comes out to:
</p>
<pre><code class="language-javascript">new Function(&quot;require&quot;, decrypted)(require);
</code></pre> </code></pre>
<img <img
src="/img/blog/posts/6_hack_racing_encryption_list.webp" src="/img/blog/posts/6_hack_racing_encryption_list.webp"
alt="Source code of a list containing the four strings as elaborated upon below." alt="Source code of a list containing the four strings as elaborated upon below."
/> />
<p> <p>
Also, there's a <em>very</em> long encrypted string sitting in an array with Also, there's a <em>very</em> long encrypted string sitting in an array with what
what appears to be two base64-encoded strings and one that's a neat 32 appears to be two base64-encoded strings and one that's a neat 32 characters long.
characters long. </p>
</p> <p>
<p> Trying to skip around the control flow flattening, I look for the decryption call.
Trying to skip around the control flow flattening, I look for the decryption Searching around, I locate the following string:
call. Searching around, I locate the following string: </p>
</p> <p><code>aes-256-cbc</code></p>
<p><code>aes-256-cbc</code></p> <p>This ought to be fun.</p>
<p>This ought to be fun.</p> <h3>Breaking Into the Walled Garden</h3>
<h3>Breaking Into the Walled Garden</h3> <p>Decryption is handled through the internal <code>crypto</code> module.</p>
<p>Decryption is handled through the internal <code>crypto</code> module.</p> <p>
<p> Working back the components of the AES decryption call finds that the initialization
Working back the components of the AES decryption call finds that the vector is a simple <code>Buffer</code> from base64.
initialization vector is a simple <code>Buffer</code> from base64. </p>
</p> <pre><code class="language-javascript">// This has some undone substitution.
<pre><code class="language-javascript">// This has some undone substitution.
xK7i7T.crypto.pbkdf2Sync( xK7i7T.crypto.pbkdf2Sync(
w4Matvo, w4Matvo,
(1, xK7Canadiani7T.bHHea4)(&quot;GJOvrnu&quot;).from( (1, xK7Canadiani7T.bHHea4)(&quot;GJOvrnu&quot;).from(
@@ -333,79 +322,76 @@
&quot;sha512&quot;, &quot;sha512&quot;,
); );
</code></pre> </code></pre>
<p> <p>
The key decryption (shown above) isn't quite so simple. It's mangled with The key decryption (shown above) isn't quite so simple. It's mangled with
<code>pbkdf2</code> (Password-Based Key Derivation Function 2; I had to <code>pbkdf2</code> (Password-Based Key Derivation Function 2; I had to double check
double check I hadn't messed up a substitution on that method call...) and I hadn't messed up a substitution on that method call...) and integrating a value
integrating a value calculated through all of the control flow flattening. calculated through all of the control flow flattening.
</p> </p>
<p>Brute forcing that value is easy as:</p> <p>Brute forcing that value is easy as:</p>
<ul> <ul>
<li>All numbers in the script are integers.</li> <li>All numbers in the script are integers.</li>
<li> <li>
Value must be in the range of 0 - 244XX (I forget as of writing; check Value must be in the range of 0 - 244XX (I forget as of writing; check the docs)
the docs) </li>
</li> <li>Cannot be less than 157.</li>
<li>Cannot be less than 157.</li> </ul>
</ul> <p>
<p> The list containing the keys, initialization vector, and encrypted data is unpacked
The list containing the keys, initialization vector, and encrypted data is all at once. However, it is also dastardly obfuscated with ROT1.
unpacked all at once. However, it is also dastardly obfuscated with ROT1. </p>
</p> <p>
<p> Yes, in all 14,000 or so lines of code, they rotated the list entries
Yes, in all 14,000 or so lines of code, they rotated the list entries <em>once</em>.
<em>once</em>. </p>
</p> <p>And with a simple adaptation of the call, I can brute-force the integer:</p>
<p>And with a simple adaptation of the call, I can brute-force the integer:</p> <pre><code class="language-javascript">const { createDecipheriv, pbkdf2Sync } = require(&quot;crypto&quot;);
<pre><code class="language-javascript">const { createDecipheriv, pbkdf2Sync } = require(&quot;crypto&quot;); const { exit } = require(&quot;process&quot;);
const { exit } = require(&quot;process&quot;);
const algorithm = &quot;aes-256-cbc&quot;; const algorithm = &quot;aes-256-cbc&quot;;
const inputEncoding = &quot;base64&quot;; const inputEncoding = &quot;base64&quot;;
const outputEncoding = &quot;utf8&quot;; const outputEncoding = &quot;utf8&quot;;
const [keyRoot, base64KeyRoot, base64IvRoot, dataRoot] = [ const [keyRoot, base64KeyRoot, base64IvRoot, dataRoot] = [
&quot;Gcp/3fAC2AjoejyfB73T1xckjDWmMKA4&quot;, &quot;Gcp/3fAC2AjoejyfB73T1xckjDWmMKA4&quot;,
&quot;bx3omGLfT2FpBrmpQ3vGQg==&quot;, &quot;bx3omGLfT2FpBrmpQ3vGQg==&quot;,
&quot;emZUVlGzS6tC6XAxZ3qQsg==&quot;, &quot;emZUVlGzS6tC6XAxZ3qQsg==&quot;,
&quot;Encrypted data string here&quot; &quot;Encrypted data string here&quot;
]; ];
const iv = Buffer.from(base64IvRoot, inputEncoding); const iv = Buffer.from(base64IvRoot, inputEncoding);
function decrypt(c) { function decrypt(c) {
var key = pbkdf2Sync( var key = pbkdf2Sync(
keyRoot, keyRoot,
Buffer.from(base64KeyRoot, inputEncoding), Buffer.from(base64KeyRoot, inputEncoding),
1e5, 1e5,
c - 157, c - 157,
&quot;sha512&quot;, &quot;sha512&quot;,
); );
var decipheriv = createDecipheriv(algorithm, key, iv); var decipheriv = createDecipheriv(algorithm, key, iv);
data = decipheriv.update(dataRoot, inputEncoding, outputEncoding); data = decipheriv.update(dataRoot, inputEncoding, outputEncoding);
data += decipheriv.final(outputEncoding); data += decipheriv.final(outputEncoding);
return data; return data;
} }
for (c = 158; c &lt; Number.MAX_SAFE_INTEGER; c++) { for (c = 158; c &lt; Number.MAX_SAFE_INTEGER; c++) {
try { try {
console.log(decrypt(c)); console.log(decrypt(c));
exit(); exit();
} catch (_) {} } catch (_) {}
} }
</code></pre> </code></pre>
<p>And we're in.</p> <p>And we're in.</p>
</div>
</div>
<include src="includes/tailer.html" />
</main> </main>
<div class="pane spacer"> <include src="includes/tailer.html" />
<ul class="pane spacer">
<include src="./includes/blog_recent_posts.html" /> <include src="./includes/blog_recent_posts.html" />
<div class="spacer_container"><p>#AD</p></div> <li class="spacer_container">#AD</li>
</div> </ul>
<include src="includes/footer.html" /> <include src="includes/footer.html" />
<include src="includes/scripts.html" /> <include src="includes/scripts.html" />
</body> </body>
+204 -262
View File
@@ -10,284 +10,226 @@
<include src="includes/nav_header.html" /> <include src="includes/nav_header.html" />
<include src="includes/nav_menu.html" /> <include src="includes/nav_menu.html" />
<div class="location"> <div class="location">
<header><h4>You are here:</h4></header> <p class="title">You are here:</p>
<h5 class="page">Disclosure</h5> <p class="page">Disclosure</p>
</div> </div>
<include src="includes/nav_quick_links.html" /> <include src="includes/nav_quick_links.html" />
</nav> </nav>
<main class="pane"> <main class="pane">
<div class="body"> <header>
<header> <h1 class="title">Disclosure</h1>
<h1 class="title">Disclosure</h1> <p class="date">Last Edited: 01 August, 2025</p>
<p class="date">Last Edited: 01 August, 2025</p> </header>
</header> <div class="layout_row">
<div class="body"> <div class="item">
<div class="layout_row"> <h2 class="title">Website Security</h2>
<div class="item"> <p>
<h2 class="title">Website Security</h2> This website uses a number of security features, most of which are built
into your browser, to protect my and your:
</p>
<ul>
<li>Infrastructure</li>
<li>Data, and</li>
<li>Experience</li>
</ul>
<p>You can see some of the main methods that this website uses below:</p>
<div class="section_list">
<section>
<header>
<p class="name">Anubis</p>
<p class="subtitle">AI Scraper Screening Utility</p>
</header>
<p> <p>
This website uses a number of security features, most of which are This website is protected by a screening utility known as
built into your browser, to protect my and your: <a href="https://anubis.techaro.lol/"><cite>Anubis</cite></a
>. You may also have heard of this program as
<cite>BotStopper</cite> for those who purchase a commercial license
because they somehow can't live with a cute anime girl showing up on
their websites. UNESCO notably don't have a problem with that, and
proudly present an anime girl as of writing this.
</p>
<p>
I do not have a commercial license and do not pay in any way for
Anubis. If I had money to spare, I would actively fund the project.
</p>
<p>
Despite what some fools at the FSF figure, Anubis IS NOT malware.
See:
<a href="https://www.youtube.com/watch?v=YisGpdPjYM8"
><cite>I Platformed A Linux "Cyber Criminal"</cite></a
>. It does have <em>similar</em> behaviour due to its proof-of-work
scheme, which asks your browser to run a throwaway calculation in an
effort to block or dissuade AI scrapers. Many, if not nearly all
clients, are subject to screening based on various filters around
your browser's user agent string.
</p>
<p>
Additionally, if you have concerns about the legality of my use of
Anubis, please see
<a href="https://github.com/TecharoHQ/anubis/issues/50"
>Anubis Issue #50</a
>
where concerns were looked into.
</p>
<p>
Now, if you have a moral issue with this project, you may do one of
two things (because adjusting your UA will just make me block the
UA, or add a complete catch-all rule):
</p>
<ol>
<li>Don't allow JavaScript to run. (Have fun making this work)</li>
<li>Just don't use my website.</li>
</ol>
<p>
If you experience issues with Anubis blocking you, which presumably
hasn't happened on your way to this page, you can email me with
details. DO NOT bother the main project as it may be an issue with a
screening rule that I've invoked.
</p>
<p>
If you do wish to raise an issue with the Anubis dev(s), PLEASE DO
NOT DO SOMETHING LIKE THIS:
</p> </p>
<ul> <ul>
<li>Infrastructure</li> <li>
<li>Data, and</li> <a href="https://github.com/TecharoHQ/anubis/issues/113"
<li>Experience</li> >Anubis Issue #113</a
>
</li>
<li>
<a href="https://github.com/TecharoHQ/anubis/discussions/114"
>Anubis Discussion #114</a
>
</li>
<li>
<a href="https://github.com/TecharoHQ/anubis/discussions/117"
>Anubis Discussion #117</a
>
</li>
</ul> </ul>
</section>
<section>
<header>
<h3 class="name">Content Security Policy (CSP)</h3>
</header>
<p> <p>
You can see some of the main methods that this website uses below: This website, unlike a scary number of sites (including google.com
</p> and microsoft.com as of writing) has a CSP configured. This helps
<div class="section_list"> prevent or mitigate a number of possible attacks including
<section> cross-site scripting and clickjacking.
<header>
<div>
<h3 class="name">Anubis</h3>
<span class="subtitle"
>AI Scraper Screening Utility</span
>
</div>
</header>
<div class="body">
<p>
This website is protected by a screening utility known
as
<a href="https://anubis.techaro.lol/"
><cite>Anubis</cite></a
>. You may also have heard of this program as
<cite>BotStopper</cite> for those who purchase a
commercial license because they somehow can't live with
a cute anime girl showing up on their websites. UNESCO
notably don't have a problem with that, and proudly
present an anime girl as of writing this.
</p>
<p>
I do not have a commercial license and do not pay in any
way for Anubis. If I had money to spare, I would
actively fund the project.
</p>
<p>
Despite what some fools at the FSF figure, Anubis IS NOT
malware. See:
<a href="https://www.youtube.com/watch?v=YisGpdPjYM8"
><cite
>I Platformed A Linux "Cyber Criminal"</cite
></a
>. It does have <em>similar</em> behaviour due to its
proof-of-work scheme, which asks your browser to run a
throwaway calculation in an effort to block or dissuade
AI scrapers. Many, if not nearly all clients, are
subject to screening based on various filters around
your browser's user agent string.
</p>
<p>
Additionally, if you have concerns about the legality of
my use of Anubis, please see
<a href="https://github.com/TecharoHQ/anubis/issues/50"
>Anubis Issue #50</a
>
where concerns were looked into.
</p>
<p>
Now, if you have a moral issue with this project, you
may do one of two things (because adjusting your UA will
just make me block the UA, or add a complete catch-all
rule):
</p>
<ol>
<li>
Don't allow JavaScript to run. (Have fun making this
work)
</li>
<li>Just don't use my website.</li>
</ol>
<p>
If you experience issues with Anubis blocking you, which
presumably hasn't happened on your way to this page, you
can email me with details. DO NOT bother the main
project as it may be an issue with a screening rule that
I've invoked.
</p>
<p>
If you do wish to raise an issue with the Anubis dev(s),
PLEASE DO NOT DO SOMETHING LIKE THIS:
</p>
<ul>
<li>
<a
href="https://github.com/TecharoHQ/anubis/issues/113"
>Anubis Issue #113</a
>
</li>
<li>
<a
href="https://github.com/TecharoHQ/anubis/discussions/114"
>Anubis Discussion #114</a
>
</li>
<li>
<a
href="https://github.com/TecharoHQ/anubis/discussions/117"
>Anubis Discussion #117</a
>
</li>
</ul>
</div>
</section>
<section>
<header>
<div>
<h3 class="name">Content Security Policy (CSP)</h3>
</div>
</header>
<div class="body">
<p>
This website, unlike a scary number of sites (including
google.com and microsoft.com as of writing) has a CSP
configured. This helps prevent or mitigate a number of
possible attacks including cross-site scripting and
clickjacking.
</p>
<p>
Further Reading:
<a
href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Guides/CSP"
>https://developer.mozilla.org/en-US/docs/Web/HTTP/Guides/CSP</a
>
</p>
</div>
</section>
<section>
<header>
<div>
<h3 class="name">
HTTP Strict Transport Security (HSTS)
</h3>
</div>
</header>
<div class="body">
<p>
This website has a HSTS policy which indicates to your
browser to use a secure connection when connecting.
</p>
<p>
Additionally, the server will force redirect ALL
connections over to HTTPS for any browsers which do not
use this header or have a HTTPS-only mode enabled.
</p>
<p>
Further Reading:
<a
href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Strict-Transport-Security"
>https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Strict-Transport-Security</a
>
</p>
</div>
</section>
<section>
<header>
<div>
<h3 class="name">Other Security Headers</h3>
</div>
</header>
<div class="body">
<p>Some include:</p>
<ul>
<li>X-Content-Type-Options</li>
<li>X-Frame-Options</li>
<li>X-XSS-Protection</li>
<li>Permissions-Policy</li>
<li>Referrer-Policy</li>
</ul>
</div>
</section>
<section>
<header>
<div>
<h3 class="name">Security.txt</h3>
</div>
</header>
<div class="body">
<p>
This file offers information to security researchers to
silently report any issues they find so that I can
resolve them.
</p>
</div>
</section>
</div>
</div>
<div class="item">
<h2 class="title">Cookies</h2>
<p>
This website only leaves cookies that are required for the website's
functioning. I do not place any trackers on your system.
</p> </p>
<p> <p>
Note: I cannot say what cookies may be left by services that I host Further Reading:
(such as Gitea and Web Check). For more details, please see those <a
projects' documentation. href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Guides/CSP"
>https://developer.mozilla.org/en-US/docs/Web/HTTP/Guides/CSP</a
>
</p> </p>
<p>You can see all cookies that this website uses below:</p> </section>
<div class="section_list"> <section>
<section> <header>
<header> <h3 class="name">HTTP Strict Transport Security (HSTS)</h3>
<div> </header>
<h3 class="name">Anubis</h3> <p>
<span class="subtitle" This website has a HSTS policy which indicates to your browser to
>AI Scraper Screening Utility</span use a secure connection when connecting.
> </p>
</div> <p>
</header> Additionally, the server will force redirect ALL connections over to
<div class="body"> HTTPS for any browsers which do not use this header or have a
<p> HTTPS-only mode enabled.
This website does utilize a cookie. This cookie is made </p>
by Anubis to keep your system from having to pass the <p>
proof-of-work check every time you request a resource Further Reading:
from this site. <a
</p> href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Strict-Transport-Security"
<p> >https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Strict-Transport-Security</a
THEORETICALLY, this cookie, as with any JavaScript >
cookie, </p>
<em>can</em> be used to track you. </section>
</p> <section>
<p> <header>
HOWEVER, I do not use it for tracking, Anubis does not <h3 class="name">Other Security Headers</h3>
use it for tracking, and there is no evidence that 3rd </header>
parties are abusing the cookie. There are far more <p>Some include:</p>
attractive targets. <ul>
</p> <li>X-Content-Type-Options</li>
<p> <li>X-Frame-Options</li>
IF this becomes an issue, until the lead developer(s) <li>X-XSS-Protection</li>
and/or community can find a solution, Anubis will be <li>Permissions-Policy</li>
reconfigured to send out challenges even more <li>Referrer-Policy</li>
frequently, and an advisory notice to wipe your browser </ul>
cookies at the end of your session will be made. </section>
</p> <section>
<p> <header>
Under the current configuration, Anubis' cookies are <h3 class="name">Security.txt</h3>
valid for 24h. This does not mean that the cookie is </header>
necessarily gone from your system. <p>
</p> This file offers information to security researchers to silently
<p> report any issues they find so that I can resolve them.
<a href="https://github.com/TecharoHQ/anubis/issues/50" </p>
>Anubis Issue #50</a </section>
> </div>
briefly looked into the possibility of abuse via the </div>
cookie. <div class="item">
</p> <h2 class="title">Cookies</h2>
</div> <p>
</section> This website only leaves cookies that are required for the website's
</div> functioning. I do not place any trackers on your system.
</div> </p>
<p>
Note: I cannot say what cookies may be left by services that I host (such as
Gitea and Web Check). For more details, please see those projects'
documentation.
</p>
<p>You can see all cookies that this website uses below:</p>
<div class="section_list">
<section>
<header>
<h3 class="name">Anubis</h3>
<p class="subtitle">AI Scraper Screening Utility</p>
</header>
<p>
This website does utilize a cookie. This cookie is made by Anubis to
keep your system from having to pass the proof-of-work check every
time you request a resource from this site.
</p>
<p>
THEORETICALLY, this cookie, as with any JavaScript cookie,
<em>can</em> be used to track you.
</p>
<p>
HOWEVER, I do not use it for tracking, Anubis does not use it for
tracking, and there is no evidence that 3rd parties are abusing the
cookie. There are far more attractive targets.
</p>
<p>
IF this becomes an issue, until the lead developer(s) and/or
community can find a solution, Anubis will be reconfigured to send
out challenges even more frequently, and an advisory notice to wipe
your browser cookies at the end of your session will be made.
</p>
<p>
Under the current configuration, Anubis' cookies are valid for 24h.
This does not mean that the cookie is necessarily gone from your
system.
</p>
<p>
<a href="https://github.com/TecharoHQ/anubis/issues/50"
>Anubis Issue #50</a
>
briefly looked into the possibility of abuse via the cookie.
</p>
</section>
</div> </div>
</div> </div>
</div> </div>
<include src="includes/tailer.html" />
</main> </main>
<div class="pane spacer"> <include src="includes/tailer.html" />
<div class="spacer_container"><p>#AD</p></div> <ul class="pane spacer">
<div class="spacer_container"><p>#AD</p></div> <li class="spacer_container">#AD</li>
</div> <li class="spacer_container">#AD</li>
</ul>
<include src="includes/footer.html" /> <include src="includes/footer.html" />
<include src="includes/scripts.html" /> <include src="includes/scripts.html" />
</body> </body>
+21 -25
View File
@@ -10,36 +10,32 @@
<include src="includes/nav_header.html" /> <include src="includes/nav_header.html" />
<include src="includes/nav_menu.html" /> <include src="includes/nav_menu.html" />
<div class="location"> <div class="location">
<header><h4>You are here:</h4></header> <p class="title">You are here:</p>
<h5 class="page">Home</h5> <p class="page">Home</p>
</div> </div>
<include src="includes/nav_quick_links.html" /> <include src="includes/nav_quick_links.html" />
</nav> </nav>
<main class="pane"> <main class="pane">
<div class="body"> <header>
<header> <h1 class="title">Home</h1>
<h1 class="title">Home</h1> <p class="date">Last Edited: 03 August, 2025</p>
<p class="date">Last Edited: 03 August, 2025</p> </header>
</header> <p>People, this is under development. Live with the lorem ipsum.</p>
<div class="body"> <p>lorem ipsum idk what else there is in this latin phrase</p>
<p>People, this is under development. Live with the lorem ipsum.</p> <p>
<p>lorem ipsum idk what else there is in this latin phrase</p> Lorem ipsum dolor sit amet consectetur adipiscing elit. Quisque faucibus ex sapien
<p> vitae pellentesque sem placerat. In id cursus mi pretium tellus duis convallis.
Lorem ipsum dolor sit amet consectetur adipiscing elit. Quisque faucibus ex Tempus leo eu aenean sed diam urna tempor. Pulvinar vivamus fringilla lacus nec
sapien vitae pellentesque sem placerat. In id cursus mi pretium tellus duis metus bibendum egestas. Iaculis massa nisl malesuada lacinia integer nunc posuere.
convallis. Tempus leo eu aenean sed diam urna tempor. Pulvinar vivamus Ut hendrerit semper vel class aptent taciti sociosqu. Ad litora torquent per conubia
fringilla lacus nec metus bibendum egestas. Iaculis massa nisl malesuada nostra inceptos himenaeos.
lacinia integer nunc posuere. Ut hendrerit semper vel class aptent taciti </p>
sociosqu. Ad litora torquent per conubia nostra inceptos himenaeos.
</p>
</div>
</div>
<include src="includes/tailer.html" />
</main> </main>
<div class="pane spacer"> <include src="includes/tailer.html" />
<div class="spacer_container"><p>#AD</p></div> <ul class="pane spacer">
<div class="spacer_container"><p>#AD</p></div> <li class="spacer_container">#AD</li>
</div> <li class="spacer_container">#AD</li>
</ul>
<include src="includes/footer.html" /> <include src="includes/footer.html" />
<include src="includes/scripts.html" /> <include src="includes/scripts.html" />
</body> </body>
+382 -454
View File
@@ -11,452 +11,390 @@
<include src="includes/nav_header.html" /> <include src="includes/nav_header.html" />
<include src="includes/nav_menu.html" /> <include src="includes/nav_menu.html" />
<div class="location"> <div class="location">
<header><h4>You are here:</h4></header> <p class="title">You are here:</p>
<h5 class="page">Resume</h5> <p class="page">Resume</p>
</div> </div>
<include src="includes/nav_quick_links.html" /> <include src="includes/nav_quick_links.html" />
</nav> </nav>
<main class="pane"> <main class="pane">
<div class="body"> <header>
<header> <h1 class="title">Olivia Brooks</h1>
<h1 class="title">Olivia Brooks</h1> <p class="date">Last Edited: 21 February, 2026</p>
<p class="date">Last Edited: 21 February, 2026</p> </header>
</header> <div class="about_me">
<div class="body"> <p>
<div class="about_me"> Hello, I'm Olivia Brooks. I am a passionate, hard-working, and dependable
<p> individual with an innate interest in sharing and expanding my knowledge and
Hello, I'm Olivia Brooks. I am a passionate, hard-working, and expertise.
dependable individual with an innate interest in sharing and expanding </p>
my knowledge and expertise. <p>
</p> For the better part of a decade, I've specced, built, identified and removed
<p> bottlenecks, and breathed new life into both desktops and laptops. I have
For the better part of a decade, I've specced, built, identified and experience with all major operating systems including Linux (which I've
removed bottlenecks, and breathed new life into both desktops and daily-driven for 5 years), Windows, MacOS, Android, and iOS.
laptops. I have experience with all major operating systems including </p>
Linux (which I've daily-driven for 5 years), Windows, MacOS, Android, <p>
and iOS. Over the years, my technical skills have branched to 3D printing, CNC machining,
</p> basic CAD modelling, programming, and homelabbing. These interests have garnered
<p> me experience with hardware and software from a variety of vendors,
Over the years, my technical skills have branched to 3D printing, CNC architectures, and ecosystems, big and niche.
machining, basic CAD modelling, programming, and homelabbing. These </p>
interests have garnered me experience with hardware and software from a <p>
variety of vendors, architectures, and ecosystems, big and niche. I have extensive experience in both leadership and non-leadership positions
</p> across a variety of contexts. This has allowed me to develop a wide range of
<p> skills which I draw upon daily to rapidly develop new understandings. This
I have extensive experience in both leadership and non-leadership additionally gives me the capacity to interact and excel in unfamiliar
positions across a variety of contexts. This has allowed me to develop a situations and novel endeavours.
wide range of skills which I draw upon daily to rapidly develop new </p>
understandings. This additionally gives me the capacity to interact and <p>
excel in unfamiliar situations and novel endeavours. I am always willing to lend a hand where I can, no matter the learning curve
</p> ahead.
<p> </p>
I am always willing to lend a hand where I can, no matter the learning <p>
curve ahead. I sincerely appreciate your consideration of me as a candidate, and look forward
</p> to hearing from you.
<p> </p>
I sincerely appreciate your consideration of me as a candidate, and look </div>
forward to hearing from you. <!--
</p>
</div>
<!--
Add a table of contents?... or just one disguised as a few shortcuts. Add a table of contents?... or just one disguised as a few shortcuts.
Also make this look less long by making chunks into dropdowns. Also make this look less long by making chunks into dropdowns.
--> -->
<div class="layout_row"> <div class="layout_row">
<div class="item work_history"> <div class="item work_history">
<h2 class="title">Work History</h2> <h2 class="title">Work History</h2>
<div class="section_list"> <div class="section_list">
<section> <section>
<header> <header>
<div> <p class="name">OTHS Tech Crew</p>
<h3 class="name">OTHS Tech Crew</h3> <p class="subtitle">September 2024 - June 2025</p>
<span class="subtitle">September 2024 - June 2025</span> </header>
</div> <p>Project Manager</p>
</header> <ul>
<div class="body"> <li>First year that the crew was entirely student-led.</li>
<p>Project Manager</p> <li>Identified project scope and requirements.</li>
<ul> <li>Ensured timely completion of tasks.</li>
<li> <li>Coordinated crew setup and take-down efforts.</li>
First year that the crew was entirely student-led. <li>
</li> Effectively worked around live program changes and weather
<li>Identified project scope and requirements.</li> patterns.
<li>Ensured timely completion of tasks.</li> </li>
<li>Coordinated crew setup and take-down efforts.</li> <li>Additionally handled equipment maintenance.</li>
<li> <li>Acted as administrative liaison.</li>
Effectively worked around live program changes and </ul>
weather patterns. </section>
</li> <section>
<li>Additionally handled equipment maintenance.</li> <header>
<li>Acted as administrative liaison.</li> <p class="name">Farmers' Market</p>
</ul> <p class="subtitle">Wee Youngn' - 2020, Summer 2023</p>
</div> </header>
</section> <p>Volunteer - Various Roles</p>
<section> <ul>
<header> <li>
<div> Started as a young child attracting customers to a fudge stall
<h3 class="name">Farmers' Market</h3> by looking cute with divine, glorious red hair.
<span class="subtitle" </li>
>Wee Youngn' - 2020, Summer 2023</span <li>Handled the sale of goods.</li>
> <li>Handled the preparation of farm-grown goods.</li>
</div> <li>Stocked the displays.</li>
</header> <li>Ran the Kids' Corner activities. (Summer 2023)</li>
<div class="body"> </ul>
<p>Volunteer - Various Roles</p> </section>
<ul> <section>
<li> <header>
Started as a young child attracting customers to a <p class="name">MPS Audio-Visual Club</p>
fudge stall by looking cute with divine, glorious <p class="subtitle">September 2018 - 2020</p>
red hair. </header>
</li> <p>Supervisor</p>
<li>Handled the sale of goods.</li> <ul>
<li>Handled the preparation of farm-grown goods.</li> <li>Identified project scope and requirements.</li>
<li>Stocked the displays.</li> <li>Ensured timely completion of tasks.</li>
<li>Ran the Kids' Corner activities. (Summer 2023)</li> <li>Coordinated crew setup and take-down efforts.</li>
</ul> </ul>
</div> </section>
</section>
<section>
<header>
<div>
<h3 class="name">MPS Audio-Visual Club</h3>
<span class="subtitle">September 2018 - 2020</span>
</div>
</header>
<div class="body">
<p>Supervisor</p>
<ul>
<li>Identified project scope and requirements.</li>
<li>Ensured timely completion of tasks.</li>
<li>Coordinated crew setup and take-down efforts.</li>
</ul>
</div>
</section>
</div>
</div>
<!-- Education -->
<div class="item education">
<h2 class="title">Education</h2>
<div class="section_list">
<section>
<header>
<div>
<h3 class="name">Carleton University</h3>
<span class="subtitle"
>September 2025 to Present - Ottawa, ON</span
>
</div>
<h3 class="status">IN PROGRESS</h3>
</header>
<div class="body">
<p>Bachelor of Arts (Honours)</p>
<ul>
<li>Major in Psychology</li>
<li>[Intended] Minor in Computer Science</li>
<li>Concentration in Social/Personality Psychology</li>
</ul>
</div>
</section>
<section>
<header>
<div>
<h3 class="name">Osgoode Township High School</h3>
<span class="subtitle"
>September 2021 to 2025 - Ottawa, ON</span
>
</div>
</header>
<div class="body">
<p>Gr. 9 to 12</p>
<ul>
<li>French Immersion Studies</li>
</ul>
</div>
</section>
<section>
<header>
<div>
<h3 class="name">Air Cadets, Squadron 742</h3>
<span class="subtitle"
>November 2019 to September 2022 - Ottawa, ON</span
>
</div>
</header>
<div class="body">
<p>Sergeant</p>
<ul>
<li>Drone Pilot Training Course (August 2022)</li>
<li>Cadet Actitivy Program (August 2022)</li>
<li>Poppy Drive (November 2021)</li>
<li>Music (June - July 2021)</li>
<li>Music (March 2021)</li>
<li>Music (August 2020)</li>
<li>Web Programming (April 2020)</li>
<li>Advanced Cybertraining Course (August 2020)</li>
<li>
Cadet Band Member (September 2020 - February 2022)
</li>
</ul>
</div>
</section>
<h3 class="early_history">Earlier history available by request.</h3>
</div>
</div>
</div> </div>
<div class="layout_row"> </div>
<!-- Awards --> <!-- Education -->
<div class="item awards"> <div class="item education">
<h2 class="title">Awards</h2> <h2 class="title">Education</h2>
<div class="section_list"> <div class="section_list">
<section> <section>
<header> <header>
<div> <p class="name">Carleton University</p>
<h3 class="name">Ontario Scholar</h3> <p class="subtitle">September 2025 to Present - Ottawa, ON</p>
<span class="subtitle" <p class="status">IN PROGRESS</p>
>Obtained an average of at least eighty percent in </header>
any six applicable Grade 12 courses.</span <p>Bachelor of Arts (Honours)</p>
> <ul>
</div> <li>Major in Psychology</li>
</header> <li>[Intended] Minor in Computer Science</li>
</section> <li>Concentration in Social/Personality Psychology</li>
<section> </ul>
<header> </section>
<div> <section>
<h3 class="name">Silver Medalist</h3> <header>
<span class="subtitle">Average over 90%</span> <p class="name">Osgoode Township High School</p>
</div> <p class="subtitle">September 2021 to 2025 - Ottawa, ON</p>
<h3 class="status">x2</h3> </header>
</header> <p>Gr. 9 to 12</p>
</section> <ul>
<section> <li>French Immersion Studies</li>
<header> </ul>
<div> </section>
<h3 class="name">CyberSci Regional Winner</h3> <section>
<span class="subtitle" <header>
>The Off-By-Ones - Ottawa, 2025</span <p class="name">Air Cadets, Squadron 742</p>
> <p class="subtitle">November 2019 to September 2022 - Ottawa, ON</p>
</div> </header>
</header> <p>Sergeant</p>
</section> <ul>
<h3 class="early_history"> <li>Drone Pilot Training Course (August 2022)</li>
Queries about other awards available by request. <li>Cadet Actitivy Program (August 2022)</li>
</h3> <li>Poppy Drive (November 2021)</li>
</div> <li>Music (June - July 2021)</li>
</div> <li>Music (March 2021)</li>
<!-- Certifications --> <li>Music (August 2020)</li>
<div class="item certifications"> <li>Web Programming (April 2020)</li>
<h2 class="title">Certifications and Diplomas</h2> <li>Advanced Cybertraining Course (August 2020)</li>
<div class="section_list"> <li>Cadet Band Member (September 2020 - February 2022)</li>
<section> </ul>
<header> </section>
<h3 class="name">Ontario Secondary School Diploma</h3> <p class="early_history">Earlier history available by request.</p>
</header>
</section>
<section>
<header>
<h3 class="name">DELF</h3>
<h3 class="status">Niveau B2</h3>
</header>
</section>
<section>
<header>
<h3 class="name">Red Cross Swimming</h3>
<h3 class="status">Level 10</h3>
</header>
</section>
<section>
<header>
<h3 class="name">Canadian Firearms Safety Course</h3>
<h3 class="status">PAL</h3>
</header>
</section>
<h3 class="early_history">
Queries about certifications available by request.
</h3>
</div>
</div>
</div> </div>
<div class="layout_row software_row"> </div>
<!-- Software and Prog. Languages --> </div>
<!-- Software --> <div class="layout_row">
<div class="item software"> <!-- Awards -->
<h2 class="title">Software</h2> <div class="item awards">
<div class="quick_links"> <h2 class="title">Awards</h2>
<div> <div class="section_list">
<ion-icon name="cube-outline" class="magenta"></ion-icon> <section>
<p>3D Printing</p> <header>
</div> <p class="name">Ontario Scholar</p>
<div> <p class="subtitle">
<ion-icon name="logo-android" class="green"></ion-icon> Obtained an average of at least eighty percent in any six
<p>Android</p> applicable Grade 12 courses.
</div> </p>
<a href="https://anubis.techaro.lol/"> </header>
<ion-icon name="globe-outline" class="green"></ion-icon> </section>
<p>Anubis</p> <section>
</a> <header>
<a href="https://www.blender.org/"> <p class="name">Silver Medalist</p>
<ion-icon name="cube-outline" class="orange"></ion-icon> <p class="subtitle">Average over 90%</p>
<p>Blender</p> <p class="status">x2</p>
</a> </header>
<div> </section>
<ion-icon <section>
name="play-skip-forward-outline" <header>
class="red r90" <p class="name">CyberSci Regional Winner</p>
></ion-icon> <p class="subtitle">The Off-By-Ones - Ottawa, 2025</p>
<p>CNC Machining</p> </header>
</div> </section>
<p class="early_history">
<a href="https://www.docker.com/"> Queries about other awards available by request.
<ion-icon name="logo-docker" class="docker"></ion-icon> </p>
<p>Docker</p> </div>
</a> </div>
<a href="https://www.gimp.org/"> <!-- Certifications -->
<ion-icon name="image-outline" class="magenta"></ion-icon> <div class="item certifications">
<p>GIMP</p> <h2 class="title">Certifications and Diplomas</h2>
</a> <div class="section_list">
<a href="https://git-scm.com/"> <section>
<ion-icon name="git-branch-outline" class="orange"></ion-icon> <header>
<p>Git</p> <p class="name">Ontario Secondary School Diploma</p>
</a> </header>
<a href="https://gitea.cutieguwu.ca"> </section>
<ion-icon name="cafe-outline" class="green"></ion-icon> <section>
<p>Gitea</p> <header>
</a> <p class="name">DELF</p>
<a href="https://github.com/Cutieguwu"> <p class="status">Niveau B2</p>
<ion-icon name="logo-github" class="blue"></ion-icon> </header>
<p>Github</p> </section>
</a> <section>
<a href="https://www.apple.com/ca/os/ios/"> <header>
<ion-icon name="logo-apple" class="white"></ion-icon> <p class="name">Red Cross Swimming</p>
<p>iOS</p> <p class="status">Level 10</p>
</a> </header>
<a href="https://www.libreoffice.org/"> </section>
<ion-icon name="document-outline" class="green"></ion-icon> <section>
<p>LibreOffice</p> <header>
</a> <p class="name">Canadian Firearms Safety Course</p>
<a href="https://www.kernel.org/category/about.html"> <p class="status">PAL</p>
<ion-icon name="logo-tux" class="white"></ion-icon> </header>
<p>Linux</p> </section>
</a> <p class="early_history">
<a href="https://www.apple.com/ca/os/macos/"> Queries about certifications available by request.
<ion-icon name="logo-apple" class="white"></ion-icon> </p>
<p>MacOS</p> </div>
</a> </div>
<a href="https://www.office.com/"> </div>
<ion-icon name="apps-outline" class="orange"></ion-icon> <div class="layout_row software_row">
<p>MS Office</p> <!-- Software and Prog. Languages -->
</a> <!-- Software -->
<a href="https://www.microsoft.com/en-ca/windows"> <div class="item software">
<ion-icon name="logo-windows" class="blue"></ion-icon> <h2 class="title">Software</h2>
<p>MS Windows</p> <div class="quick_links">
</a> <div>
<a href="https://musescore.org/en"> <ion-icon name="cube-outline" class="magenta"></ion-icon>
<ion-icon name="musical-notes" class="cyan"></ion-icon> <p>3D Printing</p>
<p>MuseScore Studio</p>
</a>
<a href="https://nextcloud.com/">
<ion-icon name="apps-outline" class="cyan"></ion-icon>
<p>Nextcloud</p>
</a>
<a href="https://nginx.org/en/">
<ion-icon name="globe-outline" class="green"></ion-icon>
<p>Nginx</p>
</a>
<a href="https://obsproject.com/">
<ion-icon name="aperture-outline" class="white"></ion-icon>
<p>OBS</p>
</a>
<a href="https://www.adobe.com/ca/products/photoshop.html">
<ion-icon name="image-outline" class="blue"></ion-icon>
<p>Photoshop</p>
</a>
<a href="https://www.prusa3d.com/page/prusaslicer_424/">
<ion-icon name="layers-outline" class="orange"></ion-icon>
<p>PrusaSlicer</p>
</a>
<a
href="https://shopbottools.com/support-resources/control-software/"
>
<ion-icon name="keypad-outline" class="blue"></ion-icon>
<p>ShopBot Control Software</p>
</a>
<a href="https://www.vectric.com/products/aspire/">
<ion-icon
name="play-skip-forward-outline"
class="red r90"
></ion-icon>
<p>Vectric Aspire</p>
</a>
<a href="https://www.zotero.org/">
<ion-icon
name="document-attach-outline"
class="orange"
></ion-icon>
<p>Zotero</p>
</a>
</div>
</div> </div>
<!-- Prog. Languages --> <div>
<div class="item prog_languages"> <ion-icon name="logo-android" class="green"></ion-icon>
<h2 class="title">Prog. Languages</h2> <p>Android</p>
<div class="quick_links">
<a href="https://asciidoc.org/">
<ion-icon name="document-text-outline" class="cyan"></ion-icon>
<p>AsciiDoc</p>
</a>
<a href="https://developer.mozilla.org/en-US/docs/Web/CSS">
<ion-icon name="logo-css3" class="purple"></ion-icon>
<p>CSS</p>
</a>
<a href="https://docs.docker.com/compose/">
<ion-icon name="logo-docker" class="docker"></ion-icon>
<p>Docker Compose</p>
</a>
<a href="https://developer.mozilla.org/en-US/docs/Web/HTML">
<ion-icon name="logo-html5" class="orange"></ion-icon>
<p>HTML</p>
</a>
<a href="https://www.json.org/json-en.html">
<ion-icon name="shapes-outline" class="cyan"></ion-icon>
<p>JSON</p>
</a>
<a href="https://www.markdownguide.org/">
<ion-icon name="logo-markdown" class="indigo"></ion-icon>
<p>Markdown</p>
</a>
<a href="https://nginx.org/en/docs/">
<ion-icon name="globe-outline" class="green"></ion-icon>
<p>Nginx</p>
</a>
<a href="https://www.python.org/">
<ion-icon name="logo-python" class="blue"></ion-icon>
<p>Python</p>
</a>
<a href="https://github.com/ron-rs/ron">
<ion-icon name="shapes-outline" class="orange"></ion-icon>
<p>RON</p>
</a>
<a href="https://www.rust-lang.org/">
<ion-icon name="cog-outline" class="orange"></ion-icon>
<p>Rust</p>
</a>
<a href="https://sass-lang.com/">
<ion-icon name="logo-sass" class="magenta"></ion-icon>
<p>SCSS</p>
</a>
<a href="https://toml.io/en/">
<ion-icon name="shapes-outline" class="orange"></ion-icon>
<p>TOML</p>
</a>
<a href="https://www.gnu.org/software/bash/manual/bash.html">
<ion-icon name="terminal-outline" class="green"></ion-icon>
<p>[Bash] Shell</p>
</a>
<a href="https://yaml.org/">
<ion-icon name="shapes-outline" class="yellow"></ion-icon>
<p>YAML</p>
</a>
</div>
</div> </div>
<a href="https://anubis.techaro.lol/">
<ion-icon name="globe-outline" class="green"></ion-icon>
<p>Anubis</p>
</a>
<a href="https://www.blender.org/">
<ion-icon name="cube-outline" class="orange"></ion-icon>
<p>Blender</p>
</a>
<div>
<ion-icon name="play-skip-forward-outline" class="red r90"></ion-icon>
<p>CNC Machining</p>
</div>
<a href="https://www.docker.com/">
<ion-icon name="logo-docker" class="docker"></ion-icon>
<p>Docker</p>
</a>
<a href="https://www.gimp.org/">
<ion-icon name="image-outline" class="magenta"></ion-icon>
<p>GIMP</p>
</a>
<a href="https://git-scm.com/">
<ion-icon name="git-branch-outline" class="orange"></ion-icon>
<p>Git</p>
</a>
<a href="https://gitea.cutieguwu.ca">
<ion-icon name="cafe-outline" class="green"></ion-icon>
<p>Gitea</p>
</a>
<a href="https://github.com/Cutieguwu">
<ion-icon name="logo-github" class="blue"></ion-icon>
<p>Github</p>
</a>
<a href="https://www.apple.com/ca/os/ios/">
<ion-icon name="logo-apple" class="white"></ion-icon>
<p>iOS</p>
</a>
<a href="https://www.libreoffice.org/">
<ion-icon name="document-outline" class="green"></ion-icon>
<p>LibreOffice</p>
</a>
<a href="https://www.kernel.org/category/about.html">
<ion-icon name="logo-tux" class="white"></ion-icon>
<p>Linux</p>
</a>
<a href="https://www.apple.com/ca/os/macos/">
<ion-icon name="logo-apple" class="white"></ion-icon>
<p>MacOS</p>
</a>
<a href="https://www.office.com/">
<ion-icon name="apps-outline" class="orange"></ion-icon>
<p>MS Office</p>
</a>
<a href="https://www.microsoft.com/en-ca/windows">
<ion-icon name="logo-windows" class="blue"></ion-icon>
<p>MS Windows</p>
</a>
<a href="https://musescore.org/en">
<ion-icon name="musical-notes" class="cyan"></ion-icon>
<p>MuseScore Studio</p>
</a>
<a href="https://nextcloud.com/">
<ion-icon name="apps-outline" class="cyan"></ion-icon>
<p>Nextcloud</p>
</a>
<a href="https://nginx.org/en/">
<ion-icon name="globe-outline" class="green"></ion-icon>
<p>Nginx</p>
</a>
<a href="https://obsproject.com/">
<ion-icon name="aperture-outline" class="white"></ion-icon>
<p>OBS</p>
</a>
<a href="https://www.adobe.com/ca/products/photoshop.html">
<ion-icon name="image-outline" class="blue"></ion-icon>
<p>Photoshop</p>
</a>
<a href="https://www.prusa3d.com/page/prusaslicer_424/">
<ion-icon name="layers-outline" class="orange"></ion-icon>
<p>PrusaSlicer</p>
</a>
<a href="https://shopbottools.com/support-resources/control-software/">
<ion-icon name="keypad-outline" class="blue"></ion-icon>
<p>ShopBot Control Software</p>
</a>
<a href="https://www.vectric.com/products/aspire/">
<ion-icon name="play-skip-forward-outline" class="red r90"></ion-icon>
<p>Vectric Aspire</p>
</a>
<a href="https://www.zotero.org/">
<ion-icon name="document-attach-outline" class="orange"></ion-icon>
<p>Zotero</p>
</a>
</div>
</div>
<!-- Prog. Languages -->
<div class="item prog_languages">
<h2 class="title">Prog. Languages</h2>
<div class="quick_links">
<a href="https://asciidoc.org/">
<ion-icon name="document-text-outline" class="cyan"></ion-icon>
<p>AsciiDoc</p>
</a>
<a href="https://developer.mozilla.org/en-US/docs/Web/CSS">
<ion-icon name="logo-css3" class="purple"></ion-icon>
<p>CSS</p>
</a>
<a href="https://docs.docker.com/compose/">
<ion-icon name="logo-docker" class="docker"></ion-icon>
<p>Docker Compose</p>
</a>
<a href="https://developer.mozilla.org/en-US/docs/Web/HTML">
<ion-icon name="logo-html5" class="orange"></ion-icon>
<p>HTML</p>
</a>
<a href="https://www.json.org/json-en.html">
<ion-icon name="shapes-outline" class="cyan"></ion-icon>
<p>JSON</p>
</a>
<a href="https://www.markdownguide.org/">
<ion-icon name="logo-markdown" class="indigo"></ion-icon>
<p>Markdown</p>
</a>
<a href="https://nginx.org/en/docs/">
<ion-icon name="globe-outline" class="green"></ion-icon>
<p>Nginx</p>
</a>
<a href="https://www.python.org/">
<ion-icon name="logo-python" class="blue"></ion-icon>
<p>Python</p>
</a>
<a href="https://github.com/ron-rs/ron">
<ion-icon name="shapes-outline" class="orange"></ion-icon>
<p>RON</p>
</a>
<a href="https://www.rust-lang.org/">
<ion-icon name="cog-outline" class="orange"></ion-icon>
<p>Rust</p>
</a>
<a href="https://sass-lang.com/">
<ion-icon name="logo-sass" class="magenta"></ion-icon>
<p>SCSS</p>
</a>
<a href="https://toml.io/en/">
<ion-icon name="shapes-outline" class="orange"></ion-icon>
<p>TOML</p>
</a>
<a href="https://www.gnu.org/software/bash/manual/bash.html">
<ion-icon name="terminal-outline" class="green"></ion-icon>
<p>[Bash] Shell</p>
</a>
<a href="https://yaml.org/">
<ion-icon name="shapes-outline" class="yellow"></ion-icon>
<p>YAML</p>
</a>
</div> </div>
</div> </div>
</div> </div>
@@ -464,37 +402,29 @@
</main> </main>
<div class="pane spacer pane_details"> <div class="pane spacer pane_details">
<div class="spacer_container"> <div class="spacer_container">
<h2>Contact Info</h2> <p>Contact Info</p>
<div class="section_list"> <div class="section_list">
<section> <section>
<header> <header>
<div> <a class="name" href="mailto:olivia.a.brooks77@gmail.com">Email</a>
<h3 class="name"> <p class="subtitle">olivia.a.brooks77@gmail.com</p>
<a href="mailto:olivia.a.brooks77@gmail.com">Email</a>
</h3>
<span class="subtitle">olivia.a.brooks77@gmail.com</span>
</div>
</header> </header>
</section> </section>
</div> </div>
</div> </div>
<div class="spacer_container"> <div class="spacer_container">
<h2>Spoken Languages</h2> <p>Spoken Languages</p>
<div class="section_list"> <div class="section_list">
<section> <section>
<header> <header>
<div> <p class="name">English</p>
<h3 class="name">English</h3> <p class="subtitle">Fluent</p>
<span class="subtitle">Fluent</span>
</div>
</header> </header>
</section> </section>
<section> <section>
<header> <header>
<div> <p class="name">Français</p>
<h3 class="name">Français</h3> <p class="subtitle">DELF B2</p>
<span class="subtitle">DELF B2</span>
</div>
</header> </header>
</section> </section>
</div> </div>
@@ -504,9 +434,7 @@
<div class="section_list"> <div class="section_list">
<section> <section>
<header> <header>
<div> <p class="name">By Request</p>
<h3 class="name">By Request</h3>
</div>
</header> </header>
</section> </section>
</div> </div>
-4
View File
@@ -1,4 +0,0 @@
*.beam
*.ez
/build
erl_crash.dump
-19
View File
@@ -1,19 +0,0 @@
name = "themes"
version = "1.0.0"
# Fill out these fields if you intend to generate HTML documentation or publish
# your project to the Hex package manager.
#
# description = ""
# licences = ["Apache-2.0"]
# repository = { type = "github", user = "", repo = "" }
# links = [{ title = "Website", href = "" }]
#
# For a full reference of all the available options, you can have a look at
# https://gleam.run/writing-gleam/gleam-toml/.
[dependencies]
gleam_stdlib = ">= 0.44.0 and < 2.0.0"
[dev-dependencies]
gleeunit = ">= 1.0.0 and < 2.0.0"
-11
View File
@@ -1,11 +0,0 @@
# This file was generated by Gleam
# You typically do not need to edit this file
packages = [
{ name = "gleam_stdlib", version = "0.69.0", build_tools = ["gleam"], requirements = [], otp_app = "gleam_stdlib", source = "hex", outer_checksum = "AAB0962BEBFAA67A2FBEE9EEE218B057756808DC9AF77430F5182C6115B3A315" },
{ name = "gleeunit", version = "1.9.0", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "gleeunit", source = "hex", outer_checksum = "DA9553CE58B67924B3C631F96FE3370C49EB6D6DC6B384EC4862CC4AAA718F3C" },
]
[requirements]
gleam_stdlib = { version = ">= 0.44.0 and < 2.0.0" }
gleeunit = { version = ">= 1.0.0 and < 2.0.0" }
-5
View File
@@ -1,5 +0,0 @@
import gleam/io
pub fn main() -> Nil {
io.println("Hello from themes!")
}
-13
View File
@@ -1,13 +0,0 @@
import gleeunit
pub fn main() -> Nil {
gleeunit.main()
}
// gleeunit test functions end in `_test`
pub fn hello_world_test() {
let name = "Joe"
let greeting = "Hello, " <> name <> "!"
assert greeting == "Hello, Joe!"
}
+13 -8
View File
@@ -1,4 +1,4 @@
@use "_a_colours.css"; @use "a_colours.css";
@use "a_footer"; @use "a_footer";
@use "a_layouts"; @use "a_layouts";
@@ -91,20 +91,24 @@ body {
h1 { h1 {
font-size: 3.3vh; font-size: 3.3vh;
font-family: var(--font-family-title);
} }
h2 { h2 {
font-size: 2.5vh; font-size: 2.5vh;
font-family: var(--font-family-title);
} }
h1,
h2,
h3, h3,
h4, h4,
h5, h5,
h6, h6 {
font-family: var(--font-family-title);
}
p, p,
a { a,
li {
font-family: var(--font-family-generic); font-family: var(--font-family-generic);
} }
@@ -116,7 +120,7 @@ a {
body { body {
grid-template-columns: none; grid-template-columns: none;
grid-template-areas: "banner" "nav" "main" "spacer"; grid-template-areas: "banner" "nav" "main" "tailer" "spacer";
// Compress spacings to maximize useable area. // Compress spacings to maximize useable area.
// padding: var(--spacing-small); // padding: var(--spacing-small);
@@ -129,6 +133,7 @@ a {
top: auto; top: auto;
left: auto; left: auto;
right: auto; right: auto;
border-radius: var(--border-radius-small) var(--border-radius-small) 0 0;
} }
} }
@@ -136,7 +141,7 @@ a {
@media (min-width: 601px) and (max-width: 1023px) { @media (min-width: 601px) and (max-width: 1023px) {
body { body {
grid-template-columns: min-content 1fr; grid-template-columns: min-content 1fr;
grid-template-areas: "banner banner" "nav main" "spacer main"; grid-template-areas: "banner banner" "nav main" "spacer main" "spacer tailer";
} }
} }
@@ -144,6 +149,6 @@ a {
@media (min-width: 1024px) { @media (min-width: 1024px) {
body { body {
grid-template-columns: min-content 1fr min-content; grid-template-columns: min-content 1fr min-content;
grid-template-areas: "banner banner banner" "nav main spacer"; grid-template-areas: "banner banner banner" "nav main spacer" "nav tailer spacer";
} }
} }
+1 -2
View File
@@ -6,8 +6,7 @@
flex-wrap: wrap; flex-wrap: wrap;
justify-content: center; justify-content: center;
> a, > * {
> div {
display: grid; display: grid;
background-color: var(--background-3); background-color: var(--background-3);
+2 -2
View File
@@ -51,7 +51,7 @@
} }
} }
> .body { > header ~ {
padding: 0 calc(var(--spacing-small) * 2); padding: 0 calc(var(--spacing-small) * 2);
ul { ul {
@@ -81,7 +81,7 @@
column-gap: var(--spacing-small); column-gap: var(--spacing-small);
} }
> .body { > header ~ {
// Collapse the L/R padding to maximize usable space // Collapse the L/R padding to maximize usable space
padding: 0; padding: 0;
} }
+2 -2
View File
@@ -5,12 +5,12 @@
border-radius: var(--border-radius-leaf); border-radius: var(--border-radius-leaf);
text-align: center; text-align: center;
> header h4 { > .title {
font-weight: bold; font-weight: bold;
margin: 0 0 0.5rem; margin: 0 0 0.5rem;
} }
.page { > .page {
margin: 0; margin: 0;
} }
} }
+14 -16
View File
@@ -4,31 +4,29 @@
justify-content: center; justify-content: center;
> .body { padding: var(--spacing-small) 0 0;
padding: var(--spacing-small) 0 0;
> header { > header {
white-space: nowrap; white-space: nowrap;
} }
> .body { > header ~ * {
text-align: start; text-align: start;
padding: 0 var(--spacing-thicc) var(--spacing-thicc); padding: 0 var(--spacing-thicc) var(--spacing-thicc);
img { img {
max-width: 100%; max-width: 100%;
max-height: 65vh; max-height: 65vh;
display: block; display: block;
margin: 0 auto; margin: 0 auto;
object-fit: contain; object-fit: contain;
}
} }
} }
} }
@media (max-width: 600px) { @media (max-width: 600px) {
.pane.blog .body > .body { .pane.blog {
padding: var(--spacing-small); padding: var(--spacing-small);
} }
} }
+39 -46
View File
@@ -1,56 +1,49 @@
main.pane { main.pane {
grid-area: main; grid-area: main;
> .body, background-color: var(--background-2);
> footer { border-radius: var(--border-radius-leaf);
background-color: var(--background-2);
border-radius: var(--border-radius-leaf);
}
> .body { text-align: start;
padding: var(--spacing-small); padding: var(--spacing-small);
> header {
text-align: center;
padding: var(--spacing-small);
width: max-content;
margin: 0 auto;
.title {
background-color: var(--background-1);
border-radius: var(--border-radius-leaf);
padding: var(--spacing-small);
}
.date {
display: block;
font-size: 0.85rem;
font-weight: normal;
font-style: italic;
font-family: var(--font-family-generic);
}
}
> .body {
text-align: start;
}
}
> footer {
margin: var(--spacing-large) auto 0;
width: min-content;
font-size: 1.65vh;
white-space: nowrap;
padding: var(--spacing-small);
> header {
text-align: center; text-align: center;
padding: var(--spacing-small);
width: max-content;
> p { margin: 0 auto;
margin: 0;
.title {
background-color: var(--background-1);
border-radius: var(--border-radius-leaf);
padding: var(--spacing-small);
}
.date {
display: block;
font-size: 0.85rem;
font-weight: normal;
font-style: italic;
font-family: var(--font-family-generic);
} }
} }
} }
main.pane + footer {
grid-area: tailer;
margin: var(--spacing-large) auto 0;
width: min-content;
font-size: 1.65vh;
white-space: nowrap;
padding: var(--spacing-small);
text-align: center;
> p {
margin: 0;
}
}
+1 -4
View File
@@ -28,6 +28,7 @@ nav.pane {
nav.pane { nav.pane {
background-color: var(--background-2); background-color: var(--background-2);
border-radius: var(--border-radius-leaf); border-radius: var(--border-radius-leaf);
width: 100%;
padding: 0 var(--spacing-small); padding: 0 var(--spacing-small);
.menu, .menu,
@@ -35,10 +36,6 @@ nav.pane {
.location { .location {
display: none; display: none;
} }
> * {
width: 100%;
}
} }
nav.pane > input:checked + label { nav.pane > input:checked + label {