Skip to content

Commit ae34ca1

Browse files
committed
add 404 page
1 parent 1023e44 commit ae34ca1

1 file changed

Lines changed: 81 additions & 0 deletions

File tree

apps/frontend/app/not-found.tsx

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
import { FileQuestionIcon, HomeIcon, SearchXIcon, TrophyIcon } from 'lucide-react';
2+
import Link from 'next/link';
3+
import { Header } from '@/components/layout/Header';
4+
import { Button } from '@/components/ui/button';
5+
6+
export default function NotFound() {
7+
return (
8+
<>
9+
<Header />
10+
<main className='flex-1'>
11+
<div className='container mx-auto min-h-[calc(100svh-3.5rem)] px-4 py-12 flex items-center'>
12+
<section className='mx-auto grid w-full max-w-5xl items-center gap-10 md:grid-cols-[1fr_0.9fr]'>
13+
<div className='space-y-6 text-center md:text-left'>
14+
<p className='text-sm font-semibold text-primary'>404</p>
15+
<div className='space-y-3'>
16+
<h1 className='text-3xl font-bold tracking-tight sm:text-4xl'>
17+
探している資料が見つかりません
18+
</h1>
19+
<p className='mx-auto max-w-2xl text-base leading-7 text-muted-foreground md:mx-0'>
20+
URLが変わったか、資料が整理されたか、閲覧できる場所ではないのかもしれません。
21+
いったん戻って、必要な資料を探し直してみてください。
22+
</p>
23+
</div>
24+
25+
<div className='flex flex-col items-stretch gap-3 sm:flex-row sm:items-center md:justify-start justify-center'>
26+
<Button size='lg' render={<Link href='/' />}>
27+
<HomeIcon className='h-4 w-4' />
28+
ホームへ戻る
29+
</Button>
30+
<Button size='lg' variant='outline' render={<Link href='/competitions' />}>
31+
<TrophyIcon className='h-4 w-4' />
32+
大会一覧を見る
33+
</Button>
34+
</div>
35+
36+
<Button variant='link' className='px-0' render={<Link href='/dashboard' />}>
37+
ダッシュボードを開く
38+
</Button>
39+
</div>
40+
41+
<div className='relative mx-auto aspect-[4/3] w-full max-w-md'>
42+
<div className='absolute inset-x-8 bottom-6 h-5 rounded-full bg-foreground/10 blur-xl' />
43+
44+
<div className='absolute left-8 top-12 h-52 w-36 -rotate-6 rounded-lg border bg-card p-4 shadow-md'>
45+
<div className='mb-4 h-3 w-20 rounded-full bg-muted' />
46+
<div className='space-y-2'>
47+
<div className='h-2 rounded-full bg-muted' />
48+
<div className='h-2 w-4/5 rounded-full bg-muted' />
49+
<div className='h-2 w-2/3 rounded-full bg-muted' />
50+
</div>
51+
</div>
52+
53+
<div className='absolute right-8 top-16 h-52 w-36 rotate-6 rounded-lg border bg-card p-4 shadow-md'>
54+
<div className='mb-4 h-3 w-16 rounded-full bg-secondary' />
55+
<div className='space-y-2'>
56+
<div className='h-2 rounded-full bg-muted' />
57+
<div className='h-2 w-3/4 rounded-full bg-muted' />
58+
<div className='h-2 w-5/6 rounded-full bg-muted' />
59+
</div>
60+
</div>
61+
62+
<div className='absolute inset-x-0 top-8 mx-auto flex h-56 w-40 flex-col items-center justify-center rounded-lg border bg-background p-5 text-center shadow-lg'>
63+
<div className='mb-4 flex h-16 w-16 items-center justify-center rounded-full bg-secondary text-secondary-foreground'>
64+
<FileQuestionIcon className='h-8 w-8' />
65+
</div>
66+
<div className='space-y-2'>
67+
<div className='mx-auto h-2 w-20 rounded-full bg-muted' />
68+
<div className='mx-auto h-2 w-14 rounded-full bg-muted' />
69+
</div>
70+
</div>
71+
72+
<div className='absolute bottom-12 right-12 flex h-16 w-16 items-center justify-center rounded-full border bg-card text-muted-foreground shadow-md'>
73+
<SearchXIcon className='h-8 w-8' />
74+
</div>
75+
</div>
76+
</section>
77+
</div>
78+
</main>
79+
</>
80+
);
81+
}

0 commit comments

Comments
 (0)