diff --git a/FE/package.json b/FE/package.json index 80eb256b..27d55a3f 100644 --- a/FE/package.json +++ b/FE/package.json @@ -13,6 +13,8 @@ "@tanstack/react-query-devtools": "^5.28.14", "@types/qs": "^6.9.10", "@types/react-syntax-highlighter": "^15.5.11", + "@vercel/analytics": "^1.2.2", + "@vercel/speed-insights": "^1.0.10", "axios": "^1.6.2", "classnames": "^2.3.2", "jotai": "^2.6.0", diff --git a/FE/pnpm-lock.yaml b/FE/pnpm-lock.yaml index e7b0f0c5..3ddd5f8b 100644 --- a/FE/pnpm-lock.yaml +++ b/FE/pnpm-lock.yaml @@ -17,6 +17,12 @@ dependencies: '@types/react-syntax-highlighter': specifier: ^15.5.11 version: 15.5.11 + '@vercel/analytics': + specifier: ^1.2.2 + version: 1.2.2(next@14.0.4)(react@18.2.0) + '@vercel/speed-insights': + specifier: ^1.0.10 + version: 1.0.10(next@14.0.4)(react@18.2.0) axios: specifier: ^1.6.2 version: 1.6.2 @@ -634,6 +640,50 @@ packages: /@ungap/structured-clone@1.2.0: resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} + /@vercel/analytics@1.2.2(next@14.0.4)(react@18.2.0): + resolution: {integrity: sha512-X0rctVWkQV1e5Y300ehVNqpOfSOufo7ieA5PIdna8yX/U7Vjz0GFsGf4qvAhxV02uQ2CVt7GYcrFfddXXK2Y4A==} + peerDependencies: + next: '>= 13' + react: ^18 || ^19 + peerDependenciesMeta: + next: + optional: true + react: + optional: true + dependencies: + next: 14.0.4(react-dom@18.2.0)(react@18.2.0) + react: 18.2.0 + server-only: 0.0.1 + dev: false + + /@vercel/speed-insights@1.0.10(next@14.0.4)(react@18.2.0): + resolution: {integrity: sha512-4uzdKB0RW6Ff2FkzshzjZ+RlJfLPxgm/00i0XXgxfMPhwnnsk92YgtqsxT9OcPLdJUyVU1DqFlSWWjIQMPkh0g==} + requiresBuild: true + 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 + dependencies: + next: 14.0.4(react-dom@18.2.0)(react@18.2.0) + react: 18.2.0 + dev: false + /acorn-jsx@5.3.2(acorn@8.11.3): resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: @@ -3582,6 +3632,10 @@ packages: lru-cache: 6.0.0 dev: true + /server-only@0.0.1: + resolution: {integrity: sha512-qepMx2JxAa5jjfzxG79yPPq+8BuFToHd1hm7kI+Z4zAq1ftQiP7HcxMhDDItrbtwVeLg/cY2JnKnrcFkmiswNA==} + dev: false + /set-function-length@1.2.1: resolution: {integrity: sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g==} engines: {node: '>= 0.4'} diff --git a/FE/src/app/layout.tsx b/FE/src/app/layout.tsx index e958885c..be0cc916 100644 --- a/FE/src/app/layout.tsx +++ b/FE/src/app/layout.tsx @@ -1,3 +1,5 @@ +import { Analytics } from "@vercel/analytics/react"; +import { SpeedInsights } from "@vercel/speed-insights/next"; import type { Metadata } from "next"; import "./globals.css"; import { PropsWithChildren } from "react"; @@ -24,6 +26,8 @@ export default function RootLayout({ children }: PropsWithChildren) { {children} + + );