feat: turbostarter boilerplate
Production-ready Next.js boilerplate with: - Runtime env validation (fail-fast on missing vars) - Feature-gated config (S3, Stripe, email, OAuth) - Docker + Coolify deployment pipeline - PostgreSQL + pgvector, MinIO S3, Better Auth - TypeScript strict mode (no ignoreBuildErrors) - i18n (en/es), AI modules, billing, monitoring Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
33
apps/web/src/app/not-found.tsx
Normal file
33
apps/web/src/app/not-found.tsx
Normal file
@@ -0,0 +1,33 @@
|
||||
import { getTranslation } from "@turbostarter/i18n/server";
|
||||
import { buttonVariants } from "@turbostarter/ui-web/button";
|
||||
|
||||
import { appConfig } from "~/config/app";
|
||||
import { pathsConfig } from "~/config/paths";
|
||||
import { BaseLayout } from "~/modules/common/layout/base";
|
||||
import { TurboLink } from "~/modules/common/turbo-link";
|
||||
|
||||
export default async function NotFound() {
|
||||
const { t } = await getTranslation({ ns: "common" });
|
||||
|
||||
return (
|
||||
<BaseLayout locale={appConfig.locale}>
|
||||
<main className="mx-auto flex max-w-xl flex-1 flex-col items-center justify-center gap-8">
|
||||
<div className="flex flex-col items-center justify-center gap-4">
|
||||
<h1 className="text-center text-4xl font-bold">
|
||||
{t("error.notFound")}
|
||||
</h1>
|
||||
<p className="text-muted-foreground max-w-md text-center">
|
||||
{t("error.resourceDoesNotExist")}
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<TurboLink
|
||||
href={pathsConfig.index}
|
||||
className={buttonVariants({ variant: "outline" })}
|
||||
>
|
||||
{t("goBackHome")}
|
||||
</TurboLink>
|
||||
</main>
|
||||
</BaseLayout>
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user