not-found.tsx 1.4 KB

123456789101112131415161718192021222324252627282930313233
  1. import Link from 'next/link'
  2. import { getTranslations } from 'next-intl/server'
  3. import { Wrench } from 'lucide-react'
  4. import { Button } from '@/components/ui/button'
  5. export default async function NotFound() {
  6. const t = await getTranslations('common')
  7. return (
  8. <div className="grid-bg flex min-h-screen items-center justify-center p-4">
  9. <div className="absolute inset-0 overflow-hidden">
  10. <div className="absolute -top-40 -right-40 h-96 w-96 rounded-full bg-primary/10 blur-3xl" />
  11. <div className="absolute -bottom-40 -left-40 h-96 w-96 rounded-full bg-primary/5 blur-3xl" />
  12. </div>
  13. <div className="glass relative z-10 w-full max-w-md rounded-2xl p-8 text-center shadow-2xl">
  14. <div className="mb-6 inline-flex h-20 w-20 items-center justify-center rounded-full bg-primary/10">
  15. <Wrench className="h-10 w-10 text-primary" strokeWidth={1.5} />
  16. </div>
  17. <p className="mb-2 font-mono text-6xl font-bold tracking-tighter text-primary">404</p>
  18. <h1 className="text-xl font-semibold tracking-tight">{t('notFoundPage.title')}</h1>
  19. <p className="mt-2 text-sm text-muted-foreground">{t('notFoundPage.description')}</p>
  20. <div className="mt-8 flex flex-col gap-3 sm:flex-row sm:justify-center">
  21. <Button asChild>
  22. <Link href="/">{t('notFoundPage.backToDashboard')}</Link>
  23. </Button>
  24. </div>
  25. </div>
  26. </div>
  27. )
  28. }