const { chromium } = require('playwright'); const path = require('path'); const fs = require('fs'); const BASE_URL = `http://localhost:${process.env.PORT || 8899}`; // Screenshots always hit localhost, even when site is publicly accessible via subdomain async function takeScreenshots(clientId, clientDir) { const screenshotsDir = path.join(clientDir, 'screenshots'); fs.mkdirSync(screenshotsDir, { recursive: true }); let browser; try { browser = await chromium.launch({ headless: true, args: ['--no-sandbox', '--disable-setuid-sandbox'] }); const context = await browser.newContext({ viewport: { width: 1440, height: 900 }, deviceScaleFactor: 2, }); const pages = [ { url: `${BASE_URL}/sites/${clientId}/`, filename: 'homepage.png', fullPage: true, }, { url: `${BASE_URL}/sites/${clientId}/contact`, filename: 'contact-optin.png', fullPage: true, }, { url: `${BASE_URL}/sites/${clientId}/privacy-policy`, filename: 'privacy-policy.png', fullPage: true, }, { url: `${BASE_URL}/sites/${clientId}/terms`, filename: 'terms-of-service.png', fullPage: true, }, ]; for (const pageConfig of pages) { try { const page = await context.newPage(); await page.goto(pageConfig.url, { waitUntil: 'networkidle', timeout: 15000 }); // Small delay for any CSS animations to settle await page.waitForTimeout(500); await page.screenshot({ path: path.join(screenshotsDir, pageConfig.filename), fullPage: pageConfig.fullPage, }); await page.close(); console.log(` → Screenshot: ${pageConfig.filename}`); } catch (err) { console.error(` ⚠ Failed screenshot ${pageConfig.filename}:`, err.message); } } await context.close(); } finally { if (browser) await browser.close(); } } module.exports = { takeScreenshots };