+
+
+
+
+
+ This week
+ Lunch route drop
+ Three stops, one brisket taco special, preorders open now.
+
+
+
+ Route
+ Mon - Foundry Yard
+ Wed - Arcade Park
+ Fri - Harbor Lawn
+
+
+
+ Preorder
+ $12 lunch box
+
+
+ Order by 10am at coppercart.example
+
diff --git a/examples/use-cases/food-truck-catering.manifest.json b/examples/use-cases/food-truck-catering.manifest.json
new file mode 100644
index 0000000..4d2e763
--- /dev/null
+++ b/examples/use-cases/food-truck-catering.manifest.json
@@ -0,0 +1,31 @@
+{
+ "name": "Food Truck Catering Social Posts",
+ "description": "Use a reusable mixed photo-and-graphic template for a fictional food truck monetization campaign: route preorders, office catering inquiries, and private event deposits. Source-neutral Unsplash photos are passed through JSON image layers, while the route cards, offer badges, borders, and pattern work are intentional CSS geometry.",
+ "template": "./food-truck-catering.html",
+ "css": "./food-truck-catering.css",
+ "width": 1080,
+ "height": 1080,
+ "variants": [
+ {
+ "id": "schedule",
+ "title": "Route Preorder Post",
+ "modifyFile": "./food-truck-catering-schedule.json",
+ "output": "./food-truck-catering-schedule.png",
+ "alt": "Food truck route preorder social post result"
+ },
+ {
+ "id": "catering",
+ "title": "Office Catering Inquiry Post",
+ "modifyFile": "./food-truck-catering-catering.json",
+ "output": "./food-truck-catering-catering.png",
+ "alt": "Food truck office catering inquiry social post result"
+ },
+ {
+ "id": "booking",
+ "title": "Private Event Booking Post",
+ "modifyFile": "./food-truck-catering-booking.json",
+ "output": "./food-truck-catering-booking.png",
+ "alt": "Food truck private event booking social post result"
+ }
+ ]
+}
diff --git a/test/food-truck-catering-example.test.ts b/test/food-truck-catering-example.test.ts
new file mode 100644
index 0000000..751e536
--- /dev/null
+++ b/test/food-truck-catering-example.test.ts
@@ -0,0 +1,31 @@
+import { readFile } from "node:fs/promises";
+import { describe, expect, it } from "vitest";
+
+describe("food truck catering example set", () => {
+ it("keeps media in variant modifications and documents every manifest variant", async () => {
+ const manifest = JSON.parse(await readFile("examples/use-cases/food-truck-catering.manifest.json", "utf8")) as {
+ template: string;
+ css: string;
+ variants: Array<{ title: string; modifyFile: string; output: string }>;
+ };
+ const html = await readFile("examples/use-cases/food-truck-catering.html", "utf8");
+ const readme = await readFile("README.md", "utf8");
+ const attribution = await readFile("ATTRIBUTION.md", "utf8");
+
+ expect(manifest.template).toBe("./food-truck-catering.html");
+ expect(manifest.css).toBe("./food-truck-catering.css");
+ expect(manifest.variants).toHaveLength(3);
+ expect(html).not.toContain("unsplash");
+ expect(html).not.toContain("food-truck-catering-");
+
+ for (const variant of manifest.variants) {
+ const modifications = await readFile(`examples/use-cases/${variant.modifyFile.replace("./", "")}`, "utf8");
+ expect(modifications).toContain("./assets/food-truck-catering-");
+ expect(readme).toContain(variant.title);
+ expect(readme).toContain(variant.output.replace("./", "examples/use-cases/"));
+ }
+
+ expect(attribution).toContain("Food Truck Catering Social Posts");
+ expect(attribution).toContain("Unsplash License");
+ });
+});