A modern, responsive website for a construction company built with React, TypeScript, and Tailwind CSS. The site showcases the company's services, projects, and team members with a focus on visual appeal, accessibility, and user experience.
Developed in Cursor with Claude AI assistance.
Live Site: Builder Website Example
- Responsive Design: Fully responsive layout that works on all devices
- Modern UI: Clean, professional design with smooth animations and transitions
- Type-Safe: Fully typed with TypeScript for improved reliability
- Accessible: ARIA-compliant with semantic HTML and proper keyboard navigation
- Before/After Gallery: Interactive before/after image comparison for renovation projects
- Service Showcase: Detailed presentation of construction and renovation services
- Team Profiles: Section highlighting the company's team members
- Testimonials: Customer reviews and feedback
- Contact Form: Interactive form with animations and validation
- Performance Optimized: Fast loading times with optimized images
- SEO Ready: Proper meta tags and semantic structure
src/
├── assets/ # Static assets like icons and images
├── components/ # Reusable UI components
├── data/ # Centralized data files (images, projects, services, etc.)
├── pages/ # Page components for each route
├── types/ # TypeScript type definitions
├── __mocks__/ # Mock files for testing
├── App.tsx # Main application component
├── index.tsx # Application entry point
└── setupTests.ts # Test configuration
- Button: Reusable button component with multiple variants and routing capabilities
- SEO: Centralized SEO component for managing meta tags
- HomePage: Landing page with hero section, featured projects, and services
- ServicesPage: Detailed information about offered services
- GalleryPage: Project showcase with before/after image comparison and category filtering
- AboutPage: Company story and team member profiles
- ContactPage: Contact form and information
- BeforeAfterModal: Interactive component for comparing before/after renovation images
- React 18: Modern UI library for building component-based interfaces
- TypeScript: Type-safe JavaScript for better developer experience
- Tailwind CSS: Utility-first CSS framework for rapid UI development
- Framer Motion: Animation library for smooth transitions and effects
- React Router: For client-side routing
- React Helmet Async: For managing document head and meta tags
- Jest & React Testing Library: For component testing
- Heroicons: SVG icon collection
- Node.js (v14 or later)
- npm or yarn
-
Clone the repository
git clone <repository-url> cd builder-website -
Install dependencies
npm install -
Start the development server
npm startThe site will be available at http://localhost:3000
- npm start: Runs the app in development mode
- npm test: Launches the test runner
- npm run test:components: Runs tests for components only
- npm run test:pages: Runs tests for pages only
- npm run test:coverage: Runs tests with coverage report
- npm run build: Builds the app for production
See CHANGELOG.md for recent updates and improvements.
-
Accessibility
- Enhanced ARIA attributes
- Semantic HTML structure
- Keyboard navigation improvements
-
Performance
- Image optimization
- Lazy loading implementation
- Loading states for interactive elements
-
SEO
- Meta tags implementation
- Structured data
- Sitemap generation
This project is deployed on Netlify at https://builder-website-example.netlify.app.
To do: enable the contact form with Netlify Forms
- Add the
data-netlify="true"attribute to form element - Include a hidden input field with name="form-name" and value equal to form's name
- Ensure all form fields have name attributes
Example:
<form name="contact" method="POST" data-netlify="true">
<input type="hidden" name="form-name" value="contact" />
{/* Your form fields here */}
</form>Netlify will automatically detect and process form submissions without requiring any backend code.
All images are sourced from Unsplash and are used with appropriate attribution.
This project is licensed under the MIT License - see the LICENSE file for details.