Files
pw/src/pages/search-index.json.js
T
Asger Geel Weirsøe 58d68aa95f Engelske projektsider under /en/projects
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
2026-10-04 07:28:09 +02:00

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' },
});
}