{"data":{"slug":"restaurant-menus-with-ai","title":"Design a print-ready restaurant menu with AI instead of Canva","summary":"Keep your menu as a simple list, have Claude or ChatGPT turn it into a clean, printable HTML menu (Letter or A4), and save it as a PDF from your browser. Includes a Google Docs route for owners who don't want to touch code, plus the allergen and print-shop caveats that matter.","outcome":"I want a good-looking, up-to-date menu I can print in-house or send to a print shop, without paying for Canva Pro.","capabilities":["print-collateral","writing-copy"],"replaces":[{"tool":"canva","scope":"task_specific"}],"requiredTools":[{"tool":"claude","purpose":"Clean up the menu list, write short dish descriptions and fill the HTML menu template; it can show the result as a live preview.","optional":false},{"tool":"chatgpt","purpose":"Alternative to Claude for the same prompts.","optional":true},{"tool":"google-workspace","purpose":"No-code route: a Google Docs menu template exported to PDF; Google Sheets as the master price list.","optional":true}],"additionalMonthlyUSD":0,"difficulty":"easy","skill":"basic","setupTime":"1–2 hours for the first menu","illustrative":true,"evidenceStatus":"editorial","lastReviewed":"2026-10-13","links":{"page":"/workflows/restaurant-menus-with-ai","api":"/api/v1/workflows/restaurant-menus-with-ai","markdown":"/workflows/restaurant-menus-with-ai.md"},"additionalCost":{"monthlyUSD":0,"explanation":"Uses an AI assistant you already have (free tiers work for occasional menu updates), a web browser's built-in Save as PDF, and optionally Google Docs. Printing costs are the same as before."},"timePerRun":"10–20 minutes for a price or dish change","goodFitFor":["Independent restaurants, cafés and food trucks that pay for Canva Pro mostly to update menus","Menus that change often (seasonal dishes, price updates) where retyping in a design tool is the main cost","Owners who want one master list of dishes, prices and allergens that every menu is generated from"],"notFitFor":["Menus with heavy illustration, photo collages or custom die-cut shapes","Large-run professional print jobs that need CMYK files, bleed and crop marks (use a designer or the print shop's own template)","Businesses that also use Canva Pro for social posts, signage and video — cancelling Canva would remove those too","Anyone not willing to proofread every price and allergen marker personally before printing"],"before":"Open the menu design in Canva Pro, find each changed dish, retype prices and descriptions in separate text boxes, nudge alignment, re-export a PDF for the printer and a PNG for the website, and repeat for the A4 and Letter versions or the takeaway menu.","after":"Update one master list (a Google Sheet or a text note) of dishes, prices and dietary tags. Paste it into Claude with the fill prompt and the HTML template; open the result in Chrome, check it on screen, and Print > Save as PDF. Non-technical owners do the same in a Google Docs template and download a PDF.","steps":[{"title":"Make one master list of dishes, prices and dietary tags","body":"Put every menu item in a single list — a Google Sheet works well — with columns: **section, dish name, description, price, dietary tags (V, VG, GF, N…), allergens confirmed by kitchen (yes/no), last checked date**.\n\nThis list is the source of truth. The design is regenerated from it, so prices never drift between the printed menu, the website and delivery apps.\n\n**Allergen and dietary information is your legal responsibility, not the AI's.** Fill the allergen columns from recipes and supplier specs with your head chef. Labelling rules differ by country and city; check what your local food authority requires."},{"title":"Clean up names and write short descriptions","body":"Paste the list into Claude or ChatGPT with the **Menu clean-up prompt**. It standardises capitalisation, trims descriptions to one line and flags inconsistencies (duplicate dishes, prices without decimals in one section but not another).\n\nTell it **not** to add or remove ingredients. Review its suggested descriptions against the recipe: a model may make up a garnish that changes an allergen."},{"title":"Generate the printable HTML menu","body":"Use the **Fill the menu template prompt** with the template below. Choose `letter` (US) or `A4` in the `@page` line.\n\nAsk Claude to show it as a preview (an artifact) or save the HTML to a file and open it in Chrome. On screen, the page shows a white sheet with the printable margins so you can see whether everything fits on one page.\n\nIf something overflows: ask the AI to shorten descriptions, reduce the base `font-size` from `10.5pt` to `10pt`, or move a section to a second page block."},{"title":"Save as PDF and print a test copy","body":"In Chrome: **Print > Destination: Save as PDF > Margins: Default > More settings: tick \"Background graphics\" > Save.**\n\nPrint one copy on your normal printer at **100% / Actual size** (not \"Fit to page\"). Check prices, spelling and the dietary legend on paper, where errors are easier to spot.\n\n**Print-shop caveat:** browser PDFs are RGB, with no **bleed** or **crop marks**. Designs with colour running to the paper edge will show a thin white line after trimming. Either keep a white margin (the template does), or ask the print shop whether they can add bleed or work from your PDF."},{"title":"No-code route: Google Docs menu","body":"If you'd rather not handle HTML:\n\n1. In Google Docs, **File > Page setup** and choose Letter or A4 with 0.5 in margins.\n2. Ask the AI for the **Google Docs menu layout prompt** output, then right-click > **Paste from Markdown** (turn on Markdown in Tools > Preferences first) or paste plain text.\n3. Use a 2-column table with hidden borders for \"dish — price\" alignment, a heading style per section, and one accent colour.\n4. **File > Download > PDF.**\n\nIt looks plainer than the HTML version, but anyone on staff can update it."},{"title":"Run the final proof pass and publish","body":"Run the **Proofreading and allergen cross-check prompt** with your master list and the final menu text. It returns a mismatch table (price differs, tag missing, dish missing).\n\nThe AI can only compare the two lists. It cannot know whether a dish actually contains nuts. Fix every mismatch at the source list, regenerate, and keep the PDF with a date in the filename (e.g. `menu-2026-10-13.pdf`) so you know which version is on the tables."}],"prompts":[{"title":"Menu clean-up prompt","purpose":"Standardise the master list and write short descriptions without inventing ingredients.","text":"Here is the menu for {{restaurant_name}}, a {{cuisine_style}} restaurant. Each line is: section | dish | ingredients or notes | price | dietary tags.\n{{raw_menu_list}}\n\nTasks:\n1. Standardise dish names to Title Case and keep them under 5 words where possible.\n2. Write a description of at most {{max_description_words}} words per dish using ONLY the ingredients I listed. Do not add garnishes, sauces or ingredients.\n3. Format prices as {{price_format}} (e.g. \"14\" or \"14.00\"), consistently.\n4. Keep my dietary tags exactly as given. Do not add or remove tags.\n5. After the cleaned list, add a \"Check these\" list: duplicates, missing prices, dishes with no tags where the name suggests meat/dairy/nuts, and anything ambiguous.\nReturn the cleaned list in the same pipe-separated format.","variables":["restaurant_name","cuisine_style","raw_menu_list","max_description_words","price_format"]},{"title":"Fill the menu template prompt","purpose":"Turn the cleaned list into a complete printable HTML menu using the template.","text":"Below is an HTML menu template and my cleaned menu list. Produce one complete HTML file:\n- Keep the template's CSS and structure. Replace the sample sections and items with mine, in my section order.\n- Restaurant name: {{restaurant_name}}. Menu title: {{menu_title}}. Service times: {{service_times}}.\n- Paper size: {{paper_size}} (set the @page line accordingly and remove the other).\n- Accent colour: {{accent_color}}.\n- Footer allergen statement: \"{{allergen_statement}}\". Contact line: \"{{address_phone_website}}\".\n- Only include dietary tags that appear in my list, and make the legend match the tags used.\n- It must fit on {{page_count}} page(s). If it won't, tell me which descriptions to shorten rather than shrinking text below 9pt.\nTemplate:\n{{html_template}}\nMenu list:\n{{clean_menu_list}}","variables":["restaurant_name","menu_title","service_times","paper_size","accent_color","allergen_statement","address_phone_website","page_count","html_template","clean_menu_list"]},{"title":"Google Docs menu layout prompt","purpose":"Produce Markdown that pastes cleanly into Google Docs for the no-code route.","text":"Format this menu for Google Docs. Output Markdown only:\n- \"# {{restaurant_name}}\" then one italic line: \"{{menu_title}} · {{service_times}}\".\n- \"## Section\" headings.\n- For each dish, a two-column Markdown table row: \"**Dish name** (tags) – description\" | \"price\".\n- A final line with the dietary legend and this statement: \"{{allergen_statement}}\".\nMenu list:\n{{clean_menu_list}}","variables":["restaurant_name","menu_title","service_times","allergen_statement","clean_menu_list"]},{"title":"Proofreading and allergen cross-check prompt","purpose":"Catch mismatches between the master list and the final menu before printing.","text":"Compare the MASTER LIST with the FINAL MENU TEXT. Report every difference in a table with columns: dish | field (name, price, tags, description, missing) | master value | menu value.\nAlso list spelling mistakes and inconsistent price formats. Do not judge whether tags are correct for the ingredients; only compare the two texts.\nMASTER LIST:\n{{master_list}}\nFINAL MENU TEXT:\n{{final_menu_text}}","variables":["master_list","final_menu_text"]}],"artifacts":[{"title":"Printable HTML menu template (Letter or A4, two columns, text dietary markers)","kind":"template","language":"html","content":"<!doctype html>\n<html lang=\"en\">\n<head>\n<meta charset=\"utf-8\">\n<title>{{restaurant_name}} – Menu</title>\n<!--\n  OneLessTool printable menu template.\n  - Paper size: change @page size to \"letter\" (US) or \"A4\". Both are set up below; keep one.\n  - Print: open in Chrome > Print > Destination \"Save as PDF\" > Margins \"Default\"\n    > tick \"Background graphics\" > Save. Check the PDF at 100% before printing.\n  - Dietary markers are plain text so they survive printing, copying and screen readers.\n  - Everything is self-contained. Fonts are system fonts; swap the --serif/--sans stacks if you like.\n-->\n<style>\n  @page { size: letter; margin: 0.5in; }      /* US Letter 8.5 x 11 in */\n  /* @page { size: A4; margin: 12mm; } */    /* A4 210 x 297 mm: uncomment and delete the line above */\n\n  :root {\n    --ink: #1d1a16;\n    --muted: #6b6258;\n    --accent: {{accent_color}};               /* e.g. #8a2d1c */\n    --rule: #cfc6b8;\n    --serif: \"Iowan Old Style\", \"Palatino Linotype\", Palatino, Georgia, serif;\n    --sans: \"Avenir Next\", \"Segoe UI\", \"Helvetica Neue\", Arial, sans-serif;\n  }\n  * { box-sizing: border-box; margin: 0; padding: 0; }\n  html { -webkit-print-color-adjust: exact; print-color-adjust: exact; }\n  body { color: var(--ink); font-family: var(--serif); font-size: 10.5pt; line-height: 1.35; background: #fff; }\n\n  /* On screen, show the page outline so you can judge the layout before printing */\n  @media screen {\n    body { background: #e9e6e1; padding: 24px 0; }\n    .page { width: 8.5in; min-height: 11in; padding: 0.5in; margin: 0 auto 24px; background: #fff;\n            box-shadow: 0 2px 12px rgba(0,0,0,.15); }\n    body.a4 .page { width: 210mm; min-height: 297mm; padding: 12mm; }\n  }\n  .page + .page { break-before: page; }\n\n  header { text-align: center; margin-bottom: 18pt; }\n  header h1 { font-size: 30pt; letter-spacing: 3pt; text-transform: uppercase; font-weight: 600; }\n  header .tagline { font-family: var(--sans); font-size: 9pt; letter-spacing: 2pt; text-transform: uppercase;\n                    color: var(--muted); margin-top: 4pt; }\n  header .rule { width: 60pt; height: 2pt; background: var(--accent); margin: 10pt auto 0; }\n\n  .columns { column-count: 2; column-gap: 0.4in; }\n  section { break-inside: avoid; margin-bottom: 16pt; }\n  section h2 { font-family: var(--sans); font-size: 10pt; letter-spacing: 2.5pt; text-transform: uppercase;\n               color: var(--accent); border-bottom: 1pt solid var(--rule); padding-bottom: 3pt; margin-bottom: 8pt; }\n  section .note { font-style: italic; color: var(--muted); font-size: 9pt; margin: -4pt 0 8pt; }\n\n  .item { break-inside: avoid; margin-bottom: 8pt; }\n  .item .line { display: flex; align-items: baseline; gap: 6pt; }\n  .item .name { font-weight: 600; }\n  .item .leader { flex: 1; border-bottom: 1pt dotted var(--rule); transform: translateY(-3pt); }\n  .item .price { font-family: var(--sans); font-variant-numeric: tabular-nums; font-weight: 600; }\n  .item .desc { color: var(--muted); font-size: 9.5pt; padding-right: 30pt; }\n  .tags { font-family: var(--sans); font-size: 7.5pt; letter-spacing: .5pt; color: var(--accent); margin-left: 2pt; }\n\n  footer { margin-top: 12pt; padding-top: 8pt; border-top: 1pt solid var(--rule); font-family: var(--sans);\n           font-size: 8pt; color: var(--muted); text-align: center; }\n  footer .legend span { white-space: nowrap; margin: 0 6pt; }\n  footer p { margin-top: 4pt; }\n</style>\n</head>\n<body>\n<!-- For A4 on-screen preview add class=\"a4\" to <body> as well as switching @page above -->\n<div class=\"page\">\n  <header>\n    <h1>{{restaurant_name}}</h1>\n    <div class=\"tagline\">{{menu_title}} · {{service_times}}</div>\n    <div class=\"rule\"></div>\n  </header>\n\n  <div class=\"columns\">\n    <section>\n      <h2>Small Plates</h2>\n      <div class=\"item\">\n        <div class=\"line\"><span class=\"name\">Charred Padrón Peppers <span class=\"tags\">VG · GF</span></span><span class=\"leader\"></span><span class=\"price\">9</span></div>\n        <div class=\"desc\">Flaky sea salt, lemon, smoked olive oil</div>\n      </div>\n      <div class=\"item\">\n        <div class=\"line\"><span class=\"name\">Burrata <span class=\"tags\">V · N</span></span><span class=\"leader\"></span><span class=\"price\">14</span></div>\n        <div class=\"desc\">Roasted grapes, pistachio crumb, grilled sourdough</div>\n      </div>\n      <div class=\"item\">\n        <div class=\"line\"><span class=\"name\">Crispy Calamari</span><span class=\"leader\"></span><span class=\"price\">13</span></div>\n        <div class=\"desc\">Garlic aioli, pickled chilli</div>\n      </div>\n    </section>\n\n    <section>\n      <h2>Mains</h2>\n      <p class=\"note\">Served with house salad. Ask about today's market fish.</p>\n      <div class=\"item\">\n        <div class=\"line\"><span class=\"name\">Roast Half Chicken <span class=\"tags\">GF</span></span><span class=\"leader\"></span><span class=\"price\">24</span></div>\n        <div class=\"desc\">Salsa verde, crushed potatoes, charred lemon</div>\n      </div>\n      <div class=\"item\">\n        <div class=\"line\"><span class=\"name\">Wild Mushroom Risotto <span class=\"tags\">V · GF</span></span><span class=\"leader\"></span><span class=\"price\">21</span></div>\n        <div class=\"desc\">Aged parmesan, thyme, brown butter</div>\n      </div>\n      <div class=\"item\">\n        <div class=\"line\"><span class=\"name\">Steak Frites</span><span class=\"leader\"></span><span class=\"price\">32</span></div>\n        <div class=\"desc\">8 oz bavette, peppercorn sauce, fries</div>\n      </div>\n    </section>\n\n    <section>\n      <h2>Sides</h2>\n      <div class=\"item\"><div class=\"line\"><span class=\"name\">Fries <span class=\"tags\">VG</span></span><span class=\"leader\"></span><span class=\"price\">6</span></div></div>\n      <div class=\"item\"><div class=\"line\"><span class=\"name\">Greens, Garlic &amp; Chilli <span class=\"tags\">VG · GF</span></span><span class=\"leader\"></span><span class=\"price\">7</span></div></div>\n    </section>\n\n    <section>\n      <h2>Desserts</h2>\n      <div class=\"item\">\n        <div class=\"line\"><span class=\"name\">Olive Oil Cake <span class=\"tags\">V</span></span><span class=\"leader\"></span><span class=\"price\">9</span></div>\n        <div class=\"desc\">Citrus, crème fraîche</div>\n      </div>\n      <div class=\"item\">\n        <div class=\"line\"><span class=\"name\">Dark Chocolate Pot <span class=\"tags\">V · GF</span></span><span class=\"leader\"></span><span class=\"price\">10</span></div>\n        <div class=\"desc\">Sea salt, hazelnut praline <span class=\"tags\">N</span></div>\n      </div>\n    </section>\n  </div>\n\n  <footer>\n    <div class=\"legend\">\n      <span>V vegetarian</span><span>VG vegan</span><span>GF made without gluten-containing ingredients</span><span>N contains nuts</span>\n    </div>\n    <p>{{allergen_statement}}</p>\n    <p>{{address_phone_website}}</p>\n  </footer>\n</div>\n\n<!-- Copy the whole <div class=\"page\"> block to add a second page (e.g. drinks). -->\n</body>\n</html>"}],"limitations":["Browser PDFs are RGB with no bleed or crop marks; full-bleed colour and professional offset printing need a designer or the print shop's help.","Less visual freedom than a drag-and-drop editor: photos, illustrations and unusual layouts need more prompting or CSS knowledge.","Fonts are limited to what is installed on your computer unless you add web fonts yourself.","The AI can rewrite or invent ingredients in descriptions; every description has to be checked against the recipe.","The Google Docs route looks plainer and has limited layout control."],"risks":[{"type":"compliance","severity":"high","note":"Wrong allergen or dietary markers can harm guests and breach food labelling rules. Tags must come from the kitchen's recipes and be checked by a person; never let the AI assign them."},{"type":"reliability","severity":"medium","note":"Price typos on a printed menu can be costly. Always run the cross-check prompt and a paper proof."},{"type":"functionality_loss","severity":"low","note":"Cancelling Canva Pro also removes Pro features you may use for signage or social posts."},{"type":"data_portability","severity":"low","note":"Existing Canva menu designs can't be edited outside Canva; download final PDFs and image assets before cancelling."}],"verificationChecklist":["Your current menu, rebuilt with the template, fits on the intended number of pages at 100% scale with text no smaller than 9pt.","A paper test print at Actual size has correct margins, no clipped text and readable prices from arm's length.","The cross-check prompt reports zero mismatches between the master list and the final menu.","Your head chef or kitchen lead has signed off every dietary tag and the allergen statement.","If you use a print shop, they have confirmed they can print your browser PDF (or told you what they need for bleed).","A price change takes you under 20 minutes from editing the master list to a new PDF.","Any Canva menu files and images you still need are downloaded before cancelling."],"savingsMethodology":"Savings = your current Canva Pro cost attributable to menus − incremental cost of this workflow ($0 when using an AI assistant and Google Docs you already have). If menus are the only reason you pay for Canva Pro, the full subscription is saved; otherwise the saving is $0 until your other Canva uses are covered. Printing costs, setup time and staff time are not monetised.","example":{"scenario":"A café owner pays for Canva Pro monthly and uses it only to update a one-page menu every few weeks; they already have a free Claude account and a Google account.","currentMonthlyUSD":15,"newMonthlyUSD":0,"assumptions":["Illustrative: $15/month is a round placeholder for a Canva Pro subscription. canva.com blocked automated access on 2026-10-13, so the current price was not verified.","Menus are the only reason the café pays for Canva Pro.","Free tiers of Claude or ChatGPT are enough for a few menu updates a month."]},"evidence":{"status":"editorial","sources":[{"url":"https://support.google.com/docs/answer/12014036","title":"Google Docs Help: Use Markdown in Docs","accessedAt":"2026-10-13","note":"Import .md via File > Open > Upload or Drive > Open with Google Docs; Paste from Markdown; export via File > Download > Markdown."},{"url":"https://www.canva.com/pricing/","title":"Canva pricing","accessedAt":"2026-10-13","note":"Returned HTTP 403 to automated fetch on 2026-10-13; Canva prices not verified."}],"verifiedBy":"agent:claude-research","notes":"Editorial guide. CSS @page sizes and Chrome's Save as PDF are standard browser behaviour. Google Docs Markdown paste/import verified on Google's help page. Allergen labelling rules vary by jurisdiction and were intentionally not summarised; readers are pointed to their local authority."}},"meta":{"apiVersion":"v1","dataVersion":"4f1b9f55d2a1","dataGeneratedAt":"2026-10-13T14:29:58.201Z","docs":"/docs/api","evidenceLegend":"/docs/data-model#evidence","disclaimer":"Prices and capabilities change. Check each item's evidence status and verification date. Savings are estimates, not guarantees."}}