chore: upgrade Next.js and related dependencies to version 16.0.7

- Updated Next.js and @next/third-parties dependencies in package.json files across apps/docs and apps/website.
- Adjusted pnpm-lock.yaml to reflect the new versions and ensure compatibility.
- Enhanced the website's sitemap by adding new URLs for pricing and changelog.
- Introduced a new API route for fetching GitHub releases, improving the changelog page functionality.
- Updated the changelog page to dynamically display release information fetched from the new API.
- Enhanced the footer and header components to include links to the changelog and pricing pages.
This commit is contained in:
Mauricio Siu
2025-12-06 11:55:47 -06:00
parent a990276d8f
commit 1f5f912ce4
9 changed files with 949 additions and 518 deletions

View File

@@ -12,7 +12,7 @@
"typecheck": "tsc --noEmit"
},
"dependencies": {
"next": "15.0.3",
"next": "16.0.7",
"fumadocs-ui": "14.3.1",
"fumadocs-core": "14.3.1",
"react": "^18.3.1",
@@ -21,7 +21,7 @@
"lucide-react": "^0.456.0",
"fumadocs-openapi": "5.5.9",
"shiki": "1.22.2",
"@next/third-parties": "15.4.5"
"@next/third-parties": "16.0.7"
},
"devDependencies": {
"tsx": "^4.19.2",

View File

@@ -0,0 +1,72 @@
import { NextResponse } from 'next/server'
export const runtime = 'edge'
export const revalidate = 3600 // Revalidate every hour
interface GitHubRelease {
tag_name: string
name: string
published_at: string
body: string
html_url: string
prerelease: boolean
draft: boolean
}
interface ParsedRelease {
version: string
date: string
title: string
body: string
url: string
}
export async function GET() {
try {
const response = await fetch(
'https://api.github.com/repos/Dokploy/dokploy/releases?per_page=100',
{
headers: {
Accept: 'application/vnd.github.v3+json',
'User-Agent': 'Dokploy-Website',
},
next: {
revalidate: 3600,
},
},
)
if (!response.ok) {
throw new Error(`GitHub API responded with ${response.status}`)
}
const releases: GitHubRelease[] = await response.json()
// Filter out drafts and prereleases, and format the releases
const parsedReleases: ParsedRelease[] = releases
.filter((release) => !release.draft && !release.prerelease)
.map((release) => ({
version: release.tag_name,
date: new Date(release.published_at).toLocaleDateString(
'en-US',
{
year: 'numeric',
month: 'short',
day: 'numeric',
},
),
title: release.name || release.tag_name,
body: release.body,
url: release.html_url,
}))
return NextResponse.json(parsedReleases)
} catch (error) {
console.error('Error fetching releases:', error)
return NextResponse.json(
{ error: 'Failed to fetch releases' },
{ status: 500 },
)
}
}

File diff suppressed because one or more lines are too long

View File

@@ -16,6 +16,18 @@ export default async function sitemap(): Promise<MetadataRoute.Sitemap> {
changeFrequency: 'monthly',
priority: 0.8,
},
{
url: 'https://dokploy.com/pricing',
lastModified: new Date(),
changeFrequency: 'monthly',
priority: 0.9,
},
{
url: 'https://dokploy.com/changelog',
lastModified: new Date(),
changeFrequency: 'weekly',
priority: 0.9,
},
...posts.map((post) => ({
url: `https://dokploy.com/blog/${post.slug}`,
lastModified: new Date(post.published_at),

View File

@@ -37,18 +37,21 @@ export function Footer() {
</span>
</div>
<nav className="mt-10 text-sm" aria-label="quick links">
<div className="-my-1 flex flex-wrap justify-center gap-6">
<NavLink href="/#features">Features</NavLink>
<NavLink href="/#faqs">FAQ</NavLink>
<NavLink
href="https://docs.dokploy.com/docs/core"
target="_blank"
>
Docs
</NavLink>
</div>
</nav>
<nav className="mt-10 text-sm" aria-label="quick links">
<div className="-my-1 flex flex-wrap justify-center gap-6">
<NavLink href="/#features">Features</NavLink>
<NavLink href="/pricing">Pricing</NavLink>
<NavLink href="/#faqs">FAQ</NavLink>
<NavLink
href="https://docs.dokploy.com/docs/core"
target="_blank"
>
Docs
</NavLink>
<NavLink href="/blog">Blog</NavLink>
<NavLink href="/changelog">Changelog</NavLink>
</div>
</nav>
</div>
<div className="flex flex-col items-center border-t border-slate-400/10 py-10 sm:flex-row-reverse sm:justify-between">
<div className="flex items-center gap-x-6">

View File

@@ -121,16 +121,17 @@ function MobileNavigation() {
as="div"
className="absolute inset-x-0 top-full mt-4 flex origin-top flex-col rounded-2xl border border-border bg-background p-4 text-lg tracking-tight text-primary shadow-xl ring-1 ring-border/5"
>
<MobileNavLink href="/#pricing">Pricing</MobileNavLink>
<MobileNavLink href="/#faqs">FAQ</MobileNavLink>
<MobileNavLink
href="https://docs.dokploy.com/docs/core"
target="_blank"
>
Docs
</MobileNavLink>
<MobileNavLink href="/blog">Blog</MobileNavLink>
<MobileNavLink href="/contact">Contact</MobileNavLink>
<MobileNavLink href="/#pricing">Pricing</MobileNavLink>
<MobileNavLink href="/#faqs">FAQ</MobileNavLink>
<MobileNavLink
href="https://docs.dokploy.com/docs/core"
target="_blank"
>
Docs
</MobileNavLink>
<MobileNavLink href="/blog">Blog</MobileNavLink>
<MobileNavLink href="/changelog">Changelog</MobileNavLink>
<MobileNavLink href="/contact">Contact</MobileNavLink>
<MobileNavLink
href="https://docs.dokploy.com/docs/core"
target="_blank"
@@ -164,17 +165,18 @@ export function Header() {
<Link href="/" aria-label="Home">
<Logo className="h-10 w-auto" />
</Link>
<div className="hidden md:flex md:gap-x-6">
<NavLink href="/#pricing">Pricing</NavLink>
<NavLink href="/#faqs">FAQ</NavLink>
<NavLink
href="https://docs.dokploy.com/docs/core"
target="_blank"
>
Docs
</NavLink>
<NavLink href="/blog">Blog</NavLink>
</div>
<div className="hidden md:flex md:gap-x-6">
<NavLink href="/#pricing">Pricing</NavLink>
<NavLink href="/#faqs">FAQ</NavLink>
<NavLink
href="https://docs.dokploy.com/docs/core"
target="_blank"
>
Docs
</NavLink>
<NavLink href="/blog">Blog</NavLink>
<NavLink href="/changelog">Changelog</NavLink>
</div>
</div>
<div className="flex items-center gap-x-4 md:gap-x-5">
<GithubStars className="max-md:hidden" />

View File

@@ -12,7 +12,7 @@
},
"browserslist": "defaults, not ie <= 11",
"dependencies": {
"@next/third-parties": "15.4.5",
"@next/third-parties": "16.0.7",
"hast-util-to-jsx-runtime": "2.3.5",
"@headlessui/react": "^2.2.0",
"@headlessui/tailwindcss": "^0.2.0",
@@ -35,7 +35,7 @@
"clsx": "^2.1.0",
"framer-motion": "^11.3.19",
"lucide-react": "0.364.0",
"next": "15.4.5",
"next": "16.0.7",
"react": "18.2.0",
"react-dom": "18.2.0",
"react-ga4": "^2.1.0",

View File

@@ -1,28 +1,42 @@
{
"compilerOptions": {
"target": "es6",
"lib": ["dom", "dom.iterable", "esnext"],
"allowJs": true,
"skipLibCheck": true,
"strict": true,
"forceConsistentCasingInFileNames": true,
"noEmit": true,
"esModuleInterop": true,
"module": "esnext",
"moduleResolution": "bundler",
"resolveJsonModule": true,
"isolatedModules": true,
"jsx": "preserve",
"incremental": true,
"plugins": [
{
"name": "next"
}
],
"paths": {
"@/*": ["./*"]
}
},
"include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"],
"exclude": ["node_modules"]
"compilerOptions": {
"target": "es6",
"lib": [
"dom",
"dom.iterable",
"esnext"
],
"allowJs": true,
"skipLibCheck": true,
"strict": true,
"forceConsistentCasingInFileNames": true,
"noEmit": true,
"esModuleInterop": true,
"module": "esnext",
"moduleResolution": "bundler",
"resolveJsonModule": true,
"isolatedModules": true,
"jsx": "react-jsx",
"incremental": true,
"plugins": [
{
"name": "next"
}
],
"paths": {
"@/*": [
"./*"
]
}
},
"include": [
"next-env.d.ts",
"**/*.ts",
"**/*.tsx",
".next/types/**/*.ts",
".next/dev/types/**/*.ts"
],
"exclude": [
"node_modules"
]
}

574
pnpm-lock.yaml generated

File diff suppressed because it is too large Load Diff