chore: upgrade to nuxt 4

This commit is contained in:
eggy
2025-10-19 15:33:02 +08:00
parent 21c717ed79
commit 4c1c8ae3af
8 changed files with 419 additions and 0 deletions

7
app/data/navItems.ts Normal file
View File

@@ -0,0 +1,7 @@
export const navItems = [
{ href: "/#about", title: "About" },
{ href: "/blog", title: "Blog" },
{ href: "/stories", title: "Stories" },
];
export default navItems;

129
app/data/projects.ts Normal file
View File

@@ -0,0 +1,129 @@
export type Language =
| "python"
| "javascript"
| "java"
| "typescript"
| "vue"
| "react"
| "markdown"
| "flutter"
| "android"
| "rust"
| "golang";
export interface Project {
name: string;
href: string;
img?: string;
description?: string;
longDescription?: string;
langs: Language[];
license?: "AGPL-3.0" | "GPL-3.0" | "MIT" | "LGPL-3.0";
type: "web" | "tool" | "embedded" | "service";
}
export const projects: Project[] = [
{
name: "Mandown",
href: "https://github.com/potatoeggy/mandown",
description:
"A comic downloader and converter to CBZ / EPUB / PDF for my Kobo.",
longDescription: "Available via CLI and a Qt GUI!",
langs: ["python"],
license: "AGPL-3.0",
img: "mandown.webp",
type: "tool",
},
{
name: "Noveldown",
href: "https://github.com/potatoeggy/noveldown",
langs: ["python"],
license: "LGPL-3.0",
description:
"A webnovel downloader and EPUB converter for my Kobo, with lots of metadata!",
longDescription: "Heavily borrows Mandown's design.",
type: "tool",
},
{
name: "Jeopardy",
href: "https://github.com/potatoeggy/jeopardy",
img: "jeopardy.webp",
langs: ["typescript", "vue"],
license: "AGPL-3.0",
description: "Kahoot-inspired Jeopardy! game, including Final Jeopardy!",
longDescription: "Created for Bayview's Computer Club.",
type: "web",
},
{
name: "Primoprod",
href: "https://github.com/potatoeggy/primoprod",
img: "primoprod.webp",
langs: ["typescript", "vue"],
license: "AGPL-3.0",
description:
"A game simulator to increase productivity with quests and gambling.",
longDescription: "My first project with a JS framework!",
type: "web",
},
{
name: "PillowⓇ",
href: "https://github.com/potatoeggy/ece198",
description:
"A water quality statistics aggregator written for the STM32 microcontroller with a display and keypad.",
langs: ["rust"],
license: "GPL-3.0",
type: "embedded",
img: "pillow.webp",
},
{
name: "Napbot",
href: "https://github.com/potatoeggy/napbot",
langs: ["python"],
license: "AGPL-3.0",
description:
"A Discord music bot with synchronised lyrics, originally a sleep tracking bot to encourage sleeping.",
img: "napbot.webp",
type: "service",
},
{
name: "AutoFicFare",
href: "https://github.com/potatoeggy/autoficfare",
langs: ["python"],
license: "GPL-3.0",
description:
"Automatically update fanfiction in a Calibre database to instantly update them on your Kobo.",
type: "tool",
},
];
const unreleasedProjects: Project[] = [
{
name: "Aleister",
href: "https://github.com/potatoeggy/aleister",
langs: ["rust"],
license: "AGPL-3.0",
type: "service",
},
{
name: "Aoto",
href: "https://github.com/potatoeggy/aoto",
langs: ["golang", "typescript", "react"],
license: "AGPL-3.0",
type: "web",
},
{
name: "Kobink",
href: "https://github.com/potatoeggy/kobink",
langs: ["rust"],
license: "AGPL-3.0",
type: "service",
},
{
name: "GBARR",
href: "https://github.com/potatoeggy/gbarr",
langs: ["rust"],
license: "GPL-3.0",
type: "embedded",
},
];
export default projects;

13
app/data/siteRevisions.ts Normal file
View File

@@ -0,0 +1,13 @@
interface SiteRevision {
title: string;
url: string;
}
export const revisions: SiteRevision[] = [
{
title: "Nuxt 3 (2022)",
url: "https://eggipelago.com",
},
{ title: "Eleventy (2021)", url: "https://2021.eggipelago.com" },
{ title: "Vanilla (2019-2020)", url: "https://2020.eggipelago.com" },
];

3
app/data/specialTags.ts Normal file
View File

@@ -0,0 +1,3 @@
export const SpecialTags: string[] = [
"featured",
];

79
app/data/tagInfo.ts Normal file
View File

@@ -0,0 +1,79 @@
export interface TagData {
name?: string;
description?: string;
}
export const tagInfo: Record<string, TagData> = {
barin: {
name: "Barin",
description:
"Welcome to Barin — a world in constant conflict between productivity and procrastination.",
},
bsscc: {
name: "BSSCC",
description: "Posts related to Bayview's Computer Club.",
},
ibia: {
name: "Ibia",
description:
"A Kurious child struggles to fight the misinformation brought by the Six Goddesses of the Subjects.",
},
misc: { name: "Miscellaneous" },
poetry: {
name: "Poetry",
description:
"Poetry is interesting in that there is a lot of implied stuff that is normally said directly in prose.",
},
primoprod: {
name: "Primoprod",
description:
'Reports following the development of <a href="https://github.com/potatoeggy/primoprod">Primoprod</a>.',
},
tech: { name: "Technology" },
unstagnation: {
name: "Unstagnation Short",
description:
"A collection of very short stories written to do something productive during JuneAugust 2020 and August 2021.",
},
albatross: {
name: "The FOSS Albatross",
description:
'Articles about free and open source software. Also available on <a href="https://medium.com/the-foss-albatross">Medium</a>.',
},
birds: {
name: "Bird Family",
description:
"A large, loving family of birds who have found in each other a kindred soul for eternal suffering.",
},
birdseye: {
name: "Bird's-Eye View",
description: "What's the world like to a pair of human-watching bluebirds?",
},
uoft: {
name: "University of Teyvat",
description: "A <em>Genshin Impact</em> university AU.",
},
nanowrimo: {
name: "NaNoWriMo",
description:
"Story snippets written during National Novel Writing Month as part of a larger work.",
},
skyprojections: {
name: "Projections in the Sky",
description: "Dreams or reality — what is the difference?",
},
featured: {
name: "Featured",
description: "Works that are less rambly and more actually good!",
},
"monoceros (novel)": {
name: "Monoceros (novel)",
description: "A coffee shop where six students meet and become friends.",
},
"emma the narwhal": {
name: "Emma the Narwhal",
description:
'A mystery-betrayal story written by April Evans in <a href="/tags/stories/monoceros (novel)"><em>Monoceros</em> (novel)</a>.',
},
};
export default tagInfo;