const {
Document, Packer, Paragraph, TextRun, Table, TableRow, TableCell,
AlignmentType, HeadingLevel, BorderStyle, WidthType, ShadingType,
LevelFormat, PageNumber, Header, Footer, TabStopType, TabStopPosition
} = require('docx');
const fs = require('fs');
const BLUE = "1A3A5C";
const GOLD = "C9A84C";
const LIGHT_BLUE = "EAF2FB";
const LIGHT_GOLD = "FDF6EC";
const GRAY = "F5F5F5";
const WHITE = "FFFFFF";
const border = { style: BorderStyle.SINGLE, size: 1, color: "DDDDDD" };
const borders = { top: border, bottom: border, left: border, right: border };
const noBorder = { style: BorderStyle.NONE, size: 0, color: "FFFFFF" };
const noBorders = { top: noBorder, bottom: noBorder, left: noBorder, right: noBorder };
function heading1(text) {
return new Paragraph({
heading: HeadingLevel.HEADING_1,
spacing: { before: 400, after: 120 },
border: { bottom: { style: BorderStyle.SINGLE, size: 6, color: GOLD, space: 4 } },
children: [new TextRun({ text, font: "Arial", size: 28, bold: true, color: BLUE })]
});
}
function heading2(text) {
return new Paragraph({
heading: HeadingLevel.HEADING_2,
spacing: { before: 280, after: 80 },
children: [new TextRun({ text, font: "Arial", size: 22, bold: true, color: BLUE })]
});
}
function heading3(text) {
return new Paragraph({
spacing: { before: 200, after: 60 },
children: [new TextRun({ text, font: "Arial", size: 18, bold: true, color: GOLD })]
});
}
function body(text, opts = {}) {
return new Paragraph({
spacing: { before: 60, after: 80 },
children: [new TextRun({ text, font: "Arial", size: 20, color: "333333", ...opts })]
});
}
function label(text) {
return new Paragraph({
spacing: { before: 160, after: 40 },
children: [new TextRun({ text: text.toUpperCase(), font: "Arial", size: 16, bold: true, color: "888888", characterSpacing: 40 })]
});
}
function note(text) {
return new Paragraph({
spacing: { before: 80, after: 80 },
indent: { left: 360 },
children: [new TextRun({ text: `💡 ${text}`, font: "Arial", size: 18, color: "555555", italics: true })]
});
}
function spacer() {
return new Paragraph({ spacing: { before: 0, after: 120 }, children: [new TextRun("")] });
}
function divider() {
return new Paragraph({
spacing: { before: 240, after: 240 },
border: { bottom: { style: BorderStyle.SINGLE, size: 4, color: "EEEEEE", space: 1 } },
children: [new TextRun("")]
});
}
function copyBox(lines) {
const children = [];
lines.forEach((line, i) => {
children.push(new Paragraph({
spacing: { before: i === 0 ? 0 : 40, after: 40 },
children: [new TextRun({ text: line, font: "Courier New", size: 18, color: "1A1A1A" })]
}));
});
return new Table({
width: { size: 9360, type: WidthType.DXA },
columnWidths: [9360],
rows: [new TableRow({
children: [new TableCell({
borders,
width: { size: 9360, type: WidthType.DXA },
shading: { fill: "F7F9FC", type: ShadingType.CLEAR },
margins: { top: 180, bottom: 180, left: 240, right: 240 },
children
})]
})]
});
}
function seoTable(rows) {
const headerRow = new TableRow({
children: ["Page", "SEO Title", "Meta Description"].map((h, i) => new TableCell({
borders,
width: { size: [1560, 3000, 4800][i], type: WidthType.DXA },
shading: { fill: BLUE, type: ShadingType.CLEAR },
margins: { top: 80, bottom: 80, left: 120, right: 120 },
children: [new Paragraph({ children: [new TextRun({ text: h, font: "Arial", size: 18, bold: true, color: WHITE })] })]
}))
});
const dataRows = rows.map(([page, title, desc]) => new TableRow({
children: [
new TableCell({ borders, width: { size: 1560, type: WidthType.DXA }, shading: { fill: LIGHT_BLUE, type: ShadingType.CLEAR }, margins: { top: 80, bottom: 80, left: 120, right: 120 }, children: [new Paragraph({ children: [new TextRun({ text: page, font: "Arial", size: 18, bold: true, color: BLUE })] })] }),
new TableCell({ borders, width: { size: 3000, type: WidthType.DXA }, shading: { fill: WHITE, type: ShadingType.CLEAR }, margins: { top: 80, bottom: 80, left: 120, right: 120 }, children: [new Paragraph({ children: [new TextRun({ text: title, font: "Arial", size: 17, color: "222222" })] })] }),
new TableCell({ borders, width: { size: 4800, type: WidthType.DXA }, shading: { fill: WHITE, type: ShadingType.CLEAR }, margins: { top: 80, bottom: 80, left: 120, right: 120 }, children: [new Paragraph({ children: [new TextRun({ text: desc, font: "Arial", size: 17, color: "222222" })] })] }),
]
}));
return new Table({ width: { size: 9360, type: WidthType.DXA }, columnWidths: [1560, 3000, 4800], rows: [headerRow, ...dataRows] });
}
function stepBox(num, text) {
return new Table({
width: { size: 9360, type: WidthType.DXA },
columnWidths: [600, 8760],
rows: [new TableRow({
children: [
new TableCell({ borders: noBorders, width: { size: 600, type: WidthType.DXA }, shading: { fill: GOLD, type: ShadingType.CLEAR }, margins: { top: 100, bottom: 100, left: 120, right: 120 }, children: [new Paragraph({ alignment: AlignmentType.CENTER, children: [new TextRun({ text: String(num), font: "Arial", size: 22, bold: true, color: WHITE })] })] }),
new TableCell({ borders: noBorders, width: { size: 8760, type: WidthType.DXA }, shading: { fill: LIGHT_GOLD, type: ShadingType.CLEAR }, margins: { top: 100, bottom: 100, left: 180, right: 120 }, children: [new Paragraph({ children: [new TextRun({ text, font: "Arial", size: 18, color: "333333" })] })] }),
]
})]
});
}
const doc = new Document({
styles: {
default: { document: { run: { font: "Arial", size: 20 } } },
paragraphStyles: [
{ id: "Heading1", name: "Heading 1", basedOn: "Normal", next: "Normal", quickFormat: true, run: { size: 28, bold: true, font: "Arial", color: BLUE }, paragraph: { spacing: { before: 400, after: 120 }, outlineLevel: 0 } },
{ id: "Heading2", name: "Heading 2", basedOn: "Normal", next: "Normal", quickFormat: true, run: { size: 22, bold: true, font: "Arial", color: BLUE }, paragraph: { spacing: { before: 280, after: 80 }, outlineLevel: 1 } },
]
},
sections: [{
properties: {
page: {
size: { width: 12240, height: 15840 },
margin: { top: 1440, right: 1260, bottom: 1440, left: 1260 }
}
},
headers: {
default: new Header({
children: [
new Table({
width: { size: 9720, type: WidthType.DXA },
columnWidths: [6000, 3720],
rows: [new TableRow({
children: [
new TableCell({ borders: noBorders, width: { size: 6000, type: WidthType.DXA }, shading: { fill: BLUE, type: ShadingType.CLEAR }, margins: { top: 100, bottom: 100, left: 180, right: 120 }, children: [new Paragraph({ children: [new TextRun({ text: "FLAVOR OF GREECE GRILL — Website Update Guide", font: "Arial", size: 18, bold: true, color: WHITE })] })] }),
new TableCell({ borders: noBorders, width: { size: 3720, type: WidthType.DXA }, shading: { fill: GOLD, type: ShadingType.CLEAR }, margins: { top: 100, bottom: 100, left: 120, right: 180 }, children: [new Paragraph({ alignment: AlignmentType.RIGHT, children: [new TextRun({ text: "flavorofgreecegrill.com", font: "Arial", size: 18, color: WHITE })] })] }),
]
})]
})
]
})
},
footers: {
default: new Footer({
children: [new Paragraph({
spacing: { before: 120 },
border: { top: { style: BorderStyle.SINGLE, size: 4, color: "DDDDDD", space: 4 } },
children: [new TextRun({ text: "396 Hudson St, New York, NY 10014 | (646) 626-2003 | flavorofgreecegrill.com", font: "Arial", size: 16, color: "888888" })]
})]
})
},
children: [
// ── COVER ──
new Paragraph({ spacing: { before: 480, after: 0 }, alignment: AlignmentType.CENTER, children: [new TextRun({ text: "🫒", font: "Arial", size: 64 })] }),
new Paragraph({ spacing: { before: 120, after: 40 }, alignment: AlignmentType.CENTER, children: [new TextRun({ text: "FLAVOR OF GREECE GRILL", font: "Arial", size: 36, bold: true, color: BLUE })] }),
new Paragraph({ spacing: { before: 0, after: 40 }, alignment: AlignmentType.CENTER, children: [new TextRun({ text: "Website Copy & Update Guide", font: "Arial", size: 26, color: GOLD })] }),
new Paragraph({ spacing: { before: 0, after: 0 }, alignment: AlignmentType.CENTER, children: [new TextRun({ text: "Complete copy-and-paste instructions for every page of your Squarespace site", font: "Arial", size: 18, italics: true, color: "666666" })] }),
spacer(),
divider(),
// ── HOW TO USE ──
heading1("How To Use This Document"),
body("This document gives you the exact text to copy and paste into each page of your Squarespace website. Follow these steps for each section:"),
spacer(),
stepBox(1, "Log into your Squarespace account at squarespace.com and open your site editor."),
spacer(),
stepBox(2, "Navigate to the page listed at the top of each section below."),
spacer(),
stepBox(3, "Click on the text block you want to edit, highlight the old text, and paste the new copy from the gray box."),
spacer(),
stepBox(4, "For SEO fields: go to Pages → (click the gear icon next to each page) → SEO tab → paste the Title and Description."),
spacer(),
stepBox(5, "Click Save after each change. Publish when all updates are done."),
spacer(),
note("You do not need to change any design, colors, or images — only the text inside each section."),
divider(),
// ── URGENT FIX ──
heading1("⚠️ Fix First: Friday Hours Discrepancy"),
body("Your website currently shows Friday hours as 11AM–4PM, but your Yelp listing shows 11AM–3PM. This inconsistency hurts your Google ranking. Fix this everywhere before anything else.", { bold: true, color: "CC0000" }),
spacer(),
label("Correct Friday hours (pick one and use it everywhere)"),
copyBox(["Friday: 11AM – 3PM ← use this if you actually close at 3PM", "Friday: 11AM – 4PM ← use this if you actually close at 4PM"]),
body("Update this on: your website (every page footer), Google Business Profile, Yelp, and Facebook."),
divider(),
// ── HOMEPAGE ──
heading1("Page 1: Homepage (flavorofgreecegrill.com)"),
heading2("Section: Hero Tagline"),
label("Replace your current hero text with:"),
copyBox([
"Authentic Greek & Mediterranean Cuisine",
"Served Fresh Daily in the West Village",
"",
"Open Mon–Fri · 11AM–4PM · 396 Hudson St, NYC",
]),
spacer(),
heading2("Section: What We Do"),
label("Replace current paragraph with:"),
copyBox([
"Since 1999, Flavor of Greece Grill has been bringing authentic Greek and",
"Mediterranean cuisine to New York City. What started as a small food cart",
"in Queens is now a state-of-the-art food truck parked in the heart of the",
"West Village — 396 Hudson Street.",
"",
"We use premium, locally sourced ingredients and traditional Greek recipes",
"to create gourmet dishes at honest prices. Wild salmon, free-range grilled",
"chicken, jumbo shrimp, fresh salads, and classic gyros — made to order,",
"every single day.",
]),
spacer(),
heading2("Section: How To Order ← IMPORTANT FIX"),
label("Replace the current confusing ordering section with these two clearly separated blocks:"),
spacer(),
heading3("Block A — Walk-Up Customers"),
copyBox([
"🚶 Walk-Up Orders",
"",
"Just come find us! No minimum, no advance notice needed.",
"We're parked at 396 Hudson St, Mon–Fri 11AM–4PM (Fri until 3PM).",
"Come hungry — leave happy.",
]),
spacer(),
heading3("Block B — Pre-Orders & Catering"),
copyBox([
"📦 Pre-Orders & Catering",
"",
"Feeding a team or hosting an event? We've got you covered.",
"Pre-orders require 1 day advance notice with a $150 minimum.",
"Contact us to request a custom catering quote.",
"",
"→ Fill out our Contact Form to get started.",
]),
note("This separation is critical. The $150 minimum applies ONLY to pre-orders — not to individual customers who walk up to the truck. Displaying it without context is turning away lunch customers."),
divider(),
// ── MENU PAGE ──
heading1("Page 2: Menu Page (flavorofgreecegrill.com/menu)"),
heading2("Section: Top of Page — Add This Notice"),
label("Add this text ABOVE the $150 minimum notice:"),
copyBox([
"🚶 Dining at the truck? Just walk up — no minimum, no pre-order needed!",
"",
"The $150 minimum below applies to pre-orders and catering only.",
]),
spacer(),
heading2("Section: Platters Description"),
label("Replace or expand current platter description with:"),
copyBox([
"All platters are served with your choice of protein over rice and salad,",
"with a side of tzatziki and balsamic dressing. All platters are gluten-free,",
"including our falafel platter.",
"",
"Choose your protein:",
"• Lamb / Beef Kebab",
"• Chicken Kebab",
"• Grilled Lemon Chicken",
"• Sweet Chili Chicken Kebab",
"• Salmon On The Grill",
"• Fish Filet Basa",
"• Jumbo Shrimp",
"• Falafel",
]),
spacer(),
heading2("Section: Greek Salads Description"),
label("Replace or expand current salad description with:"),
copyBox([
"All salads are served with spring mix, romaine hearts, baby arugula,",
"tomatoes, cucumbers, onions, grape leaves, olives, feta cheese, pepperoncini",
"peppers, extra virgin olive oil, and balsamic dressing. Served with tzatziki.",
"",
"Choose your protein: Lamb/Beef, Chicken Kebab, Grilled Lemon Chicken,",
"Sweet Chili Chicken, Salmon, Fish Filet Basa, Jumbo Shrimp, or Falafel.",
]),
divider(),
// ── ABOUT PAGE ──
heading1("Page 3: About Page (flavorofgreecegrill.com/about)"),
heading2("Section: Who We Are"),
label("Replace current 'Who We Are' text with:"),
copyBox([
"Since 1999, Flavor of Greece Grill has been serving New York City",
"with authentic Greek and Mediterranean cuisine. What started as a",
"small food cart in the borough of Queens has grown into one of NYC's",
"most beloved food trucks — a state-of-the-art, custom-built kitchen",
"parked on one of Manhattan's most vibrant streets: 396 Hudson Street",
"in the West Village.",
"",
"For over 25 years, we've served everyone — Wall Street executives,",
"West Village locals, tourists, and everyone in between. The mission",
"has always been the same: premium quality ingredients, traditional",
"Greek recipes, and honest value.",
"",
"Today that means wild salmon, free-range grilled chicken, jumbo shrimp,",
"lamb and beef kebabs, and an ever-growing selection of fresh Mediterranean",
"salads — all made fresh to order, every single day.",
"",
"We're committed to responsible sourcing and continuous improvement.",
"That dedication is the badge we wear proudly.",
]),
note("Your current About page says 'over 10 years' — you've been open since 1999, which is 25+ years. This is a powerful trust signal. Use it!"),
divider(),
// ── CONTACT PAGE ──
heading1("Page 4: Contact Page (flavorofgreecegrill.com/contact)"),
heading2("Section: Page Heading"),
label("Replace current heading with:"),
copyBox(["Get In Touch — Catering, Pre-Orders & Questions"]),
spacer(),
heading2("Section: Intro Text"),
label("Add this text above your contact form:"),
copyBox([
"Ready to bring Flavor of Greece to your next event or office lunch?",
"",
"For catering and pre-orders, please fill out the form below. Let us know:",
"• How many people you need to feed",
"• The date and time of your event",
"• Any dietary requirements or restrictions",
"",
"We'll respond via email with a custom quote within 1 business day.",
"Pre-orders require at least 1 day advance notice.",
"",
"—",
"",
"⭐ Enjoyed your meal at the truck? We'd love your Google review!",
"Search 'Flavor of Greece Grill' on Google and click Leave a Review.",
"It means the world to a small business like ours — thank you!",
]),
spacer(),
heading2("Section: Contact Info Block"),
label("Use this exact text in your location/hours/contact block:"),
copyBox([
"📍 Location",
"396 Hudson St, New York, NY 10014",
"(West Village — between Charles St & Perry St)",
"",
"🕐 Hours",
"Monday – Thursday: 11AM – 4PM",
"Friday: 11AM – 3PM",
"Saturday – Sunday: Closed",
"",
"📞 Phone",
"(646) 626-2003",
"",
"🌐 Website",
"flavorofgreecegrill.com",
]),
note("Update Friday hours to whichever is correct — 3PM or 4PM — and make sure every page footer matches."),
divider(),
// ── SEO ──
heading1("Page 5: SEO Settings (All Pages)"),
body("In Squarespace: go to Pages → click the ⚙️ gear icon next to each page → click the SEO tab → paste the Title and Description below. This helps Google rank you for searches like 'Greek food truck NYC' and 'West Village lunch'."),
spacer(),
seoTable([
["Home", "Flavor of Greece Grill · Greek Food Truck · West Village NYC", "Authentic Greek & Mediterranean food truck at 396 Hudson St, NYC. Grilled chicken, salmon, gyros & salads. Open Mon–Fri. Catering available."],
["Menu", "Menu · Flavor of Greece Grill · Greek Food Truck NYC", "Platters, Greek salads & sandwiches with lamb, chicken, salmon, shrimp & falafel. All gluten-free platters. Walk-ups welcome, no minimum."],
["About", "About Us · Flavor of Greece Grill · Since 1999", "NYC's West Village Greek food truck serving authentic Mediterranean cuisine since 1999. Premium ingredients, made fresh daily."],
["Contact", "Contact & Catering · Flavor of Greece Grill NYC", "Order catering or reach Flavor of Greece Grill at 396 Hudson St, New York, NY 10014. Office lunches, events, and group catering available."],
]),
spacer(),
note("These SEO titles and descriptions appear in Google search results — they're the first thing potential customers read. Keep them exactly as written."),
divider(),
// ── FOOTER ──
heading1("Page 6: Site Footer (Appears on Every Page)"),
label("Update your footer to include all of this information consistently:"),
copyBox([
"Flavor of Greece Grill",
"396 Hudson St, New York, NY 10014",
"Mon–Thu: 11AM–4PM | Fri: 11AM–3PM | Sat–Sun: Closed",
"(646) 626-2003 | flavorofgreecegrill.com",
"",
"⭐ Love our food? Leave us a Google review — it helps more than you know!",
]),
note("The Google review call-to-action in the footer is one of the most effective ways to passively collect reviews over time. Do not skip this."),
divider(),
// ── QUICK CHECKLIST ──
heading1("Quick Checklist — Track Your Progress"),
body("Use this checklist as you work through each update:"),
spacer(),
...[
"Fix Friday hours — confirm 3PM or 4PM, update everywhere",
"Homepage: Update hero tagline",
"Homepage: Replace 'What We Do' paragraph",
"Homepage: Separate walk-up vs. catering ordering instructions",
"Menu page: Add walk-up notice above $150 minimum",
"Menu page: Expand platter and salad descriptions",
"About page: Replace 'Who We Are' with updated 25-year story",
"Contact page: Update heading and intro text",
"Contact page: Add Google review request",
"Contact page: Fix hours in contact info block",
"All pages: Update SEO titles and meta descriptions",
"Footer: Update to include all info + Google review CTA",
].map(item => new Paragraph({
spacing: { before: 60, after: 60 },
numbering: { reference: "checklist", level: 0 },
children: [new TextRun({ text: item, font: "Arial", size: 20, color: "333333" })]
})),
Explore our range of services designed to help you move forward with confidence, wherever you're headed next.
Interior Design
✳︎
New Construction
✳︎
Renovations
✳︎
Remodels
✳︎
Commercial Design
Interior Design ✳︎ New Construction ✳︎ Renovations ✳︎ Remodels ✳︎ Commercial Design
Popular
2025
New York
The Atlast Project →
“Communication was top-notch and the final outcome was even better than we imagined. A great experience all around.”
Former Customer
Get In Touch
If you're interested in working with us, complete the form with a few details about your project. We'll review your message and get back to you within 48 hours.