Hver projektside findes nu også på engelsk (/en/projects/<navn>) med en oversigt på /en/projects. Siderne deler komponenten ProjektSide, peger på hinanden med hreflang og har et sprogskift øverst. Head og Base tager lang og alternates, så andre sider kan oversættes på samme måde. /tarballz/ er med i sitemap'et, nu hvor oversigten der må indekseres. Claude-Session: https://claude.ai/code/session_012LCTmU2ewo8tnM1dByYAoG
41 lines
2.0 KiB
JavaScript
41 lines
2.0 KiB
JavaScript
// Build-time søgeindeks til command paletten (⌘K): faste sider + alle blogindlæg.
|
|
import { getCollection } from 'astro:content';
|
|
|
|
export async function GET() {
|
|
const posts = await getCollection('blog', ({ data }) => !data.draft);
|
|
const projekter = await getCollection('projekter', ({ data }) => !data.draft);
|
|
const items = [
|
|
{ type: 'page', title: 'Forside', url: '/' },
|
|
{ type: 'page', title: 'CV', url: '/cv' },
|
|
{ type: 'page', title: 'Projekter', url: '/projekter' },
|
|
...projekter.map((p) => p.data.lang === 'en'
|
|
? { type: 'page', title: `Project: ${p.data.title} (English)`, url: `/en/projects/${p.id.replace(/^en\//, '')}`,
|
|
extra: [p.data.sprog, ...p.data.aur, ...p.data.tags].join(' ') }
|
|
: { type: 'page', title: `Projekt: ${p.data.title}`, url: `/projekter/${p.id}`,
|
|
extra: [p.data.sprog, ...p.data.aur, ...p.data.tags].join(' ') }),
|
|
{ type: 'page', title: 'Færdigbyggede pakker (tarballz)', url: '/tarballz/' },
|
|
{ type: 'page', title: 'Blog', url: '/blog' },
|
|
{ type: 'page', title: 'Tags', url: '/tags' },
|
|
{ type: 'page', title: 'NemHandel-opslag', url: '/nemhandel' },
|
|
{ type: 'page', title: 'Profil-opslag (Nemhandel & Peppol)', url: '/profiler' },
|
|
{ type: 'page', title: 'UBL-tjek & identifikator-afkoder', url: '/ubl' },
|
|
{ type: 'page', title: 'Spørg mit CV (AI-chat)', url: '/chat' },
|
|
{ type: 'page', title: 'Status (homelab)', url: '/status' },
|
|
{ type: 'page', title: 'Now', url: '/now' },
|
|
{ type: 'page', title: 'Uses', url: '/uses' },
|
|
{ type: 'page', title: 'Kolofon', url: '/colophon' },
|
|
{ type: 'page', title: 'Cookies', url: '/cookies' },
|
|
...posts
|
|
.sort((a, b) => b.data.date.getTime() - a.data.date.getTime())
|
|
.map((p) => ({
|
|
type: 'post',
|
|
title: p.data.title,
|
|
url: `/blog/${p.id}`,
|
|
extra: (p.data.tags || []).join(' '),
|
|
})),
|
|
];
|
|
return new Response(JSON.stringify(items), {
|
|
headers: { 'Content-Type': 'application/json; charset=utf-8' },
|
|
});
|
|
}
|