Commit 15299120 by PLN (Algolia)

feat(fleurs): generative garden invitation — La Fête des Fleurs

p5.js canvas with impressionist top-down flower garden: organic bloom
lifecycle (bud → bloom → wilt → respawn), rare mutations (queen,
hypersaturated, variegated, concentric, firecracker), wind-driven
grass, falling petals, ambient day/night light cycle, dawn reveal.

DOM overlay with staggered text entrance, RSVP modal with decorative
floral ornaments and entrance animation. Dark theme, mobile-first.
parent 61919d6a
This source diff could not be displayed because it is too large. You can view the blob instead.
...@@ -31,6 +31,7 @@ ...@@ -31,6 +31,7 @@
"marked": "^15.0.12", "marked": "^15.0.12",
"minisearch": "^7.1.2", "minisearch": "^7.1.2",
"next": "^15.3.0", "next": "^15.3.0",
"p5": "1.11.3",
"prismjs": "^1.30.0", "prismjs": "^1.30.0",
"react": "^18.2.0", "react": "^18.2.0",
"react-dom": "^18.2.0", "react-dom": "^18.2.0",
......
import { chromium } from "playwright";
const browser = await chromium.launch();
const context = await browser.newContext({
viewport: { width: 1280, height: 800 },
deviceScaleFactor: 2,
});
const page = await context.newPage();
const dir = new URL(".", import.meta.url).pathname;
const url = "http://localhost:3001/fleurs";
console.log("Loading page...");
await page.goto(url, { waitUntil: "networkidle" });
// Cumulative wait: 0s, 2s, 5s, 9s, 15s
const waits = [0, 2, 3, 4, 6];
let total = 0;
for (const wait of waits) {
if (wait > 0) await page.waitForTimeout(wait * 1000);
total += wait;
await page.screenshot({
path: `${dir}fleurs-${String(total).padStart(2, "0")}s.png`,
fullPage: false,
});
console.log(`Screenshot at ~${total}s`);
}
// Mobile
await page.setViewportSize({ width: 390, height: 844 });
await page.waitForTimeout(1500);
await page.screenshot({ path: `${dir}fleurs-mobile.png`, fullPage: false });
console.log("Mobile screenshot");
// Modal
const btn = page.locator("button.cta");
if (await btn.isVisible()) {
await btn.click();
await page.waitForTimeout(600);
await page.screenshot({ path: `${dir}fleurs-modal.png`, fullPage: false });
console.log("Modal screenshot");
}
await browser.close();
console.log("Done!");
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment