Offboard Wix: 4 marketing pages + contact form#351
Open
kylefritz wants to merge 32 commits into
Open
Conversation
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ibe /contact Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Replaces the stub view with the full Subscription Details page ported from the live Wix site (scraped 2026-06-11): hero, sold-out badge, Why Subscribe, How It Works sections, credit pricing, and CTA. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Adds ContactMailer#notify_bakery (text-only, Reply-To set to the submitter) and wires it into ContactController#create via deliver_later. Honeypot submissions are intentionally excluded. CONTACT_INBOX env var controls the destination (defaults to info@motzibread.com). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Squish the user-supplied name in the subject and From line so a multi-line name can't inject headers or visually spoof body content. Use layout false — the shared text layout's "Thanks!!" sign-off is customer-facing and odd on an internal notification. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Adds MarketingHelper#holiday_menu_link which calls Menu.current_holiday and renders a link (class marketing-nav-holiday) when a holiday menu is active, or returns nil when none is set. Wired into _marketing_header after the Order link, replacing the old Wix → Square holiday-preorder flow. Refs #334. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
`/` now renders a full marketing home page (hero illustration, Find Us hours, Subscriptions CTA, Your Neighbors bio) instead of redirecting to /menu. HomeController inherits MarketingController for layout + auth skip. signout action preserved verbatim. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Before the cutover, sign-in landed on / which redirected to /menu. Now / renders the marketing home, so override after_sign_in_path_for to send members to /menu (stored_location_for still wins when set). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Mirrors the existing email-screenshots visual test pattern. Covers the four new marketing pages (home, about, subscribe, contact) at mobile (390px) and desktop (1280px) viewports. Each screenshot is reviewed by claude-haiku-4-5 using a marketing-specific prompt; the test fails if STATUS is "broken". Manual only — not wired into CI. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
A garbled or empty model response previously yielded status "unknown", which silently passed the not-"broken" assertion. Now assert status is positively "ok" or "warning". Also type the page param as Page instead of any. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ot notice parity - Replace text logo with Motzi image (81×54) in marketing header - Replace text "IG" link with Instagram icon image in header nav (24×24) - Add matching Instagram icon link to marketing footer nav (Wix fidelity) - Update marketing.scss: logo img sizing, nav/footer icon sizing - Document CONTACT_INBOX env var in CLAUDE.md after Analysis Replies section - Unify honeypot redirect notice with real success notice (removes fingerprint) - Sync rake task inline comments with corrected asset map descriptions Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
10 tasks
# Conflicts: # app/controllers/home_controller.rb # config/initializers/rack_attack.rb # db/schema.rb # test/controllers/home_controller_test.rb
Master adopted repo-wide RuboCop after this branch was cut; bring the branch's new files in line so the lint job passes. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…m CreditBundle Setting.holiday_menu_id lingers after a holiday ends, so the marketing nav kept advertising a menu that no longer accepts orders (the member app handles this gracefully with a closed state; marketing shouldn't advertise it at all). The subscribe page hardcoded Wix's stale $182/$98 pricing — 7-13% below what checkout actually charges. Render from the same CreditBundle rows the purchase flow uses so copy can't drift again. Refs #334 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Visual fixes from side-by-side screenshot audit against motzibread.com: - Body font: EB Garamond serif -> Mulish light (Wix uses Avenir LT Light / DIN Next Light; Mulish is the closest Google Fonts stand-in) - Home hero: full-bleed illustration with the three-line brick-red tagline overlaid in cream highlight boxes, as on Wix - Purple announcement bar under the header (pre-order link + hours; Wix renders it as a dismissible overlay, ours is a solid band) - Contact form: underline-only fields, placeholder labels with required asterisks, name/email side by side, plain-text Send (labels stay in the markup, visually hidden) - Section headings: Mulish instead of Oswald; terracotta on About, purple uppercase on Subscribe (with Wix's trailing dash quirk) - Footer: Wix three-column layout (logo + vertical nav / one-line terracotta address / IG), stacked right-aligned credits - About: restore the 'local grain movement' sentence Wix had; its 'here' link is dead on Wix, pointed at Common Grain Alliance pending owner confirmation - Sold-out badge angled like Wix's sticker Integration: - Marketing pages now load GA (shared layouts/_analytics partial), the browser error reporter, and ahoy tracking via a new marketing pack - Per-page meta descriptions + OpenGraph tags - Sign out link in the marketing nav for signed-in users - CanonicalHostRedirect middleware: set CANONICAL_HOST at DNS cutover and motzibread.herokuapp.com 301s to the custom domain (no-op until then; health checks exempt) Refs #334 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The subscription concept is legacy: creating an account just joins the weekly menu email list (sign-up sets receive_weekly_menu), and credits are an optional pre-purchase for a per-loaf discount. The Wix copy this branch ported still sold 'subscriptions', including a hardcoded 'Currently Sold Out' badge that contradicts prod, where Setting.accepting_subscribers is true. - /subscribe: 'How It Works' page — weekly menu email, then credits - Nav label Subscriptions -> How It Works (header + footer) - Home purple band: 'Get the Weekly Menu' - CTA: SUBSCRIBE NOW -> SIGN UP NOW - Sold-out badge now renders only when accepting_subscribers is off Refs #334 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Folds the four marketing pages (
/,/about,/subscribe,/contact) from the Wix-hosted motzibread.com into the Rails app, pixel-matched to the live Wix design (fonts/colors captured via DevTools: Raleway/Oswald/EB Garamond, cream#FFEED6/ terracotta#D3725F/ purple#5B4062). Closes #334.MarketingControllerbase (public, skipspush_gon),marketing.html.erblayout +marketing.scssscoped underbody.marketingso styles can't leak into/menuor/admin/renders the marketing home instead of redirecting to/menu; post-login still lands on/menuviaafter_sign_in_path_for(behavior-preserving);/signoutround-trip unchangedContactMessagemodel + ActiveAdmin triage (/admin/contact_messages, newest-first) +ContactMailer.notify_bakery(text-only,CONTACT_INBOXenv withinfo@motzibread.comdefault, submitter as Reply-To); honeypot field + rack-attack throttle 5/hr/IP (verified solid_cache supports the atomic increments the throttle needs); server-captured user agents truncated to the column caps3://motzi/public/marketing/via one-shotbin/rails marketing:fetch_assets(oversized originals re-fetched at display resolution — about hero 8.9MB → 810KB); map atdocs/superpowers/specs/marketing-assets-map.mdMarketingHelper#holiday_menu_linksurfacesMenu.current_holidayin the nav, replacing the old Wix → motzibread.square.site flowtest/visual/marketing-screenshots.spec.ts(Playwright + Claude Haiku, manual not CI) — 8/8 passing, all pages STATUS: ok at mobile + desktopOut of scope per spec: newsletter signup bar (MailerLite embed) and live IG feed (replaced with a static follow link).
Before merging
CONTACT_INBOXon Heroku (defaults toinfo@motzibread.comif unset; confirm with Maya/Russell):heroku config:set CONTACT_INBOX=... --app motzibreadTest plan
bun run typecheckclean/admin/contact_messages(test rows cleaned up)/menuand/adminunaffected (auth seams verified; marketing layout doesn't leak)/: Admin + Account links appear;/signoutredirects back to/current_menu_url)bunx playwright test test/visual/marketing-screenshots.spec.ts— 8/8Follow-ups (separate work)
Setting.holiday_menu_idhas no teardown — after a holiday ends the nav link persists until manually cleared (consider auto-expiry)🤖 Generated with Claude Code
Post-review updates (2026-07-14)
master(Rubocop adoption, uptime monitoring, order-item price snapshots) and brought the branch's files in line with the new lint configcan_publish?), not just a lingeringSetting.holiday_menu_idCreditBundle(the rows checkout charges) instead of Wix's stale $182/$98 copymarketingpack, shared_analyticspartial), per-page meta descriptions + OG tags, sign-out link in the navCanonicalHostRedirectmiddleware — setCANONICAL_HOST=motzibread.comon Heroku at DNS flip and herokuapp URLs 301 to the custom domain (no-op until then)CONTACT_INBOX=motzi.bread@gmail.comset on Heroku (v521)Screenshots
about
subscribe
contact