Close out the read-only surface before cutover with three families of small fixes that the previous phases left unfinished: - Error boundaries: add src/app/error.tsx (route-segment), global-error.tsx (root crash fallback with its own minimal html/body — no Providers dependency since those may be the thing that crashed), and not-found.tsx for a Hebrew 404 instead of the default Next page. - Accessibility: wire usePathname() into AppShell so the current nav item gets aria-current="page" and a gold underline. Add aria-label + aria-hidden on the icon-only buttons that Phase 5 left text-less (corpus trash, parties-field Plus). Nav gets an aria-label of its own. - Metadata template: title on each route now reads "X · עוזר משפטי" via the layout.tsx title.template. Description localized to Jerusalem. - README: full E2E smoke test checklist covering all 9 screens, plus a backend contract table so future phases know which hook wraps which endpoint. Documents the known Gitea→Coolify webhook issue. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
25 lines
849 B
TypeScript
25 lines
849 B
TypeScript
import Link from "next/link";
|
||
import { AppShell } from "@/components/app-shell";
|
||
import { Button } from "@/components/ui/button";
|
||
|
||
export default function NotFound() {
|
||
return (
|
||
<AppShell>
|
||
<section className="max-w-xl mx-auto text-center py-16 space-y-5">
|
||
<div className="font-display text-gold text-6xl leading-none" aria-hidden="true">
|
||
404
|
||
</div>
|
||
<div className="space-y-2">
|
||
<h1 className="text-navy">הדף לא נמצא</h1>
|
||
<p className="text-ink-muted leading-relaxed">
|
||
הכתובת שביקשת אינה קיימת או שהוזזה לדף אחר.
|
||
</p>
|
||
</div>
|
||
<Button asChild className="bg-navy hover:bg-navy-soft text-parchment">
|
||
<Link href="/">חזרה לבית</Link>
|
||
</Button>
|
||
</section>
|
||
</AppShell>
|
||
);
|
||
}
|