diff --git a/bun.lockb b/bun.lockb index c069b26..4585b13 100755 Binary files a/bun.lockb and b/bun.lockb differ diff --git a/package.json b/package.json index 5723eeb..de31850 100644 --- a/package.json +++ b/package.json @@ -48,10 +48,10 @@ "@radix-ui/react-toggle": "^1.1.9", "@radix-ui/react-toggle-group": "^1.1.10", "@radix-ui/react-tooltip": "^1.2.7", - "@sentry/nextjs": "^9.35.0", + "@sentry/nextjs": "^9.36.0", "@supabase-cache-helpers/postgrest-react-query": "^1.13.4", "@supabase/ssr": "^0.6.1", - "@supabase/supabase-js": "^2.50.3", + "@supabase/supabase-js": "^2.50.4", "@t3-oss/env-nextjs": "^0.12.0", "@tanstack/react-query": "^5.81.5", "@tanstack/react-table": "^8.21.3", @@ -74,18 +74,18 @@ "react-hook-form": "^7.60.0", "react-icons": "^5.5.0", "react-resizable-panels": "^3.0.3", - "recharts": "^3.0.2", + "recharts": "^3.1.0", "sonner": "^2.0.6", "tailwind-merge": "^3.3.1", "vaul": "^1.1.2", - "zod": "^3.25.75" + "zod": "^3.25.76" }, "devDependencies": { "@eslint/eslintrc": "^3.3.1", "@tailwindcss/postcss": "^4.1.11", "@types/cors": "^2.8.19", "@types/express": "^5.0.3", - "@types/node": "^20.19.4", + "@types/node": "^20.19.6", "@types/react": "^19.1.8", "@types/react-dom": "^19.1.6", "drizzle-kit": "^0.30.6", @@ -100,7 +100,7 @@ "tailwindcss": "^4.1.11", "tw-animate-css": "^1.3.5", "typescript": "^5.8.3", - "typescript-eslint": "^8.35.1" + "typescript-eslint": "^8.36.0" }, "ct3aMetadata": { "initVersion": "7.39.3" diff --git a/public/favicon.png b/public/favicon.png new file mode 100644 index 0000000..5ab4c75 Binary files /dev/null and b/public/favicon.png differ diff --git a/src/app/global-error.tsx b/src/app/global-error.tsx new file mode 100644 index 0000000..b3fe17f --- /dev/null +++ b/src/app/global-error.tsx @@ -0,0 +1,51 @@ +'use client'; + +import '@/styles/globals.css'; +import { cn } from '@/lib/utils'; +import { AuthContextProvider, ThemeProvider } from '@/lib/hooks/context'; +import { Button, Toaster } from '@/components/ui'; +import * as Sentry from '@sentry/nextjs'; +import NextError from 'next/error'; +import { useEffect } from 'react'; +import { Inter } from 'next/font/google'; + +const fontSans = Inter({ + subsets: ['latin'], + variable: '--font-sans', +}); + +type GlobalErrorProps = { + error: Error & { digest?: string }; + reset?: () => void; +}; + +const GlobalError = ({ error, reset = undefined }: GlobalErrorProps) => { + useEffect(() => { Sentry.captureException(error) }, [error]); + return ( + +
+