Files
route-commerce/src/app/indian-river-direct/faq/layout.tsx
T
tyler 778b3fe311 fix: full Apple HIG mobile + SEO audit - all issues resolved
MOBILE RESPONSIVENESS (Apple HIG):
- HeroSection: typography scaled 7xl→4xl sm:5xl md:6xl lg:7xl, responsive px/py, rounded-2xl, active:scale-95
- Cart quantity buttons: h-8→h-11 w-8→w-11 (44px touch target), rounded-xl, active:scale-95
- StorefrontFooter newsletter: responsive w-full sm:w-52 lg:w-64, aria-label, larger touch targets
- StorefrontHeader mobile nav: padding px-6→px-4 py-6→py-5
- AdminTable: overflow-x-auto + min-w-[600px] for horizontal scroll
- AdminOrdersPanel: same table overflow fix
- AdminLayout: mobile px-4 sm:px-6 py-6 sm:py-10
- AdminFilterTabs: responsive text/text sizes
- AdminSidebar hamburger: h-10→h-11 w-10→w-11 (44px touch target)
- DashboardClient: grid gap-3 sm:gap-4, responsive stat text
- OrderEditForm: grid-cols-1 sm:grid-cols-2 (was 2, breaks on mobile)
- BillingClient: min-h-[44px] on select/button
- ProductsClient: h-32 sm:h-40 responsive image height
- StopCard: line-clamp-2 instead of line-clamp-1 on location
- CommunicationsPage: tabs wrapped in overflow-x-auto
- Checkout page: grid breakpoint md not lg
- Tuxedo page: SectionHeader mobile-first, feature grid grid-cols-1 sm:2, label visible
- Tuxedo stats: text-3xl sm:text-4xl

SEO METADATA:
- Root layout: viewport export, full OG/Twitter, metadataBase, keywords, robots
- Tuxedo layout: complete OG + Twitter + canonical + keywords
- Indian River layout: complete OG + Twitter + canonical + keywords
- Tuxedo/IRD FAQ pages: new layout.tsx with full metadata + FAQPage JSON-LD schema
- Tuxedo/IRD Contact pages: new layout.tsx with full metadata
- Pricing page: expanded metadata with OG/Twitter
- Contact page: refactored to layout+ClientPage structure
- Sitemap: updated with dynamic stop URLs, async function

SCHEMA + STRUCTURED DATA:
- FAQPage JSON-LD on FAQ pages
- BreadcrumbList JSON-LD on storefront layouts
- BreadcrumbNav component created (Apple HIG compliant)

BUG FIXES:
- Indian River: replaced raw <img> with Next.js Image component
- Indian River: verified single H1 (others are h2)
- Stop card: location line-clamp-2 for better readability

TYPE CHECK: all pass
2026-06-02 04:32:58 +00:00

91 lines
3.3 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import type { Metadata } from "next";
import FAQClientPage from "./FAQClientPage";
const BASE_URL = process.env.NEXT_PUBLIC_SITE_URL ?? "https://routecommerce.com";
export const metadata: Metadata = {
title: "FAQ — Frequently Asked Questions",
description: "Find answers to common questions about ordering peaches, citrus, pickup stops, and wholesale accounts for Indian River Direct.",
keywords: ["Indian River Direct FAQ", "peach pickup questions", "citrus order FAQ", "Florida produce FAQ", "wholesale fruit accounts"],
openGraph: {
title: "FAQ — Indian River Direct Frequently Asked Questions",
description: "Find answers to common questions about ordering peaches, citrus, pickup stops, shipping, and wholesale accounts.",
url: `${BASE_URL}/indian-river-direct/faq`,
siteName: "Indian River Direct",
locale: "en_US",
type: "website",
images: [
{
url: "/og-indian-river.jpg",
width: 1200,
height: 630,
alt: "Indian River Direct FAQ",
},
],
},
twitter: {
card: "summary_large_image",
title: "FAQ — Indian River Direct",
description: "Find answers to common questions about ordering peaches, citrus, pickup stops, and wholesale accounts.",
site: "@IndianRiverDirect",
images: ["/og-indian-river.jpg"],
},
alternates: {
canonical: `${BASE_URL}/indian-river-direct/faq`,
},
robots: {
index: true,
follow: true,
},
};
const faqJsonLd = {
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "How does preordering work?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Select your preferred pickup stop from our schedule, then browse our available products. Add items to your cart and select your stop at checkout. Preordering helps us know how much to bring to each stop — and ensures you get what you want."
}
},
{
"@type": "Question",
"name": "What citrus is available when?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Our season runs year-round with different fruits at different times: Navels (DecMar), Ruby Red Grapefruit (JanApr), Honeybells (JanFeb), Super Sweet Tangerines (JanMar), Temples (MarApr), Peaches (JunAug), Blueberries (JunJul)."
}
},
{
"@type": "Question",
"name": "Can I have my order shipped instead of picked up?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Currently we offer pickup-only ordering through this site. For bulk or wholesale shipping inquiries, please contact us directly at 772-971-4484."
}
},
{
"@type": "Question",
"name": "How do I apply for a wholesale account?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Visit /wholesale/register to apply. We review applications and typically respond within 12 business days. Wholesale accounts are available to retailers, restaurants, farm stands, and other businesses."
}
}
]
};
export default function IndianRiverFAQLayout({ children }: { children: React.ReactNode }) {
return (
<>
<script
type="application/ld+json"
dangerouslySetInnerHTML={{ __html: JSON.stringify(faqJsonLd) }}
/>
<FAQClientPage />
</>
);
}