Overview
A fresh design, and a menu that keeps changing
Elsom Cellars is a winery that had been making its menus in-house with tools like Canva. They asked me to redesign their food and wine menus using the logos they already had. I designed them in Figma: an 11×17 tabloid food menu printed front and back, and a one-sided wine list. Both use the Elsom wordmark, a watermark, and a five-weight type system pairing Barlow Condensed with Cormorant Garamond.
The design was the easy part. The hard part was what happened every time a price or menu item changed. The winery wanted to update its own menus without calling me, and without breaking the design. I researched the tools they already knew, found that their "locks" don't actually lock, and shipped a spreadsheet-to-print pipeline that keeps design and content in separate hands.
The Challenge
Every menu change went through me. I edited the file in Figma, exported a print-ready PDF, and sent it back to the winery to print. They asked to make changes without Figma and without me, but they still wanted to keep the design and branding.
So far the requests were small, like renaming an item or bumping a price. But I expected the whole menu to change next season, and anyone editing it would be someone with no design training and no designer checking their work.
First Pass
The obvious build, and why I stepped back
My first brief was simple: a site where someone signs in, edits the text on the menu but never the formatting or typography, and exports a PDF. I kept the feature set deliberately small. I rebuilt the Figma artboards as a code template that matched them column for column, with the real typefaces embedded in the exported PDF.
One correction came early, and it was on me for not being clearer. The first version treated the page as a PDF editor. What I actually wanted was a plain form for editing text, with the PDF generated only at export time. Once that was fixed, I restyled the interface with Material Design patterns in Elsom's palette.
It worked. But it also came with a sign-in, a save endpoint, and a server-side content store. That's three things someone would have to host and keep running indefinitely, for a menu that changes a few times a year. Before committing to that, I wanted to know whether I should be building anything at all.
Reframing
The questions that changed the scope
I paused the build and treated it as a product question rather than an engineering one. Leveraging the Compound Engineering skills with Claude, I worked through the problem before writing any more code. Four questions reshaped the requirements:
What happens today?
Not what the tool does, but what people do. The answer was that the winery's current "undo button" is calling me. The tool wasn't fixing a broken workflow. It was replacing a person, so the real risk was the first time they changed something and had nobody to ask.
How much changes?
Small edits now, a possible full rewrite next season. Small edits call for confidence and a way back. Rewrites call for a starting point. A good solution has to handle both.
What's my role?
I decided to stay the designer of record. The winery would come to me for design changes only, never for content changes.
Which file is the master?
I hadn't considered this, and it turned out to be the most important question. If they edit prices all summer and I redesign in Figma in September, someone has to reconcile two copies of the menu by hand. The answer became the project's core principle: Figma owns the design, and a separate source owns the content. Neither one ever holds the other's values.
Research · Buy Before Build
Auditing the tools they already knew
I evaluated design tools and menu-specific products against one core requirement: staff can edit text but cannot break the layout.
01
Full edit access
Canva lets anyone with edit access change any design element. Locking content couldn't enforce the layout or prevent mistakes.
02
Fixed canvases break on text
In Marq, fixed canvases meant longer text could overlap or get cut off, so I'd have to step in and fix the menu whenever a mistake happened.
| Product | Layout lock | Print controls | Annual cost |
| Marq Team | Enforced, admin-only unlock | CMYK, adjustable bleed | $120 / 2 seats |
| Adobe Express Teams | Claimed, with open bypass reports | CMYK, bleed, crop marks | ~$120 first year |
| Flipsnack Business | Role-enforced | CMYK, bleed | $1,020 |
| Canva Business | Advisory, any editor can unlock | Fixed 0.125" bleed | $250 / person |
| MustHaveMenus Pro | Undocumented | Their print service | $492 / location |
| iMenuPro | None | CMYK, bleed | $135 + |
Vendor pricing and documentation, August 2026.
Then I learned the winery already paid for Canva. That removed the cost argument, but cost had never been the deciding factor. No Canva plan, at any tier, stops an editor from changing the layout. So Canva became the documented fallback: a no-cost way out if the new approach didn't work for them.
I also set a baseline. At a few small edits a year, me making the changes in Figma costs maybe an hour or two annually. Any solution had to beat that, both in money and in maintenance.
The Decision
Content in a spreadsheet, design in Figma
I recommended moving the menu content into a Google Sheet, a tool the winery already knew how to use. My template, layout logic, fonts, and PDF export stay exactly as built, and they read from that sheet. Everything with an ongoing cost gets deleted: the sign-in, the save endpoint, the content store, and the server itself. The result is a static page on free hosting.
Master for design · Me
Figma → code template
Typeface, size, color, spacing, column geometry, logo, watermark.
Master for content · Winery
Google Sheet
Sections, item names, prices, descriptions, dietary tags, add-ons.
→
Menu pageReads both. Computes which column each section prints in.
↓
Preview of every printed sideThe only path to export.
↓
Print-ready PDF11×17, typefaces embedded, generated in the browser.
Goals
Answering the four questions
Each question from the reframing became a goal. The spreadsheet approach met all four.
What happens today?
Goal: replace the call to me with a safety net.
The page previews every printed side before export, and a fit check stops a menu that runs too long. The check I used to provide is now built in.
How much changes?
Goal: handle small edits and full rewrites.
A price fix is one cell. A new season is new rows. Column placement is calculated from the content, so even a full rewrite lands in the design.
What's my role?
Goal: stay designer of record, out of content.
No cell in the sheet controls typeface, color, size, or column. The winery owns the content, and only design changes come back to me.
Which file is the master?
Goal: never reconcile two copies.
Figma owns the design and the sheet owns the content. When I redesign next season, whatever is in the sheet flows straight into the new template. Nothing needs reconciling, because nothing was ever duplicated.
The Designs
Guardrails for editing without a designer
With no designer reviewing the output, the tool itself has to catch mistakes.
Content lives where they already work
Each row is a Section or an Item, picked from a dropdown, and the order in the sheet is the order on the menu. No cell controls font, color, size, or column, so the design can't be changed from the sheet.
A preview they can trust
My one must-have was a preview before export. The preview and the PDF read from the same design values, so what the winery sees is exactly what prints.
Food menu, front and back, rendered from the spreadsheet.
A gate instead of a guess
When content runs past the page, the preview names the column that's too long and disables export. A deliberate override is there if they need it, so they're never stuck.
Live, October 2026: the fall wine list ran long, and the gate caught it before it reached the printer.
Layout rules learned from real content
Column placement is calculated from the content, so nobody has to choose it. I tuned the rules against the real artboards, with a separate set for the one-sided wine list.
Failures that explain themselves
Every problem gets a plain-language message instead of a blank page. If the sheet can't be reached, a row can't be read, or a column is missing, the page says what's wrong and holds the export.
Outcome
Smaller to maintain, safer to use
Both menus are live as a static site on Vercel. The winery edits one spreadsheet with a tab per menu, opens the page, reads the preview, and exports the print-ready file. I stay the designer of record in Figma, and content changes no longer come through me.
Server → Static
Removed the sign-in, save endpoint, content store and running server. What's left is a static page on free hosting, with nothing to keep alive.
2 menus · 1 sheet
Food (front and back) and wine (one side) both read from one spreadsheet. Adding the wine menu left the food menu's printed output unchanged.
Reflection
What I'd carry forward
Assign owners by type
Asking "which file is the master?" was the wrong question. Design and content each needed their own owner, and that one decision settled build vs. buy, the hosting choice, and the September redesign problem.
Verify vendor claims
The obvious answer, "use a locked Canva template," fell apart on one line of Canva's own documentation. A lock is a feature, not a permission, and the difference only shows up when nobody is watching.
Design for unsupervised use
Once I'm out of the loop, the preview is the only quality check. That made preview accuracy a correctness requirement, not polish, and it turned the overflow warning into a gate.
Set the bar honestly
The alternative to building was an hour or two a year of my time. Measuring every option against that baseline kept me from building more than the problem needed.