diff --git a/Dockerfile b/Dockerfile index b3447b9..8fa98ee 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,24 +1,18 @@ # syntax=docker/dockerfile:1.4 # Build stage -FROM node:lts AS build +FROM node:18-alpine AS build WORKDIR /app -# Set environment variables to help with sharp installation -ENV SHARP_IGNORE_GLOBAL_LIBVIPS=1 -ENV npm_config_sharp_binary_host="https://npmjs.org/mirrors/sharp" -ENV npm_config_sharp_libvips_binary_host="https://npmjs.org/mirrors/sharp-libvips" +# Install build dependencies +RUN apk add --no-cache python3 make g++ # Copy package files COPY package.json package-lock.json ./ -# Install dependencies with legacy peer deps and increased timeout -# Use --no-optional to skip optional dependencies that might cause issues -RUN npm config set fetch-timeout 600000 && \ - npm config set fetch-retry-mintimeout 10000 && \ - npm config set fetch-retry-maxtimeout 60000 && \ - npm install --legacy-peer-deps --no-optional --verbose +# Install dependencies +RUN npm install --legacy-peer-deps # Copy source code COPY . . @@ -26,17 +20,15 @@ COPY . . # Build the Gatsby app RUN npm run build -# Production stage with Nginx +# Production stage FROM nginx:alpine AS production -# Create simple nginx config for Gatsby with client-side routing support -RUN echo 'server { listen 80; root /usr/share/nginx/html; index index.html; location / { try_files $uri $uri/ /index.html; } location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { expires 1y; add_header Cache-Control "public, immutable"; } }' > /etc/nginx/conf.d/default.conf +# Copy nginx config +RUN echo 'server { listen 80; root /usr/share/nginx/html; index index.html; location / { try_files $uri $uri/ /index.html; } }' > /etc/nginx/conf.d/default.conf -# Copy built Gatsby files (builds to 'public' directory) +# Copy built files COPY --from=build /app/public /usr/share/nginx/html -# Expose port 80 EXPOSE 80 -# Start nginx CMD ["nginx", "-g", "daemon off;"] \ No newline at end of file diff --git a/src/components/Style2/ServicesDetails/Details.jsx b/src/components/Style2/ServicesDetails/Details.jsx index 8f8d4ed..e26e215 100644 --- a/src/components/Style2/ServicesDetails/Details.jsx +++ b/src/components/Style2/ServicesDetails/Details.jsx @@ -9,14 +9,14 @@ const Details = ({ service }) => {
- {service.title} + {service?.title

Service Overview

- {service.overview} + {service?.overview || 'No overview available'}

- {service.processes.map((process, index) => ( + {(service?.processes || []).map((process, index) => (
@@ -30,22 +30,21 @@ const Details = ({ service }) => {
- ))} + )) ||

No processes available

}

Key Features

- {service.features.map((feature, index) => ( + {(service?.features || []).map((feature, index) => (

{feature.name}: {feature.description}

- ))} - + )) ||

No features available

}
- "RootXwire's {service.title.toLowerCase()} service has transformed our infrastructure, providing reliable and scalable solutions for our business needs." + "RootXwire's {service?.title?.toLowerCase() || 'service'} has transformed our infrastructure, providing reliable and scalable solutions for our business needs."
@@ -57,7 +56,6 @@ const Details = ({ service }) => {
-

Previous Service

diff --git a/src/components/Style2/ServicesDetails/rootxwireServiceDetails.jsx b/src/components/Style2/ServicesDetails/StaticDetails.jsx similarity index 100% rename from src/components/Style2/ServicesDetails/rootxwireServiceDetails.jsx rename to src/components/Style2/ServicesDetails/StaticDetails.jsx diff --git a/src/data/Software/services.json b/src/data/Software/services.json index a68a88f..0eb2ab7 100644 --- a/src/data/Software/services.json +++ b/src/data/Software/services.json @@ -1,6 +1,6 @@ [ { - "icon": "/assets/img/icons/serv_icons/cloud.png", + "icon": "/assets/img/icons/serv_icons/5.png", "title": "Cloud Computing", "details": "Scalable cloud solutions including compute, storage, and networking services for your business needs.", "link": "/services/details?service=cloud", @@ -28,7 +28,7 @@ ] }, { - "icon": "/assets/img/icons/serv_icons/app.png", + "icon": "/assets/img/icons/serv_icons/8.png", "title": "Application Development", "details": "Comprehensive development services for web, mobile (Android/iOS), and IoT applications.", "link": "/services/details?service=app-dev", @@ -56,7 +56,7 @@ ] }, { - "icon": "/assets/img/icons/serv_icons/ai.png", + "icon": "/assets/img/icons/serv_icons/1.png", "title": "AI & Machine Learning", "details": "Advanced AI solutions including machine learning, computer vision, and natural language processing.", "link": "/services/details?service=ai", diff --git a/src/pages/page-services-details-5/index.jsx b/src/pages/page-services-details-5/index.jsx index 30c0080..1daed40 100644 --- a/src/pages/page-services-details-5/index.jsx +++ b/src/pages/page-services-details-5/index.jsx @@ -13,6 +13,19 @@ import Footer from 'components/Saas/Footer'; const PageServiceDetails = () => { const navbarRef = useRef(null); + const service = { + title: "Email Marketing", + image: "/assets/img/service-email.jpg", + overview: "Targeted email campaigns and automation solutions for effective customer engagement.", + processes: [ + { icon: "/assets/img/icons/serv_icons/34.png", title: "Campaign Setup", description: "Custom email campaign creation and design." }, + { icon: "/assets/img/icons/serv_icons/35.png", title: "Automation", description: "Automated email workflows for efficiency." } + ], + features: [ + { name: "Campaign Analytics", description: "Track and analyze email performance metrics." }, + { name: "Automation Tools", description: "Streamline email marketing workflows." } + ] + }; useEffect(() => { navbarScrollEffect(navbarRef.current, true); @@ -22,24 +35,24 @@ const PageServiceDetails = () => { -
+
-
+