Numbered the same here, on the site, and in the PDF, because all three read from one list.
1
Every link you share lands on the homepage, whatever you linked to
Measured Fix first Links
WhatA script at the top of index.html strips the fragment from the URL whenever the visitor did not arrive from getvie.com. So getvie.com/#plan sent by text, email, Instagram or a QR code opens the homepage instead of the plan. Clicking the same link inside the site works perfectly, which is why it survived a month without being spotted.
WhyThis is the one that costs money. Every link in a newsletter, every link in a post, every link you paste into a DM to a prospective subscriber points at a specific thing and delivers the front door instead. The visitor does not report it. They assume they tapped the wrong thing, or that the page is not there, and they leave.
HowDelete the script. It was written to stop the page opening below the fold, and it never did that, because the scroll came from settle() inside showHome() rather than from the fragment. Fixing the real cause lets the fragment stay, so deep links work again.
ResultShared links reach what they name. Already fixed in v26, which is the build this review sits on.
How it was checkedChromium, three builds side by side. v24 opens #plan correctly. v25 strips it and shows the homepage. v26 opens it again. The hash is gone before DOMContentLoaded fires, which is how the script was traced.
See it on the page
2
The first time here card sits on top of the pills
Measured Fix first Design
WhatThe card is position:absolute, but it lived in the left column of the hero while .hero was the only positioned ancestor above it. Every comment in the stylesheet assumes it anchors to .herostage, the photo column. It never did. Anchored to the whole hero, bottom:0 parks it across the pill row.
WhyThe pills are the only navigation on the homepage that names what Vie does. Covering them hides the five things a first visitor most needs to see, and it makes the page look broken rather than busy, which is a harder thing to come back from on a site whose whole argument is care.
HowMove the card inside .herostage so the positioning resolves against the element it was written for, and reserve enough room under the photo for it to hang without clipping the byline.
ResultThe card cannot reach the pills at any width, because they now sit in different columns. Fixed in v26.
How it was checkedMeasured at thirteen widths from 360 to 1440. Before: overlapping. After: 52px clear side by side above 880, stacked 588px below the pills under 880, and 24px clear of the byline rather than clipping it by 14.
See it on the page
3
The homepage opened halfway down, with the hero scrolled away
Measured Fix first UX
Whatboot() finished by calling showHome(), and showHome() always called settle(), which glides to the top of the enclosing band. On a first load that scrolled past the headline, the photograph and the pills, and opened the site on the Wednesday section.
WhyThe hero carries the whole proposition: meal plans that save you money, the sentence about reading the sale prices, and the photograph that tells someone a real person cooks this. Skipping it means a first visitor starts in the middle of an argument whose opening they never saw.
HowTreat the first paint as what it is. There is nowhere to scroll back to before anyone has navigated, so settle only on a real navigation, and set scrollRestoration to manual so a reload starts at the top too.
ResultThe site opens at the top on every width tested, and clicking through to a feather still scrolls to it. Fixed in v26.
How it was checkedscrollY on load was 927 before and is 0 after, at all thirteen widths. Clicking a pill still scrolls, so the fix did not flatten navigation.
See it on the page
4
The deploy folder carries build files Netlify will try to act on
Measured Next up Engineering
WhatThe folder that gets dragged to Netlify contains package.json with a real dependency, a src/ directory, add_plausible.py, check-preview.py, two .bak files and three markdown handoffs. The functions are already bundled, so none of it is needed at deploy time.
WhyYour own deploy notes already record this one: a package.json or a src/ directory in a drag and drop folder makes Netlify run an install it was not asked to run. It is deploying cleanly today, so this is a trap rather than a fire, but it is the kind that goes off during a launch rather than on a quiet Tuesday. The .bak files are also a second copy of the site sitting next to the site.
HowMove the sources and the handoffs up one level into vie/, the way your other builds already do it, and leave only what is served in the deploy folder.
ResultA deploy folder where everything present is something a browser asks for, and no install step that can surprise you mid launch.
How it was checkedRead from the v25 deploy zip. Left alone in v26 on purpose: it is a restructure, not a bug fix, and it did not belong in a patch aimed at two visual faults.
See it on the page
5
The shopping list does not reflow on a phone
Sample note Fix first Mobile
WhatA week's list is laid out as a fixed table. On a phone the columns keep their widths, so the quantity column slides under the thumb and the aisle column leaves the screen entirely.
WhyThe shopping list is the one screen that gets used standing up, in a store, one handed, on a phone. If any part of Vie has to be perfect on a small screen it is this one, and a layout that works everywhere except the aisle is a layout that fails at the only moment that counts.
HowDrop the table below 600px and stack each line as its own row: item first, quantity underneath in the lighter weight, aisle as a small tag. Keep the tick target at 44px so it can be hit while walking.
ResultA list that can be worked through in a store without pinching or scrolling sideways, which is the difference between a tool someone uses weekly and one they screenshot once.
This note is an illustration of the format, not a finding about this site. It shows how a note of this kind reads before it is pointed at a real client.
See it on the page
7
A footer link points at a page that was never built
Sample note Fix first Links
WhatOne of the links in the footer resolves to a path with nothing behind it and returns the 404.
WhyA dead link in the footer is a small thing that does a specific kind of damage: it tells a visitor the site is not maintained. On a subscription product, where the whole ask is that someone trusts you to turn up every Wednesday, looking unmaintained is expensive.
HowEither build the page or remove the link today, and add a link check to the pre ship list so the next one is caught before it ships rather than after.
ResultNo dead ends, and a check that keeps it that way without anyone having to remember.
This note is an illustration of the format, not a finding about this site. It shows how a note of this kind reads before it is pointed at a real client.
See it on the page
8
Alt text still describes the photograph that used to be there
Sample note Next up Accessibility
WhatTwo images carry alt text written for earlier photographs. The words describe a dish that is no longer in the frame.
WhyWrong alt text is worse than none. A screen reader announces a confident description of something that is not on the page, and a search engine indexes the same mistake. It also undoes the thing these photographs are for, which is proving that you cooked and shot every one.
HowRewrite both against what is actually in the frame, in the same register as the rest: what the dish is, what it is on, what is around it. Then make alt text part of the image swap, so it moves when the photo moves.
ResultDescriptions that match the pictures, and a habit that stops them drifting apart again.
This note is an illustration of the format, not a finding about this site. It shows how a note of this kind reads before it is pointed at a real client.
See it on the page
9
Card titles disappear in dark mode
Sample note Next up Design
WhatThe feather card headings sit inside link and button wrappers and never set their own color. They inherit the browser default, which is near black, and the cards go dark when the system is in dark mode.
WhyDark text on a dark card is not hard to read, it is invisible. The card looks empty, so the page looks broken, and the person it happens to has no way to tell you what they saw beyond saying it did not work.
HowSet an explicit palette color on every heading rather than letting it inherit. This is already written down as a house rule, so it is a compliance fix rather than a new decision.
ResultEvery card readable in both modes, enforced by the contrast suite so it cannot come back.
This note is an illustration of the format, not a finding about this site. It shows how a note of this kind reads before it is pointed at a real client.
See it on the page
11
Nothing on the page is shaped like a question, so assistants cannot quote it
Sample note Next up AEO
WhatThere is no FAQ block, no question shaped heading and no short self contained answer anywhere on the page.
WhyA growing share of the people who would like Vie will never see a list of blue links. They will ask an assistant how to plan meals around what is on sale, and it will answer out of pages that have a question as a heading and a complete answer in the next forty words. Pages written only as marketing prose do not get quoted, because there is nothing liftable in them.
HowAdd five real questions with real answers, each answer complete on its own without the paragraph above it. How does Vie know what is on sale. Which stores. What if my store is not covered. Do I have to cook all five. What does it cost. Mark them up as FAQPage so the structure is machine readable, and keep the answers honest about current limits.
ResultA page an assistant can quote accurately, and a set of answers that also removes the five objections that stop a signup.
This note is an illustration of the format, not a finding about this site. It shows how a note of this kind reads before it is pointed at a real client.
See it on the page
12
Three thousand recipes and no structured data on any of them
Sample note Next up SEO
WhatThe recipe pages carry no Recipe markup: no ingredients, no times, no yield, no ratings in a form a search engine reads.
WhyRecipe markup is the single largest lever this archive has, and it is the one piece of SEO where the format is fixed and the payoff is visible. Without it the recipes compete as plain pages against sites whose entries show a photo, a time and a star rating in the results. The archive is the moat and it is currently invisible.
HowGenerate the markup from the parsed recipe data rather than writing it by hand. The fields are already in recipes.json: ingredients, instructions, times, yield. Emit it per recipe at build time, and skip any recipe missing a time rather than guessing one.
ResultRecipes eligible for rich results, generated from the data you already have rather than maintained as a second copy by hand.
This note is an illustration of the format, not a finding about this site. It shows how a note of this kind reads before it is pointed at a real client.
See it on the page
13
An apostrophe in the rotator that should not be there
Sample note Polish Copy
WhatOne of the rotating lines uses it's where its belongs.
WhyOn a page selling care and craft, a misplaced apostrophe is read as a signal about everything else. It is a small thing that gets noticed by exactly the sort of reader who would otherwise be impressed.
HowFix the line, then add the pair to the spelling check that already runs in the suite, alongside the British spellings it is catching now.
ResultOne fewer thing to notice, and a check that keeps it that way.
This note is an illustration of the format, not a finding about this site. It shows how a note of this kind reads before it is pointed at a real client.
See it on the page
14
The photographs ship at the size they came off the camera
Sample note Polish Performance
WhatSeveral images are served at their full dimensions and scaled down by the browser, rather than being resized and served in a modern format.
WhyThese photographs are the proof that a real person cooks this, so they have to stay beautiful. But on a phone on a weak connection the hero can be most of what loads first, and a hero that arrives late undoes the impression it was there to make.
HowServe each one at the size it is actually displayed, in AVIF with a JPEG fallback, and keep the explicit width and height so nothing jumps while it loads. The hero keeps fetchpriority high. The rest stay lazy.
ResultThe same photographs, arriving fast enough to do their job on the connection most people will be on.
This note is an illustration of the format, not a finding about this site. It shows how a note of this kind reads before it is pointed at a real client.
See it on the page