/** * About page — Bauhaus / Leica minimalist layout. * Reads content from content/about.md (frontmatter + markdown body). */ import { readFileSync } from 'fs'; import { join } from 'path'; import matter from 'gray-matter'; import Image from 'next/image'; import { imageUrl, assetPlaceholder } from '@/lib/urls'; import { immich } from '@/lib/immich'; import './about.css'; export const dynamic = 'force-dynamic'; interface AboutFrontmatter { portrait?: string; name?: string; location?: string; gear?: string[]; } function getAboutContent() { const filePath = join(process.cwd(), 'content', 'about.md'); if (!require('fs').existsSync(filePath)) { return { meta: {} as AboutFrontmatter, body: '' }; } const raw = readFileSync(filePath, 'utf-8'); const { data, content } = matter(raw); return { meta: data as AboutFrontmatter, body: content.trim() }; } export default async function AboutPage() { const { meta, body } = getAboutContent(); // Fetch ThumbHash for portrait placeholder const portraitAsset = meta.portrait ? await immich.getAssetInfo(meta.portrait) : null; const portraitPlaceholder = portraitAsset ? assetPlaceholder(portraitAsset) : null; return (
{meta.location}
}{line}
))}