diff --git a/apps/web/src/app/[lang]/error.tsx b/apps/web/src/app/[lang]/error.tsx
new file mode 100644
index 00000000..d8dc70ac
--- /dev/null
+++ b/apps/web/src/app/[lang]/error.tsx
@@ -0,0 +1,38 @@
+"use client";
+
+import { Button } from "@tietokilta/ui";
+
+export const metadata = {
+ title: "Jotain meni pieleen",
+ description: "Hups, jotain meni pieleen.",
+};
+
+// TODO: add i18n when next.js supports params in error pages https://github.com/vercel/next.js/discussions/43179
+
+function Error({
+ error,
+ reset,
+}: {
+ error: Error & { digest?: string };
+ reset: () => void;
+}) {
+ return (
+
+
+
+
+
+ Oho, nyt meni jotain pieleen. Ota yhteyttä sivuston ylläpitäjään.
+ Virheen tunniste on {error.digest}
.
+
+
+
+
+ );
+}
+
+export default Error;
diff --git a/apps/web/src/app/[lang]/global-error.tsx b/apps/web/src/app/[lang]/global-error.tsx
new file mode 100644
index 00000000..5e9f9cd8
--- /dev/null
+++ b/apps/web/src/app/[lang]/global-error.tsx
@@ -0,0 +1,47 @@
+"use client";
+
+import { Button } from "@tietokilta/ui";
+
+export const metadata = {
+ title: "Tietokilta - Jotain meni pieleen",
+ description: "Hups, jotain meni pieleen.",
+};
+
+// TODO: add i18n when next.js supports params in global-error pages https://github.com/vercel/next.js/discussions/43179
+
+function GlobalError({
+ error,
+ reset,
+}: {
+ error: Error & { digest?: string };
+ reset: () => void;
+}) {
+ return (
+
+
+
+
+
+
+ Jotain meni pieleen
+
+
+
+
+
+ Oho, nyt meni jotain pahasti pieleen. Ota yhteyttä sivuston
+ ylläpitäjään. Virheen tunniste on{" "}
+ {error.digest}
.
+
+
+
+
+
+
+
+ );
+}
+
+export default GlobalError;
diff --git a/apps/web/src/app/[lang]/not-found.tsx b/apps/web/src/app/[lang]/not-found.tsx
new file mode 100644
index 00000000..d4e397a8
--- /dev/null
+++ b/apps/web/src/app/[lang]/not-found.tsx
@@ -0,0 +1,34 @@
+"use client";
+
+import { Button } from "@tietokilta/ui";
+import Link from "next/link";
+
+export const metadata = {
+ title: "404 - Sivua ei löytynyt",
+ description: "Sivua ei löytynyt.",
+};
+
+// TODO: add i18n when next.js supports params in not-found pages https://github.com/vercel/next.js/discussions/43179
+
+function Page() {
+ return (
+
+
+
+ 404 - Sivua ei löytynyt
+
+
+
+
+
+ Sivua ei löytynyt. Tarkista osoite tai palaa etusivulle.
+
+
+
+
+ );
+}
+
+export default Page;