mirror of
https://github.com/andwati/andwati.com.git
synced 2026-11-11 11:25:13 +00:00
- Fresh structure: Next.js App Router + Tailwind v4 at the repo root, exported as static files (output: export) and served by static-web-server - Remove the Strapi CMS, Astro app, Pagefind search, comments, old scripts, Lighthouse config and compose files; content in content/ is now plain markdown with YAML frontmatter - Pages: About, Writing, Reading (3D bookshelf) and Portfolio, styled after adammaj.com - SEO: metadata and canonicals, JSON-LD, generated OG images, sitemap, robots, RSS and JSON feeds, llms.txt - Umami via PUBLIC_UMAMI_SCRIPT_URL / PUBLIC_UMAMI_WEBSITE_ID (build args) - Dockerfile builds the export and serves it with sws.toml (security headers, clean URLs, .well-known, OG image content type, immutable asset caching) - Prettier and cspell for content with a husky/lint-staged pre-commit hook - Old redirect list dropped to start from a clean slate
21 lines
554 B
TypeScript
21 lines
554 B
TypeScript
import { getBooks } from "@/lib/content";
|
|
import { ogContentType, ogImage, ogSize } from "@/lib/og";
|
|
|
|
export const size = ogSize;
|
|
export const dynamic = "force-static";
|
|
export const contentType = ogContentType;
|
|
|
|
export function generateStaticParams() {
|
|
return getBooks().map((b) => ({ slug: b.slug }));
|
|
}
|
|
|
|
export default async function Image({
|
|
params,
|
|
}: {
|
|
params: Promise<{ slug: string }>;
|
|
}) {
|
|
const { slug } = await params;
|
|
const book = getBooks().find((b) => b.slug === slug);
|
|
return ogImage(book?.data.title ?? "Reading", "Reading");
|
|
}
|