const fs = require('fs'); const path = require('path'); const sitemapPath = path.join(__dirname, '../website/sitemap.xml'); const languages = [ { code: 'en', prefix: '', hreflang: 'en' }, { code: 'de', prefix: 'de/', hreflang: 'de' }, { code: 'fr', prefix: 'fr/', hreflang: 'fr' }, { code: 'es', prefix: 'es/', hreflang: 'es' }, { code: 'pt-BR', prefix: 'pt-BR/', hreflang: 'pt-br' }, { code: 'ru', prefix: 'ru/', hreflang: 'ru' }, { code: 'it', prefix: 'it/', hreflang: 'it' }, { code: 'pl', prefix: 'pl/', hreflang: 'pl' }, { code: 'tr', prefix: 'tr/', hreflang: 'tr' }, { code: 'nl', prefix: 'nl/', hreflang: 'nl' }, { code: 'ja', prefix: 'ja/', hreflang: 'ja' }, { code: 'ko', prefix: 'ko/', hreflang: 'ko' }, { code: 'zh', prefix: 'zh/', hreflang: 'zh' }, { code: 'uk', prefix: 'uk/', hreflang: 'uk' }, { code: 'pt', prefix: 'pt/', hreflang: 'pt' } ]; const today = new Date().toISOString().split('T')[0]; let xml = ` `; // 1. Static Legal pages // Imprint xml += ` https://sync.koalastuff.net/imprint ${today} monthly 0.3 `; xml += ` https://sync.koalastuff.net/privacy ${today} monthly 0.3 `; xml += ` https://sync.koalastuff.net/de/impressum ${today} monthly 0.3 `; xml += ` https://sync.koalastuff.net/de/datenschutz ${today} monthly 0.3 `; // Helper function to build localized urls for a relative path function addPage(relativePath, changefreq, priority) { for (const lang of languages) { const loc = `https://sync.koalastuff.net/${lang.prefix}${relativePath}`; xml += ` ${loc} ${today} ${changefreq} ${priority}`; for (const alt of languages) { const altHref = `https://sync.koalastuff.net/${alt.prefix}${relativePath}`; xml += ` `; } // Add x-default const defaultHref = `https://sync.koalastuff.net/${relativePath}`; xml += ` `; } } // 2. Landing Pages // For landing page, relative path is '' addPage('', 'weekly', '1.0'); // 3. Alternatives Hub addPage('alternatives', 'weekly', '0.7'); // 4. Alternatives Sub-pages const subpages = [ 'alternatives/teleparty', 'alternatives/screen-sharing', 'alternatives/watch2gether', 'alternatives/scener', 'alternatives/kosmi', 'alternatives/twoseven' ]; for (const sub of subpages) { addPage(sub, 'weekly', '0.7'); } xml += ` `; fs.writeFileSync(sitemapPath, xml.trim() + '\n', 'utf8'); console.log('Successfully generated sitemap.xml!');