southernmonsarysupply/plan.md

11 KiB

Southern Masonry Supply Next.js Rebuild Plan

Summary

Build a production-ready Next.js site in TypeScript with App Router, using the provided screenshots as structural
inspiration, info.md as content source, and public/images as the visual asset base. The v1 will ship as a 5-page
marketing/catalog site with strong local SEO, reusable content-driven sections, a placeholder-ready contact API,
and Dockerized local/dev deployment so npm run dev works immediately.

Key Changes

  • Initialize a new Next.js App Router project in TypeScript with a clean component/content structure, responsive
    layout system, shared header/footer, global theme tokens, and SEO-safe metadata defaults.
  • Create these routes with preserved slugs:
    • /
    • /about
    • /masonry-supplies
    • /landscaping-supplies
    • /contact
  • Implement a strong local-business visual direction rather than a generic template:
    • warm stone/terracotta/sand palette
    • editorial serif display + refined body font
    • real masonry/landscaping imagery from public/images
    • clear quote-first CTA treatment
  • Model content in static TypeScript data modules for v1:
    • siteConfig for business identity, address, phone, hours, socials, CTAs
    • materials dataset for masonry and landscaping items with category, subcategory, image, description, purchase
      unit, tags, featured flag
    • page-specific hero, trust, delivery, and FAQ content
  • Home page behavior:
    • local SEO hero with Corpus Christi positioning
    • split entry cards for masonry vs landscaping
    • trust/value section
    • featured materials
    • delivery minimums and service summary
    • direct links into contact/quote flow
  • About page behavior:
    • family-owned story and 30+ year credibility
    • mission/service philosophy
    • sourcing and expertise differentiators
    • no invented team bios or fake history beyond info.md
  • Supplies pages behavior:
    • hero/banner
    • filterable client-side product grid by subcategory/tags
    • quote CTA on every card
    • delivery/purchase-unit notes surfaced in-page
    • breadcrumb support and internal links between supply pages and contact
  • Contact page behavior:
    • business info, hours, address, phone, social links
    • delivery rules from info.md
    • contact form with client validation and a Next.js API placeholder endpoint returning structured success/error
      responses
    • map section as external Google Maps link/embed placeholder, not a hard dependency
  • SEO and schema:
    • route-level metadata, titles, descriptions, canonical defaults, Open Graph/Twitter cards
    • JSON-LD for LocalBusiness/Organization, WebSite, and BreadcrumbList
    • semantic headings, accessible nav, internal linking, crawl-friendly page structure
  • Delivery/runtime assets:
    • Dockerfile for containerized app build/run
    • docker-compose.yml for local container startup
    • .dockerignore
    • README updates with npm install, npm run dev, docker compose up instructions

Public Interfaces and Data Contracts

  • Route contract:
    • /contact submits to /api/contact
  • Contact API response contract:
    • success: { success: true, message: string }
    • validation/server error: { success: false, message: string, fieldErrors?: Record<string,string> }
  • Material data contract:
    • slug
    • name
    • category
    • subcategory
    • image
    • description
    • purchaseUnit
    • availabilityNote?
    • featured
    • tags
  • Shared config contract:
    • business name, tagline, NAP, hours, socials, delivery notes, nav items, footer groups, default SEO fields

Test Plan

  • Verify header nav, footer links, breadcrumbs, and CTA flows between pages.

  • Verify /api/contact handles valid submission, missing required fields, and invalid email/phone formats.

  • Verify metadata and JSON-LD render per page and match visible content.

  • Verify images load through Next.js without layout shift regressions.

  • Verify Docker build succeeds and docker compose up serves the app successfully.

  • Preserve the existing English content direction from info.md, even though the planning conversation is in German.

  • Keep the classic page slugs: /about, /masonry-supplies, /landscaping-supplies, /contact.

  • Contact form will be implementation-ready but not wired to real email delivery yet; the placeholder API is the
    accepted v1 behavior.

  • No cart, checkout, pricing engine, CMS, or live inventory in v1.

  • Only provided assets in public/images are used unless implementation reveals a missing critical visual, in which
    case the design falls back to text-first sections rather than invented media.