source-code/
portofolio-neo-gruv
Public
codeCodeinfoIssues 0call_splitPull Requestsplay_circleActions
portofolio-neo-gruv/src/app/sitemap.ts
typescript45 lines1.3 KB
import { MetadataRoute } from 'next';
import { GithubRepo } from '../types/github';

export default async function sitemap(): Promise<MetadataRoute.Sitemap> {
  const siteUrl = process.env.NEXT_PUBLIC_SITE_URL || 'https://nre.codes';
  const apiUrl = process.env.API_URL || process.env.NEXT_PUBLIC_API_URL || 'http://localhost:3001';

  // Base static routes
  const staticRoutes = [
    {
      url: siteUrl,
      lastModified: new Date(),
      changeFrequency: 'daily' as const,
      priority: 1.0,
    },
    {
      url: `${siteUrl}/source-code`,
      lastModified: new Date(),
      changeFrequency: 'weekly' as const,
      priority: 0.8,
    },
  ];

  // Dynamic routes (repository details)
  let repoRoutes: MetadataRoute.Sitemap = [];
  try {
    const response = await fetch(`${apiUrl}/github/repos`, {
      next: { revalidate: 3600 }, // Cache for 1 hour
    });
    if (response.ok) {
      const repos: GithubRepo[] = await response.json();
      repoRoutes = repos.map((repo) => ({
        url: `${siteUrl}/source-code/${repo.githubRepo}`,
        lastModified: new Date(),
        changeFrequency: 'weekly' as const,
        priority: 0.6,
      }));
    }
  } catch (error) {
    console.error('Failed to fetch repositories for sitemap generation:', error);
  }

  return [...staticRoutes, ...repoRoutes];
}

About

Custom portfolio frontend designed using retro Neo-Brutalist styling. Features server-rendered pages, persistent codebase layout, interactive file explorer tree, and Shiki code syntax highlighting.

TypeScriptNext.jsReact 19Tailwind CSSShiki

Contributors

1