diff --git a/package.json b/package.json index 035f0e8..cf0faa8 100644 --- a/package.json +++ b/package.json @@ -19,6 +19,8 @@ "@primer/react": "^35.28.0", "@tanstack/react-query": "^5.17.0", "@tanstack/react-query-devtools": "^5.17.21", + "@vercel/analytics": "^1.2.2", + "@vercel/speed-insights": "^1.0.10", "autoprefixer": "10.4.15", "axios": "^1.5.0", "classnames": "^2.5.1", diff --git a/pages/_document.tsx b/pages/_document.tsx index 4d7451c..644821c 100644 --- a/pages/_document.tsx +++ b/pages/_document.tsx @@ -1,5 +1,7 @@ import React from 'react'; import { Html, Head, Main, NextScript } from 'next/document'; +import { Analytics } from '@vercel/analytics/react'; +import { SpeedInsights } from '@vercel/speed-insights/next'; export default function Document() { return ( @@ -8,6 +10,8 @@ export default function Document() {
+ + ); diff --git a/pages/school-attack/[groupId].tsx b/pages/school-attack/[groupId].tsx index 7ec4a56..7140a86 100644 --- a/pages/school-attack/[groupId].tsx +++ b/pages/school-attack/[groupId].tsx @@ -56,6 +56,7 @@ import { getSchoolAttackStatisticsLikeGroupName, } from '@/repository/statistics'; import { GetServerSideProps, InferGetServerSidePropsType } from 'next'; +import { redirect } from 'next/navigation'; const maxWidth = 425; @@ -518,5 +519,9 @@ const getServerSideProps = (async (context) => { props: { dehydratedState: dehydrate(queryClient), }, + redirect: { + destination: `/school-attack/${encoded}`, + permanent: false, + }, }; }) satisfies GetServerSideProps; diff --git a/yarn.lock b/yarn.lock index d8ecf78..cc9e55a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1350,6 +1350,50 @@ __metadata: languageName: node linkType: hard +"@vercel/analytics@npm:^1.2.2": + version: 1.2.2 + resolution: "@vercel/analytics@npm:1.2.2" + dependencies: + server-only: ^0.0.1 + peerDependencies: + next: ">= 13" + react: ^18 || ^19 + peerDependenciesMeta: + next: + optional: true + react: + optional: true + checksum: 5913caeb2077d3d9c2eddabed90e40e29762e9e53941d3e1337daa0a60423ffef2a2c0b5a743ff37ea1aa9cfe7eb3159e4dff91cd4843a8503be5680c2faa98d + languageName: node + linkType: hard + +"@vercel/speed-insights@npm:^1.0.10": + version: 1.0.10 + resolution: "@vercel/speed-insights@npm:1.0.10" + peerDependencies: + "@sveltejs/kit": ^1 || ^2 + next: ">= 13" + react: ^18 || ^19 + svelte: ^4 + vue: ^3 + vue-router: ^4 + peerDependenciesMeta: + "@sveltejs/kit": + optional: true + next: + optional: true + react: + optional: true + svelte: + optional: true + vue: + optional: true + vue-router: + optional: true + checksum: 26171c424ed725bbb82020818428a37e54715dfba58ae8ccff53c1bb58787f3713a9d8695afbbb5439555b92614f099fdb5188f80d9855818fddf7c192e8033e + languageName: node + linkType: hard + "abbrev@npm:^2.0.0": version: 2.0.0 resolution: "abbrev@npm:2.0.0" @@ -5788,6 +5832,13 @@ __metadata: languageName: node linkType: hard +"server-only@npm:^0.0.1": + version: 0.0.1 + resolution: "server-only@npm:0.0.1" + checksum: c432348956641ea3f460af8dc3765f3a1bdbcf7a1e0205b0756d868e6e6fe8934cdee6bff68401a1dd49ba4a831c75916517a877446d54b334f7de36fa273e53 + languageName: node + linkType: hard + "shallowequal@npm:^1.1.0": version: 1.1.0 resolution: "shallowequal@npm:1.1.0" @@ -6819,6 +6870,8 @@ __metadata: "@types/react-dom": 18.2.7 "@typescript-eslint/eslint-plugin": ^6.14.0 "@typescript-eslint/parser": ^6.14.0 + "@vercel/analytics": ^1.2.2 + "@vercel/speed-insights": ^1.0.10 autoprefixer: 10.4.15 axios: ^1.5.0 classnames: ^2.5.1