Changes include:

- Roboto Flex loaded from Google Fonts for compact UI text
- Reduced decorative borders while retaining useful input and divider borders
- Fixed blank journal detail pages
- Password-protected journal publisher with four-hour signed sessions
- New articles saved directly to posts.json
- Prominent Spotify, Instagram, and Steam buttons on Contact
- Desktop and mobile layouts visually verified
- Production build and authorization tests passed
This commit is contained in:
StormRunner06106
2026-09-11 11:35:01 -07:00
parent f80bceaa3c
commit 14d1dbbb07
15 changed files with 1507 additions and 32 deletions
+11 -3
View File
@@ -21,12 +21,17 @@ export default function BlogPostPage() {
useEffect(() => {
const controller = new AbortController();
setLoading(true);
setError("");
getPost(slug, controller.signal)
.then(setPost)
.then((result) => {
if (!controller.signal.aborted) setPost(result);
})
.catch((requestError) => {
if (requestError.name !== "AbortError") setError(requestError.message);
})
.finally(() => setLoading(false));
.finally(() => {
if (!controller.signal.aborted) setLoading(false);
});
return () => controller.abort();
}, [slug]);
@@ -38,6 +43,10 @@ export default function BlogPostPage() {
return <div className="container content-page"><ErrorState message={error} /></div>;
}
if (!post) {
return <div className="container content-page"><ErrorState message="This journal note could not be opened." /></div>;
}
return (
<article className="article-page">
<header className={`article-hero article-hero--${post.accent}`}>
@@ -72,4 +81,3 @@ export default function BlogPostPage() {
</article>
);
}