diff --git a/Premocidade/next.config.js b/Premocidade/next.config.js index ce4274d..e4ed8fd 100644 --- a/Premocidade/next.config.js +++ b/Premocidade/next.config.js @@ -7,6 +7,10 @@ const nextConfig = { path: '', }, trailingSlash: true, + // Improve SEO + poweredByHeader: false, + // Better compression + compress: true, } module.exports = nextConfig diff --git a/Premocidade/package-lock.json b/Premocidade/package-lock.json index ff2583c..59551c2 100644 --- a/Premocidade/package-lock.json +++ b/Premocidade/package-lock.json @@ -10,9 +10,9 @@ "dependencies": { "compression": "^1.8.0", "express": "^4.18.2", - "next": "^13.4.0", - "react": "^18.2.0", - "react-dom": "^18.2.0" + "next": "^13.5.11", + "react": "^18.3.1", + "react-dom": "^18.3.1" }, "devDependencies": { "@types/node": "^20.17.19", @@ -26,15 +26,15 @@ } }, "node_modules/@next/env": { - "version": "13.5.8", - "resolved": "https://registry.npmjs.org/@next/env/-/env-13.5.8.tgz", - "integrity": "sha512-YmiG58BqyZ2FjrF2+5uZExL2BrLr8RTQzLXNDJ8pJr0O+rPlOeDPXp1p1/4OrR3avDidzZo3D8QO2cuDv1KCkw==", + "version": "13.5.11", + "resolved": "https://registry.npmjs.org/@next/env/-/env-13.5.11.tgz", + "integrity": "sha512-fbb2C7HChgM7CemdCY+y3N1n8pcTKdqtQLbC7/EQtPdLvlMUT9JX/dBYl8MMZAtYG4uVMyPFHXckb68q/NRwqg==", "license": "MIT" }, "node_modules/@next/swc-darwin-arm64": { - "version": "13.5.8", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.5.8.tgz", - "integrity": "sha512-HkFw3QPeIy9bImWVTbsvzfEWQkuzBEQTK/L7ORMg+9sXNN0vNR5Gz/chD4/VbozTHyA38lWTrMBfLoWVpD+2IA==", + "version": "13.5.9", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.5.9.tgz", + "integrity": "sha512-pVyd8/1y1l5atQRvOaLOvfbmRwefxLhqQOzYo/M7FQ5eaRwA1+wuCn7t39VwEgDd7Aw1+AIWwd+MURXUeXhwDw==", "cpu": [ "arm64" ], @@ -48,9 +48,9 @@ } }, "node_modules/@next/swc-darwin-x64": { - "version": "13.5.8", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-13.5.8.tgz", - "integrity": "sha512-TpRTH5FyH4qGw0MCq6UE3yQGWtwhdDCwSE0wWcYwDWC5cpx3mGKVmAVKwDNbrpk0U5bl0tEzgxp5X4UPHWA81A==", + "version": "13.5.9", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-13.5.9.tgz", + "integrity": "sha512-DwdeJqP7v8wmoyTWPbPVodTwCybBZa02xjSJ6YQFIFZFZ7dFgrieKW4Eo0GoIcOJq5+JxkQyejmI+8zwDp3pwA==", "cpu": [ "x64" ], @@ -64,9 +64,9 @@ } }, "node_modules/@next/swc-linux-arm64-gnu": { - "version": "13.5.8", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.5.8.tgz", - "integrity": "sha512-KUPKuu4EZCCTU5M61YLpuL2fKMWQRijJLtBk2Hph8FJUx6RsNRDwS0MVlJqAr2IwjJwrNxYm5QAdQ1LuRbrZMw==", + "version": "13.5.9", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.5.9.tgz", + "integrity": "sha512-wdQsKsIsGSNdFojvjW3Ozrh8Q00+GqL3wTaMjDkQxVtRbAqfFBtrLPO0IuWChVUP2UeuQcHpVeUvu0YgOP00+g==", "cpu": [ "arm64" ], @@ -80,9 +80,9 @@ } }, "node_modules/@next/swc-linux-arm64-musl": { - "version": "13.5.8", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.5.8.tgz", - "integrity": "sha512-hLyaBgXynyuVgqLwzcwF6loc0XuEz9zuK8XbzX5uslj3aqiw38l+qL1IJNLzHmkDX0nfVuBfIRV6QPsm0sCXnQ==", + "version": "13.5.9", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.5.9.tgz", + "integrity": "sha512-6VpS+bodQqzOeCwGxoimlRoosiWlSc0C224I7SQWJZoyJuT1ChNCo+45QQH+/GtbR/s7nhaUqmiHdzZC9TXnXA==", "cpu": [ "arm64" ], @@ -96,9 +96,9 @@ } }, "node_modules/@next/swc-linux-x64-gnu": { - "version": "13.5.8", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.5.8.tgz", - "integrity": "sha512-IhxeEpi+U85GU9p6bVSAFMwuCNRdpmHueM8Z9DRft8f70Rvt3Q9tNFJxqLxAbiGoNOR7TuLNjAw2wJucHfMw3g==", + "version": "13.5.9", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.5.9.tgz", + "integrity": "sha512-XxG3yj61WDd28NA8gFASIR+2viQaYZEFQagEodhI/R49gXWnYhiflTeeEmCn7Vgnxa/OfK81h1gvhUZ66lozpw==", "cpu": [ "x64" ], @@ -112,9 +112,9 @@ } }, "node_modules/@next/swc-linux-x64-musl": { - "version": "13.5.8", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.5.8.tgz", - "integrity": "sha512-NQICDU7X/tcAVkTEfvpkq5Z1EViodDj3m18wiyJ5wpzOFf4LH7vFjLBVCWNcf3/sfqv/yfD8jshqrffOPtZitg==", + "version": "13.5.9", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.5.9.tgz", + "integrity": "sha512-/dnscWqfO3+U8asd+Fc6dwL2l9AZDl7eKtPNKW8mKLh4Y4wOpjJiamhe8Dx+D+Oq0GYVjuW0WwjIxYWVozt2bA==", "cpu": [ "x64" ], @@ -128,9 +128,9 @@ } }, "node_modules/@next/swc-win32-arm64-msvc": { - "version": "13.5.8", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.5.8.tgz", - "integrity": "sha512-ndLIuFI/26CrhG+pqGkW+yPV/xuIijgaZbzPhujlDaUGczizzXgnI78iuisdPdGoMHLlQ9pRkFUeMGzENdyEHg==", + "version": "13.5.9", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.5.9.tgz", + "integrity": "sha512-T/iPnyurOK5a4HRUcxAlss8uzoEf5h9tkd+W2dSWAfzxv8WLKlUgbfk+DH43JY3Gc2xK5URLuXrxDZ2mGfk/jw==", "cpu": [ "arm64" ], @@ -144,9 +144,9 @@ } }, "node_modules/@next/swc-win32-ia32-msvc": { - "version": "13.5.8", - "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.5.8.tgz", - "integrity": "sha512-9HUxSP76n8VbEtwZVNZDMY32Y4fm53ORaiopQkGQ4q54okYa5T8szhVkLTFKu4gaA/KJcJGvCC5dDIaqfSta1w==", + "version": "13.5.9", + "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.5.9.tgz", + "integrity": "sha512-BLiPKJomaPrTAb7ykjA0LPcuuNMLDVK177Z1xe0nAem33+9FIayU4k/OWrtSn9SAJW/U60+1hoey5z+KCHdRLQ==", "cpu": [ "ia32" ], @@ -160,9 +160,9 @@ } }, "node_modules/@next/swc-win32-x64-msvc": { - "version": "13.5.8", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.5.8.tgz", - "integrity": "sha512-WFisiehrLrkX/nv6Vg7CUT6tdrhO6Nv0mLh5zuYQ5GLD4OnaOHkBt9iRkOziMy7ny+qF+V7023+loZIV/R9j8A==", + "version": "13.5.9", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.5.9.tgz", + "integrity": "sha512-/72/dZfjXXNY/u+n8gqZDjI6rxKMpYsgBBYNZKWOQw0BpBF7WCnPflRy3ZtvQ2+IYI3ZH2bPyj7K+6a6wNk90Q==", "cpu": [ "x64" ], @@ -324,9 +324,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001701", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001701.tgz", - "integrity": "sha512-faRs/AW3jA9nTwmJBSO1PQ6L/EOgsB5HMQQq4iCu5zhPgVVgO/pZRHlmatwijZKetFw8/Pr4q6dEN8sJuq8qTw==", + "version": "1.0.30001741", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001741.tgz", + "integrity": "sha512-QGUGitqsc8ARjLdgAfxETDhRbJ0REsP6O3I96TAth/mVjh2cYzN2u+3AzPP3aVSm2FehEItaJw1xd+IGBXWeSw==", "funding": [ { "type": "opencollective", @@ -864,12 +864,12 @@ } }, "node_modules/next": { - "version": "13.5.8", - "resolved": "https://registry.npmjs.org/next/-/next-13.5.8.tgz", - "integrity": "sha512-VlR7FaXpSibCs7ujOqStaDFTGSdX/NvWgLDcd47oiHUe8i63ZtNkX9intgcYAu/MxpaeEGinHaMB5mwxuzglKw==", + "version": "13.5.11", + "resolved": "https://registry.npmjs.org/next/-/next-13.5.11.tgz", + "integrity": "sha512-WUPJ6WbAX9tdC86kGTu92qkrRdgRqVrY++nwM+shmWQwmyxt4zhZfR59moXSI4N8GDYCBY3lIAqhzjDd4rTC8Q==", "license": "MIT", "dependencies": { - "@next/env": "13.5.8", + "@next/env": "13.5.11", "@swc/helpers": "0.5.2", "busboy": "1.6.0", "caniuse-lite": "^1.0.30001406", @@ -884,15 +884,15 @@ "node": ">=16.14.0" }, "optionalDependencies": { - "@next/swc-darwin-arm64": "13.5.8", - "@next/swc-darwin-x64": "13.5.8", - "@next/swc-linux-arm64-gnu": "13.5.8", - "@next/swc-linux-arm64-musl": "13.5.8", - "@next/swc-linux-x64-gnu": "13.5.8", - "@next/swc-linux-x64-musl": "13.5.8", - "@next/swc-win32-arm64-msvc": "13.5.8", - "@next/swc-win32-ia32-msvc": "13.5.8", - "@next/swc-win32-x64-msvc": "13.5.8" + "@next/swc-darwin-arm64": "13.5.9", + "@next/swc-darwin-x64": "13.5.9", + "@next/swc-linux-arm64-gnu": "13.5.9", + "@next/swc-linux-arm64-musl": "13.5.9", + "@next/swc-linux-x64-gnu": "13.5.9", + "@next/swc-linux-x64-musl": "13.5.9", + "@next/swc-win32-arm64-msvc": "13.5.9", + "@next/swc-win32-ia32-msvc": "13.5.9", + "@next/swc-win32-x64-msvc": "13.5.9" }, "peerDependencies": { "@opentelemetry/api": "^1.1.0", diff --git a/Premocidade/package.json b/Premocidade/package.json index 44e4736..6be29a6 100644 --- a/Premocidade/package.json +++ b/Premocidade/package.json @@ -15,9 +15,9 @@ "dependencies": { "compression": "^1.8.0", "express": "^4.18.2", - "next": "^13.4.0", - "react": "^18.2.0", - "react-dom": "^18.2.0" + "next": "^13.5.11", + "react": "^18.3.1", + "react-dom": "^18.3.1" }, "devDependencies": { "@types/node": "^20.17.19", diff --git a/Premocidade/src/components/ErrorBoundary.tsx b/Premocidade/src/components/ErrorBoundary.tsx new file mode 100644 index 0000000..2917c9a --- /dev/null +++ b/Premocidade/src/components/ErrorBoundary.tsx @@ -0,0 +1,62 @@ +import React, { Component, ReactNode } from 'react'; + +interface Props { + children: ReactNode; +} + +interface State { + hasError: boolean; + error?: Error; +} + +export default class ErrorBoundary extends Component { + constructor(props: Props) { + super(props); + this.state = { hasError: false }; + } + + static getDerivedStateFromError(error: Error): State { + return { hasError: true, error }; + } + + componentDidCatch(error: Error, errorInfo: React.ErrorInfo) { + console.error('ErrorBoundary caught an error:', error, errorInfo); + } + + render() { + if (this.state.hasError) { + return ( +
+

Algo deu errado 😔

+

Desculpe, ocorreu um erro inesperado.

+ +
+ ); + } + + return this.props.children; + } +} \ No newline at end of file diff --git a/Premocidade/src/components/Layout.tsx b/Premocidade/src/components/Layout.tsx index a948676..5749f4f 100644 --- a/Premocidade/src/components/Layout.tsx +++ b/Premocidade/src/components/Layout.tsx @@ -21,9 +21,15 @@ export default function Layout({ children, title = 'Premocidade' }: LayoutProps)
{pageTitle} - + + + - + + + + +
diff --git a/Premocidade/src/components/Stars.tsx b/Premocidade/src/components/Stars.tsx index ae5eaad..5f723d1 100644 --- a/Premocidade/src/components/Stars.tsx +++ b/Premocidade/src/components/Stars.tsx @@ -1,16 +1,29 @@ -import React from 'react'; +import React, { useMemo } from 'react'; const Stars = () => { + // Generate fixed positions to avoid server/client mismatch + const starPositions = useMemo(() => { + const positions = []; + // Use deterministic positions instead of Math.random() + for (let i = 0; i < 50; i++) { + const x = (i * 37) % 100; // Pseudo-random but deterministic + const y = (i * 23) % 100; + const delay = (i * 0.1) % 3; + positions.push({ x, y, delay }); + } + return positions; + }, []); + return (
- {[...Array(50)].map((_, i) => ( + {starPositions.map((position, i) => (
))} diff --git a/Premocidade/src/pages/_app.tsx b/Premocidade/src/pages/_app.tsx index 447429e..dc31eb0 100644 --- a/Premocidade/src/pages/_app.tsx +++ b/Premocidade/src/pages/_app.tsx @@ -3,6 +3,7 @@ import '../styles/globals.css' import { useRouter } from 'next/router' import { useEffect } from 'react' import Head from 'next/head' +import ErrorBoundary from '../components/ErrorBoundary' function MyApp({ Component, pageProps }: AppProps) { const router = useRouter() @@ -26,12 +27,12 @@ function MyApp({ Component, pageProps }: AppProps) { }, [router]) return ( - <> + - + ) } diff --git a/Premocidade/src/pages/_document.tsx b/Premocidade/src/pages/_document.tsx index 86327c0..dbb9d71 100644 --- a/Premocidade/src/pages/_document.tsx +++ b/Premocidade/src/pages/_document.tsx @@ -5,8 +5,9 @@ export default function Document() { - + + diff --git a/Premocidade/src/pages/index.tsx b/Premocidade/src/pages/index.tsx index 9ca03c4..aa28f9d 100644 --- a/Premocidade/src/pages/index.tsx +++ b/Premocidade/src/pages/index.tsx @@ -9,16 +9,6 @@ export default function Home() {
-
- Jesus -
-

Bem-vindo a Página Précamp

+

Bem-vindo à Página Précamp

Descubra os ensinamentos de Jesus através de atividades interativas e dinâmicas.

-
- -
📚
+
+