diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..662e0a9 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,15 @@ +node_modules +npm-debug.log* +.git +.gitignore +README.md +Dockerfile +docker-compose.yml +.dockerignore +dist +.vite +coverage +.env.local +.env.development.local +.env.test.local +.env.production.local \ No newline at end of file diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..243d58d --- /dev/null +++ b/.env.example @@ -0,0 +1,17 @@ +# Environment Configuration Example +# Copy this file to .env and update the values as needed + +# Application Environment +NODE_ENV=development + +# Vite Configuration +VITE_APP_TITLE=NQS Ltd +VITE_APP_URL=http://localhost:8080 + +# API Configuration (if needed) +# VITE_API_BASE_URL=http://localhost:3000/api +# VITE_API_KEY=your-api-key-here + +# External Services (examples - uncomment and configure as needed) +# VITE_GOOGLE_ANALYTICS_ID=GA-XXXXXXXXX +# VITE_SENTRY_DSN=https://your-sentry-dsn \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..6ae54a9 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,23 @@ +# Use Node.js 18 Alpine as base image +FROM node:18-alpine + +# Set working directory +WORKDIR /app + +# Copy package files +COPY package*.json ./ + +# Install dependencies +RUN npm install + +# Copy source code +COPY . . + +# Expose the development port (Vite default) +EXPOSE 8080 + +# Set environment to development +ENV NODE_ENV=development + +# Command to run the development server +CMD ["npm", "run", "dev", "--", "--host", "0.0.0.0"] \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..7856fc5 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,15 @@ +version: '3.8' + +services: + app: + build: . + ports: + - "8080:8080" + volumes: + - .:/app + - /app/node_modules + environment: + - NODE_ENV=development + stdin_open: true + tty: true + command: npm run dev -- --host 0.0.0.0 \ No newline at end of file diff --git a/package.json b/package.json index f0b63a8..3ed64ab 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,12 @@ "build": "vite build", "build:dev": "vite build --mode development", "lint": "eslint .", - "preview": "vite preview" + "preview": "vite preview", + "docker:build": "docker build -t nqsltd-app .", + "docker:run": "docker run -p 8080:8080 nqsltd-app", + "docker:dev": "docker-compose up", + "docker:dev:build": "docker-compose up --build", + "docker:down": "docker-compose down" }, "dependencies": { "@hookform/resolvers": "^3.10.0", diff --git a/src/App.tsx b/src/App.tsx index 18daf2e..cf18b9e 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -4,6 +4,9 @@ import { TooltipProvider } from "@/components/ui/tooltip"; import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; import { BrowserRouter, Routes, Route } from "react-router-dom"; import Index from "./pages/Index"; +import WhatWeDo from "./pages/WhatWeDo"; +import Methods from "./pages/Methods"; +import EmployeeNotice from "./pages/EmployeeNotice"; import NotFound from "./pages/NotFound"; const queryClient = new QueryClient(); @@ -16,6 +19,9 @@ const App = () => ( } /> + } /> + } /> + } /> {/* ADD ALL CUSTOM ROUTES ABOVE THE CATCH-ALL "*" ROUTE */} } /> diff --git a/src/components/About.tsx b/src/components/About.tsx index f6a9727..15749b4 100644 --- a/src/components/About.tsx +++ b/src/components/About.tsx @@ -44,17 +44,17 @@ const About = () => { ]; return ( -
+
{/* Section Header */}
-

+

About NQS Inspection

-

+

Your trusted partner for industrial inspection services across Texas.

@@ -64,8 +64,8 @@ const About = () => { {/* Left Column - Mission & Vision */}
-

Our Mission

-

+

Our Mission

+

At NQS Inspection Ltd, we are dedicated to providing exceptional non-destructive testing and industrial inspection services that ensure the safety, reliability, and integrity of critical infrastructure. Our certified professionals utilize @@ -75,8 +75,8 @@ const About = () => {

-

Our Vision

-

+

Our Vision

+

To be the leading industrial inspection company in Texas, recognized for technical expertise and commitment to safety.

@@ -96,19 +96,19 @@ const About = () => { {/* Right Column - Values & Certifications */}
-

Core Values

+

Core Values

{values.map((value, index) => { const IconComponent = value.icon; return ( - +
-
+
-

{value.title}

+

{value.title}

@@ -119,7 +119,7 @@ const About = () => {
-

Certifications

+

Certifications

{certifications.slice(0, 4).map((cert, index) => ( {
- {/* Stats */} -
-
-
500+
-
Projects Completed
+ {/* Stats with Organic Shape */} +
+ {/* Organic Shape Background */} +
-
-
99.9%
-
Accuracy Rate
+ + {/* Stats Content */} +
+
+
500+
+
Projects Completed
+
+
+
99.9%
+
Accuracy Rate
+
diff --git a/src/components/Contact.tsx b/src/components/Contact.tsx index fdbe578..4f153d0 100644 --- a/src/components/Contact.tsx +++ b/src/components/Contact.tsx @@ -49,13 +49,13 @@ const Contact = () => { ]; return ( -
+
{/* Section Header */} -
+

Get In Touch

@@ -75,11 +75,11 @@ const Contact = () => {
-
+
{/* Contact Information */} -
+
-

Contact Information

+

Contact Information

{contactInfo.map((info, index) => { const IconComponent = info.icon; @@ -104,20 +104,24 @@ const Contact = () => {
{/* Service Areas */} -
-

Service Areas

-

- We provide comprehensive inspection services throughout Texas, including: +

+

Service Areas

+

+ We provide comprehensive inspection services in the Coastal Bend area, including:

-
-
• Houston
-
• Corpus Christi
-
• Austin
-
• Dallas
-
• San Antonio
-
• Beaumont
-
• Port Arthur
-
• And surrounding areas
+
+
+
+ Corpus Christi +
+
+
+ Port Aransas +
+
+
+ Rockport +
@@ -130,7 +134,7 @@ const Contact = () => { Schedule an Inspection - +
@@ -193,7 +197,7 @@ const Contact = () => { Submit Request -

+

We'll respond to your inquiry within 24 hours. For emergency services, please call our hotline.

diff --git a/src/components/Footer.tsx b/src/components/Footer.tsx index 31ee59f..a9923a8 100644 --- a/src/components/Footer.tsx +++ b/src/components/Footer.tsx @@ -27,17 +27,17 @@ const Footer = () => { ]; return ( -