diff --git a/astro.config.mjs b/astro.config.mjs index 9a971f3..9109be1 100644 --- a/astro.config.mjs +++ b/astro.config.mjs @@ -2,10 +2,14 @@ import { defineConfig } from 'astro/config'; import db from '@astrojs/db'; import node from '@astrojs/node'; +import { modifiedTime } from './last-modified.mjs'; // https://astro.build/config export default defineConfig({ site: "https://haetae.gay", + markdown: { + remarkPlugins: [modifiedTime], + }, integrations: [db()], adapter: node({ mode: 'standalone' diff --git a/bun.lockb b/bun.lockb index 8d642d3..2277bff 100755 Binary files a/bun.lockb and b/bun.lockb differ diff --git a/last-modified.mjs b/last-modified.mjs new file mode 100644 index 0000000..1085991 --- /dev/null +++ b/last-modified.mjs @@ -0,0 +1,9 @@ +import { statSync } from "fs"; + +export function modifiedTime() { + return function (tree, file) { + const path = file.history[0]; + const result = statSync(path); + file.data.astro.frontmatter.lastModified = result.mtime; + } +} \ No newline at end of file diff --git a/package.json b/package.json index 5a77c2a..127aa9f 100644 --- a/package.json +++ b/package.json @@ -14,6 +14,7 @@ "@astrojs/rss": "^4.0.11", "astro": "^5.1.7", "astro-breadcrumbs": "^3.3.1", + "dayjs": "^1.11.13", "markdown-it": "^14.1.0", "sanitize-html": "^2.14.0" }, diff --git a/public/fonts/PIXEAB.woff2 b/public/fonts/PIXEAB.woff2 new file mode 100644 index 0000000..606e772 Binary files /dev/null and b/public/fonts/PIXEAB.woff2 differ diff --git a/public/fonts/PIXEAR.woff2 b/public/fonts/PIXEAR.woff2 new file mode 100644 index 0000000..480bebf Binary files /dev/null and b/public/fonts/PIXEAR.woff2 differ diff --git a/public/fonts/mario-luigi-rpg-speech-text.woff2 b/public/fonts/mario-luigi-rpg-speech-text.woff2 new file mode 100644 index 0000000..0d9b30c Binary files /dev/null and b/public/fonts/mario-luigi-rpg-speech-text.woff2 differ diff --git a/src/assets/images/border.png b/src/assets/images/border.png new file mode 100644 index 0000000..0bed76e Binary files /dev/null and b/src/assets/images/border.png differ diff --git a/src/assets/frame.png b/src/assets/images/frame.png similarity index 100% rename from src/assets/frame.png rename to src/assets/images/frame.png diff --git a/src/assets/images/guild-bbs-content.png b/src/assets/images/guild-bbs-content.png new file mode 100644 index 0000000..7693ae1 Binary files /dev/null and b/src/assets/images/guild-bbs-content.png differ diff --git a/src/assets/images/guild-bbs.png b/src/assets/images/guild-bbs.png new file mode 100644 index 0000000..a7e45df Binary files /dev/null and b/src/assets/images/guild-bbs.png differ diff --git a/src/assets/images/portrait-0025.png b/src/assets/images/portrait-0025.png new file mode 100644 index 0000000..9caf2e7 Binary files /dev/null and b/src/assets/images/portrait-0025.png differ diff --git a/src/assets/images/speech.png b/src/assets/images/speech.png new file mode 100644 index 0000000..a29bfde Binary files /dev/null and b/src/assets/images/speech.png differ diff --git a/src/assets/moods/angry.png b/src/assets/moods/angry.png new file mode 100644 index 0000000..79066b1 Binary files /dev/null and b/src/assets/moods/angry.png differ diff --git a/src/assets/moods/annoyed.png b/src/assets/moods/annoyed.png new file mode 100644 index 0000000..f049b6f Binary files /dev/null and b/src/assets/moods/annoyed.png differ diff --git a/src/assets/moods/blah.png b/src/assets/moods/blah.png new file mode 100644 index 0000000..13e170e Binary files /dev/null and b/src/assets/moods/blah.png differ diff --git a/src/assets/moods/confused.png b/src/assets/moods/confused.png new file mode 100644 index 0000000..3374b38 Binary files /dev/null and b/src/assets/moods/confused.png differ diff --git a/src/assets/moods/devious.png b/src/assets/moods/devious.png new file mode 100644 index 0000000..7fae3a8 Binary files /dev/null and b/src/assets/moods/devious.png differ diff --git a/src/assets/moods/embarrassed.png b/src/assets/moods/embarrassed.png new file mode 100644 index 0000000..ec5ad2c Binary files /dev/null and b/src/assets/moods/embarrassed.png differ diff --git a/src/assets/moods/enraged.png b/src/assets/moods/enraged.png new file mode 100644 index 0000000..1ccf9f4 Binary files /dev/null and b/src/assets/moods/enraged.png differ diff --git a/src/assets/moods/excited.png b/src/assets/moods/excited.png new file mode 100644 index 0000000..596f6c3 Binary files /dev/null and b/src/assets/moods/excited.png differ diff --git a/src/assets/moods/flirty.png b/src/assets/moods/flirty.png new file mode 100644 index 0000000..305ca08 Binary files /dev/null and b/src/assets/moods/flirty.png differ diff --git a/src/assets/moods/full.png b/src/assets/moods/full.png new file mode 100644 index 0000000..4c15425 Binary files /dev/null and b/src/assets/moods/full.png differ diff --git a/src/assets/moods/giggly.png b/src/assets/moods/giggly.png new file mode 100644 index 0000000..9a9bb20 Binary files /dev/null and b/src/assets/moods/giggly.png differ diff --git a/src/assets/moods/happy.png b/src/assets/moods/happy.png new file mode 100644 index 0000000..19625b9 Binary files /dev/null and b/src/assets/moods/happy.png differ diff --git a/src/assets/moods/hopeful.png b/src/assets/moods/hopeful.png new file mode 100644 index 0000000..dcfd1c4 Binary files /dev/null and b/src/assets/moods/hopeful.png differ diff --git a/src/assets/moods/horny.png b/src/assets/moods/horny.png new file mode 100644 index 0000000..7ba059b Binary files /dev/null and b/src/assets/moods/horny.png differ diff --git a/src/assets/moods/hot.png b/src/assets/moods/hot.png new file mode 100644 index 0000000..41721fa Binary files /dev/null and b/src/assets/moods/hot.png differ diff --git a/src/assets/moods/hurt.png b/src/assets/moods/hurt.png new file mode 100644 index 0000000..50a0118 Binary files /dev/null and b/src/assets/moods/hurt.png differ diff --git a/src/assets/moods/irate.png b/src/assets/moods/irate.png new file mode 100644 index 0000000..15ec3e1 Binary files /dev/null and b/src/assets/moods/irate.png differ diff --git a/src/assets/moods/lazy.png b/src/assets/moods/lazy.png new file mode 100644 index 0000000..5da8fe2 Binary files /dev/null and b/src/assets/moods/lazy.png differ diff --git a/src/assets/moods/loved.png b/src/assets/moods/loved.png new file mode 100644 index 0000000..989be5e Binary files /dev/null and b/src/assets/moods/loved.png differ diff --git a/src/assets/moods/mischievous.png b/src/assets/moods/mischievous.png new file mode 100644 index 0000000..19fc6c1 Binary files /dev/null and b/src/assets/moods/mischievous.png differ diff --git a/src/assets/moods/naughty.png b/src/assets/moods/naughty.png new file mode 100644 index 0000000..3b2bf91 Binary files /dev/null and b/src/assets/moods/naughty.png differ diff --git a/src/assets/moods/nervous.png b/src/assets/moods/nervous.png new file mode 100644 index 0000000..4765b03 Binary files /dev/null and b/src/assets/moods/nervous.png differ diff --git a/src/assets/moods/rejuvenated.png b/src/assets/moods/rejuvenated.png new file mode 100644 index 0000000..1a430ce Binary files /dev/null and b/src/assets/moods/rejuvenated.png differ diff --git a/src/assets/moods/sad.png b/src/assets/moods/sad.png new file mode 100644 index 0000000..8cf2ae2 Binary files /dev/null and b/src/assets/moods/sad.png differ diff --git a/src/assets/moods/satisfied.png b/src/assets/moods/satisfied.png new file mode 100644 index 0000000..ee52d50 Binary files /dev/null and b/src/assets/moods/satisfied.png differ diff --git a/src/assets/moods/scared.png b/src/assets/moods/scared.png new file mode 100644 index 0000000..3955739 Binary files /dev/null and b/src/assets/moods/scared.png differ diff --git a/src/assets/moods/sick.png b/src/assets/moods/sick.png new file mode 100644 index 0000000..76f19a7 Binary files /dev/null and b/src/assets/moods/sick.png differ diff --git a/src/assets/moods/silly.png b/src/assets/moods/silly.png new file mode 100644 index 0000000..365bc17 Binary files /dev/null and b/src/assets/moods/silly.png differ diff --git a/src/assets/moods/sleepy.png b/src/assets/moods/sleepy.png new file mode 100644 index 0000000..18dd808 Binary files /dev/null and b/src/assets/moods/sleepy.png differ diff --git a/src/assets/moods/smooch.png b/src/assets/moods/smooch.png new file mode 100644 index 0000000..fc64fa8 Binary files /dev/null and b/src/assets/moods/smooch.png differ diff --git a/src/assets/moods/stressed.png b/src/assets/moods/stressed.png new file mode 100644 index 0000000..313f56b Binary files /dev/null and b/src/assets/moods/stressed.png differ diff --git a/src/assets/moods/surprised.png b/src/assets/moods/surprised.png new file mode 100644 index 0000000..19daf8b Binary files /dev/null and b/src/assets/moods/surprised.png differ diff --git a/src/assets/moods/worried.png b/src/assets/moods/worried.png new file mode 100644 index 0000000..cdfe28a Binary files /dev/null and b/src/assets/moods/worried.png differ diff --git a/src/assets/styles/base.css b/src/assets/styles/base.css index 453e6b9..e3ed799 100644 --- a/src/assets/styles/base.css +++ b/src/assets/styles/base.css @@ -6,6 +6,8 @@ --title-font: "Kiwi Soda", Impact, Haettenschweiler, 'Arial Narrow Bold', sans-serif; --mono-font: "Departure Mono", ui-monospace, 'Cascadia Code', 'Source Code Pro', Menlo, Consolas, 'DejaVu Sans Mono', monospace; --serif-font: "Redaction 35", 'Iowan Old Style', 'Palatino Linotype', 'URW Palladio L', P052, serif; + --sans-font: "MLSS", 'Lucida Sans', 'Lucida Sans Regular', 'Lucida Grande', 'Lucida Sans Unicode', Geneva, Verdana, sans-serif; + --arial-font: "Arial Pixel", Arial, Helvetica, sans-serif; } body { diff --git a/src/assets/styles/fonts.css b/src/assets/styles/fonts.css index a7493e5..a3a8c42 100644 --- a/src/assets/styles/fonts.css +++ b/src/assets/styles/fonts.css @@ -1,3 +1,15 @@ +@font-face { + font-family: "Arial Pixel"; + src: url("/fonts/PIXEAR.woff2") format("woff2"); + font-weight: normal; +} + +@font-face { + font-family: "Arial Pixel"; + src: url("/fonts/PIXEAB.woff2") format("woff2"); + font-weight: bold; +} + @font-face { font-family: "Departure Mono"; src: url("/fonts/DepartureMono-Regular.woff2") format("woff2"); @@ -10,6 +22,12 @@ font-weight: normal; } +@font-face { + font-family: "MLSS"; + src: url("/fonts/mario-luigi-rpg-speech-text.woff2") format("woff2"); + font-weight: normal; +} + @font-face { font-family: "Redaction 35"; src: url("/fonts/Redaction_35-Regular.woff2") format("woff2"); diff --git a/src/components/Figure.astro b/src/components/Figure.astro index ca5cba1..e6f5fe9 100644 --- a/src/components/Figure.astro +++ b/src/components/Figure.astro @@ -5,13 +5,14 @@ interface Props { imagePath: string; alt: string; caption?: string; + className?: string[] | string; } -const { imagePath, alt, caption }: Props = Astro.props; +const { imagePath, alt, caption, className }: Props = Astro.props; const images = import.meta.glob<{ default: ImageMetadata }>("/src/assets/**/*.{jpeg,jpg,png,webp,gif}"); if (!images[imagePath]) throw new Error(`"${imagePath}" does not exist in glob: "src/assets/**/*.{jpeg,jpg,png,webp,gif}"`); --- -
+
-
{caption ?? alt}
+ {caption &&
{caption}
}
\ No newline at end of file diff --git a/src/content/blog/hello-world.md b/src/content/blog/hello-world.md index 9e2c722..11b37ae 100644 --- a/src/content/blog/hello-world.md +++ b/src/content/blog/hello-world.md @@ -1,6 +1,11 @@ --- title: hey girl hey pubDate: 2024-02-03 +currently: + mood: happy + reading: hella + watching: stuff + playing: balatro --- Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin pretium augue elit, eget interdum massa lobortis ut. Praesent facilisis ornare aliquam. Donec sit amet volutpat ipsum, id ultricies urna. Donec vestibulum sagittis felis, tempor fermentum urna posuere at. Vestibulum cursus mauris eget bibendum blandit. Aenean at augue porttitor, bibendum massa ut, laoreet lacus. Phasellus fermentum tincidunt lectus vel volutpat. Proin sagittis vel sem sit amet consequat. Vestibulum ac laoreet quam. Mauris eu purus sit amet odio maximus dictum. Mauris quam tellus, tempus eu faucibus in, mollis quis velit. Phasellus nisl mauris, congue vel magna a, rutrum aliquet ante. Proin in ante pharetra, vestibulum nisi vel, fringilla tortor. Etiam mattis, mauris et mattis sagittis, orci eros ornare risus, vitae consequat ligula nulla eget quam. diff --git a/src/content/config.ts b/src/content/config.ts index e0ceeab..cdf31db 100644 --- a/src/content/config.ts +++ b/src/content/config.ts @@ -1,10 +1,19 @@ import { defineCollection, z } from "astro:content"; import { glob } from "astro/loaders"; import { rssSchema } from "@astrojs/rss"; +import moods from "@/utils/moods"; const blog = defineCollection({ loader: glob({ pattern: "*.md", base: "./src/content/blog" }), - schema: rssSchema, + schema: rssSchema.extend({ + currently: z.object({ + mood: z.enum(moods).optional(), + reading: z.ostring(), + watching: z.ostring(), + playing: z.ostring(), + listening: z.ostring(), + }).optional(), + }), }); function generateFicSlug({ entry, data }: { entry: string, data: any }): string { diff --git a/src/layouts/About.astro b/src/layouts/About.astro index b20b5b2..ddb4e4a 100644 --- a/src/layouts/About.astro +++ b/src/layouts/About.astro @@ -1,11 +1,63 @@ --- +import type { MarkdownLayoutProps } from "astro"; import Navbar from "@/components/Navbar.astro"; +import Figure from "@/components/Figure.astro"; import Layout from "./Layout.astro"; +import border from "@/assets/images/border.png"; +import frame from "@/assets/images/frame.png"; + +type Props = MarkdownLayoutProps<{ + avatar?: string; + avatarText?: string; +}>; + +const { frontmatter } = Astro.props; --- - +
- + {frontmatter.avatar && frontmatter.avatarText && ( +
+ )} +
+ +
-
\ No newline at end of file + + + \ No newline at end of file diff --git a/src/layouts/Blog.astro b/src/layouts/Blog.astro index d594dfc..c3ef8f8 100644 --- a/src/layouts/Blog.astro +++ b/src/layouts/Blog.astro @@ -2,21 +2,32 @@ import { getCollection } from "astro:content"; import Layout from "./Layout.astro"; import Navbar from "@/components/Navbar.astro"; +import moods from "@/utils/moods"; +import outerBBS from "@/assets/images/guild-bbs.png"; +import innerBBS from "@/assets/images/guild-bbs-content.png"; +import { Image } from "astro:assets"; interface Props { title: string; date: Date; + currently?: { + mood?: string; + reading?: string; + listening?: string; + watching?: string; + playing?: string; + } } const blog = await getCollection("blog"); blog.length = Math.min(blog.length, 5); blog.sort((a, b) => a.data.pubDate!.valueOf() - b.data.pubDate!.valueOf()); -const { title, date } = Astro.props; +const { title, date, currently } = Astro.props; --- -
+
-
+
-
-

{title}

- -
+
+
+

{title}

+
+
+ +
+
-
- +
+ +
+ + {currently && ( + + )}
-
-
+ +
- \ No newline at end of file diff --git a/src/layouts/Layout.astro b/src/layouts/Layout.astro index b792275..44c052c 100644 --- a/src/layouts/Layout.astro +++ b/src/layouts/Layout.astro @@ -16,6 +16,7 @@ const { title = "haetae" }: Props = Astro.props; + {title} diff --git a/src/pages/about.md b/src/pages/about.md index 042ff21..d93c480 100644 --- a/src/pages/about.md +++ b/src/pages/about.md @@ -1,6 +1,8 @@ --- title: about me layout: ../layouts/About.astro +avatar: /src/assets/images/portrait-0025.png +avatarText: pikachu from pokemon mystery dungeon --- # hello! diff --git a/src/pages/blog/[...id].astro b/src/pages/blog/[...id].astro index ef727dd..685286b 100644 --- a/src/pages/blog/[...id].astro +++ b/src/pages/blog/[...id].astro @@ -20,7 +20,7 @@ const current = blog.findIndex(entry => entry.id === Astro.params.id); const previous = current + 1 === blog.length ? undefined : blog[current + 1]; const next = current === 0 ? undefined : blog[current - 1]; --- - + {(previous || next) && ( diff --git a/src/pages/blog/index.astro b/src/pages/blog/index.astro index fb6e1d6..c5d1b5e 100644 --- a/src/pages/blog/index.astro +++ b/src/pages/blog/index.astro @@ -13,6 +13,7 @@ const getMonth = (id: number) => { } --- + `} />

blog

    {Object.entries(sorted).map(entry => ( @@ -31,4 +32,5 @@ const getMonth = (id: number) => { ))}
+ rss feed
\ No newline at end of file diff --git a/src/pages/fics/[ficId]/[...chapterId].astro b/src/pages/fics/[ficId]/[...chapterId].astro index 16a3123..6d3080c 100644 --- a/src/pages/fics/[ficId]/[...chapterId].astro +++ b/src/pages/fics/[ficId]/[...chapterId].astro @@ -3,6 +3,10 @@ import Chapter from "@/layouts/Chapter.astro"; import type { GetStaticPaths } from "astro"; import { getCollection, render } from "astro:content"; import { Breadcrumbs } from "astro-breadcrumbs"; +import dayjs from "dayjs"; +import utc from "dayjs/plugin/utc"; + +dayjs.extend(utc); export const getStaticPaths = (async () => { const chapters = await getCollection("chapters"); @@ -17,7 +21,7 @@ export const getStaticPaths = (async () => { const { ficId, chapterId } = Astro.params; const { chapter } = Astro.props; -const { Content } = await render(chapter); +const { Content, remarkPluginFrontmatter } = await render(chapter); const chapters = await getCollection("chapters", ({ id }) => { return id.split("/")[0] === ficId; @@ -29,14 +33,14 @@ chapters.sort((a, b) => a.data.sortOrder - b.data.sortOrder); const current = chapters.findIndex(chapter => chapter.id === `${ficId}/${chapterId}`); const next = current + 1 === chapters.length ? undefined : chapters[current + 1]; const previous = current === 0 ? undefined : chapters[current - 1]; -// lastmodified +const lastModified = new Date(remarkPluginFrontmatter.lastModified); const links = [ { index: "last", text: chapter.data.title }, { index: 2, text: fic[0].data.title }, ]; --- - + @@ -99,6 +103,13 @@ const links = [ justify-self: center; } + #chapter-select { + background-color: black; + color: white; + border: none; + padding: 0.25rem 0.5rem; + } + #previous { grid-area: 2 / 1 / 2 / 1; justify-self: left; diff --git a/src/pages/fics/[ficId]/index.astro b/src/pages/fics/[ficId]/index.astro index f3302e8..cae4410 100644 --- a/src/pages/fics/[ficId]/index.astro +++ b/src/pages/fics/[ficId]/index.astro @@ -19,6 +19,7 @@ chapters.length = Math.min(chapters.length, 5); chapters.sort((a, b) => a.data.sortOrder - b.data.sortOrder); --- + `} />

{fic.data.title}

diff --git a/src/pages/fics/index.astro b/src/pages/fics/index.astro index ccc76f2..56e092d 100644 --- a/src/pages/fics/index.astro +++ b/src/pages/fics/index.astro @@ -18,7 +18,9 @@ chapters.sort((a, b) => a.data.publishedAt.valueOf() - b.data.publishedAt.valueO {post.data.publishedAt.toLocaleDateString(undefined, { dateStyle: "medium" })} {post.data.title} in - {fics.find(({ id }) => post.id.startsWith(id))?.data.title} + + {fics.find(({ id }) => post.id.startsWith(id))?.data.title} + ))} diff --git a/src/utils/moods.ts b/src/utils/moods.ts new file mode 100644 index 0000000..73d21fb --- /dev/null +++ b/src/utils/moods.ts @@ -0,0 +1,134 @@ +export default [ + "accomplished", + "aggravated", + "amused", + "angry", + "annoyed", + "anxious", + "apathetic", + "artistic", + "awake", + "bitchy", + "blah", + "blank", + "bored", + "bouncy", + "busy", + "calm", + "cheerful", + "chipper", + "cold", + "complacent", + "confused", + "contemplative", + "content", + "cranky", + "crappy", + "crazy", + "creative", + "crushed", + "curious", + "cynical", + "depressed", + "determined", + "devious", + "dirty", + "disappointed", + "discontent", + "distressed", + "ditzy", + "dorky", + "drained", + "drunk", + "ecstatic", + "embarrassed", + "energetic", + "enraged", + "enthralled", + "envious", + "exanimate", + "excited", + "exhausted", + "flirty", + "frustrated", + "full", + "geeky", + "giddy", + "giggly", + "gloomy", + "good", + "grateful", + "groggy", + "grumpy", + "guilty", + "happy", + "high", + "hopeful", + "horny", + "hot", + "hungry", + "hyper", + "impressed", + "indescribable", + "indifferent", + "infuriated", + "intimidated", + "irate", + "irritated", + "jealous", + "jubilant", + "lazy", + "lethargic", + "listless", + "lonely", + "loved", + "melancholy", + "mellow", + "mischievous", + "moody", + "morose", + "naughty", + "nauseated", + "nerdy", + "nervous", + "nostalgic", + "numb", + "okay", + "optimistic", + "peaceful", + "pensive", + "pessimistic", + "pissed off", + "pleased", + "predatory", + "productive", + "quixotic", + "recumbent", + "refreshed", + "rejected", + "rejuvenated", + "relaxed", + "relieved", + "restless", + "rushed", + "sad", + "satisfied", + "scared", + "shocked", + "sick", + "silly", + "sleepy", + "sore", + "stressed", + "surprised", + "sympathetic", + "thankful", + "thirsty", + "thoughtful", + "tired", + "touched", + "uncomfortable", + "weird", + "working", + "worried", +] as const; \ No newline at end of file