This commit is contained in:
Zopt 2025-09-15 13:47:39 +08:00
parent b43ed9ce86
commit d256b4df7f
149 changed files with 1049 additions and 6843 deletions

35
.github/workflows/deploy.yml vendored Normal file
View File

@ -0,0 +1,35 @@
name: Deploy to GitHub Pages
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '18'
cache: 'npm'
- name: Install dependencies
run: npm ci
- name: Build static site
run: npm run build:static
- name: Deploy to GitHub Pages
uses: peaceiris/actions-gh-pages@v3
if: github.ref == 'refs/heads/main'
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: ./out
cname: yourdomain.com # 替换为你的域名

66
.gitignore vendored
View File

@ -1,3 +1,63 @@
node_modules
.next
out
# Dependencies
node_modules/
npm-debug.log*
yarn-debug.log*
yarn-error.log*
# Next.js
.next/
out/
build/
# Production
dist/
# Environment variables
.env
.env.local
.env.development.local
.env.test.local
.env.production.local
# IDE
.vscode/
.idea/
*.swp
*.swo
# OS
.DS_Store
Thumbs.db
# Logs
*.log
# Runtime data
pids
*.pid
*.seed
*.pid.lock
# Coverage directory used by tools like istanbul
coverage/
# Dependency directories
jspm_packages/
# Optional npm cache directory
.npm
# Optional REPL history
.node_repl_history
# Output of 'npm pack'
*.tgz
# Yarn Integrity file
.yarn-integrity
# Vercel
.vercel
# Netlify
.netlify

View File

@ -1 +1 @@
zlAH2cHTsaxKzxppe1EeC
BC55hDkCbKdePlWWvs1u_

View File

@ -5,80 +5,94 @@
"devFiles": [],
"ampDevFiles": [],
"lowPriorityFiles": [
"static/zlAH2cHTsaxKzxppe1EeC/_buildManifest.js",
"static/zlAH2cHTsaxKzxppe1EeC/_ssgManifest.js"
"static/BC55hDkCbKdePlWWvs1u_/_buildManifest.js",
"static/BC55hDkCbKdePlWWvs1u_/_ssgManifest.js"
],
"rootMainFiles": [],
"rootMainFilesTree": {},
"pages": {
"/": [
"static/chunks/webpack-057da668910d4143.js",
"static/chunks/webpack-22e55b39fad5ed53.js",
"static/chunks/framework-768692517470e708.js",
"static/chunks/main-1d517099cd2b8fe7.js",
"static/chunks/752-7be3646714fa7c4b.js",
"static/chunks/pages/index-f0d56cc007c09baf.js"
"static/chunks/main-068b7b110c4638d3.js",
"static/chunks/822-da9f524f13859791.js",
"static/chunks/137-bf054b6a146af08a.js",
"static/chunks/918-4bc07682571d1dac.js",
"static/chunks/pages/index-8037d7b3ac028ae8.js"
],
"/_app": [
"static/chunks/webpack-057da668910d4143.js",
"static/chunks/webpack-22e55b39fad5ed53.js",
"static/chunks/framework-768692517470e708.js",
"static/chunks/main-1d517099cd2b8fe7.js",
"static/css/d1d52e078040944a.css",
"static/chunks/main-068b7b110c4638d3.js",
"static/css/95bb1a7173c0b876.css",
"static/chunks/pages/_app-48e49d6afe408d10.js"
],
"/_error": [
"static/chunks/webpack-057da668910d4143.js",
"static/chunks/webpack-22e55b39fad5ed53.js",
"static/chunks/framework-768692517470e708.js",
"static/chunks/main-1d517099cd2b8fe7.js",
"static/chunks/main-068b7b110c4638d3.js",
"static/chunks/pages/_error-7ddc2730f944d98a.js"
],
"/about": [
"static/chunks/webpack-057da668910d4143.js",
"static/chunks/webpack-22e55b39fad5ed53.js",
"static/chunks/framework-768692517470e708.js",
"static/chunks/main-1d517099cd2b8fe7.js",
"static/chunks/752-7be3646714fa7c4b.js",
"static/chunks/pages/about-2092805e7bd2ab57.js"
"static/chunks/main-068b7b110c4638d3.js",
"static/chunks/822-da9f524f13859791.js",
"static/chunks/137-bf054b6a146af08a.js",
"static/chunks/pages/about-d81811cf16393363.js"
],
"/cases": [
"static/chunks/webpack-057da668910d4143.js",
"static/chunks/webpack-22e55b39fad5ed53.js",
"static/chunks/framework-768692517470e708.js",
"static/chunks/main-1d517099cd2b8fe7.js",
"static/chunks/752-7be3646714fa7c4b.js",
"static/chunks/pages/cases-7fc60f7f3779c332.js"
"static/chunks/main-068b7b110c4638d3.js",
"static/chunks/822-da9f524f13859791.js",
"static/chunks/137-bf054b6a146af08a.js",
"static/chunks/pages/cases-f9b95c7b9db01f71.js"
],
"/contact": [
"static/chunks/webpack-057da668910d4143.js",
"static/chunks/webpack-22e55b39fad5ed53.js",
"static/chunks/framework-768692517470e708.js",
"static/chunks/main-1d517099cd2b8fe7.js",
"static/chunks/752-7be3646714fa7c4b.js",
"static/chunks/pages/contact-eb714edd6749b939.js"
"static/chunks/main-068b7b110c4638d3.js",
"static/chunks/822-da9f524f13859791.js",
"static/chunks/pages/contact-61de0e28887a09bd.js"
],
"/features": [
"static/chunks/webpack-057da668910d4143.js",
"static/chunks/webpack-22e55b39fad5ed53.js",
"static/chunks/framework-768692517470e708.js",
"static/chunks/main-1d517099cd2b8fe7.js",
"static/chunks/752-7be3646714fa7c4b.js",
"static/chunks/pages/features-c01c43eb1fe58456.js"
"static/chunks/main-068b7b110c4638d3.js",
"static/chunks/822-da9f524f13859791.js",
"static/chunks/137-bf054b6a146af08a.js",
"static/chunks/918-4bc07682571d1dac.js",
"static/chunks/pages/features-93fbae3d8fbd8394.js"
],
"/login": [
"static/chunks/webpack-057da668910d4143.js",
"static/chunks/webpack-22e55b39fad5ed53.js",
"static/chunks/framework-768692517470e708.js",
"static/chunks/main-1d517099cd2b8fe7.js",
"static/chunks/752-7be3646714fa7c4b.js",
"static/chunks/pages/login-770246fe6d4a26b5.js"
"static/chunks/main-068b7b110c4638d3.js",
"static/chunks/822-da9f524f13859791.js",
"static/chunks/0-28af0524fadc5ec4.js",
"static/chunks/pages/login-22d7626a42cf752e.js"
],
"/news": [
"static/chunks/webpack-057da668910d4143.js",
"static/chunks/webpack-22e55b39fad5ed53.js",
"static/chunks/framework-768692517470e708.js",
"static/chunks/main-1d517099cd2b8fe7.js",
"static/chunks/752-7be3646714fa7c4b.js",
"static/chunks/pages/news-eab647df9653169a.js"
"static/chunks/main-068b7b110c4638d3.js",
"static/chunks/822-da9f524f13859791.js",
"static/chunks/pages/news-121e3e413bdad17d.js"
],
"/news/[slug]": [
"static/chunks/webpack-22e55b39fad5ed53.js",
"static/chunks/framework-768692517470e708.js",
"static/chunks/main-068b7b110c4638d3.js",
"static/chunks/822-da9f524f13859791.js",
"static/chunks/pages/news/[slug]-6186471bb0713168.js"
],
"/pricing": [
"static/chunks/webpack-057da668910d4143.js",
"static/chunks/webpack-22e55b39fad5ed53.js",
"static/chunks/framework-768692517470e708.js",
"static/chunks/main-1d517099cd2b8fe7.js",
"static/chunks/752-7be3646714fa7c4b.js",
"static/chunks/pages/pricing-20dc30b818da4890.js"
"static/chunks/main-068b7b110c4638d3.js",
"static/chunks/822-da9f524f13859791.js",
"static/chunks/pages/pricing-dca7adf04ef74762.js"
]
},
"ampFirstPages": []

View File

@ -1 +1 @@
{"previewModeId":"d1ad157dd1048d2ddf5a4e2cffcefbb0","previewModeSigningKey":"ce8574b53fdbe9a74e0275738f30c6879890b34fd85b71e6da9401edae05e102","previewModeEncryptionKey":"23b46bcb2c39b2ad4ca8ca609143026b7f024a26ee25191ef54b720f2521fc87","expireAt":1753867879487}
{"previewModeId":"8b238f26c47dea613ba5058d2eb4fe5a","previewModeSigningKey":"de7ad8a68a489e0e29bb005180f182b5ca740f204c39d89aaeb85ba6d74350c1","previewModeEncryptionKey":"d66bc828d38e7c71bfb0ab1e63a17d116fb0b5f4776d146abf8b14c2779cd5e4","expireAt":1759124396181}

View File

@ -1 +1 @@
{"encryption.key":"cTPoQV/25NJUObeCYzUTqVou4awShsKpuwfDHtoMy4U=","encryption.expire_at":1753855460956}
{"encryption.key":"OrOM8vabl5PSiXmzYjSJVNQGtZlJuyx4wfbMyJqGr3U=","encryption.expire_at":1759124228207}

File diff suppressed because one or more lines are too long

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -1,6 +1,6 @@
{
"version": 1,
"hasExportPathMap": false,
"exportTrailingSlash": false,
"exportTrailingSlash": true,
"isNextImageImported": false
}

View File

@ -21,7 +21,7 @@
256,
384
],
"path": "/_next/image",
"path": "/_next/image/",
"loader": "default",
"loaderFile": "",
"domains": [],
@ -34,7 +34,7 @@
"contentSecurityPolicy": "script-src 'none'; frame-src 'none'; sandbox;",
"contentDispositionType": "attachment",
"remotePatterns": [],
"unoptimized": false,
"unoptimized": true,
"sizes": [
640,
750,

View File

@ -1,11 +1,105 @@
{
"version": 4,
"routes": {},
"dynamicRoutes": {},
"preview": {
"previewModeId": "d1ad157dd1048d2ddf5a4e2cffcefbb0",
"previewModeSigningKey": "ce8574b53fdbe9a74e0275738f30c6879890b34fd85b71e6da9401edae05e102",
"previewModeEncryptionKey": "23b46bcb2c39b2ad4ca8ca609143026b7f024a26ee25191ef54b720f2521fc87"
"routes": {
"/news": {
"initialRevalidateSeconds": false,
"srcRoute": null,
"dataRoute": "/_next/data/BC55hDkCbKdePlWWvs1u_/news.json",
"allowHeader": [
"host",
"x-matched-path",
"x-prerender-revalidate",
"x-prerender-revalidate-if-generated",
"x-next-revalidated-tags",
"x-next-revalidate-tag-token"
]
},
"/news/technology-update": {
"initialRevalidateSeconds": false,
"srcRoute": "/news/[slug]",
"dataRoute": "/_next/data/BC55hDkCbKdePlWWvs1u_/news/technology-update.json",
"allowHeader": [
"host",
"x-matched-path",
"x-prerender-revalidate",
"x-prerender-revalidate-if-generated",
"x-next-revalidated-tags",
"x-next-revalidate-tag-token"
]
},
"/news/product-launch": {
"initialRevalidateSeconds": false,
"srcRoute": "/news/[slug]",
"dataRoute": "/_next/data/BC55hDkCbKdePlWWvs1u_/news/product-launch.json",
"allowHeader": [
"host",
"x-matched-path",
"x-prerender-revalidate",
"x-prerender-revalidate-if-generated",
"x-next-revalidated-tags",
"x-next-revalidate-tag-token"
]
},
"/news/_example": {
"initialRevalidateSeconds": false,
"srcRoute": "/news/[slug]",
"dataRoute": "/_next/data/BC55hDkCbKdePlWWvs1u_/news/_example.json",
"allowHeader": [
"host",
"x-matched-path",
"x-prerender-revalidate",
"x-prerender-revalidate-if-generated",
"x-next-revalidated-tags",
"x-next-revalidate-tag-token"
]
},
"/news/global-expansion": {
"initialRevalidateSeconds": false,
"srcRoute": "/news/[slug]",
"dataRoute": "/_next/data/BC55hDkCbKdePlWWvs1u_/news/global-expansion.json",
"allowHeader": [
"host",
"x-matched-path",
"x-prerender-revalidate",
"x-prerender-revalidate-if-generated",
"x-next-revalidated-tags",
"x-next-revalidate-tag-token"
]
},
"/news/security-enhancement": {
"initialRevalidateSeconds": false,
"srcRoute": "/news/[slug]",
"dataRoute": "/_next/data/BC55hDkCbKdePlWWvs1u_/news/security-enhancement.json",
"allowHeader": [
"host",
"x-matched-path",
"x-prerender-revalidate",
"x-prerender-revalidate-if-generated",
"x-next-revalidated-tags",
"x-next-revalidate-tag-token"
]
}
},
"notFoundRoutes": []
"dynamicRoutes": {
"/news/[slug]": {
"routeRegex": "^/news/([^/]+?)(?:/)?$",
"dataRoute": "/_next/data/BC55hDkCbKdePlWWvs1u_/news/[slug].json",
"fallback": false,
"dataRouteRegex": "^/_next/data/BC55hDkCbKdePlWWvs1u_/news/([^/]+?)\\.json$",
"allowHeader": [
"host",
"x-matched-path",
"x-prerender-revalidate",
"x-prerender-revalidate-if-generated",
"x-next-revalidated-tags",
"x-next-revalidate-tag-token"
]
}
},
"notFoundRoutes": [],
"preview": {
"previewModeId": "8b238f26c47dea613ba5058d2eb4fe5a",
"previewModeSigningKey": "de7ad8a68a489e0e29bb005180f182b5ca740f204c39d89aaeb85ba6d74350c1",
"previewModeEncryptionKey": "d66bc828d38e7c71bfb0ab1e63a17d116fb0b5f4776d146abf8b14c2779cd5e4"
}
}

View File

@ -46,7 +46,7 @@
256,
384
],
"path": "/_next/image",
"path": "/_next/image/",
"loader": "default",
"loaderFile": "",
"domains": [],
@ -59,7 +59,7 @@
"contentSecurityPolicy": "script-src 'none'; frame-src 'none'; sandbox;",
"contentDispositionType": "attachment",
"remotePatterns": [],
"unoptimized": false
"unoptimized": true
},
"devIndicators": {
"position": "bottom-left"
@ -73,7 +73,7 @@
},
"basePath": "",
"sassOptions": {},
"trailingSlash": false,
"trailingSlash": true,
"i18n": null,
"productionBrowserSourceMaps": false,
"excludeDefaultMomentLocales": true,
@ -89,6 +89,7 @@
"compiler": {},
"expireTime": 31536000,
"staticPageGenerationTimeout": 60,
"output": "export",
"modularizeImports": {
"@mui/icons-material": {
"transform": "@mui/icons-material/{{member}}"
@ -97,7 +98,7 @@
"transform": "lodash/{{member}}"
}
},
"outputFileTracingRoot": "E:\\百战计划\\run\\aws-proxy-site",
"outputFileTracingRoot": "D:\\dongyun-projects\\two",
"experimental": {
"useSkewCookie": false,
"nodeMiddleware": false,
@ -156,7 +157,7 @@
"middlewarePrefetch": "flexible",
"optimisticClientCache": true,
"manualClientBasePath": false,
"cpus": 15,
"cpus": 7,
"memoryBasedWorkersCount": false,
"imgOptConcurrency": null,
"imgOptTimeoutInSeconds": 7,
@ -287,10 +288,20 @@
"bundlePagesRouterDependencies": false,
"configFileName": "next.config.js",
"turbopack": {
"root": "E:\\百战计划\\run\\aws-proxy-site"
"root": "D:\\dongyun-projects\\two"
},
"_originalRewrites": {
"beforeFiles": [],
"afterFiles": [
{
"source": "/sitemap.xml",
"destination": "/api/sitemap"
}
],
"fallback": []
}
},
"appDir": "E:\\百战计划\\run\\aws-proxy-site",
"appDir": "D:\\dongyun-projects\\two",
"relativeAppDir": "",
"files": [
".next\\routes-manifest.json",

View File

@ -5,17 +5,36 @@
"basePath": "",
"redirects": [
{
"source": "/:path+/",
"destination": "/:path+",
"source": "/:file((?!\\.well-known(?:/.*)?)(?:[^/]+/)*[^/]+\\.\\w+)/",
"destination": "/:file",
"internal": true,
"missing": [
{
"type": "header",
"key": "x-nextjs-data"
}
],
"statusCode": 308,
"regex": "^(?:/((?!\\.well-known(?:/.*)?)(?:[^/]+/)*[^/]+\\.\\w+))/$"
},
{
"source": "/:notfile((?!\\.well-known(?:/.*)?)(?:[^/]+/)*[^/\\.]+)",
"destination": "/:notfile/",
"internal": true,
"statusCode": 308,
"regex": "^(?:/((?:[^/]+?)(?:/(?:[^/]+?))*))/$"
"regex": "^(?:/((?!\\.well-known(?:/.*)?)(?:[^/]+/)*[^/\\.]+))$"
}
],
"headers": [],
"rewrites": {
"beforeFiles": [],
"afterFiles": [],
"afterFiles": [
{
"source": "/sitemap.xml",
"destination": "/api/sitemap",
"regex": "^/sitemap\\.xml(?:/)?$"
}
],
"fallback": []
},
"dynamicRoutes": [
@ -26,6 +45,14 @@
"nxtPlang": "nxtPlang"
},
"namedRegex": "^/api/sitemap/(?<nxtPlang>[^/]+?)(?:/)?$"
},
{
"page": "/news/[slug]",
"regex": "^/news/([^/]+?)(?:/)?$",
"routeKeys": {
"nxtPslug": "nxtPslug"
},
"namedRegex": "^/news/(?<nxtPslug>[^/]+?)(?:/)?$"
}
],
"staticRoutes": [
@ -78,7 +105,20 @@
"namedRegex": "^/pricing(?:/)?$"
}
],
"dataRoutes": [],
"dataRoutes": [
{
"page": "/news",
"dataRouteRegex": "^/_next/data/BC55hDkCbKdePlWWvs1u_/news\\.json$"
},
{
"page": "/news/[slug]",
"routeKeys": {
"nxtPslug": "nxtPslug"
},
"dataRouteRegex": "^/_next/data/BC55hDkCbKdePlWWvs1u_/news/([^/]+?)\\.json$",
"namedDataRouteRegex": "^/_next/data/BC55hDkCbKdePlWWvs1u_/news/(?<nxtPslug>[^/]+?)\\.json$"
}
],
"rsc": {
"header": "RSC",
"varyHeader": "RSC, Next-Router-State-Tree, Next-Router-Prefetch, Next-Router-Segment-Prefetch",

File diff suppressed because one or more lines are too long

View File

@ -1 +1 @@
globalThis.__BUILD_MANIFEST={polyfillFiles:["static/chunks/polyfills-42372ed130431b0a.js"],devFiles:[],ampDevFiles:[],lowPriorityFiles:[],rootMainFiles:[],rootMainFilesTree:{},pages:{"/":["static/chunks/webpack-057da668910d4143.js","static/chunks/framework-768692517470e708.js","static/chunks/main-1d517099cd2b8fe7.js","static/chunks/752-7be3646714fa7c4b.js","static/chunks/pages/index-f0d56cc007c09baf.js"],"/_app":["static/chunks/webpack-057da668910d4143.js","static/chunks/framework-768692517470e708.js","static/chunks/main-1d517099cd2b8fe7.js","static/css/d1d52e078040944a.css","static/chunks/pages/_app-48e49d6afe408d10.js"],"/_error":["static/chunks/webpack-057da668910d4143.js","static/chunks/framework-768692517470e708.js","static/chunks/main-1d517099cd2b8fe7.js","static/chunks/pages/_error-7ddc2730f944d98a.js"],"/about":["static/chunks/webpack-057da668910d4143.js","static/chunks/framework-768692517470e708.js","static/chunks/main-1d517099cd2b8fe7.js","static/chunks/752-7be3646714fa7c4b.js","static/chunks/pages/about-2092805e7bd2ab57.js"],"/cases":["static/chunks/webpack-057da668910d4143.js","static/chunks/framework-768692517470e708.js","static/chunks/main-1d517099cd2b8fe7.js","static/chunks/752-7be3646714fa7c4b.js","static/chunks/pages/cases-7fc60f7f3779c332.js"],"/contact":["static/chunks/webpack-057da668910d4143.js","static/chunks/framework-768692517470e708.js","static/chunks/main-1d517099cd2b8fe7.js","static/chunks/752-7be3646714fa7c4b.js","static/chunks/pages/contact-eb714edd6749b939.js"],"/features":["static/chunks/webpack-057da668910d4143.js","static/chunks/framework-768692517470e708.js","static/chunks/main-1d517099cd2b8fe7.js","static/chunks/752-7be3646714fa7c4b.js","static/chunks/pages/features-c01c43eb1fe58456.js"],"/login":["static/chunks/webpack-057da668910d4143.js","static/chunks/framework-768692517470e708.js","static/chunks/main-1d517099cd2b8fe7.js","static/chunks/752-7be3646714fa7c4b.js","static/chunks/pages/login-770246fe6d4a26b5.js"],"/news":["static/chunks/webpack-057da668910d4143.js","static/chunks/framework-768692517470e708.js","static/chunks/main-1d517099cd2b8fe7.js","static/chunks/752-7be3646714fa7c4b.js","static/chunks/pages/news-eab647df9653169a.js"],"/pricing":["static/chunks/webpack-057da668910d4143.js","static/chunks/framework-768692517470e708.js","static/chunks/main-1d517099cd2b8fe7.js","static/chunks/752-7be3646714fa7c4b.js","static/chunks/pages/pricing-20dc30b818da4890.js"]},ampFirstPages:[]},globalThis.__BUILD_MANIFEST.lowPriorityFiles=["/static/"+process.env.__NEXT_BUILD_ID+"/_buildManifest.js",,"/static/"+process.env.__NEXT_BUILD_ID+"/_ssgManifest.js"];
globalThis.__BUILD_MANIFEST={polyfillFiles:["static/chunks/polyfills-42372ed130431b0a.js"],devFiles:[],ampDevFiles:[],lowPriorityFiles:[],rootMainFiles:[],rootMainFilesTree:{},pages:{"/":["static/chunks/webpack-22e55b39fad5ed53.js","static/chunks/framework-768692517470e708.js","static/chunks/main-068b7b110c4638d3.js","static/chunks/822-da9f524f13859791.js","static/chunks/137-bf054b6a146af08a.js","static/chunks/918-4bc07682571d1dac.js","static/chunks/pages/index-8037d7b3ac028ae8.js"],"/_app":["static/chunks/webpack-22e55b39fad5ed53.js","static/chunks/framework-768692517470e708.js","static/chunks/main-068b7b110c4638d3.js","static/css/95bb1a7173c0b876.css","static/chunks/pages/_app-48e49d6afe408d10.js"],"/_error":["static/chunks/webpack-22e55b39fad5ed53.js","static/chunks/framework-768692517470e708.js","static/chunks/main-068b7b110c4638d3.js","static/chunks/pages/_error-7ddc2730f944d98a.js"],"/about":["static/chunks/webpack-22e55b39fad5ed53.js","static/chunks/framework-768692517470e708.js","static/chunks/main-068b7b110c4638d3.js","static/chunks/822-da9f524f13859791.js","static/chunks/137-bf054b6a146af08a.js","static/chunks/pages/about-d81811cf16393363.js"],"/cases":["static/chunks/webpack-22e55b39fad5ed53.js","static/chunks/framework-768692517470e708.js","static/chunks/main-068b7b110c4638d3.js","static/chunks/822-da9f524f13859791.js","static/chunks/137-bf054b6a146af08a.js","static/chunks/pages/cases-f9b95c7b9db01f71.js"],"/contact":["static/chunks/webpack-22e55b39fad5ed53.js","static/chunks/framework-768692517470e708.js","static/chunks/main-068b7b110c4638d3.js","static/chunks/822-da9f524f13859791.js","static/chunks/pages/contact-61de0e28887a09bd.js"],"/features":["static/chunks/webpack-22e55b39fad5ed53.js","static/chunks/framework-768692517470e708.js","static/chunks/main-068b7b110c4638d3.js","static/chunks/822-da9f524f13859791.js","static/chunks/137-bf054b6a146af08a.js","static/chunks/918-4bc07682571d1dac.js","static/chunks/pages/features-93fbae3d8fbd8394.js"],"/login":["static/chunks/webpack-22e55b39fad5ed53.js","static/chunks/framework-768692517470e708.js","static/chunks/main-068b7b110c4638d3.js","static/chunks/822-da9f524f13859791.js","static/chunks/0-28af0524fadc5ec4.js","static/chunks/pages/login-22d7626a42cf752e.js"],"/news":["static/chunks/webpack-22e55b39fad5ed53.js","static/chunks/framework-768692517470e708.js","static/chunks/main-068b7b110c4638d3.js","static/chunks/822-da9f524f13859791.js","static/chunks/pages/news-121e3e413bdad17d.js"],"/news/[slug]":["static/chunks/webpack-22e55b39fad5ed53.js","static/chunks/framework-768692517470e708.js","static/chunks/main-068b7b110c4638d3.js","static/chunks/822-da9f524f13859791.js","static/chunks/pages/news/[slug]-6186471bb0713168.js"],"/pricing":["static/chunks/webpack-22e55b39fad5ed53.js","static/chunks/framework-768692517470e708.js","static/chunks/main-068b7b110c4638d3.js","static/chunks/822-da9f524f13859791.js","static/chunks/pages/pricing-dca7adf04ef74762.js"]},ampFirstPages:[]},globalThis.__BUILD_MANIFEST.lowPriorityFiles=["/static/"+process.env.__NEXT_BUILD_ID+"/_buildManifest.js",,"/static/"+process.env.__NEXT_BUILD_ID+"/_ssgManifest.js"];

View File

@ -2,14 +2,15 @@
"/_app": "pages/_app.js",
"/about": "pages/about.html",
"/api/sitemap/[lang]": "pages/api/sitemap/[lang].js",
"/_error": "pages/_error.js",
"/cases": "pages/cases.html",
"/contact": "pages/contact.html",
"/features": "pages/features.html",
"/": "pages/index.html",
"/login": "pages/login.html",
"/news": "pages/news.html",
"/pricing": "pages/pricing.html",
"/_error": "pages/_error.js",
"/news": "pages/news.js",
"/news/[slug]": "pages/news/[slug].js",
"/_document": "pages/_document.js",
"/404": "pages/404.html"
}

View File

@ -1 +1 @@
<!DOCTYPE html><html><head><meta charSet="utf-8" data-next-head=""/><meta name="viewport" content="width=device-width" data-next-head=""/><title data-next-head="">404: This page could not be found</title><link rel="preload" href="/_next/static/css/d1d52e078040944a.css" as="style"/><link rel="stylesheet" href="/_next/static/css/d1d52e078040944a.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" noModule="" src="/_next/static/chunks/polyfills-42372ed130431b0a.js"></script><script src="/_next/static/chunks/webpack-057da668910d4143.js" defer=""></script><script src="/_next/static/chunks/framework-768692517470e708.js" defer=""></script><script src="/_next/static/chunks/main-1d517099cd2b8fe7.js" defer=""></script><script src="/_next/static/chunks/pages/_app-48e49d6afe408d10.js" defer=""></script><script src="/_next/static/chunks/pages/_error-7ddc2730f944d98a.js" defer=""></script><script src="/_next/static/zlAH2cHTsaxKzxppe1EeC/_buildManifest.js" defer=""></script><script src="/_next/static/zlAH2cHTsaxKzxppe1EeC/_ssgManifest.js" defer=""></script></head><body><div id="__next"><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div style="line-height:48px"><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding-right:23px;font-size:24px;font-weight:500;vertical-align:top">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:28px">This page could not be found<!-- -->.</h2></div></div></div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{"statusCode":404}},"page":"/_error","query":{},"buildId":"zlAH2cHTsaxKzxppe1EeC","nextExport":true,"isFallback":false,"gip":true,"scriptLoader":[]}</script></body></html>
<!DOCTYPE html><html><head><meta charSet="utf-8" data-next-head=""/><meta name="viewport" content="width=device-width" data-next-head=""/><title data-next-head="">404: This page could not be found</title><link rel="preload" href="/_next/static/css/95bb1a7173c0b876.css" as="style"/><link rel="stylesheet" href="/_next/static/css/95bb1a7173c0b876.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" noModule="" src="/_next/static/chunks/polyfills-42372ed130431b0a.js"></script><script src="/_next/static/chunks/webpack-22e55b39fad5ed53.js" defer=""></script><script src="/_next/static/chunks/framework-768692517470e708.js" defer=""></script><script src="/_next/static/chunks/main-068b7b110c4638d3.js" defer=""></script><script src="/_next/static/chunks/pages/_app-48e49d6afe408d10.js" defer=""></script><script src="/_next/static/chunks/pages/_error-7ddc2730f944d98a.js" defer=""></script><script src="/_next/static/BC55hDkCbKdePlWWvs1u_/_buildManifest.js" defer=""></script><script src="/_next/static/BC55hDkCbKdePlWWvs1u_/_ssgManifest.js" defer=""></script></head><body><div id="__next"><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div style="line-height:48px"><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding-right:23px;font-size:24px;font-weight:500;vertical-align:top">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:28px">This page could not be found<!-- -->.</h2></div></div></div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{"statusCode":404}},"page":"/_error","query":{},"buildId":"BC55hDkCbKdePlWWvs1u_","nextExport":true,"isFallback":false,"gip":true,"scriptLoader":[]}</script></body></html>

View File

@ -1 +1 @@
<!DOCTYPE html><html><head><meta charSet="utf-8" data-next-head=""/><meta name="viewport" content="width=device-width" data-next-head=""/><title data-next-head="">500: Internal Server Error</title><link rel="preload" href="/_next/static/css/d1d52e078040944a.css" as="style"/><link rel="stylesheet" href="/_next/static/css/d1d52e078040944a.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" noModule="" src="/_next/static/chunks/polyfills-42372ed130431b0a.js"></script><script src="/_next/static/chunks/webpack-057da668910d4143.js" defer=""></script><script src="/_next/static/chunks/framework-768692517470e708.js" defer=""></script><script src="/_next/static/chunks/main-1d517099cd2b8fe7.js" defer=""></script><script src="/_next/static/chunks/pages/_app-48e49d6afe408d10.js" defer=""></script><script src="/_next/static/chunks/pages/_error-7ddc2730f944d98a.js" defer=""></script><script src="/_next/static/zlAH2cHTsaxKzxppe1EeC/_buildManifest.js" defer=""></script><script src="/_next/static/zlAH2cHTsaxKzxppe1EeC/_ssgManifest.js" defer=""></script></head><body><div id="__next"><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div style="line-height:48px"><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding-right:23px;font-size:24px;font-weight:500;vertical-align:top">500</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:28px">Internal Server Error<!-- -->.</h2></div></div></div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{"statusCode":500}},"page":"/_error","query":{},"buildId":"zlAH2cHTsaxKzxppe1EeC","nextExport":true,"isFallback":false,"gip":true,"scriptLoader":[]}</script></body></html>
<!DOCTYPE html><html><head><meta charSet="utf-8" data-next-head=""/><meta name="viewport" content="width=device-width" data-next-head=""/><title data-next-head="">500: Internal Server Error</title><link rel="preload" href="/_next/static/css/95bb1a7173c0b876.css" as="style"/><link rel="stylesheet" href="/_next/static/css/95bb1a7173c0b876.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" noModule="" src="/_next/static/chunks/polyfills-42372ed130431b0a.js"></script><script src="/_next/static/chunks/webpack-22e55b39fad5ed53.js" defer=""></script><script src="/_next/static/chunks/framework-768692517470e708.js" defer=""></script><script src="/_next/static/chunks/main-068b7b110c4638d3.js" defer=""></script><script src="/_next/static/chunks/pages/_app-48e49d6afe408d10.js" defer=""></script><script src="/_next/static/chunks/pages/_error-7ddc2730f944d98a.js" defer=""></script><script src="/_next/static/BC55hDkCbKdePlWWvs1u_/_buildManifest.js" defer=""></script><script src="/_next/static/BC55hDkCbKdePlWWvs1u_/_ssgManifest.js" defer=""></script></head><body><div id="__next"><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div style="line-height:48px"><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding-right:23px;font-size:24px;font-weight:500;vertical-align:top">500</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:28px">Internal Server Error<!-- -->.</h2></div></div></div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{"statusCode":500}},"page":"/_error","query":{},"buildId":"BC55hDkCbKdePlWWvs1u_","nextExport":true,"isFallback":false,"gip":true,"scriptLoader":[]}</script></body></html>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1 +1 @@
{"version":1,"files":["../webpack-runtime.js","../chunks/616.js","../chunks/326.js","../chunks/450.js","../../../package.json"]}
{"version":1,"files":["../webpack-runtime.js","../chunks/616.js","../chunks/326.js","../chunks/450.js","../chunks/62.js","../../../package.json"]}

File diff suppressed because one or more lines are too long

View File

@ -1 +1 @@
{"version":1,"files":["../../../node_modules/@swc/helpers/_/_interop_require_wildcard/package.json","../../../node_modules/@swc/helpers/cjs/_interop_require_wildcard.cjs","../../../node_modules/@swc/helpers/package.json","../../../node_modules/client-only/index.js","../../../node_modules/client-only/package.json","../../../node_modules/next/dist/client/components/app-router-headers.js","../../../node_modules/next/dist/compiled/@opentelemetry/api/index.js","../../../node_modules/next/dist/compiled/@opentelemetry/api/package.json","../../../node_modules/next/dist/compiled/jsonwebtoken/index.js","../../../node_modules/next/dist/compiled/jsonwebtoken/package.json","../../../node_modules/next/dist/compiled/next-server/pages.runtime.prod.js","../../../node_modules/next/dist/lib/constants.js","../../../node_modules/next/dist/lib/interop-default.js","../../../node_modules/next/dist/lib/is-error.js","../../../node_modules/next/dist/lib/semver-noop.js","../../../node_modules/next/dist/server/app-render/async-local-storage.js","../../../node_modules/next/dist/server/app-render/work-async-storage-instance.js","../../../node_modules/next/dist/server/app-render/work-async-storage.external.js","../../../node_modules/next/dist/server/app-render/work-unit-async-storage-instance.js","../../../node_modules/next/dist/server/app-render/work-unit-async-storage.external.js","../../../node_modules/next/dist/server/lib/cache-handlers/default.external.js","../../../node_modules/next/dist/server/lib/incremental-cache/memory-cache.external.js","../../../node_modules/next/dist/server/lib/incremental-cache/shared-cache-controls.external.js","../../../node_modules/next/dist/server/lib/incremental-cache/tags-manifest.external.js","../../../node_modules/next/dist/server/lib/lru-cache.js","../../../node_modules/next/dist/server/lib/router-utils/instrumentation-globals.external.js","../../../node_modules/next/dist/server/lib/trace/constants.js","../../../node_modules/next/dist/server/lib/trace/tracer.js","../../../node_modules/next/dist/server/load-manifest.external.js","../../../node_modules/next/dist/server/response-cache/types.js","../../../node_modules/next/dist/shared/lib/deep-freeze.js","../../../node_modules/next/dist/shared/lib/is-plain-object.js","../../../node_modules/next/dist/shared/lib/is-thenable.js","../../../node_modules/next/dist/shared/lib/no-fallback-error.external.js","../../../node_modules/next/dist/shared/lib/page-path/normalize-data-path.js","../../../node_modules/next/dist/shared/lib/router/utils/add-path-prefix.js","../../../node_modules/next/dist/shared/lib/router/utils/format-url.js","../../../node_modules/next/dist/shared/lib/router/utils/html-bots.js","../../../node_modules/next/dist/shared/lib/router/utils/is-bot.js","../../../node_modules/next/dist/shared/lib/router/utils/parse-path.js","../../../node_modules/next/dist/shared/lib/router/utils/querystring.js","../../../node_modules/next/dist/shared/lib/router/utils/remove-trailing-slash.js","../../../node_modules/next/dist/shared/lib/utils.js","../../../node_modules/next/package.json","../../../node_modules/react-dom/cjs/react-dom-server-legacy.browser.development.js","../../../node_modules/react-dom/cjs/react-dom-server-legacy.browser.production.js","../../../node_modules/react-dom/cjs/react-dom-server.browser.development.js","../../../node_modules/react-dom/cjs/react-dom-server.browser.production.js","../../../node_modules/react-dom/cjs/react-dom-server.edge.development.js","../../../node_modules/react-dom/cjs/react-dom-server.edge.production.js","../../../node_modules/react-dom/cjs/react-dom.development.js","../../../node_modules/react-dom/cjs/react-dom.production.js","../../../node_modules/react-dom/index.js","../../../node_modules/react-dom/package.json","../../../node_modules/react-dom/server.browser.js","../../../node_modules/react-dom/server.edge.js","../../../node_modules/react/cjs/react-jsx-runtime.development.js","../../../node_modules/react/cjs/react-jsx-runtime.production.js","../../../node_modules/react/cjs/react.development.js","../../../node_modules/react/cjs/react.production.js","../../../node_modules/react/index.js","../../../node_modules/react/jsx-runtime.js","../../../node_modules/react/package.json","../../../node_modules/styled-jsx/dist/index/index.js","../../../node_modules/styled-jsx/index.js","../../../node_modules/styled-jsx/package.json","../../../package.json","../../package.json","../chunks/326.js","../chunks/450.js","../chunks/616.js","../webpack-runtime.js"]}
{"version":1,"files":["../../../node_modules/@swc/helpers/_/_interop_require_wildcard/package.json","../../../node_modules/@swc/helpers/cjs/_interop_require_wildcard.cjs","../../../node_modules/@swc/helpers/package.json","../../../node_modules/client-only/index.js","../../../node_modules/client-only/package.json","../../../node_modules/next/dist/client/components/app-router-headers.js","../../../node_modules/next/dist/compiled/@opentelemetry/api/index.js","../../../node_modules/next/dist/compiled/@opentelemetry/api/package.json","../../../node_modules/next/dist/compiled/jsonwebtoken/index.js","../../../node_modules/next/dist/compiled/jsonwebtoken/package.json","../../../node_modules/next/dist/compiled/next-server/pages.runtime.prod.js","../../../node_modules/next/dist/lib/constants.js","../../../node_modules/next/dist/lib/interop-default.js","../../../node_modules/next/dist/lib/is-error.js","../../../node_modules/next/dist/lib/semver-noop.js","../../../node_modules/next/dist/server/app-render/async-local-storage.js","../../../node_modules/next/dist/server/app-render/work-async-storage-instance.js","../../../node_modules/next/dist/server/app-render/work-async-storage.external.js","../../../node_modules/next/dist/server/app-render/work-unit-async-storage-instance.js","../../../node_modules/next/dist/server/app-render/work-unit-async-storage.external.js","../../../node_modules/next/dist/server/lib/cache-handlers/default.external.js","../../../node_modules/next/dist/server/lib/incremental-cache/memory-cache.external.js","../../../node_modules/next/dist/server/lib/incremental-cache/shared-cache-controls.external.js","../../../node_modules/next/dist/server/lib/incremental-cache/tags-manifest.external.js","../../../node_modules/next/dist/server/lib/lru-cache.js","../../../node_modules/next/dist/server/lib/router-utils/instrumentation-globals.external.js","../../../node_modules/next/dist/server/lib/trace/constants.js","../../../node_modules/next/dist/server/lib/trace/tracer.js","../../../node_modules/next/dist/server/load-manifest.external.js","../../../node_modules/next/dist/server/response-cache/types.js","../../../node_modules/next/dist/shared/lib/deep-freeze.js","../../../node_modules/next/dist/shared/lib/is-plain-object.js","../../../node_modules/next/dist/shared/lib/is-thenable.js","../../../node_modules/next/dist/shared/lib/no-fallback-error.external.js","../../../node_modules/next/dist/shared/lib/page-path/normalize-data-path.js","../../../node_modules/next/dist/shared/lib/router/utils/add-path-prefix.js","../../../node_modules/next/dist/shared/lib/router/utils/format-url.js","../../../node_modules/next/dist/shared/lib/router/utils/html-bots.js","../../../node_modules/next/dist/shared/lib/router/utils/is-bot.js","../../../node_modules/next/dist/shared/lib/router/utils/parse-path.js","../../../node_modules/next/dist/shared/lib/router/utils/querystring.js","../../../node_modules/next/dist/shared/lib/router/utils/remove-trailing-slash.js","../../../node_modules/next/dist/shared/lib/utils.js","../../../node_modules/next/package.json","../../../node_modules/react-dom/cjs/react-dom-server-legacy.browser.development.js","../../../node_modules/react-dom/cjs/react-dom-server-legacy.browser.production.js","../../../node_modules/react-dom/cjs/react-dom-server.browser.development.js","../../../node_modules/react-dom/cjs/react-dom-server.browser.production.js","../../../node_modules/react-dom/cjs/react-dom-server.edge.development.js","../../../node_modules/react-dom/cjs/react-dom-server.edge.production.js","../../../node_modules/react-dom/cjs/react-dom.development.js","../../../node_modules/react-dom/cjs/react-dom.production.js","../../../node_modules/react-dom/index.js","../../../node_modules/react-dom/package.json","../../../node_modules/react-dom/server.browser.js","../../../node_modules/react-dom/server.edge.js","../../../node_modules/react/cjs/react-jsx-runtime.development.js","../../../node_modules/react/cjs/react-jsx-runtime.production.js","../../../node_modules/react/cjs/react.development.js","../../../node_modules/react/cjs/react.production.js","../../../node_modules/react/index.js","../../../node_modules/react/jsx-runtime.js","../../../node_modules/react/package.json","../../../node_modules/styled-jsx/dist/index/index.js","../../../node_modules/styled-jsx/index.js","../../../node_modules/styled-jsx/package.json","../../../package.json","../../package.json","../chunks/326.js","../chunks/450.js","../chunks/616.js","../chunks/62.js","../webpack-runtime.js"]}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1 +1 @@
(()=>{"use strict";var a={},b={};function c(d){var e=b[d];if(void 0!==e)return e.exports;var f=b[d]={exports:{}},g=!0;try{a[d](f,f.exports,c),g=!1}finally{g&&delete b[d]}return f.exports}c.m=a,c.n=a=>{var b=a&&a.__esModule?()=>a.default:()=>a;return c.d(b,{a:b}),b},c.d=(a,b)=>{for(var d in b)c.o(b,d)&&!c.o(a,d)&&Object.defineProperty(a,d,{enumerable:!0,get:b[d]})},c.f={},c.e=a=>Promise.all(Object.keys(c.f).reduce((b,d)=>(c.f[d](a,b),b),[])),c.u=a=>""+a+".js",c.o=(a,b)=>Object.prototype.hasOwnProperty.call(a,b),c.r=a=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(a,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(a,"__esModule",{value:!0})},c.X=(a,b,d)=>{var e=b;d||(b=a,d=()=>c(c.s=e)),b.map(c.e,c);var f=d();return void 0===f?a:f},(()=>{var a={311:1},b=b=>{var d=b.modules,e=b.ids,f=b.runtime;for(var g in d)c.o(d,g)&&(c.m[g]=d[g]);f&&f(c);for(var h=0;h<e.length;h++)a[e[h]]=1};c.f.require=(d,e)=>{a[d]||(311!=d?b(require("./chunks/"+c.u(d))):a[d]=1)},module.exports=c,c.C=b})()})();
(()=>{"use strict";var a={},b={};function c(d){var e=b[d];if(void 0!==e)return e.exports;var f=b[d]={exports:{}},g=!0;try{a[d](f,f.exports,c),g=!1}finally{g&&delete b[d]}return f.exports}c.m=a,(()=>{var a="function"==typeof Symbol?Symbol("webpack queues"):"__webpack_queues__",b="function"==typeof Symbol?Symbol("webpack exports"):"__webpack_exports__",d="function"==typeof Symbol?Symbol("webpack error"):"__webpack_error__",e=a=>{a&&a.d<1&&(a.d=1,a.forEach(a=>a.r--),a.forEach(a=>a.r--?a.r++:a()))};c.a=(c,f,g)=>{g&&((h=[]).d=-1);var h,i,j,k,l=new Set,m=c.exports,n=new Promise((a,b)=>{k=b,j=a});n[b]=m,n[a]=a=>(h&&a(h),l.forEach(a),n.catch(a=>{})),c.exports=n,f(c=>{i=c.map(c=>{if(null!==c&&"object"==typeof c){if(c[a])return c;if(c.then){var f=[];f.d=0,c.then(a=>{g[b]=a,e(f)},a=>{g[d]=a,e(f)});var g={};return g[a]=a=>a(f),g}}var h={};return h[a]=a=>{},h[b]=c,h});var f,g=()=>i.map(a=>{if(a[d])throw a[d];return a[b]}),j=new Promise(b=>{(f=()=>b(g)).r=0;var c=a=>a!==h&&!l.has(a)&&(l.add(a),a&&!a.d&&(f.r++,a.push(f)));i.map(b=>b[a](c))});return f.r?j:g()},a=>(a?k(n[d]=a):j(m),e(h))),h&&h.d<0&&(h.d=0)}})(),c.n=a=>{var b=a&&a.__esModule?()=>a.default:()=>a;return c.d(b,{a:b}),b},c.d=(a,b)=>{for(var d in b)c.o(b,d)&&!c.o(a,d)&&Object.defineProperty(a,d,{enumerable:!0,get:b[d]})},c.f={},c.e=a=>Promise.all(Object.keys(c.f).reduce((b,d)=>(c.f[d](a,b),b),[])),c.u=a=>""+a+".js",c.o=(a,b)=>Object.prototype.hasOwnProperty.call(a,b),c.r=a=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(a,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(a,"__esModule",{value:!0})},c.X=(a,b,d)=>{var e=b;d||(b=a,d=()=>c(c.s=e)),b.map(c.e,c);var f=d();return void 0===f?a:f},(()=>{var a={311:1},b=b=>{var d=b.modules,e=b.ids,f=b.runtime;for(var g in d)c.o(d,g)&&(c.m[g]=d[g]);f&&f(c);for(var h=0;h<e.length;h++)a[e[h]]=1};c.f.require=(d,e)=>{a[d]||(311!=d?b(require("./chunks/"+c.u(d))):a[d]=1)},module.exports=c,c.C=b})()})();

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1 +0,0 @@
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[415],{620:(e,r,s)=>{(window.__NEXT_P=window.__NEXT_P||[]).push(["/cases",function(){return s(3269)}])},3269:(e,r,s)=>{"use strict";s.r(r),s.d(r,{default:()=>l});var a=s(7876),t=s(8139),i=s(4232);function n(){let[e,r]=(0,i.useState)([]);return(0,i.useEffect)(()=>{r([{id:"1",name:"电商平台加速",image:"/cases/ecommerce.jpg",description:"帮助某大型电商客户降低页面加载时间30%..."},{id:"2",name:"游戏联机稳定",image:"/cases/gaming.jpg",description:"为游戏公司提供全球节点加速延迟稳定在50ms以内..."}])},[]),(0,a.jsxs)("section",{className:"px-6 py-section bg-background",children:[(0,a.jsx)("h2",{className:"text-3xl font-semibold mb-8",children:"客户案例"}),(0,a.jsx)("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-8",children:e.map(e=>(0,a.jsxs)("div",{className:"bg-gray-50 rounded-lg overflow-hidden hover:shadow-lg",children:[(0,a.jsx)("img",{src:e.image,alt:e.name,className:"w-full h-48 object-cover"}),(0,a.jsxs)("div",{className:"p-4",children:[(0,a.jsx)("h3",{className:"text-xl font-medium mb-2",children:e.name}),(0,a.jsx)("p",{className:"text-gray-700 text-sm",children:e.description})]})]},e.id))})]})}var c=s(4518);function l(){return(0,a.jsxs)("div",{className:"pt-16 pb-12 bg-background",children:[(0,a.jsx)(t.A,{}),(0,a.jsx)("main",{children:(0,a.jsx)(n,{})}),(0,a.jsx)(c.A,{})]})}},4518:(e,r,s)=>{"use strict";s.d(r,{A:()=>t});var a=s(7876);function t(){return(0,a.jsx)("footer",{className:"fixed bottom-0 left-0 w-full bg-background border-t py-4",children:(0,a.jsxs)("div",{className:"container mx-auto flex justify-between items-center text-sm text-primary",children:[(0,a.jsx)("p",{children:"\xa9 2025 CloudProxy 服务"}),(0,a.jsxs)("div",{className:"space-x-4",children:[(0,a.jsx)("a",{href:"#","aria-label":"Twitter",children:"Twitter"}),(0,a.jsx)("a",{href:"#","aria-label":"GitHub",children:"GitHub"}),(0,a.jsx)("a",{href:"#","aria-label":"LinkedIn",children:"LinkedIn"})]})]})})}},8139:(e,r,s)=>{"use strict";s.d(r,{A:()=>o});var a=s(7876),t=s(4232),i=s(8230),n=s.n(i),c=s(8447);function l(e){let{open:r,onClose:s}=e;return(0,a.jsxs)("aside",{className:"fixed inset-y-0 right-0 w-64 bg-background shadow-lg transform transition-transform duration-300 "+(r?"translate-x-0":"translate-x-full"),children:[(0,a.jsx)("button",{onClick:s,className:"p-4 focus:outline-none text-primary",children:"✕ 关闭"}),(0,a.jsxs)("nav",{className:"flex flex-col p-6 gap-6 font-medium",children:[(0,a.jsx)(n(),{href:"/features",legacyBehavior:!0,children:(0,a.jsx)("a",{onClick:s,className:"hover:text-accent",children:"特性"})}),(0,a.jsx)(n(),{href:"/pricing",legacyBehavior:!0,children:(0,a.jsx)("a",{onClick:s,className:"hover:text-accent",children:"定价"})}),(0,a.jsx)(n(),{href:"/contact",legacyBehavior:!0,children:(0,a.jsx)("a",{onClick:s,className:"hover:text-accent",children:"联系我们"})})]})]})}function o(){let[e,r]=(0,t.useState)(!1);return(0,a.jsxs)("header",{className:"fixed top-0 left-0 w-full bg-background shadow-sm z-50",children:[(0,a.jsxs)("div",{className:"container mx-auto flex items-center justify-between h-16 px-4",children:[(0,a.jsxs)("div",{className:"flex items-center space-x-4",children:[(0,a.jsx)("button",{className:"md:hidden p-2 focus:outline-none",onClick:()=>r(!0),children:(0,a.jsx)(c.A,{className:"h-6 w-6 text-primary"})}),(0,a.jsx)(n(),{href:"/",children:(0,a.jsx)("img",{src:"/logo.png",alt:"CloudProxy",className:"h-8 w-8"})}),(0,a.jsxs)("nav",{className:"hidden md:flex items-center space-x-4",children:[(0,a.jsx)(n(),{href:"/",className:"text-primary font-semibold",children:"首页"}),(0,a.jsx)(n(),{href:"/features",className:"text-gray-600 hover:text-primary",children:"产品与服务"}),(0,a.jsx)(n(),{href:"/news",className:"text-gray-600 hover:text-primary",children:"新闻资讯"}),(0,a.jsx)(n(),{href:"/cases",className:"text-gray-600 hover:text-primary",children:"客户案例"}),(0,a.jsx)(n(),{href:"/about",className:"text-gray-600 hover:text-primary",children:"关于我们"})]})]}),(0,a.jsxs)("div",{className:"flex items-center space-x-4",children:[(0,a.jsx)(n(),{href:"/login",className:"px-4 py-1 border border-primary rounded-full text-primary hover:bg-primary hover:text-white transition",children:"Log in"}),(0,a.jsx)("a",{href:"https://instagram.com",target:"_blank",rel:"noopener noreferrer",children:(0,a.jsx)("i",{className:"fab fa-instagram text-gray-600 hover:text-primary"})}),(0,a.jsx)("a",{href:"https://facebook.com",target:"_blank",rel:"noopener noreferrer",children:(0,a.jsx)("i",{className:"fab fa-facebook text-gray-600 hover:text-primary"})}),(0,a.jsx)("a",{href:"https://twitter.com",target:"_blank",rel:"noopener noreferrer",children:(0,a.jsx)("i",{className:"fab fa-twitter text-gray-600 hover:text-primary"})})]})]}),(0,a.jsx)(l,{open:e,onClose:()=>r(!1)})]})}}},e=>{e.O(0,[752,636,593,792],()=>e(e.s=620)),_N_E=e.O()}]);

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1 +0,0 @@
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[277],{2630:(e,r,s)=>{(window.__NEXT_P=window.__NEXT_P||[]).push(["/news",function(){return s(6811)}])},4518:(e,r,s)=>{"use strict";s.d(r,{A:()=>t});var a=s(7876);function t(){return(0,a.jsx)("footer",{className:"fixed bottom-0 left-0 w-full bg-background border-t py-4",children:(0,a.jsxs)("div",{className:"container mx-auto flex justify-between items-center text-sm text-primary",children:[(0,a.jsx)("p",{children:"\xa9 2025 CloudProxy 服务"}),(0,a.jsxs)("div",{className:"space-x-4",children:[(0,a.jsx)("a",{href:"#","aria-label":"Twitter",children:"Twitter"}),(0,a.jsx)("a",{href:"#","aria-label":"GitHub",children:"GitHub"}),(0,a.jsx)("a",{href:"#","aria-label":"LinkedIn",children:"LinkedIn"})]})]})})}},6811:(e,r,s)=>{"use strict";s.r(r),s.d(r,{default:()=>c});var a=s(7876),t=s(8139),n=s(4232);function i(){let[e,r]=(0,n.useState)([]);return(0,n.useEffect)(()=>{r([{id:"1",title:"产品发布:全新加速方案",date:"2025-07-01",summary:"推出基于 AI 路由的网络加速方案..."},{id:"2",title:"平台升级维护公告",date:"2025-06-15",summary:"计划于06/20进行例行维护届时服务可能短暂中断..."}])},[]),(0,a.jsxs)("section",{className:"px-6 py-section bg-background",children:[(0,a.jsx)("h2",{className:"text-3xl font-semibold mb-8",children:"新闻资讯"}),(0,a.jsx)("div",{className:"space-y-6",children:e.map(e=>(0,a.jsxs)("article",{className:"p-4 bg-gray-50 rounded-lg hover:shadow",children:[(0,a.jsx)("h3",{className:"text-xl font-medium",children:e.title}),(0,a.jsx)("time",{className:"text-sm text-gray-500",children:e.date}),(0,a.jsx)("p",{className:"mt-2 text-gray-700 text-sm",children:e.summary})]},e.id))})]})}var l=s(4518);function c(){return(0,a.jsxs)("div",{className:"pt-16 pb-12 bg-background",children:[(0,a.jsx)(t.A,{}),(0,a.jsx)("main",{children:(0,a.jsx)(i,{})}),(0,a.jsx)(l.A,{})]})}},8139:(e,r,s)=>{"use strict";s.d(r,{A:()=>x});var a=s(7876),t=s(4232),n=s(8230),i=s.n(n),l=s(8447);function c(e){let{open:r,onClose:s}=e;return(0,a.jsxs)("aside",{className:"fixed inset-y-0 right-0 w-64 bg-background shadow-lg transform transition-transform duration-300 "+(r?"translate-x-0":"translate-x-full"),children:[(0,a.jsx)("button",{onClick:s,className:"p-4 focus:outline-none text-primary",children:"✕ 关闭"}),(0,a.jsxs)("nav",{className:"flex flex-col p-6 gap-6 font-medium",children:[(0,a.jsx)(i(),{href:"/features",legacyBehavior:!0,children:(0,a.jsx)("a",{onClick:s,className:"hover:text-accent",children:"特性"})}),(0,a.jsx)(i(),{href:"/pricing",legacyBehavior:!0,children:(0,a.jsx)("a",{onClick:s,className:"hover:text-accent",children:"定价"})}),(0,a.jsx)(i(),{href:"/contact",legacyBehavior:!0,children:(0,a.jsx)("a",{onClick:s,className:"hover:text-accent",children:"联系我们"})})]})]})}function x(){let[e,r]=(0,t.useState)(!1);return(0,a.jsxs)("header",{className:"fixed top-0 left-0 w-full bg-background shadow-sm z-50",children:[(0,a.jsxs)("div",{className:"container mx-auto flex items-center justify-between h-16 px-4",children:[(0,a.jsxs)("div",{className:"flex items-center space-x-4",children:[(0,a.jsx)("button",{className:"md:hidden p-2 focus:outline-none",onClick:()=>r(!0),children:(0,a.jsx)(l.A,{className:"h-6 w-6 text-primary"})}),(0,a.jsx)(i(),{href:"/",children:(0,a.jsx)("img",{src:"/logo.png",alt:"CloudProxy",className:"h-8 w-8"})}),(0,a.jsxs)("nav",{className:"hidden md:flex items-center space-x-4",children:[(0,a.jsx)(i(),{href:"/",className:"text-primary font-semibold",children:"首页"}),(0,a.jsx)(i(),{href:"/features",className:"text-gray-600 hover:text-primary",children:"产品与服务"}),(0,a.jsx)(i(),{href:"/news",className:"text-gray-600 hover:text-primary",children:"新闻资讯"}),(0,a.jsx)(i(),{href:"/cases",className:"text-gray-600 hover:text-primary",children:"客户案例"}),(0,a.jsx)(i(),{href:"/about",className:"text-gray-600 hover:text-primary",children:"关于我们"})]})]}),(0,a.jsxs)("div",{className:"flex items-center space-x-4",children:[(0,a.jsx)(i(),{href:"/login",className:"px-4 py-1 border border-primary rounded-full text-primary hover:bg-primary hover:text-white transition",children:"Log in"}),(0,a.jsx)("a",{href:"https://instagram.com",target:"_blank",rel:"noopener noreferrer",children:(0,a.jsx)("i",{className:"fab fa-instagram text-gray-600 hover:text-primary"})}),(0,a.jsx)("a",{href:"https://facebook.com",target:"_blank",rel:"noopener noreferrer",children:(0,a.jsx)("i",{className:"fab fa-facebook text-gray-600 hover:text-primary"})}),(0,a.jsx)("a",{href:"https://twitter.com",target:"_blank",rel:"noopener noreferrer",children:(0,a.jsx)("i",{className:"fab fa-twitter text-gray-600 hover:text-primary"})})]})]}),(0,a.jsx)(c,{open:e,onClose:()=>r(!1)})]})}}},e=>{e.O(0,[752,636,593,792],()=>e(e.s=2630)),_N_E=e.O()}]);

File diff suppressed because one or more lines are too long

View File

@ -1 +0,0 @@
(()=>{"use strict";var e={},t={};function r(o){var n=t[o];if(void 0!==n)return n.exports;var a=t[o]={exports:{}},i=!0;try{e[o](a,a.exports,r),i=!1}finally{i&&delete t[o]}return a.exports}r.m=e,(()=>{var e=[];r.O=(t,o,n,a)=>{if(o){a=a||0;for(var i=e.length;i>0&&e[i-1][2]>a;i--)e[i]=e[i-1];e[i]=[o,n,a];return}for(var u=1/0,i=0;i<e.length;i++){for(var[o,n,a]=e[i],l=!0,d=0;d<o.length;d++)(!1&a||u>=a)&&Object.keys(r.O).every(e=>r.O[e](o[d]))?o.splice(d--,1):(l=!1,a<u&&(u=a));if(l){e.splice(i--,1);var c=n();void 0!==c&&(t=c)}}return t}})(),r.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return r.d(t,{a:t}),t},(()=>{var e,t=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__;r.t=function(o,n){if(1&n&&(o=this(o)),8&n||"object"==typeof o&&o&&(4&n&&o.__esModule||16&n&&"function"==typeof o.then))return o;var a=Object.create(null);r.r(a);var i={};e=e||[null,t({}),t([]),t(t)];for(var u=2&n&&o;"object"==typeof u&&!~e.indexOf(u);u=t(u))Object.getOwnPropertyNames(u).forEach(e=>i[e]=()=>o[e]);return i.default=()=>o,r.d(a,i),a}})(),r.d=(e,t)=>{for(var o in t)r.o(t,o)&&!r.o(e,o)&&Object.defineProperty(e,o,{enumerable:!0,get:t[o]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce((t,o)=>(r.f[o](e,t),t),[])),r.u=e=>"static/chunks/"+e+"."+({57:"268c8c590d7f2802",100:"dbdf1ef205c72caf"})[e]+".js",r.miniCssF=e=>{},r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),(()=>{var e={},t="_N_E:";r.l=(o,n,a,i)=>{if(e[o])return void e[o].push(n);if(void 0!==a)for(var u,l,d=document.getElementsByTagName("script"),c=0;c<d.length;c++){var f=d[c];if(f.getAttribute("src")==o||f.getAttribute("data-webpack")==t+a){u=f;break}}u||(l=!0,(u=document.createElement("script")).charset="utf-8",u.timeout=120,r.nc&&u.setAttribute("nonce",r.nc),u.setAttribute("data-webpack",t+a),u.src=r.tu(o)),e[o]=[n];var s=(t,r)=>{u.onerror=u.onload=null,clearTimeout(p);var n=e[o];if(delete e[o],u.parentNode&&u.parentNode.removeChild(u),n&&n.forEach(e=>e(r)),t)return t(r)},p=setTimeout(s.bind(null,void 0,{type:"timeout",target:u}),12e4);u.onerror=s.bind(null,u.onerror),u.onload=s.bind(null,u.onload),l&&document.head.appendChild(u)}})(),r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},(()=>{var e;r.tt=()=>(void 0===e&&(e={createScriptURL:e=>e},"undefined"!=typeof trustedTypes&&trustedTypes.createPolicy&&(e=trustedTypes.createPolicy("nextjs#bundler",e))),e)})(),r.tu=e=>r.tt().createScriptURL(e),r.p="/_next/",(()=>{var e={68:0};r.f.j=(t,o)=>{var n=r.o(e,t)?e[t]:void 0;if(0!==n)if(n)o.push(n[2]);else if(68!=t){var a=new Promise((r,o)=>n=e[t]=[r,o]);o.push(n[2]=a);var i=r.p+r.u(t),u=Error();r.l(i,o=>{if(r.o(e,t)&&(0!==(n=e[t])&&(e[t]=void 0),n)){var a=o&&("load"===o.type?"missing":o.type),i=o&&o.target&&o.target.src;u.message="Loading chunk "+t+" failed.\n("+a+": "+i+")",u.name="ChunkLoadError",u.type=a,u.request=i,n[1](u)}},"chunk-"+t,t)}else e[t]=0},r.O.j=t=>0===e[t];var t=(t,o)=>{var n,a,[i,u,l]=o,d=0;if(i.some(t=>0!==e[t])){for(n in u)r.o(u,n)&&(r.m[n]=u[n]);if(l)var c=l(r)}for(t&&t(o);d<i.length;d++)a=i[d],r.o(e,a)&&e[a]&&e[a][0](),e[a]=0;return r.O(c)},o=self.webpackChunk_N_E=self.webpackChunk_N_E||[];o.forEach(t.bind(null,0)),o.push=t.bind(null,o.push.bind(o))})()})();

File diff suppressed because one or more lines are too long

View File

@ -1 +0,0 @@
self.__BUILD_MANIFEST=function(s,e,a,t){return{__rewrites:{afterFiles:[],beforeFiles:[],fallback:[]},__routerFilterStatic:{numItems:0,errorRate:1e-4,numBits:0,numHashes:null,bitArray:[]},__routerFilterDynamic:{numItems:e,errorRate:1e-4,numBits:e,numHashes:null,bitArray:[]},"/":[s,"static/chunks/pages/index-f0d56cc007c09baf.js"],"/_error":["static/chunks/pages/_error-7ddc2730f944d98a.js"],"/about":[s,"static/chunks/pages/about-2092805e7bd2ab57.js"],"/cases":[s,"static/chunks/pages/cases-7fc60f7f3779c332.js"],"/contact":[s,"static/chunks/pages/contact-eb714edd6749b939.js"],"/features":[s,"static/chunks/pages/features-c01c43eb1fe58456.js"],"/login":[s,"static/chunks/pages/login-770246fe6d4a26b5.js"],"/news":[s,"static/chunks/pages/news-eab647df9653169a.js"],"/pricing":[s,"static/chunks/pages/pricing-20dc30b818da4890.js"],sortedPages:["/","/_app","/_error","/about","/cases","/contact","/features","/login","/news","/pricing"]}}("static/chunks/752-7be3646714fa7c4b.js",0,1e-4,null),self.__BUILD_MANIFEST_CB&&self.__BUILD_MANIFEST_CB();

View File

@ -1 +0,0 @@
self.__SSG_MANIFEST=new Set,self.__SSG_MANIFEST_CB&&self.__SSG_MANIFEST_CB();

File diff suppressed because one or more lines are too long

181
DEPLOYMENT.md Normal file
View File

@ -0,0 +1,181 @@
# Pinnovate Cloud 部署指南
## 快速部署
### 使用 PowerShell 脚本(推荐)
```powershell
# 静态网站部署
.\deploy.ps1 -Platform static
# Vercel 部署
.\deploy.ps1 -Platform vercel
# Netlify 部署
.\deploy.ps1 -Platform netlify
# GitHub Pages 部署
.\deploy.ps1 -Platform github
# Docker 部署
.\deploy.ps1 -Platform docker
```
### 手动部署
#### 1. 静态网站部署
```bash
# 安装依赖
npm ci
# 构建静态网站
npm run build:static
# 部署 out/ 目录到任何静态文件服务器
```
#### 2. Vercel 部署
```bash
# 安装 Vercel CLI
npm i -g vercel
# 部署
vercel --prod
```
#### 3. Netlify 部署
```bash
# 安装 Netlify CLI
npm i -g netlify-cli
# 构建并部署
npm run build:static
netlify deploy --prod --dir=out
```
#### 4. Docker 部署
```bash
# 构建镜像
docker build -t pinnovate-cloud .
# 运行容器
docker run -p 80:80 pinnovate-cloud
# 或使用 Docker Compose
docker-compose up -d
```
#### 5. GitHub Pages 部署
1. 推送代码到 GitHub 仓库
2. 启用 GitHub Pages
3. 选择 GitHub Actions 作为源
4. 工作流将自动构建和部署
## 部署前检查
### 1. 环境要求
- Node.js 18+
- npm 8+
- Git
### 2. 构建测试
```bash
# 类型检查
npx tsc --noEmit
# 构建测试
npm run build
# 静态构建测试
npm run build:static
```
### 3. 本地预览
```bash
# 开发模式
npm run dev
# 生产模式预览
npm run build
npm run start
```
## 部署配置
### 环境变量
创建 `.env.local` 文件:
```env
NEXT_PUBLIC_SITE_URL=https://yourdomain.com
NEXT_PUBLIC_CONTACT_EMAIL=support@pinnovatecloud.com
NEXT_PUBLIC_WHATSAPP=+19174029875
NEXT_PUBLIC_TELEGRAM=@pinnovatecloud
```
### 域名配置
1. **自定义域名**:在部署平台配置自定义域名
2. **SSL 证书**:大多数平台自动提供 SSL
3. **DNS 设置**:配置 CNAME 或 A 记录
## 监控和维护
### 1. 性能监控
- 使用 Vercel Analytics
- 配置 Google Analytics
- 设置 Core Web Vitals 监控
### 2. 错误监控
- 集成 Sentry 错误监控
- 设置错误告警
- 定期检查日志
### 3. 内容更新
- 新闻内容:编辑 `content/news/` 目录下的 Markdown 文件
- 联系信息:更新 `components/Contact.tsx`
- 公司信息:更新 `components/About.tsx`
## 故障排除
### 常见问题
1. **构建失败**
- 检查 TypeScript 错误:`npx tsc --noEmit`
- 检查依赖版本兼容性
- 清理缓存:`npm run clean`
2. **部署失败**
- 检查环境变量配置
- 验证构建输出
- 查看部署日志
3. **页面无法访问**
- 检查域名配置
- 验证 SSL 证书
- 检查 CDN 缓存
### 获取帮助
- 📧 邮箱support@pinnovatecloud.com
- 💬 WhatsApp+1 917-402-9875
- 📱 Telegram@pinnovatecloud
## 更新日志
- v1.0.0 - 初始版本,支持静态网站生成
- 支持多种部署平台
- 完整的响应式设计
- 集成表单处理
- 内容管理系统

32
Dockerfile Normal file
View File

@ -0,0 +1,32 @@
# 多阶段构建
FROM node:18-alpine AS base
# 安装依赖阶段
FROM base AS deps
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
# 构建阶段
FROM base AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build:static
# 生产阶段 - 静态文件服务
FROM nginx:alpine AS runner
WORKDIR /usr/share/nginx/html
# 复制静态文件
COPY --from=builder /app/out .
# 复制 nginx 配置
COPY nginx.conf /etc/nginx/nginx.conf
# 暴露端口
EXPOSE 80
# 启动 nginx
CMD ["nginx", "-g", "daemon off;"]

165
README.md
View File

@ -44,7 +44,32 @@ npm run dev
```
访问 http://localhost:3000
### 快速部署
```bash
# 1. 生成静态文件
npm run build:static
# 2. 部署到 Vercel (推荐)
npx vercel
# 3. 或部署到 Netlify
npx netlify deploy --dir=out --prod
```
### 构建与部署
#### 静态站点生成 (SSG)
```bash
# 生成静态文件
npm run build:static
# 或者使用传统方式
npm run export
```
静态文件将生成在 `out/` 目录中,可以直接部署到任何静态托管服务。
#### 服务器端渲染 (SSR)
```bash
# 构建生产版本
npm run build
@ -95,7 +120,14 @@ pinnovate-cloud/
├── tailwind.config.js # Tailwind 配置
├── next.config.js # Next.js 配置
├── tsconfig.json # TypeScript 配置
└── package.json # 项目依赖
├── package.json # 项目依赖
├── vercel.json # Vercel 部署配置
├── netlify.toml # Netlify 部署配置
├── Dockerfile # Docker 容器配置
├── docker-compose.yml # Docker Compose 配置
├── nginx.conf # Nginx 服务器配置
└── .github/workflows/ # GitHub Actions 工作流
└── deploy.yml
```
## 🎯 核心功能
@ -147,19 +179,140 @@ colors: {
## 🚀 部署建议
### Vercel 部署
### 静态站点部署 (推荐)
#### 1. 生成静态文件
```bash
# 生成静态文件到 out/ 目录
npm run build:static
```
#### 2. 部署到各种平台
**Vercel (推荐)**
```bash
# 安装 Vercel CLI
npm i -g vercel
# 部署到 Vercel
vercel
# 或者直接连接 GitHub 仓库自动部署
```
### 其他平台
- **Netlify** - 支持静态站点部署
- **AWS S3 + CloudFront** - 企业级部署方案
- **Docker** - 容器化部署
**Netlify**
```bash
# 方法1: 拖拽 out/ 目录到 Netlify
# 方法2: 连接 GitHub 仓库,设置构建命令: npm run build:static
# 方法3: 使用 Netlify CLI
npm i -g netlify-cli
netlify deploy --dir=out
```
**GitHub Pages**
```bash
# 1. 将 out/ 目录内容推送到 gh-pages 分支
# 2. 在仓库设置中启用 GitHub Pages
# 3. 选择 gh-pages 分支作为源
```
**AWS S3 + CloudFront**
```bash
# 1. 将 out/ 目录内容上传到 S3 存储桶
# 2. 配置 CloudFront 分发
# 3. 设置自定义域名和 SSL 证书
```
**Nginx 静态托管**
```bash
# 1. 将 out/ 目录内容复制到 Nginx 网站根目录
# 2. 配置 Nginx 虚拟主机
# 3. 启用 gzip 压缩和缓存
```
### 服务器端部署
#### Docker 部署
```dockerfile
# Dockerfile
FROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY . .
RUN npm run build
EXPOSE 3000
CMD ["npm", "start"]
```
```bash
# 构建和运行
docker build -t pinnovate-cloud .
docker run -p 3000:3000 pinnovate-cloud
```
#### PM2 部署
```bash
# 安装 PM2
npm i -g pm2
# 构建项目
npm run build
# 使用 PM2 启动
pm2 start npm --name "pinnovate-cloud" -- start
# 保存 PM2 配置
pm2 save
pm2 startup
```
### 部署配置
#### 环境变量
创建 `.env.production` 文件:
```env
NODE_ENV=production
NEXT_PUBLIC_SITE_URL=https://yourdomain.com
NEXT_PUBLIC_API_URL=https://api.yourdomain.com
```
#### 性能优化
- 启用 CDN 加速
- 配置图片压缩
- 启用 Gzip 压缩
- 设置适当的缓存策略
### 部署配置文件
项目包含多种部署配置,可根据需要选择:
#### Vercel 部署
- `vercel.json` - Vercel 平台配置
- 支持自动部署和预览
- 包含安全头和缓存策略
#### Netlify 部署
- `netlify.toml` - Netlify 平台配置
- 支持表单处理和重定向
- 包含构建命令和环境变量
#### Docker 部署
- `Dockerfile` - 多阶段构建配置
- `docker-compose.yml` - 容器编排配置
- `nginx.conf` - Nginx 服务器配置
- 支持生产环境部署
#### GitHub Actions
- `.github/workflows/deploy.yml` - 自动部署工作流
- 支持 GitHub Pages 部署
- 包含构建和部署步骤
### 监控和维护
- 使用 Vercel Analytics 或 Google Analytics
- 配置错误监控 (Sentry)
- 设置性能监控
- 定期更新依赖包
## 📄 许可证

View File

@ -1,38 +0,0 @@
{
"polyfillFiles": [
"static/chunks/polyfills.js"
],
"devFiles": [
"static/chunks/react-refresh.js"
],
"ampDevFiles": [],
"lowPriorityFiles": [
"static/development/_buildManifest.js",
"static/development/_ssgManifest.js"
],
"rootMainFiles": [],
"rootMainFilesTree": {},
"pages": {
"/": [
"static/chunks/webpack.js",
"static/chunks/main.js",
"static/chunks/pages/index.js"
],
"/_app": [
"static/chunks/webpack.js",
"static/chunks/main.js",
"static/chunks/pages/_app.js"
],
"/_error": [
"static/chunks/webpack.js",
"static/chunks/main.js",
"static/chunks/pages/_error.js"
],
"/news": [
"static/chunks/webpack.js",
"static/chunks/main.js",
"static/chunks/pages/news.js"
]
},
"ampFirstPages": []
}

View File

@ -1 +0,0 @@
{"encryption.key":"y2+Ayv+zY2OmriQM/MqHPYIZiLz48VRHox8V/XbrRSk=","encryption.expire_at":1758874756515}

View File

@ -1 +0,0 @@
557a90d3-5741-4229-8f97-aee2f62927aa

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -1 +0,0 @@
{"type": "commonjs"}

View File

@ -1,11 +0,0 @@
{
"version": 4,
"routes": {},
"dynamicRoutes": {},
"notFoundRoutes": [],
"preview": {
"previewModeId": "2f217fc743730155491d473472702b6e",
"previewModeSigningKey": "55eb5786f1180026097269917d0b711d02aa12326b3e47cdd584eb4176e6236e",
"previewModeEncryptionKey": "44a6b2bdd863fe88f78f12a4f9eb0e20878b4228d6abdb49d134e98259b3f938"
}
}

View File

@ -1,14 +0,0 @@
{
"node_modules\\next\\dist\\client\\index.js -> ../pages/_app": {
"id": "node_modules\\next\\dist\\client\\index.js -> ../pages/_app",
"files": [
"static/chunks/_pages-dir-browser_node_modules_next_dist_pages__app_js.js"
]
},
"node_modules\\next\\dist\\client\\index.js -> ../pages/_error": {
"id": "node_modules\\next\\dist\\client\\index.js -> ../pages/_error",
"files": [
"static/chunks/_pages-dir-browser_node_modules_next_dist_pages__error_js.js"
]
}
}

View File

@ -1 +0,0 @@
{"version":3,"caseSensitive":false,"basePath":"","rewrites":{"beforeFiles":[],"afterFiles":[],"fallback":[]},"redirects":[{"source":"/:path+/","destination":"/:path+","permanent":true,"internal":true,"regex":"^(?:\\/((?:[^\\/]+?)(?:\\/(?:[^\\/]+?))*))\\/$"}],"headers":[]}

View File

@ -1 +0,0 @@
self.__INTERCEPTION_ROUTE_REWRITE_MANIFEST="[]"

View File

@ -1,40 +0,0 @@
globalThis.__BUILD_MANIFEST = {
"polyfillFiles": [
"static/chunks/polyfills.js"
],
"devFiles": [
"static/chunks/react-refresh.js"
],
"ampDevFiles": [],
"lowPriorityFiles": [],
"rootMainFiles": [],
"rootMainFilesTree": {},
"pages": {
"/": [
"static/chunks/webpack.js",
"static/chunks/main.js",
"static/chunks/pages/index.js"
],
"/_app": [
"static/chunks/webpack.js",
"static/chunks/main.js",
"static/chunks/pages/_app.js"
],
"/_error": [
"static/chunks/webpack.js",
"static/chunks/main.js",
"static/chunks/pages/_error.js"
],
"/news": [
"static/chunks/webpack.js",
"static/chunks/main.js",
"static/chunks/pages/news.js"
]
},
"ampFirstPages": []
};
globalThis.__BUILD_MANIFEST.lowPriorityFiles = [
"/static/" + process.env.__NEXT_BUILD_ID + "/_buildManifest.js",
,"/static/" + process.env.__NEXT_BUILD_ID + "/_ssgManifest.js",
];

Some files were not shown because too many files have changed in this diff Show More