main #8

Closed
limepotato wants to merge 183 commits from main into blog-drafts
21 changed files with 6326 additions and 147 deletions
Showing only changes of commit 67e58504ad - Show all commits

9
frontend/.prettierignore Normal file
View file

@ -0,0 +1,9 @@
# Ignore artifacts:
build
coverage
# Ignore all HTML files:
**/*.astro
**/*.css
**/*.html

18
frontend/.prettierrc.mjs Normal file
View file

@ -0,0 +1,18 @@
/** @type {import("prettier").Config} */
export default {
plugins: ["prettier-plugin-astro"],
overrides: [
{
files: ["*.html"],
options: {
parser: "html",
},
},
{
files: ["*.md"],
options: {
parser: "mdx",
},
},
],
};

View file

@ -4,6 +4,7 @@
"abusaidm.html-snippets", "abusaidm.html-snippets",
"ecmel.vscode-html-css", "ecmel.vscode-html-css",
"mblode.pretty-formatter", "mblode.pretty-formatter",
"formulahendry.auto-close-tag"], "formulahendry.auto-close-tag"
],
"unwantedRecommendations": [] "unwantedRecommendations": []
} }

View file

@ -1,7 +1,4 @@
{ {
"cSpell.words": [ "cSpell.words": ["bsod", "kanban"],
"bsod",
"kanban"
],
"compile-hero.disable-compile-files-on-did-save-code": true "compile-hero.disable-compile-files-on-did-save-code": true
} }

View file

@ -7,7 +7,7 @@ import sitemap from "@astrojs/sitemap";
// https://astro.build/config // https://astro.build/config
export default defineConfig({ export default defineConfig({
site: "https://nelle.observer", site: "https://nelle.observer",
outDir: './build', outDir: "./build",
integrations: [mdx(), compressor(), sitemap()] integrations: [mdx(), compressor(), sitemap()],
}); });
// min and compressor always last! // min and compressor always last!

View file

@ -1,10 +1,10 @@
{ {
"folders": [ "folders": [
{ {
"path": "." "path": ".",
} },
], ],
"settings": { "settings": {
"compile-hero.disable-compile-files-on-did-save-code": true "compile-hero.disable-compile-files-on-did-save-code": true,
} },
} }

6161
frontend/pnpm-lock.yaml Normal file

File diff suppressed because it is too large Load diff

View file

@ -13,43 +13,43 @@ function sendMeow(endpoint) {
} }
async function getMeowTimeout(endpoint) { async function getMeowTimeout(endpoint) {
const response = await fetch(endpoint) const response = await fetch(endpoint);
if (response.status === 423) { if (response.status === 423) {
meowButton.disabled=true; meowButton.disabled = true;
meowButton.innerHTML = "<span>sleeping...</span>"; meowButton.innerHTML = "<span>sleeping...</span>";
console.warn("MEOW TIMED OUT") console.warn("MEOW TIMED OUT");
} }
if (response.status === 100) { if (response.status === 100) {
meowButton.disabled=false; meowButton.disabled = false;
meowButton.innerHTML = "<span>meow</span>"; meowButton.innerHTML = "<span>meow</span>";
console.warn("MEOW NOT TIMED OUT") console.warn("MEOW NOT TIMED OUT");
} }
} }
async function getBeepTimeout(endpoint) { async function getBeepTimeout(endpoint) {
const response = await fetch(endpoint) const response = await fetch(endpoint);
if (response.status === 423) { if (response.status === 423) {
beepButton.disabled=true; beepButton.disabled = true;
beepButton.innerHTML = "<span>sleeping...</span>"; beepButton.innerHTML = "<span>sleeping...</span>";
console.warn("BEEP TIMED OUT") console.warn("BEEP TIMED OUT");
} }
if (response.status === 100) { if (response.status === 100) {
beepButton.disabled=false; beepButton.disabled = false;
beepButton.innerHTML = "<span>meow</span>"; beepButton.innerHTML = "<span>meow</span>";
console.warn("BEEP NOT TIMED OUT") console.warn("BEEP NOT TIMED OUT");
} }
} }
async function getKaomojiTimeout(endpoint) { async function getKaomojiTimeout(endpoint) {
const response = await fetch(endpoint) const response = await fetch(endpoint);
if (response.status === 423) { if (response.status === 423) {
kaomojiButton.disabled=true; kaomojiButton.disabled = true;
kaomojiButton.innerHTML = "<span>sleeping...</span>"; kaomojiButton.innerHTML = "<span>sleeping...</span>";
console.warn("KAOMOJI TIMED OUT") console.warn("KAOMOJI TIMED OUT");
} }
if (response.status === 100) { if (response.status === 100) {
kaomojiButton.disabled=false; kaomojiButton.disabled = false;
kaomojiButton.innerHTML = "<span>meow</span>"; kaomojiButton.innerHTML = "<span>meow</span>";
console.warn("KAOMOJI NOT TIMED OUT") console.warn("KAOMOJI NOT TIMED OUT");
} }
} }

View file

@ -1,3 +1 @@
function copyLink(link) { function copyLink(link) {}
}

View file

@ -44,7 +44,7 @@ fetch(url)
// Chrome Redirect // Chrome Redirect
function redirect() { function redirect() {
const chromium = /Chrome|Chromium|OPR|Opera|Edge|UC|QQ/.test( const chromium = /Chrome|Chromium|OPR|Opera|Edge|UC|QQ/.test(
navigator.userAgent navigator.userAgent,
); );
if (navigator.brave) { if (navigator.brave) {
@ -69,44 +69,42 @@ const kaomojiButton = document.getElementById("kaomoji-button");
// on send meow button click // on send meow button click
async function meowClick() { async function meowClick() {
meowButton.disabled=true; meowButton.disabled = true;
meowButton.innerHTML = "<span>sleeping...</span>"; meowButton.innerHTML = "<span>sleeping...</span>";
sendMeow(meowEndpoint); sendMeow(meowEndpoint);
} }
// on send beep button click // on send beep button click
async function beepClick() { async function beepClick() {
beepButton.disabled=true; beepButton.disabled = true;
beepButton.innerHTML = "<span>sleeping...</span>"; beepButton.innerHTML = "<span>sleeping...</span>";
sendMeow(beepEndpoint); sendMeow(beepEndpoint);
} }
// on send kaomoji button click // on send kaomoji button click
async function kaomojiClick() { async function kaomojiClick() {
kaomojiButton.disabled=true; kaomojiButton.disabled = true;
kaomojiButton.innerHTML = "<span>sleeping...</span>"; kaomojiButton.innerHTML = "<span>sleeping...</span>";
sendMeow(kaomojiEndpoint); sendMeow(kaomojiEndpoint);
} }
// Show/Hide Info Boxes // Show/Hide Info Boxes
const posterInfoButton = document.getElementById("poster-info-button"); const posterInfoButton = document.getElementById("poster-info-button");
const posterInfo = document.getElementById("poster-info"); const posterInfo = document.getElementById("poster-info");
let isPosterInfoHidden = true let isPosterInfoHidden = true;
const ntfyInfoButton = document.getElementById("ntfy-info-button"); const ntfyInfoButton = document.getElementById("ntfy-info-button");
const ntfyInfo = document.getElementById("ntfy-info"); const ntfyInfo = document.getElementById("ntfy-info");
let isNtfyInfoHidden = true let isNtfyInfoHidden = true;
function showPosterInfo() { function showPosterInfo() {
if (isPosterInfoHidden) { if (isPosterInfoHidden) {
posterInfo.style.display = "initial"; posterInfo.style.display = "initial";
posterInfoButton.innerHTML = "[hide more info]" posterInfoButton.innerHTML = "[hide more info]";
isPosterInfoHidden = false; isPosterInfoHidden = false;
} } else {
else {
posterInfo.style.display = "none"; posterInfo.style.display = "none";
posterInfoButton.innerHTML = "[show more info]" posterInfoButton.innerHTML = "[show more info]";
isPosterInfoHidden = true; isPosterInfoHidden = true;
} }
} }
@ -114,29 +112,31 @@ function showPosterInfo() {
function showNtfyInfo() { function showNtfyInfo() {
if (isNtfyInfoHidden) { if (isNtfyInfoHidden) {
ntfyInfo.style.display = "initial"; ntfyInfo.style.display = "initial";
ntfyInfoButton.innerHTML = "[hide more info]" ntfyInfoButton.innerHTML = "[hide more info]";
isNtfyInfoHidden = false; isNtfyInfoHidden = false;
} } else {
else {
ntfyInfo.style.display = "none"; ntfyInfo.style.display = "none";
ntfyInfoButton.innerHTML = "[show more info]" ntfyInfoButton.innerHTML = "[show more info]";
isNtfyInfoHidden = true; isNtfyInfoHidden = true;
} }
} }
//// color scheme change //// color scheme change
const headTag = document.getElementsByTagName('head')[0]; const headTag = document.getElementsByTagName("head")[0];
const styleTag = document.createElement("style"); const styleTag = document.createElement("style");
function checkThemeStorage() { function checkThemeStorage() {
if (sessionStorage.getItem("themeGreen")) { if (sessionStorage.getItem("themeGreen")) {
setGreen() setGreen();
} }
if (sessionStorage.getItem("themeOrange")) { if (sessionStorage.getItem("themeOrange")) {
setOrange() setOrange();
} }
if (!sessionStorage.getItem("themeOrange") && !sessionStorage.getItem("themeGreen")) { if (
getTheme() !sessionStorage.getItem("themeOrange") &&
!sessionStorage.getItem("themeGreen")
) {
getTheme();
} }
} }
@ -342,10 +342,9 @@ function setOrange() {
function getTheme() { function getTheme() {
if (colorBool) { if (colorBool) {
// if true: green // if true: green
setGreen() setGreen();
} } else {
else {
// if false: orange // if false: orange
setOrange() setOrange();
} }
} }

View file

@ -32,11 +32,10 @@ const msgPFX = "message: ";
const attachPFX = "attachment: "; const attachPFX = "attachment: ";
const clickPFX = "click-action: "; const clickPFX = "click-action: ";
// Ctrl + Enter to send // Ctrl + Enter to send
document.addEventListener("keydown", (event) => { document.addEventListener("keydown", (event) => {
if (event.ctrlKey && event.key === "Enter") { if (event.ctrlKey && event.key === "Enter") {
ntfyClick() ntfyClick();
} }
}); });
@ -198,7 +197,7 @@ function sendNotification() {
ntfyTitle.value, ntfyTitle.value,
ntfyMessage.value, ntfyMessage.value,
ntfyAttach.value, ntfyAttach.value,
ntfyClickAction.value ntfyClickAction.value,
); );
ntfyTitle.value = ""; ntfyTitle.value = "";
ntfyMessage.value = ""; ntfyMessage.value = "";

View file

@ -1,14 +1,12 @@
const clickSound = new Audio( const clickSound = new Audio("/assets/sounds/ui/zapsplat_button_click_2.mp3");
"/assets/sounds/ui/zapsplat_button_click_2.mp3"
);
const hoverSound = new Audio( const hoverSound = new Audio(
"/assets/sounds/ui/zapsplat_button_click_bright_2.mp3" "/assets/sounds/ui/zapsplat_button_click_bright_2.mp3",
); );
const phonewaveSound = new Audio( const phonewaveSound = new Audio(
"/assets/sounds/sciadv/phonewave/phonewave.ogg" "/assets/sounds/sciadv/phonewave/phonewave.ogg",
); );
const startLeapSound = new Audio( const startLeapSound = new Audio(
"/assets/sounds/sciadv/phonewave/begin-leap.ogg" "/assets/sounds/sciadv/phonewave/begin-leap.ogg",
); );
// Sound effects // Sound effects
@ -28,7 +26,6 @@ const links = document.querySelectorAll("a");
const image = document.querySelectorAll("img"); const image = document.querySelectorAll("img");
const phonewave = document.getElementById("phonewave"); const phonewave = document.getElementById("phonewave");
// biome-ignore lint/complexity/noForEach: <explanation> // biome-ignore lint/complexity/noForEach: <explanation>
links.forEach((a) => { links.forEach((a) => {
a.addEventListener("click", () => { a.addEventListener("click", () => {
@ -71,7 +68,6 @@ image.forEach((button) => {
*/ */
}); });
phonewave.addEventListener("click", () => { phonewave.addEventListener("click", () => {
phonewaveSound.play(); phonewaveSound.play();
setTimeout(() => { setTimeout(() => {

View file

@ -1,3 +1,3 @@
***Note of the author*** **_Note of the author_**
From "Commander Keen" From "Commander Keen"

View file

@ -1,5 +1,5 @@
// Place any global data in this file. // Place any global data in this file.
// You can import this data from anywhere in your site by using the `import` keyword. // You can import this data from anywhere in your site by using the `import` keyword.
export const SITE_TITLE = 'nelle observer'; export const SITE_TITLE = "nelle observer";
export const SITE_DESCRIPTION = 'personal site of nelle'; export const SITE_DESCRIPTION = "personal site of nelle";

View file

@ -1,7 +1,7 @@
--- ---
title: 'cool stuff!' title: "cool stuff!"
description: 'cool/interesting things i found on the internet.' description: "cool/interesting things i found on the internet."
pubDate: 'July 10 2024' pubDate: "July 10 2024"
--- ---
### be sure to check back for more ### be sure to check back for more

View file

@ -1,7 +1,7 @@
--- ---
title: 'minecraft 88x31 badges' title: "minecraft 88x31 badges"
description: '88x31 badges for your minecraft projects!' description: "88x31 badges for your minecraft projects!"
pubDate: 'June 17 2024' pubDate: "June 17 2024"
--- ---
## i made (and still am making), a few 88x31 badges for minecraft mods and such, in aseprite heres what i have so far ## i made (and still am making), a few 88x31 badges for minecraft mods and such, in aseprite heres what i have so far
@ -16,4 +16,4 @@ pubDate: 'June 17 2024'
<img src="/assets/images/badges/mc-badges/made-with-neoforged.png" /> <img src="/assets/images/badges/mc-badges/made-with-neoforged.png" />
<img src="/assets/images/badges/mc-badges/made-with-quilt.png"/> <img src="/assets/images/badges/mc-badges/made-with-quilt.png" />

View file

@ -1,7 +1,7 @@
--- ---
title: 'my setup(s)!' title: "my setup(s)!"
description: 'whats your setup like? i hear nobody asking, im glad you asked!' description: "whats your setup like? i hear nobody asking, im glad you asked!"
pubDate: 'April 17 2024' pubDate: "April 17 2024"
--- ---
## my personal machine currently has ## my personal machine currently has

View file

@ -1,7 +1,7 @@
--- ---
title: 'a new pc has entered the chat' title: "a new pc has entered the chat"
description: 'i have received some free computers!' description: "i have received some free computers!"
pubDate: 'June 30 2024' pubDate: "June 30 2024"
--- ---
recently i received two free computers, thanks to bryan of [l33t.codes](https://l33t.codes/), one was a thinkcentre, the other an old mediacenter. recently i received two free computers, thanks to bryan of [l33t.codes](https://l33t.codes/), one was a thinkcentre, the other an old mediacenter.
@ -32,7 +32,7 @@ this is a configure-to-order model, so ill need to check the parts ive already r
i was really interested by this, I love ThinkPads, So i immediately took up the offer. When i got home i worked on pluggin it in and seeing if it worked, took me a bit to find the VGA cable hiding somewhere in storage but i was able to get it. This machine did not come with a drive, and was unable to post whatsoever. i was really interested by this, I love ThinkPads, So i immediately took up the offer. When i got home i worked on pluggin it in and seeing if it worked, took me a bit to find the VGA cable hiding somewhere in storage but i was able to get it. This machine did not come with a drive, and was unable to post whatsoever.
After a bit of testing (and a long search for DDR3 modules), i can confirm that something *other* than the memory is the issue (it tested fine in a known-good machine), so more testing will need to be done there. After a bit of testing (and a long search for DDR3 modules), i can confirm that something _other_ than the memory is the issue (it tested fine in a known-good machine), so more testing will need to be done there.
i really want(ed) to shove my current main build inside this thing as it would be really funny, unfortunately, this only has one fan slot, and thats the loud and poor, outtake. definitely not enough for my modern computer, ill figure out what to do with it eventually! i really want(ed) to shove my current main build inside this thing as it would be really funny, unfortunately, this only has one fan slot, and thats the loud and poor, outtake. definitely not enough for my modern computer, ill figure out what to do with it eventually!

View file

@ -1,5 +1,6 @@
import { defineCollection } from 'astro:content'; // @ts-ignore
import { rssSchema } from '@astrojs/rss'; import { defineCollection } from "astro:content";
import { rssSchema } from "@astrojs/rss";
const blog = defineCollection({ const blog = defineCollection({
schema: rssSchema, schema: rssSchema,

View file

@ -1,4 +1,4 @@
import type { APIRoute } from 'astro'; import type { APIRoute } from "astro";
const getRobotsTxt = (sitemapURL: URL) => ` const getRobotsTxt = (sitemapURL: URL) => `
@ -101,6 +101,6 @@ Disallow: /
`; `;
export const GET: APIRoute = ({ site }) => { export const GET: APIRoute = ({ site }) => {
const sitemapURL = new URL('sitemap-index.xml', site); const sitemapURL = new URL("sitemap-index.xml", site);
return new Response(getRobotsTxt(sitemapURL)); return new Response(getRobotsTxt(sitemapURL));
}; };