My French Husband
Version 11 · 26 October 2026
Part one · The brand
The main logo. Hero of the site, top of every email, cover of every document.
Three lines of type, a rule and a fleur-de-lis: “My” in Pinyon Script, in script blue #475C79, above FRENCH HUSBAND in Cormorant Garamond capitals, widely spaced, in ink, with a long blue rule and a fleur-de-lis beneath. No ring, no photograph. Use the file everywhere, the homepage included. The page header uses the one-line version below.
logo-premium.png · transparent, for cream or white grounds · 749×489. logo-wordmark.png is the same image, kept for older links and emails.
One line at the top of every page, set in live type and linked to the homepage: top left on site pages and the pitch deck, centred on the quizzes, tools, Ask and the guide. Same proportions everywhere. “My” in Pinyon Script, in blue; FRENCH HUSBAND in Cormorant Garamond capitals, letterspaced, in ink. No ring beside it: the fleur-de-lis is the small mark, kept for small sizes.
| “My” | Pinyon Script · 1.55× the name · script blue #475C79 · sits on the baseline, .22em before the F |
| FRENCH HUSBAND | Cormorant Garamond · 1.05rem · capitals · .22em spacing · --ink #2B2A27 |
| Below 1000px | .9rem, .14em spacing. Never drop the “My”. |
| On navy | The name in cream, the “My” in pale gold #D8BE86 (the menu drawer). |
| Where it lives | .nav-brand in styles.css and site-chrome.css, .brand in quiz.css and ask.html, .gd-bar in guide.html, .bl-bar in bulletin.html. |
| Code | <a class="nav-brand" href="index.html"><span class="my">My</span>French Husband</a> |
logo-premium.png.nav-brandbrand/marks/monogram-mfh.svg
portrait-us.png
favicon.svg
Clear space: keep a margin equal to the height of the H in HUSBAND
on every side. Nothing sits inside it — not type, not another mark, not the edge of the page.
Minimum size: 140px wide on screen, 30mm in print. Below that the script “My”
stops reading — use the fleur-de-lis mark instead.
Two verdict marks with two different jobs. They never appear together.
MFH Approved — the researched verdict on whether a brand is actually French. Dated, sourced, and never for sale.
The series mark. His verdict on American things — fast, opinionated, no research. Corner of every episode, same position.
Defined once in styles.css under :root. Use the variable, not the hex.
#FCFBF8Page background#F1EDE2Bands, cards, deeper background#3E5A78Links, kickers, figures#475C79The script “My” only: logo, header, Passport#2E4457Article banner, shop card, filled buttons#2B2A27Body text#6E6A60Secondary text, captions#E3DDCEHairlines, borders#A98E52Seal, verdict stamps, marks#C9A96AGold on dark — CTA, banner rules#D8BE86Kickers on dark backgrounds#3A536BTop of the navy band gradient#263A4ABottom of the navy band gradient#9FB0BFSmall print on navy#475C79The script “My” of the header logo#46648ATop of the blue button gradient#7E6530Small gold text on cream, where #A98E52 is too light to read#A65B52Form errors and wrong answers. Nowhere else.Three families, loaded from Google Fonts. Every weight listed is one already in use — adding another costs load time.
The “My” in the wordmark, a first-name signature, and the reader’s own “My” on result cards and My Passeport. See The script “My”.
Headlines, H1–H3, big figures, verdict stamps.
Body copy, kickers, buttons, labels, tables.
One scale for reading text. Set 25 Oct 2026 (releases 22ci to 22ck).
Jost 300, 16.8px, line height 1.8. The same on every article and on every page of running text.
Cormorant Garamond, 19.2px, under the title in the article banner. Section intros (.sub) are Jost 300, up to 18.4px.
Any sentence someone reads is at least 14px: dates, summaries, prices, store names, fine print, captions, the passport line. Shop prices are 15px. The one exception is a line in a fixed-width card that 14px would cut off.
Jost 500 capitals with letter-spacing may stay at 9.5 to 12px: kickers, badges, tabs, buttons.
The H1 is the title the reader sees first: the masthead on a landing page, the title on an article, the page heading on a tool. A title inside a card or a selector is an H2.
Capitals are a tone of voice. Used everywhere they shout; kept to a few fixed places they read as the brand. Set 19 Oct 2026 (release 19w).
FRENCH HUSBAND, Cormorant, spaced .22em.
Top bar and drawer links.
The H1 of the home page, the Journal, the subject pages, Shop, Quizzes, About and Episodes. Cormorant, spaced .16em. Articles never get one.
Kickers, meta (8 min read, Cover story), tags, buttons, text links and block labels such as Sources. Jost 500, small, spaced .18–.3em, seven words at most.
Article H1s, every H2 and H3, cover stories, card titles and section heads (Keep reading, Start here, Everything on Fashion and Beauty). Cormorant, no letter-spacing.
Products (The French Fashion Field Guide, Le Bulletin, My Passeport, Le Shop), quiz and tool names (How French Is Your Husband?), shop collections (Gift Guide, Fall Essentials), subjects (Fashion & Beauty), people and places.
Lower case after a colon: “Roasted chestnuts in Paris: the paper cone, explained”. A question mark starts a new sentence: “Why are French people thin? The real answer is the schedule”.
Write labels in normal case and let the CSS add the capitals. Never type capitals into the copy.
Where it is set: styles.css. h1.masthead keeps the capitals; the base h2 is sentence case; the “19w capitals rule” at the end of the file overrides older components.
The one piece of handwriting in the brand. It works because it is rare: one per screen, only for “My” or a first name.
Script “My” above FRENCH HUSBAND. Script blue #475C79 on light grounds, cream or pale gold on navy, navy #2E4457 on gold. This is its home.
A first name under a personal note: the About page, the Field Guide, Le Bulletin, the welcome email. In email it is a small image with the name as alt text.
On things a reader keeps or shares: result cards (“My Paris is the 16th”, “My verdict: Parisienne”) and the cover of My Passeport. Only “My” is in script; the rest of the line is in the normal type.
Their first name on the holder line of My Passeport, or on a result card when they typed it in. Never a name we guessed.
A script “My” alone on a Le Club label, tag or candle, where the product is the brand.
Reel end cards and Instagram highlight covers, always as the full wordmark.
If a signature and a script “My” meet on one screen or page, drop one. Rarity is the point.
Only “My” or a first name. Never “Paris”, “Bonjour”, “Verdict” or a headline in script.
Never body copy, buttons, menus, labels, captions or form fields.
Never below 18px on screen or 14pt in print. Favicons, stamps and avatars use the fleur-de-lis mark instead.
Email apps do not load it reliably. Use an image of the word, with alt text.
No capitals, letter-spacing, outlines, shadows or gradients, and no gold script on cream: it fails contrast.
Pinyon Script only. No handwriting fonts, no faux signatures.
The hardest thing to hand over, and the easiest to get wrong.
A woman of 35 to 54, shopping for herself, her home and her mother.89.5% of followers are women; 65% are 35 to 54, and 39% are 45 or over. About half live outside the US: France, the UK, Canada, Australia (Instagram, 90 days to 23 Oct 2026). Write for her, never at her: French and European choices, not a man telling her what to buy.
Nobody is romantic about Cristaline. That is the compliment.Say the judgement, then justify it. Never build up to it.
The chair? Pas. The price? Also pas.The humour is in the flatness. Punctuation cannot carry it.
He judges America. America never sees it coming.Playful, not superior. The moment it sneers, it stops being funny.
An American wife. A French husband who doesn’t know he’s the show.She sets the scene and names the series. He never announces anything.
De Paris, malgré lui.If a line needs a second line to land, cut both.
He has an opinion. Ask for it.On Ask My French Husband the answer is short, in his voice, and always marked as written by AI from the Journal.
This started with Elizabeth, not with me.The site narrates in the third person. A personal note is the exception: plain, true, signed with a first name.
Free. Unsubscribe in one click.Every sign-up says what the reader gets and how to leave. No countdowns, no pop-ups, no capital letters.
What the pictures do, and the one rule that is not negotiable.
The drawings carry the site now. Colour engravings, drawn in matching sheets, reused before anything new is made. Browse them all on the DAM.











































The building blocks every page is made from. Reuse these before inventing a new one.
1 PrimaryNavy fill, cream text. Hover: lighter navy.
2 SecondaryNavy outline. Hover: fills navy.
3 Text linkNavy caps, gold underline, an arrow. Hover: the underline turns navy.
1 On navyCream fill, navy text. Hover: pale gold.
2 On navyCream outline. Hover: fills cream.
3 On navyCream caps, gold underline.
RegularAbout 48px tall. Page and band calls to action, forms.
SmallAbout 36px. The menu, inline sign-ups, cards, tool rows, the floating button.
StatesFocus: a gold ring. Pressed: shrinks 2%. Busy or disabled: 55% opacity.
ButtonsOne system for every page, set once in styles.css. Pill, Jost 500, caps, letterspaced .18em. One primary per block; the second action is the outline; anything after that is a text link. Never a gold, gradient or square button, and never two primaries side by side. The email field next to a button takes the same pill shape. Chips and filters (the Journal subjects, Ask examples, Team France or America) are a separate component: they toggle, they do not send you anywhere.
ClassesPrimary: .btn, .bi-btn, .bl-btn, .hb-btn, .nav-cta, .cta.fill, .pantry-buy, .deck-fab, .dk-btn, .lt-dl (the guide download after a sign-up). Secondary: .btn.ghost, .cta, .dk-btn.ghost. On navy: .qp-btn, .r-share, .h-reveal, .h-cardsave. Text link: .go, .dk-go, .r-all, .jl-all, .pantry-read. A new button uses one of these, not a new class.
II — Read & Play
The videos, answered properly.
Section openerSmall label, hairline, then the heading. Home sections are numbered in Roman numerals; other pages use the label alone. The heading is short (one line on a desktop), in Cormorant, sentence case, never spaced capitals.
What is a goûter?The four o’clock snack that makes dinner at eight possible.Read →CardWhite, hairline border, rounded. Drawing, title, one line, one gold call to action. Three across on desktop, stacked on phones.
SearchWhite pill, blue outline, magnifier. On the Journal it stays on screen while the reader scrolls.
III — Ask him
He has an opinion. Ask for it.
Ask himNavy bandThe one loud block on a page: Ask, the mid-article quiz, the Start here card. Never two on one screen.
Free guide
The French Household Field Guide
Free. Unsubscribe in one click. Privacy.
Sign-upOne system (letter.js), one look on every page: a full-width navy band. Gold label, one Cormorant line naming the offer, then first name, email and a gold pill button (navy text, hover pale gold), then one line of small print. No paragraph, no social proof, no topic buttons. Content sits in the page column; the navy runs edge to edge. Stacks on phones. Inside articles it is a slim white card instead, so it never sits on the same screen as the navy quiz block. Readers who already joined see one line and a text link to the guide, or nothing inside articles. Offers in use: Free guide / The French Household Field Guide (or The French Fashion Field Guide on style pages); Early access / Elizabeth’s Black Friday picks, before the sales open.
Free · The Field Guide
Twenty rules he brought from Paris.
Join boxThe navy sign-up for pages that had none (What’s for dinner, About). First name, email, one topic. Placed with data-join, filled by mfh-join.js. Sends the guide (SOURCE guide-*), adds the Wants tag, then thanks people who already joined instead of asking again.
Tip cardsA numbered list as cards: gold Cormorant number, navy title, one or two lines. Two across, every other pair on cream; an odd last card spans the row. Use for tips and rules, never for steps in a recipe.
Keep readingThe end of every article. A swipeable row of 8 or 9 cards: 5 to 7 from the same subject, up to 2 from another subject when they are close enough, and one quiz or tool, in navy, at position 3. Chosen by the words the articles share, not by hand; a few pins fix the quiz for a subject. Rebuilt every time an article is added. Replaces the old three-card Related row.
Latest, with subject tabsThe top of the Journal: newest first, six cards, tabs to filter by subject. A New badge for four days. A slider further down follows the tab. Placed with data-jl, filled by jl-latest.js from the cards already on the page: nothing to update by hand.
Share cardWhat a link shows on Messages, WhatsApp or Facebook: the article’s own picture or, when there is none, a navy card with the title. 1200×630. Never the logo alone, never a drawing of the children.
Back to topA small navy circle bottom right on articles, shown once the reader is well down the page. One tap returns to the title. Never covers the floating sign-up button.
Our Black Friday curationOne compact carousel that scrolls sideways, placed low so it never pushes the page down: on Le Shop, under every quiz result and on the two Black Friday articles. On the home page it leads the III — Shop rail instead of being a block of its own. Nine core picks plus top ShopMy picks, one per brand, shuffled on every visit. The subtitle follows the date: watch list, Black Friday, Cyber Monday, cyber week. bf.js; it removes itself on 5 December.
Share as an imageUnder every quiz verdict. Draws a 1080×1920 story card of the reader’s own result on their phone (the drawing, the verdict, its line, the link) and opens the share sheet; on a computer it downloads the card. Nothing is uploaded. share-card.js.
Next stepEvery quiz, tool and article ends with one link to the next thing to do, so nobody hits a dead end. Outline button; on a navy background it switches to its on-dark version by itself (22by).
Fixed elements. These carry their own colour and are not recoloured.
brand/marks/divider-rule.svgbrand/marks/fleur-de-lis.svgbrand/marks/monogram-mfh.svgbrand/marks/fleur-loading.svgbrand/marks/tricolore-bar.svgbrand/marks/wordmark.svg24×24 grid, 1.6 stroke, round caps, currentColor. Social, interface, MFH Approved categories, and the four verdict marks.
brand/icons/arrow-right.svgbrand/icons/cat-beaute.svgbrand/icons/cat-boissons.svgbrand/icons/cat-epicerie.svgbrand/icons/cat-hotels.svgbrand/icons/cat-maison.svgbrand/icons/cat-restaurants.svgbrand/icons/chevron-down.svgbrand/icons/close.svgbrand/icons/email.svgbrand/icons/facebook.svgbrand/icons/instagram.svgbrand/icons/link.svgbrand/icons/menu.svgbrand/icons/newsletter.svgbrand/icons/pinterest.svgbrand/icons/play.svgbrand/icons/search.svgbrand/icons/tiktok.svgbrand/icons/verdict-approuve.svgbrand/icons/verdict-bof.svgbrand/icons/verdict-imposteur.svgbrand/icons/verdict-pas.svgbrand/icons/x-twitter.svgbrand/icons/youtube.svgPart two · The site
Five doors, and what is behind each.
| Door | Name | What it is |
|---|---|---|
| Watch | Episodes | The films. The latest twelve reels come straight from Instagram. |
| Play | Your turn | Quizzes, tools and adventures. About a minute each. |
| Ask | Ask My French Husband | One question, one short ruling. Written by AI from the Journal. |
| Read | Le Journal | Field notes on French and American life. |
| Join | Le Bulletin | Our letter. Comes with The French Household Field Guide. Door IV on the homepage. |
| Page | File | Job |
|---|---|---|
| Home | index.html | Monthly editions (now Édition 02). Hero with the guide, four doors (I Watch, II Read & Play, III Ask, IV Le Bulletin) that dock as a slim bar on scroll. Then Who we are (with the how-we-met and first-date reels), I Watch, II Read & Play (one seasonal carousel of articles and quizzes, re-sorted every visit by mfh-season.js, one rule per month), III Ask, IV Le Bulletin, Brands & press. The contact email lives in the footer only. |
| About | about.html | A signed note, six photographs, the two origin reels, then the longer story. |
| Episodes | episodes.html | The twelve latest reels from Instagram in a grid with a sort menu, then the archive by series. |
| Le Journal | blog.html | Latest first: a carousel of the twelve newest with subject tabs at the top and the sign-up box under it, then a carousel of every quiz, then every article by subject with filters and its own search. |
| Subject hubs | seven pages, one per subject | Landing pages on the French Recipes template: a lead, articles grouped in reading order, the subject’s quizzes and tools. |
| Your turn | quiz.html | Every quiz, tool and adventure. Results carry Share and Print. |
| Ask My French Husband | ask.html | One question in, one short ruling out. A guide box sits under the answer. |
| My Passeport | passport.html, passport.js | The reader’s stamps and rank. A guide box under the stamps. |
| Site search | search.js on every page | The magnifier in the menu. Results in three columns: Articles, Recipes and dinners, Quizzes, tools and pages. Tabs on a phone. |
| The Field Guide | guide.html | The sign-up page for the free guide. |
| Le Bulletin | bulletin.html | The newsletter page. |
| What our readers say | what-our-readers-say.php | Vote results, once a question has twenty votes. |
| For brands | partnerships.html, press.html | Partnerships and the press kit. |
| Pitch deck | pitch-deck.html | The partnership deck, open to anyone with the link, with the PDF (My-French-Husband-Pitch-Deck.pdf) to download. Noindex, not in the menu or the sitemap; linked from Partnerships, Press and the homepage. Jump bar instead of the site menu. Built by build-deck-page.py; traction and audience numbers are live from stats.json. Collects no personal data. No in-talks brand is named. |
| Small print | privacy.html, disclosure.html, faq.html | Privacy, disclosure and common questions. |
| Digital Asset Management (DAM) | image-inventory.html | Every drawing and photo on the server, filtered by type and topic. New uploads appear on their own. Not indexed. |
| Le Bulletin audience | audience.php | Private dashboard behind a password: This week (Double down / Fix), Audience, Content (Page by page: what each page ranks for in Google and the next step, with a prompt for Claude; quiz drop-off by question; where sign-ups happen), Ideation (from search, next reels), Optimizations, Business (brand outreach by category, travel included, with a status per brand; Not a fit hides a brand). Every suggestion has a Mark done tick. Refresh and Export PDF sit in the sticky bar. Not indexed. |
| Measurement hub | measurement.php | The event plan and links to every report. Private. |
| This book | brand.html | Not indexed by search engines, but public to anyone with the link. |
Seven subjects. They organise the Journal, the hubs, the drawings and the quiz tags. 72 articles today.
| Subject | Articles | Hub page | Sends readers to |
|---|---|---|---|
| French Recipes | 7 | french-recipes.html | Could You Survive a French Dinner Party?then Your First Dinner with French In-Laws |
| Home & Table | 16 | french-american-food-culture.html | How American Are You?then Could You Survive a French Dinner Party? |
| Fashion & Beauty | 9 | french-fashion-and-beauty.html | Your French Pharmacy Skincare Routinethen Is Your Closet French or American? |
| French Parenting | 14 | french-parenting.html | Do You Parent French or American?then Were You a French or an American Teenager? |
| Paris & Travel | 8 | paris-and-travel.html | How Much Vacation Would You Have in France?then Your First Day in Paris |
| Holidays | 10 | french-vs-american-holidays.html | How American Is Your Halloween?then How French Is Your Thanksgiving? |
| American Life | 8 | american-life-through-french-eyes.html | How American Are You?then Your First Day in New York |
An article carries exactly one of the seven subjects. It decides the Journal filter, the hub page that lists it, and the drawing family.
A navy band mid-article points to the main quiz or tool for the topic; a smaller cream card at the end points to a second one. Both are written into the page as real links.
Do not add an eighth subject without a hub page, a filter button and at least five articles to fill it.
Quiz and tool tags are the Journal subjects. A reader who filters by Fashion & Beauty sees the same word on the quiz hub.
Top to bottom. Every article has these, in this order.
| Block | What it does |
|---|---|
| Title, drawing, reading time | The navy header: the drawing as a round cream medallion with a gold ring above the label (118px, 84px on a phone), then the title in Cormorant (the question a reader would type), the short line, and the byline with the date and minutes to read. The drawing is not repeated lower in the article. |
| Short answer | The answer in two or three lines before anything else, so a search engine or an AI can quote it. |
| Contents | Links to each section. |
| Jump to the recipe | Recipes only: a button above the fold that goes straight to the ingredients. |
| Vote | One question, two buttons (his side, hers), before the first section. No email. |
| Slim sign-up | A white card mid-article. Hidden for readers who already joined. |
| Navy band | The main quiz or tool for the topic. |
| Questions and answers | Five or six real questions with short answers, marked up for search. |
| Ask box | After the questions: ask him your own. |
| Cream end card | A second, different quiz or tool. Smaller than the band. |
| Keep reading | A swipeable row of 8 or 9 related cards, one quiz at position 3. Replaces the old Related row. |
| Up arrow | Back to the top, once the reader is well down the page. |
| Behind the page | Article, FAQ and breadcrumb markup, a 1200x630 social card, one subject. |
Everything behind the Play door.
| Kind | Titles |
|---|---|
| Quizzes | How American Are You? · How Parisian Are You? · Were You a French or an American Teenager? · How American Is Your Halloween? · How French Is Your Thanksgiving? · How French Is Your Husband? · Could You Survive a French Dinner Party? · Do You Parent French or American? · Is Your Closet French or American? · How French Is Your Christmas? · How Good Is Your French? · What Would a French Person Judge You For? · Which Parisienne Are You? · Who Are You Shopping For? · City Mouse or Country Mouse? · French Zodiac Quiz · How French Is Your House? |
| Adventures | Your First Day in Paris · Your First Dinner with French In-Laws · Your First Day in New York · Chat Parisien or American Cat? |
| Tools | Your French Pharmacy Skincare Routine · Your French Makeup Look · Your French Hair Routine · What’s for Dinner? The French Way · French Grade Converter · How Much Do I Tip? · How Much Vacation Would You Have in France? · Where Is Your Paris? |
| My Passeport | One stamp for every quiz, tool and adventure finished (27 in all), ranks from Touriste to Citoyenne d’honneur. Kept in the reader’s browser; passport.html shows the identity page and every stamp. |
A quiz is short enough to finish in a queue. The result is a verdict, not a score sheet.
Every quiz, tool and adventure has its own square drawing, reused wherever it is promoted.
The result screen is built to be screenshotted and sent. Tool results carry Share and Print buttons (result-actions.js): Share opens the phone’s share sheet or copies the link; Print gives a clean one-page version.
At the result, with a line saying it also joins the letter. The email is the price of the result: the verdict is never shown before it.
After the result: how it was (Loved it, Fine, Not for me), and why, when it was not Loved it. The answers become tags and decide which quizzes get shorter.
Part three · Data
What is counted, what it is called, and the attribute that switches it on.
| Event | Carries | Fires when |
|---|---|---|
letter_view | source, page | A sign-up form scrolls into view. |
newsletter_signup | source, page, with_name, form | Someone joins Le Bulletin from that form. with_name says whether a first name was given; form is join-box for the navy box. |
product_interest | product, source | The topic picked in a join box, sent with the sign-up. |
category_interest | category, source | A reader taps an interest chip above a form. |
article_vote | article, side | A vote on an article question (his side or hers). |
ask_promo | page, position | A question is sent to Ask from a box elsewhere on the site. |
quiz_promo_click | article, quiz, position | A click on any quiz or tool card or band. |
home_cta | cta | A tracked link or button on the homepage: door-*, dock-* (the floating doors bar), home-who, hero-*, brands-deck. |
deck_jump | section | A section in the deck's Contents menu: show, values, brand, traction, audience, platform, signals, partners, roadmap, contact. |
deck_click | cta | A button in the deck: work (jumps to the contact form), brand (this page), pdf, pdf-bar (download the PDF), scroll. |
deck_contact | topic | The deck's contact form was sent (partner-contact.php emails it and keeps a copy). |
home_edition_view | edition | The homepage is opened. Tells one monthly edition from the next. |
site_search_open | page | The magnifier in the menu is opened. |
site_search | search_term, results | A search is typed (after a short pause). |
site_search_click | search_term, url | A search result is opened. |
result_share | tool | Share is tapped on a quiz or tool result. |
result_print | tool | Print is tapped on a quiz or tool result. |
episode_latest_click | reel | A reel in the latest strip on Episodes. |
journal_filter | category, block | A subject tab or menu on the Journal is used. |
journal_card_click | href | A card in the Journal latest grid or slider is opened. |
related_click | href, position, kind, from | A card in Keep reading is opened. kind is article or quiz; position is 1 to 9. |
back_to_top | from | The up arrow on an article is tapped. |
signup_at_<place> | page | A sign-up attempt, named by where the form sat: top, middle, end, gate, footer, passport, ask (or the box’s data-loc). Sent by search.js and mfh-join.js. |
step_N | quiz or tool | Question N of a quiz or tool was answered, once per play. Shows where people drop off. |
quiz_rate_loved / _fine / _no, quiz_why_<reason> | quiz | The rating after a result, and the reason when it was not Loved it (long, easy, funny, topic, other). |
passport_stamp | item, stamps | A stamp lands in the passport. |
affiliate_click | product, page | An Amazon link is opened (tag sachagoureau-20). |
quiz_start | quiz | A reader starts a quiz. |
quiz_answer | quiz, q, a | An answer is picked. |
quiz_choice | quiz, scene, choice | A pick in a story or a zodiac quiz. |
quiz_back | quiz, q | The back arrow on a question. |
quiz_complete | quiz, score | The last question is answered. |
quiz_gate_skipped | quiz, has_email | A reader who already joined goes past the email step. |
quiz_result_click | quiz, kind, to | A link in a quiz result is opened. |
quiz_next_step | quiz, to | The gold next-step button under the verdict. |
quiz_share | quiz, tier, target | Challenge a friend (or the husband) is tapped. |
quiz_share_landing | quiz, tier | Someone opens a quiz from a shared challenge. |
quiz_share_start | quiz, tier | That person starts the quiz. |
quiz_why_<reason> | quiz | A reason is picked for liking the quiz. |
quiz_feedback | quiz, step | A written note is sent after a quiz. |
guide_download | source | The guide is downloaded, from a quiz result or a form. |
tool_next_step | tool, to | The next-step button on a tool page. |
article_next_step | to | The next-step button at the end of an article. |
wants_select | want, source, page | A reader picks what they want in a join box. |
newsletter_error | source | A sign-up fails. |
guide_pick | guide, ready | A guide is picked on guide.html. |
guide_toggle | guide | Another guide is opened in the guide.html picker. |
guide_link | guide | guide.html is opened on a link to one guide. |
guide_next_step | guide, to | The next-step button on guide.html. |
guide_next_vote | guide | A vote for the next guide. |
guide_preview_open | page | A page of the guide preview is opened. |
sticky_cta | guide | The button in the sticky bar on guide.html. |
book_link | — | guide.html is opened on #book. |
book_interest | answer | An answer to the book question. |
book_price | band | A price band is picked for the book. |
| Attribute | What it does |
|---|---|
data-letter="KEY" | Places a sign-up form. KEY becomes SOURCE in Mailchimp and source in GA4. |
data-cta="name" | Homepage link or button to count as home_cta. |
data-edition="01" | On the homepage main tag. The edition number, sent with home_edition_view. |
data-quiz-promo="quiz" data-quiz-pos="where" | Any link to a quiz or tool. Position is mid, end, home or journal. |
data-ask-promo="where" | A question box that hands off to the Ask page. |
data-vote="slug" | The vote card inside an article. |
data-cat="Subject" | The subject on a Journal card. Filters, counts and jl-latest.js read it. |
data-join data-source="guide-KEY" data-topic="..." | Places the navy join box (mfh-join.js). data-topic preselects the topic. |
data-jl="grid|slider|feature" | A Journal latest block (jl-latest.js). data-n, data-skip, data-filter="tabs|select", data-follow, data-more. |
data-pos="3" data-kind="quiz" | On each Keep reading card, sent with related_click. |
data-loc="place" | On a join box or form: names its place for signup_at_<place>. Without it, the place is worked out from the height on the page. |
data-join data-compact | The one-line join box: email only, the guide opens at once. |
| Field | What goes in it |
|---|---|
EMAIL | The address. The only thing a reader must give. |
FNAME | First name. Asked on the Le Bulletin form and the join boxes, used to open the email. |
INTEREST | One of five topics: French food & recipes, Home decor, Fashion & beauty, Parenting, Paris & travel. Decides the welcome branch; without one, people get Pick your letter. |
WANTS | What the reader asked for more of, in their words when they chose Other. Also added as a Wants: tag by mfh-api.php. |
SOURCE | Which form: the KEY, with guide- in front when the form offers the guide and -ig at the end when the visit came from an Instagram DM link. Join boxes: guide-dinner, guide-about, guide-passport, guide-ask. |
SRCPAGE | The page the form was on. |
PRODUCT | Optional interest chips the reader tapped. |
A new form gets its own KEY so its conversion rate can be read on its own: guide-article-end, not article.
Event names are snake_case. No email or name ever goes into an event or a web address. Search terms are the one free text sent, and never contain a name we asked for.
The link works without JavaScript. The attribute only adds the count.
What we collect, where it is kept, and whether it is tied to a person.
| What | Where it is kept | Tied to a person? |
|---|---|---|
| Email sign-up | Mailchimp | Yes: email, form, page. If it came from a quiz: which quiz and the result. |
| Article vote | votes-data.php on our server | No. A count only. A one-way fingerprint stops repeat votes and is discarded at the end of the day. |
| Question to Ask | Log on our server; sent to the AI model to write the answer | No. The question text only, no name or email. |
| Email sign-up with a first name | Mailchimp | Yes: the first name, if the reader gave it. Optional, never required. |
| Page views, clicks and searches | Google Analytics 4 | No. Aggregate: pages, country, device, search terms, the events above. |
| Joined / voted flags | The reader’s own browser | No. Stays on the device so we do not ask twice. |
| Search Console and GA4 reports | google-data.php, cached 6 hours in _bureau/google-cache.json | No. Aggregate pages, queries and events, read by a Viewer service account whose key stays in _bureau/. |
| Dashboard ticks | _bureau/audience-done.json | No. Which suggested tasks were marked done, and the outreach status of each brand. |
| Passport stamps | The reader’s own browser; as “Stamp:” tags in Mailchimp once the reader is a subscriber | Only for subscribers, as tags. |
| Quiz ratings and reasons | Mailchimp tags (Liked:, Liked why:) and GA4 events | Yes in Mailchimp, for subscribers; no in GA4. |
| Instagram comment-to-DM | ManyChat | Yes: the Instagram account that commented. The email is still asked only on our site. |
Every form that asks for an email states what arrives and how to stop, with a link to the privacy page.
They are the low-effort way in. The email is asked for once, by a separate form that says so.
A vote result appears on the reader data page once it has twenty votes.
Questions sent to Ask and vote splits decide what gets written next. They are never sold or shared with a brand.
No advertising pixels, no retargeting, no sold lists. The privacy page lists every place data is collected and must be updated with each new one.
How the site gets found, and how its own AI behaves.
Each article opens with the short answer. That is what gets quoted by search engines and AI assistants.
Seven hub pages link every article in a subject, so nothing is more than two clicks from the homepage.
search-index.json lists every article, recipe, dinner, quiz, tool and page with its drawing. It is rebuilt by build-search.py whenever something is published.
llms.txt lists what the site is and where the best answers are. sitemap.xml and feed.xml are kept current with every new page.
What our readers say publishes vote results. Original numbers are what other sites link to.
An answer is written only from our own articles, in his voice, kept short and marked as AI. There is a daily limit per visitor.
What people ask is logged, without names, and read when planning what to write.
What a reader receives after signing up.
The same for everyone: the wordmark, our garden photo and how it started, three quizzes (Parisian lips, American coffee, dinner wine), Ask, and New this month. Short.
Three articles that fit the month, swapped at the start of each month alongside the homepage edition.
Every image in an email is a file already live on the site, linked with its full address. No email-only copies to forget to upload.
A sign-up from a form that offers the guide gets the guide email instead. Mailchimp decides from SOURCE.
The French Household Field Guide, a PDF. The version number is on the cover so copies can be told apart. Currently 2.0: rewritten in Elizabeth’s voice, with the current drawings. Built from guide_content.py by build-guide-pdf.py.
Elizabeth’s voice, in the first person: funny, sweet and lighthearted. A little snapshot for now, meant to grow into something much bigger for everyone craving more France. Warmer than the Journal, never a lecture, and never a made-up story about us.
Our letters. Plain, written by her, approved by him. Opens with the first name when we have it.
An unsubscribe link and a postal address.
Part four · Keeping it straight
The parts that are easy to get wrong.
The Approuvé seal marks editorial verdicts only. It never appears on an affiliate link, a sponsored placement or a brand’s own packaging. The moment a verdict can be bought, the seal is worth nothing.
MFH Approved answers “is this actually French?” — researched, dated, sourced. Chic or Pas answers “does he like it?” — fast and opinionated. They never share a mark.
Every icon is stroked with currentColor, so it takes the colour of whatever contains it. Never edit a colour into an icon file — set it on the parent.
Gold is the accent. On any given block, one element gets it. Two gold elements competing is the fastest way to make a page look cheap.
Gold text needs a dark ground to pass contrast. On cream, use blue for text and keep gold for rules, borders and stamps.
Anything written by a model says so next to the answer: “Written by AI from our Journal, in his voice.” It never invents a quote, an anecdote or a fact about the family.
An illustration decorates a page. It is never the og:image or the schema image of an article — those are the og-<slug>.png cards.
Each form that asks for an email says what arrives and how to stop it, with a link to the privacy page. Votes and questions to Ask never ask for an email.
Images and scripts are linked with a version tag (?v=2026100701). Change the file, change the tag, or returning readers keep the old one.
A row of articles or quizzes is a swipeable carousel: arrows on a desktop, swipe on a phone, cards the same height. The homepage has no filter toggles. Le Journal keeps its subject tabs because each one is a link to a subject page.
Homepage sections sit edge to edge, each on its own ground, never the same ground twice in a row. The space lives inside a section (about 50px top and bottom on a desktop, 42px on a phone), never as a gap between two.
An article shows its drawing once, in the header medallion. The same drawing is never repeated in the body, and the header never pushes the text down more than the old gold rule did.
Contact details, links and calls to action appear once on a page. The email address lives in the footer; a section does not repeat it.
It opens once, after 5 seconds, on exit intent or at 30% of the page. Never for subscribers. Closing it snoozes it for 14 days and leaves a small tab. Every step is tracked in GA4 and L’Audience.
The Read & Play carousel has one rule per month, with next month’s first two picks from the 22nd, then evergreen pages. At least three quizzes or tools in ten cards.
Nav and section labels are English. French is kept for proper names — Malgré Lui, Le Bulletin, La Tribune — and for editorial furniture inside articles: En bref, Les faits.
What was made with AI, which tool made it, and the rules we hold it to.
| What | Made with | What it does |
|---|---|---|
| Ask My French Husband | Claude, on our server | The one place a reader meets AI. A short ruling written from our own Journal articles, in his voice, labelled as AI. |
| The site workbench | Claude agent | Builds and edits articles, the homepage, hubs, menu, footer, forms, votes and this book. Works on a copy, tests at phone and desktop width, hands back a zip. |
| The quiz workbench | Claude agent | A second agent that builds the quizzes, tools and adventures. The two never edit each other’s files. |
| Build scripts | Written by the agents | Small Python scripts that stamp the menu, footer, article blocks, social cards, hubs and sitemap into every page, so one change reaches the whole site. |
| Articles | Claude, then us | Researched and drafted from our videos, notes and reader questions, then read, corrected and approved by us before publishing. |
| Drawings | ChatGPT project “MFH drawings”, then Claude | Drawn as sheets of six in one house style from a standing brief, then cut, cleaned to a transparent background and named by Claude. |
| Digital Asset Management (DAM) | Claude, by script | A page listing every image on the server by type and topic, so drawings are reused before new ones are asked for. |
| Site search | Claude, by script | The search index and the three-column results, rebuilt with every publish. |
| MFH Studio | Claude skill | Post-production producer for the reels: hooks, edit lists, rough cuts, captions and variants from raw footage. |
| Site checks | Claude skill | Before each upload: titles, descriptions, search markup, broken links, missing alt text, sitemap. |
| The Field Guide and this book | Generated by script | Both PDFs are rebuilt from source, so a new version is one command. |
| Reader insight | Claude | Reads the audience export, the vote splits and the questions sent to Ask, and turns them into the next articles and quizzes. |
| Welcome email | Claude | Designed and coded in the site’s look, from images already on the site. New this month is swapped monthly. |
Nothing goes live until one of us has read it. Facts that could be wrong are checked or cut.
No made-up quotes, anecdotes or family details. A personal note is written by the person who signs it.
Ask says it is written by AI, next to every answer.
Each agent owns its files. Work crosses between them as written instructions, not as edits to the other’s pages.
API keys and passwords are typed into the server or the service itself, never pasted into a chat.
If a line sounds like a machine wrote it, it is rewritten. The verdict comes first, the sentences are short, and nobody explains the joke.
The working rules behind every change.
Static HTML on shared hosting. Scripts stamp the shared parts (menu, footer, forms, article blocks) into each page.
Menu, footer and article blocks are edited in their script, never page by page.
No new folders. A new page or image goes beside the others.
Quizzes, tools and the quiz hub are built separately from articles and the rest of the site. Neither overwrites the other’s files.
Read before editing, confirm each replacement matched once, test at 390px and 1280px, audit links.
Before a page is replaced, the live copy is checked against the last known version, so an edit made on the server is never overwritten.
Check the DAM before asking for a drawing. A new one is made only when nothing on the server fits.
Each edition gets a number on the page and in GA4. What changed and why goes in the editions log.
API keys and passwords live in a server file that is never put in a zip, an email or a chat.
Each page carries the CSS for what shows first (header, banner, contents) in <style id="crit">; styles.css loads after it. Do not move those blocks into styles.css, or the header paints late.
A shared block is identical on every page that has it. When it changes, every copy changes in the same release. A scan of repeated blocks checks for drift.
Scripts and styles are cached for 30 days, so a changed file gets a new ?v=. nav.js loads search.js, which loads passport.js: a change to passport.js means a new version in search.js, in nav.js and on every page.
Every colour, including the extra shades, is named in :root of styles.css (--gold, --gold-deep, --navy-light, --wordmark…). New CSS uses the token, not the hex.
| What | Version |
|---|---|
| Stylesheet | styles.css?v=2026101905 |
| Menu | nav.js 2026102501 |
| Forms, votes, Ask handoff | letter.js 2026102411 |
| Field Guide | 2.0 · 8 October 2026 |
| Site search, and where sign-ups happen | search.js 2026102501 |
| Passport | passport.js 2026102501 (27 stamps) |
| Quizzes | quiz.js 2026102602 (17 older pages still ask for 2026102502) · quiz.css 2026102604 |
| Next-step buttons on tools | next-step.js 2026102501 |
| Share as an image | share-card.js 2026102501 |
| Black Friday curation | bf.js 2026102508 (until 5 December) |
| Le Shop picks | shop-picks.js 2026102301 |
| Join box | mfh-join.js 2026101301 |
| Journal latest | jl-latest.js 2026101601 |
| Keep reading | rx 2026-10-11 |
| Homepage | Édition 02 · 14 October 2026 (mfh-season.js 2026102501) |
| Free guide pop-up | mfh-popup.js 2026101901 |
| Welcome email | v18 |
| This book | 11 · 26 October 2026 |
Everything lives in the site root, so paths stay simple.
| Asset | Path | Format | |
|---|---|---|---|
| Main logo | logo-premium.png (copy: logo-wordmark.png) | PNG, transparent, 749×489 | Download |
| Portrait of us | portrait-us.png, hero-portrait.png | PNG, circular crop | Download .zip |
| Favicon set | favicon.svg, favicon-16/32/180/192.png | SVG + PNG | Download .zip |
| Approuvé seal | approuve-seal.png | PNG 600×600, transparent | Download |
| Chic or Pas badge | chic-or-pas-badge.png | PNG 480×480, transparent | Download |
| Icon library | brand/icons/*.svg | SVG, currentColor | Download .zip |
| Brand marks | brand/marks/*.svg | SVG, brand colour | Download .zip |
| Article social cards | og-<slug>.png | PNG 1200×630 | Download .zip |
| Article drawings | illus-c-<slug>.webp | WebP 400×400, transparent | Download .zip |
| Season, calendar and page drawings | illus-s-<name>.webp | WebP, transparent, square | Download .zip |
| Pastry drawings | illus-p-<pastry>.webp | WebP, transparent, square | Download .zip |
| Home drawings | home-<name>.webp | WebP 400×400, transparent | Download .zip |
| Fashion and beauty drawings | fb-<name>.webp | WebP 400×400, transparent. Evergreen, reused across Fashion & Beauty | Download .zip |
| Quiz and tool drawings | quiz-<name>.webp, quiz-<quiz>-<question>.webp | WebP 600×600, transparent | Download .zip |
| Digital Asset Management (DAM) | image-inventory.html, image-inventory-files.php | Every image on the server, by type and topic | Open |
| Site search | search.js, search-index.json | Script + index, rebuilt by build-search.py | Download .zip |
| Result buttons | result-actions.js | Share and Print on quiz and tool results | Download |
| About photographs | about-<name>.webp | WebP 720×900 | Download .zip |
| Field Guide | the-french-household-field-guide.pdf, guide-cover.jpg | PDF + cover image | Download .zip |
| Welcome email | logo-wordmark.png (the main logo) and site images | Full web addresses, no email-only files | |
| This book | MyFrenchHusband_BrandBook.pdf | Download |
make-brand-assets.py writes the SVGs,
make-favicons.py the favicon set, make-brand-book.py this page and
make-brand-pdf.py the PDF. All read the same source files, so the book cannot
drift from the assets. The taxonomy, tagging and data tables live in brand_data.py, read by both the page and the PDF.