// app/notes/page.tsx // Server Component. Loads all notes from PocketBase and hands them to // the Client Component which owns the CRUD UI state. // // Notes live in the ysterbaard_notes collection. If the collection is // missing (PB returns 404) or any other load error happens, the page // renders an inline error banner instead of crashing with a generic 500. import { fetchCollection } from "@/lib/pb"; import type { YsterbaardNote } from "@/lib/types"; import PageHeader from "@/components/PageHeader"; import NotesList from "./NotesList"; export const dynamic = "force-dynamic"; async function loadNotes(): Promise<{ notes: YsterbaardNote[]; error: string | null }> { try { const list = await fetchCollection("ysterbaard_notes", { page: 1, perPage: 500, sort: "-id", }); return { notes: list.items ?? [], error: null }; } catch (err) { const msg = err instanceof Error ? err.message : "Unknown PB error"; if (msg.includes("404") || msg.toLowerCase().includes("not found")) { return { notes: [], error: "The ysterbaard_notes collection is missing on PocketBase. " + "Open https://pb.agent.apphub.co.za/_/ and create it before " + "using this tab. See docs/superpowers/specs/2026-09-16-notes-tab-design.md for the field spec.", }; } return { notes: [], error: `Could not load notes: ${msg}` }; } } export default async function NotesPage() { const { notes, error } = await loadNotes(); return ( <> {error ? (
{error}
) : ( )} ); }