Files
landing_page/refer_landing_page/app/publications/page.tsx
T
Godopu f34e9bad57 refactor(pages,a11y,seo): enhance subpage metadata, semantic HTML, accessibility, and E2E regression tests
- Standardize Next.js Metadata and dynamic generateMetadata across all subpages
- Fix duplicate main landmark in publications page by replacing nested main with div
- Unify Members page spacing (space-y-10 sm:space-y-14, pt-6 md:pt-8) and responsive H2s
- Add aria-label and focus ring to CategoryNav View All links for a11y
- Derive dynamic course history semester ranges in Lectures page
- Add 3 comprehensive E2E test cases (test_08, test_09, test_10) for highlights, active border, CITE brand links, and English H1 headers
2026-08-24 16:10:11 +09:00

82 lines
3.1 KiB
TypeScript

import type { Metadata } from "next";
import { CategoryNav } from "./_components/CategoryNav";
import { publications } from "../../content/publications";
export const metadata: Metadata = {
title: "Publications",
description: "AI Agent Networking Lab (ANL) research publications and patents overview",
};
const REPRESENTATIVE_HIGHLIGHT_TITLES = [
"Globally Integrated Trust Authority (GITA) for Resource-Constrained Edge Devices in IoT and 6G",
"Application Level Trust Authority (APPLETA) for Resource-Constrained Edge Devices in IoT and 6G",
"mQUIC: Use of QUIC for Handover Support with Connection Migration in Wireless/Mobile Networks",
"Use of QUIC for CoAP Transport in IoT Networks",
"Use of QUIC for Mobile-Oriented Future Internet (Q-MOFI)",
];
export default function PublicationsIndexPage() {
// Selected 5 representative publications
const highlights = REPRESENTATIVE_HIGHLIGHT_TITLES.map((title) =>
publications.find(
(p) => p.title.trim().toLowerCase() === title.trim().toLowerCase()
)
).filter((p): p is (typeof publications)[0] => Boolean(p));
return (
<div className="container-content py-8 sm:py-12 space-y-10 sm:space-y-14">
{/* Page Header */}
<section>
<h1 className="font-serif text-4xl sm:text-5xl font-normal text-ink tracking-tight">
PUBLICATIONS
</h1>
</section>
{/* Category Summary Cards */}
<section className="pt-6 md:pt-8 border-t border-line">
<CategoryNav />
</section>
{/* Highlights Section */}
<section className="space-y-6 pt-6 md:pt-8 border-t border-line">
<h2 className="font-serif text-2xl sm:text-3xl font-normal text-cobalt-dark">
Highlights
</h2>
<div className="divide-y divide-line border border-line bg-paper rounded-lg overflow-hidden shadow-sm">
{highlights.map((pub, idx) => (
<article key={`${pub.category}-${idx}`} className="p-5 hover:bg-ivory/60 transition-colors space-y-2">
<div className="flex flex-wrap items-center gap-2 text-xs font-mono text-ink-mute">
<span className="px-2 py-0.5 rounded bg-ivory border border-line text-ink font-bold">
{pub.publishedAt?.substring(0, 7) || "Recent"}
</span>
<span>·</span>
<span className="capitalize">{pub.category.replace(/-/g, " ")}</span>
{pub.doi && (
<>
<span>·</span>
<span className="text-vermillion-dark">DOI: {pub.doi}</span>
</>
)}
</div>
<h3 className="font-serif text-base font-normal text-ink leading-snug">
{pub.title}
</h3>
{pub.authors && (
<p className="text-xs text-ink-mute">
{pub.authors}
</p>
)}
{pub.venue && (
<p className="text-xs italic text-ink-mute">
{pub.venue}{pub.volume ? `, ${pub.volume}` : ""}
</p>
)}
</article>
))}
</div>
</section>
</div>
);
}