# Prompt-to-PR: Pagefind-Suche zu einer Astro-Site hinzufügen

> Das vollständige SOP zum Hinzufügen einer statischen, serverlosen Suche zu einer Astro-Site mit Pagefind – vom ersten Prompt bis zur PR-Beschreibung.

**Type:** Playbook  
**Tools:** Cursor, Claude Code  
**Stack:** Astro, TypeScript  
**Difficulty:** easy  
**Updated:** 2026-06-08

---

# Ein vollständiges Playbook: Anforderung, erster Prompt, erwartete Änderungen, Review, Tests, wahrscheinliche Fehler, Fix-Prompt und PR-Beschreibung.

## 1. Anforderung

Volltextsuche zu einer statischen Astro-Site ohne Server und ohne Datenbank hinzufügen.

## 2. Erster Prompt

```txt title="First Prompt"
Add Pagefind search to this Astro static site.

- Add `pagefind` as a devDependency.
- Update the build script to run `astro build && pagefind --site dist`.
- Create a `/search` page that mounts Pagefind UI from `/pagefind/pagefind-ui.js`.
- Mark the main article body with `data-pagefind-body` and add
  `data-pagefind-ignore` to nav/footer.
- Do not introduce a server adapter; this stays fully static.
```

## 3. Erwartete Dateiänderungen

```txt
package.json                 (build script)
src/pages/search.astro       (new)
src/layouts/BaseLayout.astro (data-pagefind-ignore on chrome)
```

## 4. Review-Checkliste

- Das Build-Skript führt Pagefind *nach* `astro build` aus.
- Die Suchseite verhält sich in `astro dev` graziös (Index existiert nur nach dem Build).
- Nav/Footer werden vom Index ausgeschlossen.

## 5. Testbefehle

```bash
bun run build
bun run preview
# open /search and query a known term
```

## 6. Häufige Fehler

- Einbinden der Pagefind-Benutzeroberfläche bevor das Skript geladen wird → `PagefindUI is not defined`.
- Ausführen von Pagefind vor dem Build, sodass es nichts indiziert.

## 7. Fix-Prompt

```txt title="Fix Prompt"
Pagefind indexed an empty site. Ensure the build runs `astro build` first,
then `pagefind --site dist`, and that the UI script loads before init.
```

## 8. PR-Beschreibung

```md title="PR description"
Add static full-text search via Pagefind. Indexes `dist` at build time;
no backend. New `/search` page; nav/footer excluded from the index.
```