aboutsummaryrefslogtreecommitdiffstats
path: root/site/src
diff options
context:
space:
mode:
authorPinapelz <yukais@pinapelz.com>2025-07-01 18:31:01 -0700
committerPinapelz <yukais@pinapelz.com>2025-07-01 18:31:01 -0700
commitaa2807d370cdd3d52c2af6cf3cfde3a9600807fb (patch)
treed24148b985fb30053fd6a034490752163a2885f3 /site/src
parentd171a3c14802e319ffa561ebc899ecc440611052 (diff)
add not found pages for site and feed
Diffstat (limited to 'site/src')
-rw-r--r--site/src/App.tsx2
-rw-r--r--site/src/pages/Homepage.tsx48
-rw-r--r--site/src/pages/NotFound.tsx57
3 files changed, 105 insertions, 2 deletions
diff --git a/site/src/App.tsx b/site/src/App.tsx
index 79c64a1..b6823a6 100644
--- a/site/src/App.tsx
+++ b/site/src/App.tsx
@@ -1,5 +1,6 @@
import Home from './pages/Homepage';
import GameSelector from './pages/GameSelector'
+import NotFound from './pages/NotFound';
import { Routes, Route } from "react-router-dom";
function App() {
@@ -8,6 +9,7 @@ function App() {
<Route path="/" element={<Home />} />
<Route path="/games" element={<GameSelector />} />
<Route path="/game/:gameId" element={<Home />} />
+ <Route path="*" element={<NotFound />} />
</Routes>
);
}
diff --git a/site/src/pages/Homepage.tsx b/site/src/pages/Homepage.tsx
index 0d98206..5d202dc 100644
--- a/site/src/pages/Homepage.tsx
+++ b/site/src/pages/Homepage.tsx
@@ -20,10 +20,12 @@ export default function Home() {
null,
);
const [loading, setLoading] = useState<boolean>(true);
+ const [error, setError] = useState<boolean>(false);
useEffect(() => {
const fetchNews = async () => {
setLoading(true);
+ setError(false);
const newsDataFileName = gameId ? `${gameId}_news.json` : "news.json";
try {
const response = await fetch(
@@ -36,14 +38,15 @@ export default function Home() {
setNewsFeedData(data);
} catch (e) {
console.error(e);
+ setError(true);
} finally {
setLoading(false);
}
};
fetchNews();
- }, [gameId]); // Re-fetch when gameId changes
+ }, [gameId, newsAPIBase]); // Re-fetch when gameId changes
- if (loading || newsFeedData === null) {
+ if (loading) {
return (
<>
<TitleBar />
@@ -58,6 +61,47 @@ export default function Home() {
);
}
+ if (error || newsFeedData === null) {
+ return (
+ <>
+ <TitleBar />
+ <div
+ className={`${isMoe ? "bg-pink-100" : "bg-gray-950"} min-h-screen flex items-center justify-center`}
+ >
+ <div className="text-center px-4">
+ <div className={`${isMoe ? "text-pink-500" : "text-purple-500"} text-8xl font-bold mb-4`}>
+ 404
+ </div>
+ <h1 className={`${isMoe ? "text-pink-900" : "text-white"} text-3xl font-bold mb-4`}>
+ News Not Found
+ </h1>
+ <p className={`${isMoe ? "text-pink-700" : "text-gray-400"} text-lg mb-8`}>
+ {gameId
+ ? `Unable to fetch news for ${getGameTitle(gameId)}`
+ : "Unable to fetch news feed"
+ }
+ </p>
+ <div className={`${isMoe ? "bg-pink-200" : "bg-gray-800"} rounded-lg p-6 max-w-md mx-auto`}>
+ <p className={`${isMoe ? "text-pink-800" : "text-gray-300"} mb-4`}>
+ The news feed you're looking for might be temporarily unavailable or doesn't exist.
+ </p>
+ <a
+ href="/"
+ className={`inline-block px-6 py-3 rounded-lg font-semibold transition-colors ${
+ isMoe
+ ? "bg-pink-500 text-white hover:bg-pink-600"
+ : "bg-purple-600 text-white hover:bg-purple-700"
+ }`}
+ >
+ Return Home
+ </a>
+ </div>
+ </div>
+ </div>
+ </>
+ );
+ }
+
return (
<>
<TitleBar />
diff --git a/site/src/pages/NotFound.tsx b/site/src/pages/NotFound.tsx
new file mode 100644
index 0000000..62c978c
--- /dev/null
+++ b/site/src/pages/NotFound.tsx
@@ -0,0 +1,57 @@
+import { useSearchParams } from "react-router-dom";
+import TitleBar from "../components/TitleBar";
+
+export default function NotFound() {
+ const [searchParams] = useSearchParams();
+ const isMoe = searchParams.has("moe");
+
+ return (
+ <>
+ <TitleBar />
+ <div
+ className={`${isMoe ? "bg-pink-100 text-pink-900 font-[Zen_Maru_Gothic]" : "bg-gray-950 text-white"} min-h-screen py-6 flex items-center justify-center`}
+ >
+ <div className="max-w-[600px] mx-auto px-4 text-center">
+ <div
+ className={`${isMoe ? "bg-pink-200 text-pink-900" : "bg-gray-800 text-white"} rounded-lg p-8 shadow-lg`}
+ >
+ <h1 className="text-6xl font-bold mb-4">404</h1>
+ <h2 className="text-2xl font-semibold mb-4">Page Not Found</h2>
+ <div className="mb-6">
+ <img
+ src="/xiatian.webp"
+ className="w-32 mx-auto mb-4 object-contain rounded-2xl opacity-50"
+ alt="Not found"
+ />
+ </div>
+ <p className="text-lg mb-6">
+ The page you're looking for doesn't exist or has been moved.
+ </p>
+ <div className="space-y-3">
+ <a
+ href="/"
+ className={`inline-block px-6 py-3 rounded-lg font-semibold transition-colors ${
+ isMoe
+ ? "bg-pink-500 text-white hover:bg-pink-600"
+ : "bg-purple-600 text-white hover:bg-purple-700"
+ }`}
+ >
+ Go to Homepage
+ </a>
+ <div className="mt-4">
+ <a
+ href="/games"
+ className={`${
+ isMoe ? "text-pink-600 hover:text-pink-800" : "text-blue-400 hover:text-blue-300"
+ } underline`}
+ >
+ View All Games
+ </a>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </>
+ );
+} \ No newline at end of file
send patches to the email below
yukais@pinapelz.com
include the subject [PATCH repo_name]
pinapelz.com
homepage