A simple, clean, fast browser for the AtmosphereConf(2026) VODs
1import { lazy, Suspense } from 'react'
2import { Navigate, Route, Routes } from 'react-router-dom'
3
4import { AppShell } from '@/components/layout/app-shell'
5
6const BrowsePage = lazy(() => import('@/pages/browse-page').then((module) => ({ default: module.BrowsePage })))
7const AtmosphereConfPage = lazy(() =>
8 import('@/pages/atmosphereconf-page').then((module) => ({ default: module.AtmosphereConfPage })),
9)
10const SearchPage = lazy(() => import('@/pages/search-page').then((module) => ({ default: module.SearchPage })))
11const AboutPage = lazy(() => import('@/pages/about-page').then((module) => ({ default: module.AboutPage })))
12const VideoPage = lazy(() => import('@/pages/video-page').then((module) => ({ default: module.VideoPage })))
13const TagPage = lazy(() => import('@/pages/tag-page').then((module) => ({ default: module.TagPage })))
14
15function RouteFallback() {
16 return (
17 <section className="rounded-lg border border-line/45 bg-surface/80 p-5">
18 <p className="text-sm text-muted">Loading view...</p>
19 </section>
20 )
21}
22
23function App() {
24 return (
25 <AppShell>
26 <Suspense fallback={<RouteFallback />}>
27 <Routes>
28 <Route path="/" element={<BrowsePage />} />
29 <Route path="/atmosphereconf-2026" element={<AtmosphereConfPage />} />
30 <Route path="/search" element={<SearchPage />} />
31 <Route path="/about" element={<AboutPage />} />
32 <Route path="/video/:didParam/:rkeyParam" element={<VideoPage />} />
33 <Route path="/tag/:tagParam" element={<TagPage />} />
34 <Route path="*" element={<Navigate to="/" replace />} />
35 </Routes>
36 </Suspense>
37 </AppShell>
38 )
39}
40
41export default App