feat(sitemap): update base URL and add build environment handling

Change the base URL from localhost to the production URL. 
Implement a check for the build environment to use mock data 
for generating the sitemap during the build process. 
This ensures that sitemap is correctly populated 
with project routes even when the API is not available.
This commit is contained in:
2025-02-12 17:58:59 +01:00
parent bcd25ef751
commit 44589b5bbd
3 changed files with 30 additions and 4 deletions

View File

@@ -13,9 +13,15 @@ RUN npm install
# Copy the application code
COPY . .
# Set IS_BUILD environment variable for build process
ENV IS_BUILD=true
# Build the Next.js application
RUN npm run build
# Unset IS_BUILD environment variable for runtime
ENV IS_BUILD=false
# Set environmental variable for production mode
ENV NODE_ENV=production
@@ -23,4 +29,4 @@ ENV NODE_ENV=production
EXPOSE 3000
# Run the app with the start script
CMD ["npm", "start"]
CMD ["npm", "start"]s

View File

@@ -1,3 +1,4 @@
// portfolio/app/api/sitemap/route.tsx
import { NextResponse } from "next/server";
interface Project {
@@ -13,7 +14,7 @@ interface SitemapRoute {
lastModified: string;
}
const baseUrl = "http://localhost:3000";
const baseUrl = "https://dki.one";
const generateSitemap = async (): Promise<SitemapRoute[]> => {
try {
@@ -30,6 +31,25 @@ const generateSitemap = async (): Promise<SitemapRoute[]> => {
},
];
// Check if running in build environment
if (process.env.IS_BUILD) {
// Use mock data during build
const mockProjectsData: ProjectsData = {
posts: [
{ slug: "project-1" },
{ slug: "project-2" },
{ slug: "project-3" },
],
};
const projectRoutes: SitemapRoute[] = mockProjectsData.posts.map(
(project) => ({
url: `${baseUrl}/projects/${project.slug}`,
lastModified: new Date().toISOString(),
}),
);
return [...staticRoutes, ...projectRoutes];
}
// Fetch project data from your API
console.log("Fetching project data from API...");
const response = await fetch(`${baseUrl}/api/fetchAllProjects`);

View File

@@ -15,9 +15,9 @@ interface SitemapRoute {
}
export default async function sitemap(): Promise<MetadataRoute.Sitemap> {
const baseUrl = "http://localhost:3000";
const baseUrl = "https://dki.one";
// Fetch the sitemap data from the dynamic API route
// Fetch the sitemap data from the dynamic API routes
const response = await fetch(`${baseUrl}/api/sitemap`);
if (!response.ok) {
throw new Error(`Failed to fetch sitemap: ${response.statusText}`);