- Next.js 14 + Tailwind + TypeScript scaffolded - PocketBase v0.39.8 collections: JEI_invoices, JEI_invoice_lines, JEI_stock_codes (30 fields total, locked to superuser) - PDF extraction: scripts/extract_invoices.py parses 33 PDFs -> 38 records - Import script: scripts/import_to_pb.py idempotent push to PB - Imported: 24 invoices, 70+ stock codes, 118 invoice lines - Pages: /, /invoices, /invoices/[id], /stock-codes, /stock-codes/[code] - All 5 pages verified returning 200 with real data on port 6002
34 lines
1 KiB
TypeScript
34 lines
1 KiB
TypeScript
import "./globals.css";
|
|
import type { Metadata } from "next";
|
|
import Link from "next/link";
|
|
|
|
export const metadata: Metadata = {
|
|
title: "JEI South Africa",
|
|
description: "Invoice and stock tracker for JEI South Africa",
|
|
};
|
|
|
|
export default function RootLayout({
|
|
children,
|
|
}: {
|
|
children: React.ReactNode;
|
|
}) {
|
|
return (
|
|
<html lang="en">
|
|
<body>
|
|
<header className="bg-brand text-white shadow">
|
|
<div className="max-w-7xl mx-auto px-4 py-4 flex items-center justify-between">
|
|
<Link href="/" className="text-xl font-semibold">
|
|
JEI South Africa
|
|
</Link>
|
|
<nav className="flex gap-6 text-sm">
|
|
<Link href="/" className="hover:underline">Dashboard</Link>
|
|
<Link href="/invoices" className="hover:underline">Invoices</Link>
|
|
<Link href="/stock-codes" className="hover:underline">Stock Codes</Link>
|
|
</nav>
|
|
</div>
|
|
</header>
|
|
<main className="max-w-7xl mx-auto px-4 py-8">{children}</main>
|
|
</body>
|
|
</html>
|
|
);
|
|
}
|