tuxedo: align storefront subpages with Field Almanac editorial voice
Deploy to route.crispygoat.com / deploy (push) Successful in 4m25s
Deploy to route.crispygoat.com / deploy (push) Successful in 4m25s
Reskin /tuxedo/contact, /tuxedo/faq, /tuxedo/stops, and /tuxedo/stops/[id] so they match the homepage's editorial magazine language (Fraunces display serif, stone-50/stone-950 alternation, amber rims, hairline rules, tabular numerals). - About page rewritten as inlined editorial sections sharing one WP_IMAGES library with the homepage; the four lazy-loaded Tuxedo about components are removed (Indian River has its own variants). - Contact page now uses a dark hero with heroField half-bleed, a hairline-ruled info strip (address/phone/email), a two-column form section with bottom-border editorial inputs, and a closing Fraunces italic quote. /tuxedo/contact was 404ing in prod because page.tsx was missing — created and removed the duplicated render from layout.tsx. - FAQ page uses a cream hero with Fraunces headline, an editorial bottom-border search, hairline-ruled accordion rows (no card wrappers), and a dark closing CTA with Contact pill. - Stops list uses a dark hero with heroField bleed and a cream hairline-ruled sidebar list: tabular date numerals on the left, city/location middle, mono time + cutoff right, chevron for upcoming rows. - Stop detail uses a dark hero pairing the city/state headline with a giant tabular day stamp, a cream hairline-ruled 4-col info strip (Date/Time/Location/Order by), and the editorial products header. Removed the dual-brand isBlue branching now that Indian River has its own page. - Extracted TUXEDO_IMAGES to src/components/storefront/tuxedo-images.ts so the homepage, about, contact, and stops list share one brand-specific asset library. - /tuxedo/faq/layout.tsx no longer double-renders the page component (was rendering <FAQClientPage /> alongside children). Verified: tsc --noEmit clean, eslint clean (only pre-existing homepage warnings), npm run build produces all Tuxedo routes including the now-existing /tuxedo/contact.
This commit is contained in:
+1
-29
@@ -12,6 +12,7 @@ import PaginatedStops from "@/components/storefront/PaginatedStops";
|
||||
import StorefrontHeader from "@/components/storefront/StorefrontHeader";
|
||||
import StorefrontFooter from "@/components/storefront/StorefrontFooter";
|
||||
import BrandStylesProvider from "@/components/storefront/BrandStylesProvider";
|
||||
import { TUXEDO_IMAGES as WP_IMAGES } from "@/components/storefront/tuxedo-images";
|
||||
import { ScrollReveal, ParallaxLayer, FadeOnScroll } from "@/components/ui/ScrollAnimations";
|
||||
import { supabase } from "@/lib/supabase";
|
||||
|
||||
@@ -133,35 +134,6 @@ const initialState: State = {
|
||||
brandTextColor: null,
|
||||
};
|
||||
|
||||
/**
|
||||
* Editorial imagery for the Tuxedo storefront, sourced from the original
|
||||
* tuxedocorn.com WordPress library and re-hosted on our MinIO bucket so
|
||||
* the brand controls its own media. These are stable, brand-specific
|
||||
* assets — they don't need to be admin-configurable yet. (If we ever
|
||||
* add more brands, lift these into `brand_settings` columns.)
|
||||
*/
|
||||
const WP_IMAGES = {
|
||||
/** Wide panoramic corn row with irrigation canal + Colorado sky — the
|
||||
* hero poster. Replaces the earlier tight corn-cob macro. */
|
||||
heroField: "https://s3.crispygoat.com/videos/wp-import/images/tuxedo-field-irrigation.jpg",
|
||||
/** Pre-storm purple sky over deep-green tasseled rows receding to
|
||||
* mountains — the editorial pull-quote band. */
|
||||
stormField: "https://s3.crispygoat.com/videos/wp-import/images/tuxedo-field-storm.jpg",
|
||||
/** White-haired founder inspecting tassels — the Our Story anchor.
|
||||
* Editorial-graded version of the original WP shot — golden-hour
|
||||
* lighting, shallow DOF, sharper focus on the face. Same man,
|
||||
* same overalls, same tassels — just the photo he deserves. */
|
||||
founderPortrait: "https://s3.crispygoat.com/videos/wp-import/images/tuxedo-founder-john-editorial.jpg",
|
||||
/** Single yellow ear with silk and dark green bokeh — the product
|
||||
* moment in the editorial "Why" replacement. */
|
||||
earMacro: "https://s3.crispygoat.com/videos/wp-import/images/tuxedo-ear-macro.jpg",
|
||||
/** Packing-shed packshot — dozens of husked cobs piled on the table
|
||||
* the morning of pick. Documentary, not styled; reads like a
|
||||
* magazine harvest spread rather than a styled product photo. Used
|
||||
* as the full-bleed anchor of the "Harvest, by the numbers" section. */
|
||||
piledCobs: "https://s3.crispygoat.com/videos/wp-import/images/corn-field-zane-original.jpg",
|
||||
} as const;
|
||||
|
||||
function reducer(state: State, action: Action): State {
|
||||
switch (action.type) {
|
||||
case "SET_BRAND":
|
||||
|
||||
Reference in New Issue
Block a user