A modern, high-performance web application for GKR Hospitality, redesigned and migrated to Next.js 15. This project features a premium design with smooth animations, responsive layouts, and optimized performance.
- Framework: Next.js 15 (App Router)
- Language: TypeScript
- Styling: Tailwind CSS 4
- Animations: Framer Motion
- Icons: Lucide React
- Testing: Vitest & React Testing Library
- Node.js 18+ installed on your machine.
-
Clone the repository:
git clone <repository-url> cd garrett-ronan-web
-
Install dependencies:
npm install
Start the development server:
npm run devOpen http://localhost:3000 with your browser to see the result.
This project uses Vitest for unit testing. The test suite covers all major pages (Home, About, Services, Contact) and core components (Navbar, Footer).
Run tests:
npm testGoogle Tag Manager is loaded site-wide from the root layout via
src/components/common/GoogleTagManager.tsx (container GTM-TG8GB3PP),
including the <noscript> fallback for clients without JavaScript.
To point a build at a different container — or to disable GTM locally — set the environment variable before building:
# .env.local
NEXT_PUBLIC_GTM_ID=GTM-XXXXXXX # empty value disables GTM entirelyTo create an optimized production build:
npm run buildTo run the production build locally:
npm start├── src/
│ ├── app/ # Next.js App Router
│ │ ├── about/ # About Page
│ │ ├── contact/ # Contact Page
│ │ ├── services/ # Services Page
│ │ ├── components/ # Shared Components (Navbar, Footer, UI)
│ │ ├── layout.tsx # Root Layout
│ │ └── page.tsx # Home Page
│ └── styles/ # Global Styles
├── public/ # Static Assets
├── vitest.config.ts # Testing Configuration
└── next.config.ts # Next.js Configuration
- Images: LCP optimizations with
priorityloading for Hero images. Responsivesizesprops implemented across all sections. - Animations:
will-change-transformapplied to infinite marquees to prevent layout thrashing and flickering. - Strict Typing: Full TypeScript coverage for reliability.
Original design source: Figma