#!/usr/bin/env node
// Generates sitemap.xml, robots.txt, and feed.xml for teknavglobal.com
import { writeFileSync, mkdirSync } from 'fs';
import { createRequire } from 'module';
const SITE = 'https://www.teknavglobal.com';
// Load article data (CommonJS-compatible workaround for ES module data)
const require = createRequire(import.meta.url);
// Dynamic import of global-data.js
const { articles, authors, siteConfig } = await import('../global-data.js');
function capDate(d) {
const now = new Date().toISOString().split('T')[0];
return d > now ? now : d;
}
// ── sitemap.xml ─────────────────────────────────────────────────────
const staticPages = [
{ url: '/', priority: '1.0', freq: 'daily' },
{ url: '/articles', priority: '0.9', freq: 'daily' },
{ url: '/about', priority: '0.7', freq: 'monthly' },
{ url: '/privacy', priority: '0.4', freq: 'yearly' },
{ url: '/terms', priority: '0.4', freq: 'yearly' },
{ url: '/editorial-policy', priority: '0.5', freq: 'monthly' },
];
const articleEntries = articles.map(a => ({
url: `/article/${a.slug}`,
lastmod: capDate(a.dateEn),
priority: '0.8',
freq: 'weekly',
}));
const allEntries = [...staticPages, ...articleEntries];
const sitemap = `
${allEntries.map(e => `
${SITE}${e.url}
${e.lastmod ? `${e.lastmod}` : ''}
${e.freq}
${e.priority}
`).join('\n')}
`;
// ── robots.txt ──────────────────────────────────────────────────────
const robots = `User-agent: *
Allow: /
Disallow: /api/
Disallow: /profile/
Disallow: /admin/
Sitemap: ${SITE}/sitemap.xml
`;
// ── feed.xml (RSS) ──────────────────────────────────────────────────
const feed = `
Teknav — Deep Technology Analysis for Builders
${SITE}
Technical analysis on AI engineering, security, software architecture, and emerging compute.
en
${new Date().toUTCString()}
${SITE}/images/og/default.jpg
Teknav
${SITE}
${articles
.sort((a, b) => new Date(b.dateEn) - new Date(a.dateEn))
.map(a => {
const author = authors.find(au => au.id === a.author);
return ` -
${SITE}/article/${a.slug}
${SITE}/article/${a.slug}
${new Date(a.dateEn).toUTCString()}
${author ? `${author.name}` : ''}
${a.category}
`;
}).join('\n')}
`;
mkdirSync('public', { recursive: true });
writeFileSync('public/sitemap.xml', sitemap);
writeFileSync('public/robots.txt', robots);
writeFileSync('public/feed.xml', feed);
console.log(`[seo] sitemap: ${allEntries.length} URLs | feed: ${articles.length} items`);