main #8
21 changed files with 6326 additions and 147 deletions
9
frontend/.prettierignore
Normal file
9
frontend/.prettierignore
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
# Ignore artifacts:
|
||||||
|
build
|
||||||
|
coverage
|
||||||
|
|
||||||
|
# Ignore all HTML files:
|
||||||
|
**/*.astro
|
||||||
|
**/*.css
|
||||||
|
**/*.html
|
||||||
|
|
18
frontend/.prettierrc.mjs
Normal file
18
frontend/.prettierrc.mjs
Normal 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",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
|
};
|
3
frontend/.vscode/extensions.json
vendored
3
frontend/.vscode/extensions.json
vendored
|
@ -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": []
|
||||||
}
|
}
|
||||||
|
|
5
frontend/.vscode/settings.json
vendored
5
frontend/.vscode/settings.json
vendored
|
@ -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
|
||||||
}
|
}
|
|
@ -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!
|
|
@ -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
6161
frontend/pnpm-lock.yaml
Normal file
File diff suppressed because it is too large
Load diff
|
@ -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");
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -1,3 +1 @@
|
||||||
function copyLink(link) {
|
function copyLink(link) {}
|
||||||
|
|
||||||
}
|
|
||||||
|
|
|
@ -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();
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -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 = "";
|
||||||
|
|
|
@ -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(() => {
|
||||||
|
|
|
@ -1,3 +1,3 @@
|
||||||
***Note of the author***
|
**_Note of the author_**
|
||||||
|
|
||||||
From "Commander Keen"
|
From "Commander Keen"
|
|
@ -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";
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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" />
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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!
|
||||||
|
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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));
|
||||||
};
|
};
|
Loading…
Reference in a new issue