.
All checks were successful
Deploy blog-frontend / build-and-deploy (push) Successful in 2m9s

This commit is contained in:
박원엽
2026-05-29 10:40:33 +09:00
parent 7535fb6ac6
commit 98dfb651a2
5 changed files with 17 additions and 49 deletions

1
LOG.md
View File

@@ -7,6 +7,7 @@
- Restored the missing local `chess.js` install in `node_modules` so build verification could run; no dependency version changes were intended. - Restored the missing local `chess.js` install in `node_modules` so build verification could run; no dependency version changes were intended.
- Refined the desktop layout after review: the sidebar can now collapse on PC, the main window width is more consistent across dashboard/list/reader/chess/admin views, the sidebar archive shortcut was removed, and the top menu now uses WYPark branding with GitHub/email links plus theme switching only. - Refined the desktop layout after review: the sidebar can now collapse on PC, the main window width is more consistent across dashboard/list/reader/chess/admin views, the sidebar archive shortcut was removed, and the top menu now uses WYPark branding with GitHub/email links plus theme switching only.
- Moved auth/admin/write/logout actions into the Dock and changed category windows/menu labels to show the actual category name instead of Finder/posts copy. - Moved auth/admin/write/logout actions into the Dock and changed category windows/menu labels to show the actual category name instead of Finder/posts copy.
- Tuned the follow-up layout: main content now centers inside the area remaining after the desktop sidebar, sidebar GitHub/email shortcuts were removed, top-bar GitHub/email links now sit as plain left-side menu items, and the home labels were simplified to 홈/WYPark.
- Validation: `npm run lint` passed, `npm run build` passed. The build logged a sitemap fetch warning because the backend API at the local default was not reachable, but the command completed successfully. - Validation: `npm run lint` passed, `npm run build` passed. The build logged a sitemap fetch warning because the backend API at the local default was not reachable, but the command completed successfully.
- Browser verification: previously started this app on `http://localhost:3100` because ports 3000 and 3001 were already occupied; confirmed desktop background gradients, menu bar, Dock, and window surfaces on `/`, `/archive`, and `/login`. For this follow-up, the dev/standalone server started successfully in foreground but exited when launched as a background non-interactive process, so browser verification was skipped after lint/build passed. - Browser verification: previously started this app on `http://localhost:3100` because ports 3000 and 3001 were already occupied; confirmed desktop background gradients, menu bar, Dock, and window surfaces on `/`, `/archive`, and `/login`. For this follow-up, the dev/standalone server started successfully in foreground but exited when launched as a background non-interactive process, so browser verification was skipped after lint/build passed.
- Recommended next task: review the remaining older Korean strings in admin/editor flows and normalize any mojibake that predates this redesign. - Recommended next task: review the remaining older Korean strings in admin/editor flows and normalize any mojibake that predates this redesign.

View File

@@ -279,8 +279,7 @@ function HomeContent() {
<main className="mx-auto w-full px-0 py-4 md:w-[78vw] md:max-w-[1280px] md:py-6"> <main className="mx-auto w-full px-0 py-4 md:w-[78vw] md:max-w-[1280px] md:py-6">
<h1 className="sr-only">WYPark Blog</h1> <h1 className="sr-only">WYPark Blog</h1>
<WindowSurface <WindowSurface
title="WYPark Desktop" title="WYPark"
subtitle="Blog dashboard"
controls={( controls={(
<Link <Link
href="/archive" href="/archive"

View File

@@ -4,7 +4,6 @@ import Link from 'next/link';
import { usePathname } from 'next/navigation'; import { usePathname } from 'next/navigation';
import { useQuery } from '@tanstack/react-query'; import { useQuery } from '@tanstack/react-query';
import { clsx } from 'clsx'; import { clsx } from 'clsx';
import { Github, Mail } from 'lucide-react';
import { getProfile } from '@/api/profile'; import { getProfile } from '@/api/profile';
import ThemeToggle from '@/components/theme/ThemeToggle'; import ThemeToggle from '@/components/theme/ThemeToggle';
@@ -36,7 +35,7 @@ const getAppTitle = (pathname: string) => {
if (pathname.startsWith('/play/chess')) return 'Chess'; if (pathname.startsWith('/play/chess')) return 'Chess';
if (pathname.startsWith('/login')) return 'Login'; if (pathname.startsWith('/login')) return 'Login';
if (pathname.startsWith('/signup')) return 'Signup'; if (pathname.startsWith('/signup')) return 'Signup';
return 'Desktop'; return '';
}; };
export default function DesktopMenuBar({ isSidebarCollapsed }: DesktopMenuBarProps) { export default function DesktopMenuBar({ isSidebarCollapsed }: DesktopMenuBarProps) {
@@ -50,9 +49,7 @@ export default function DesktopMenuBar({ isSidebarCollapsed }: DesktopMenuBarPro
const githubUrl = profile?.githubUrl || defaultProfile.githubUrl; const githubUrl = profile?.githubUrl || defaultProfile.githubUrl;
const email = profile?.email || defaultProfile.email; const email = profile?.email || defaultProfile.email;
const menuLinkClass = 'text-xs font-semibold text-[var(--color-text-subtle)] transition hover:text-[var(--color-text)]';
const linkClass =
'inline-flex h-8 shrink-0 items-center gap-2 rounded-full border border-[var(--color-line)] bg-[var(--color-control)] px-3 text-sm font-semibold text-[var(--color-text-muted)] shadow-[var(--shadow-control)] backdrop-blur-2xl transition hover:bg-[var(--window-bg-strong)] hover:text-[var(--color-text)]';
return ( return (
<div <div
@@ -70,27 +67,18 @@ export default function DesktopMenuBar({ isSidebarCollapsed }: DesktopMenuBarPro
<span className="truncate text-sm font-semibold text-[var(--color-text-muted)]"> <span className="truncate text-sm font-semibold text-[var(--color-text-muted)]">
{getAppTitle(pathname)} {getAppTitle(pathname)}
</span> </span>
<div className="hidden items-center gap-3 md:flex">
<a href={githubUrl} target="_blank" rel="noreferrer" className={menuLinkClass}>
GitHub
</a>
<a href={`mailto:${email}`} className={menuLinkClass}>
Email
</a>
</div>
</div> </div>
<div className="flex shrink-0 items-center gap-2">
<div className="hidden items-center gap-2 md:flex">
<a
href={githubUrl}
target="_blank"
rel="noreferrer"
className={linkClass}
>
<Github size={15} />
<span>GitHub</span>
</a>
<a href={`mailto:${email}`} className={linkClass}>
<Mail size={15} />
<span>Email</span>
</a>
</div>
<ThemeToggle /> <ThemeToggle />
</div> </div>
</div> </div>
</div>
); );
} }

View File

@@ -37,8 +37,10 @@ export default function DesktopShell({ children }: { children: ReactNode }) {
<main <main
className={clsx( className={clsx(
'relative w-full flex-1 transition-[margin] duration-300 ease-out', 'relative w-full flex-1 transition-[margin,width] duration-300 ease-out',
isSidebarCollapsed ? 'md:ml-20' : 'md:ml-72', isSidebarCollapsed
? 'md:ml-20 md:w-[calc(100%-5rem)]'
: 'md:ml-72 md:w-[calc(100%-18rem)]',
)} )}
> >
<div className="mx-auto w-full px-4 pb-28 pt-20 md:px-6 md:pb-32 md:pt-24 lg:px-8"> <div className="mx-auto w-full px-4 pb-28 pt-20 md:px-6 md:pb-32 md:pt-24 lg:px-8">

View File

@@ -14,9 +14,7 @@ import {
FileQuestion, FileQuestion,
Folder, Folder,
FolderOpen, FolderOpen,
Github,
Home, Home,
Mail,
Menu, Menu,
X, X,
} from 'lucide-react'; } from 'lucide-react';
@@ -386,30 +384,10 @@ function SidebarContent({
<div <div
className={clsx( className={clsx(
'shrink-0 border-t border-[var(--color-line)] bg-[var(--window-titlebar)] p-5', 'shrink-0 border-t border-[var(--color-line)] bg-[var(--window-titlebar)] p-5',
isDesktopCollapsed && 'md:px-3 md:py-4', isDesktopCollapsed && 'md:hidden',
)} )}
> >
<div className={clsx('flex justify-center gap-3', isDesktopCollapsed && 'md:flex-col md:items-center')}> <p className="text-center text-[10px] font-light text-[var(--color-text-subtle)]">
<a
href={displayProfile.githubUrl || '#'}
target="_blank"
rel="noreferrer"
className="rounded-full border border-[var(--color-line)] bg-[var(--color-control)] p-2.5 text-[var(--color-text-muted)] shadow-[var(--shadow-control)] transition-all hover:bg-[var(--color-text)] hover:text-white dark:hover:bg-white dark:hover:text-black"
aria-label="GitHub"
title="GitHub"
>
<Github size={18} />
</a>
<a
href={`mailto:${displayProfile.email}`}
className="rounded-full border border-[var(--color-line)] bg-[var(--color-control)] p-2.5 text-[var(--color-text-muted)] shadow-[var(--shadow-control)] transition-all hover:bg-[var(--color-accent)] hover:text-white"
aria-label="이메일"
title="이메일"
>
<Mail size={18} />
</a>
</div>
<p className={clsx('mt-4 text-center text-[10px] font-light text-[var(--color-text-subtle)]', isDesktopCollapsed && 'md:hidden')}>
© {new Date().getFullYear()} {displayProfile.name} © {new Date().getFullYear()} {displayProfile.name}
</p> </p>
</div> </div>