// Builds the static site into ./dist. No dependencies: `node build.mjs`. import { mkdir, rm, writeFile, cp } from 'node:fs/promises'; import { join, dirname } from 'node:path'; import { fileURLToPath } from 'node:url'; import { page, eyebrow, btn } from './src/layout.mjs'; const root = dirname(fileURLToPath(import.meta.url)); const out = join(root, 'dist'); const pages = ['home', 'about', 'portfolio', 'consulting', 'marketing', 'business-setup', 'contact', 'press']; await rm(out, { recursive: true, force: true }); await mkdir(out, { recursive: true }); await cp(join(root, 'static'), out, { recursive: true }); const urls = []; for (const name of pages) { const def = (await import(`./src/pages/${name}.mjs`)).default; const file = join(out, def.path, 'index.html'); await mkdir(dirname(file), { recursive: true }); await writeFile(file, page(def)); urls.push(def.path); console.log('built', def.path); } await writeFile(join(out, '404.html'), page({ path: '/404/', title: 'Page Not Found | Dylan Mazzei', description: 'This page could not be found.', body: `
${eyebrow('404')}

Page Not Found

${btn('BACK TO HOME', '/')}
`, })); const today = new Date().toISOString().slice(0, 10); await writeFile(join(out, 'sitemap.xml'), ` ${urls.map((u) => ` https://dylanmazzei.com${u}${today}`).join('\n')} `); await writeFile(join(out, 'robots.txt'), 'User-agent: *\nAllow: /\nSitemap: https://dylanmazzei.com/sitemap.xml\n'); console.log('done →', out);