Skip to content

Repository files navigation

Long House Plants - Website Recreation

A professional recreation of longhouseplants.com built with Next.js 14, TypeScript, and Tailwind CSS. This project replicates the original nursery website with exact content, modern responsive design, and accessibility features.

🌱 About

This is a faithful recreation of the Long House Plants nursery website, featuring:

  • Complete content match: All text, prices, opening hours, and notices exactly as specified
  • Modern tech stack: Next.js 14, TypeScript, Tailwind CSS, and Recharts
  • Responsive design: Mobile-first approach with desktop optimization
  • Accessibility: WCAG compliant with semantic HTML and ARIA labels
  • Performance optimized: Static generation, image optimization, and code splitting

πŸš€ Quick Start

Prerequisites

  • Node.js 18.0.0 or higher
  • npm or yarn package manager

Installation

  1. Clone or download the project

    cd longhouseplants-landing-page
  2. Install dependencies

    npm install
  3. Start development server

    npm run dev
  4. Open in browser

    http://localhost:3000
    

πŸ“œ Available Scripts

Command Description
npm run dev Start development server on port 3000
npm run build Build production version
npm run start Start production server
npm run lint Run ESLint code linting
npm run type-check Run TypeScript type checking
npm run check-content Verify exact content phrases

πŸ—οΈ Project Structure

longhouseplants-landing-page/
β”œβ”€β”€ components/           # Reusable React components
β”‚   β”œβ”€β”€ Navbar.tsx       # Main navigation
β”‚   β”œβ”€β”€ Footer.tsx       # Site footer with contact info
β”‚   β”œβ”€β”€ PlantCard.tsx    # Individual plant display
β”‚   β”œβ”€β”€ RainfallChart.tsx # Interactive rainfall chart
β”‚   β”œβ”€β”€ EventList.tsx    # Open garden events
β”‚   β”œβ”€β”€ AccessibilityBanner.tsx # Assistance dogs notice
β”‚   └── UlezNotice.tsx   # ULEZ information component
β”œβ”€β”€ pages/               # Next.js pages (file-based routing)
β”‚   β”œβ”€β”€ _app.tsx        # App wrapper with layout
β”‚   β”œβ”€β”€ index.tsx       # Home page
β”‚   β”œβ”€β”€ about.tsx       # About Us page
β”‚   β”œβ”€β”€ catalogue.tsx   # Plant catalogue with pagination
β”‚   β”œβ”€β”€ rainfall.tsx    # Rainfall data and charts
β”‚   β”œβ”€β”€ events.tsx      # Open Gardens / Events
β”‚   β”œβ”€β”€ ulez.tsx        # ULEZ information
β”‚   β”œβ”€β”€ newsletter.tsx  # Newsletter 2025
β”‚   β”œβ”€β”€ club.tsx        # Club page
β”‚   β”œβ”€β”€ publicity.tsx   # Media coverage
β”‚   └── contact.tsx     # Contact form and details
β”œβ”€β”€ data/               # JSON data files
β”‚   β”œβ”€β”€ catalogue.json  # 30 sample plants with exact pricing
β”‚   β”œβ”€β”€ rainfall.json   # Annual rainfall 2006-2024
β”‚   └── events.json     # 2025 open garden events
β”œβ”€β”€ styles/             # Global CSS and Tailwind
β”‚   └── globals.css     # Base styles and components
β”œβ”€β”€ scripts/            # Utility scripts
β”‚   └── check-content.js # Content verification script
└── public/             # Static assets

πŸ“‹ Content Verification

The project includes a content linting script that verifies all exact phrases are present:

npm run check-content

This script checks for:

  • βœ… Hero tagline: "Plants for sun, plants for shade..."
  • βœ… Exact notices: "We do not offer a mail order service"
  • βœ… ULEZ text: Complete exact wording
  • βœ… Rainfall data: "719.18 mm / 28.3 in" precision
  • βœ… Contact details: Phone, email, What3words
  • βœ… Opening hours: Exact format and times
  • βœ… Sample plants: Abelia prices and descriptions

🎨 Design Features

Components

  • Responsive Navigation: Mobile hamburger menu, desktop horizontal nav
  • PlantCard: Displays genus, species, cultivar, price, tags, and descriptions
  • RainfallChart: Interactive chart using Recharts with 19-year average line
  • EventList: 2025 calendar with charity information
  • AccessibilityBanner: Prominent assistance dogs notice

Styling

  • Tailwind CSS: Utility-first styling with custom design system
  • Color Palette: Green primary, earth tones, accessibility-compliant contrast
  • Typography: System fonts with semantic heading hierarchy
  • Cards: Consistent card design with shadows and borders

Accessibility

  • Semantic HTML: Proper heading structure, landmarks, lists
  • ARIA Labels: Screen reader support for interactive elements
  • Focus Management: Visible focus indicators and keyboard navigation
  • Color Contrast: WCAG AA compliant color combinations
  • Alt Text: Descriptive text for images and icons

πŸ“Š Data Management

Catalogue Data (data/catalogue.json)

Schema for 1,270+ plants (30 sample records included):

{
  "id": "string",
  "genus": "string", 
  "species": "string",
  "cultivar": "string?",
  "category": "shrub|perennial|tree|bulb|climber",
  "price": "number",
  "difficultSpots": ["string[]"],
  "description": "string", 
  "tags": ["string[]"]
}

Rainfall Data (data/rainfall.json)

Annual records 2006-2024 with mm and inches:

{
  "year": "number",
  "rainfall_mm": "number", 
  "rainfall_inches": "number"
}

Events Data (data/events.json)

2025 open garden calendar:

{
  "id": "string",
  "date": "string",
  "title": "string", 
  "time": "string",
  "description": "string",
  "charity": "string?",
  "pricing": { "adult": "number", "child": "number" }
}

πŸš€ Deployment

Vercel (Recommended)

  1. Connect repository

    # Install Vercel CLI
    npm i -g vercel
    
    # Deploy
    vercel
  2. Configure build settings (auto-detected):

    • Framework: Next.js
    • Build Command: npm run build
    • Output Directory: .next

Netlify

  1. Build settings:

    • Build command: npm run build && npm run export
    • Publish directory: out
  2. Add to next.config.js:

    output: 'export',
    trailingSlash: true,
    images: { unoptimized: true }

Self-hosted

# Build production
npm run build

# Start production server
npm run start

# Or serve statically
npm run build
npm run export
# Serve the `out` directory

πŸ› οΈ Customization

Adding New Plants

  1. Edit data/catalogue.json:

    {
      "id": "31",
      "genus": "Planticus",
      "species": "newicus", 
      "cultivar": "Amazing",
      "category": "perennial",
      "price": 12.50,
      "difficultSpots": ["Full sun", "Well drained soil"],
      "description": "A remarkable new plant...",
      "tags": ["Hardy", "Long flowering"]
    }
  2. Pagination automatically adjusts (12 plants per page)

Updating Content

  1. Modify page files in pages/ directory
  2. Run content check: npm run check-content
  3. Update required phrases in scripts/check-content.js if needed

Styling Changes

  1. Edit tailwind.config.js for design tokens
  2. Modify styles/globals.css for component styles
  3. Use Tailwind classes in components for layout

πŸ“± Responsive Breakpoints

Breakpoint Width Usage
sm 640px+ Mobile landscape
md 768px+ Tablet portrait
lg 1024px+ Tablet landscape
xl 1280px+ Desktop
2xl 1536px+ Large desktop

πŸ”§ Development Notes

Key Requirements Implemented

  • βœ… Exact content: All text matches source verbatim
  • βœ… 30 sample plants: Including Abelia varieties with correct pricing
  • βœ… Rainfall chart: 2006-2024 data with average reference line
  • βœ… 2025 events: Complete calendar with charity attribution
  • βœ… Accessibility: WCAG compliance and semantic HTML
  • βœ… Content linting: Automated verification of exact phrases

Performance Optimizations

  • Static Generation: Pages pre-built at compile time
  • Code Splitting: Automatic route-based splitting
  • Image Optimization: Next.js Image component (when images added)
  • Bundle Analysis: Separate vendor and chart bundles

SEO Features

  • Meta Tags: Title, description, and viewport for all pages
  • Semantic HTML: Proper heading hierarchy and landmarks
  • Structured Data: Ready for schema markup addition
  • Clean URLs: Next.js file-based routing with readable paths

πŸ“ž Support

For questions about the original Long House Plants nursery:

  • Phone: 01708 371719
  • Email: tim@thelonghouse.net
  • Address: Church Road, Noak Hill, Romford RM4 1LD
  • What3words: remain.keys.beard

For technical questions about this recreation:

  • Review the code comments and component documentation
  • Check the content verification script output
  • Ensure all dependencies are correctly installed

πŸ“„ License

This is a recreation for educational purposes. The original content belongs to Long House Plants nursery.


Built with ❀️ using Next.js, TypeScript, and Tailwind CSS

About

Professional recreation of longhouseplants.com using Next.js 14, TypeScript, and Tailwind CSS with exact content matching and responsive design

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages