Initial Commit

This commit is contained in:
Cesar Mendivil 2024-10-13 23:49:55 -07:00
parent c52cb5ff52
commit 40095265bb
40 changed files with 1123 additions and 118 deletions

35
.gitignore vendored Normal file
View File

@ -0,0 +1,35 @@
# Dependencias de Node.js
node_modules/
.cache/
public/
# Archivos de log y reporte
npm-debug.log*
yarn-debug.log*
yarn-error.log*
gatsby-error.log
# Archivos del sistema operativo
.DS_Store
Thumbs.db
# Configuración de entorno y archivos locales
.env
.env.*
!.env.example
# Editor de código y herramientas de desarrollo
.idea/
.vscode/
*.sublime-workspace
# Archivos de bloqueo de paquetes
package-lock.json
yarn.lock
# Archivos de test y coverage
coverage/
# Archivos de resultados de compilaciones
dist/
out/

View File

@ -1,9 +1,25 @@
module.exports = { module.exports = {
siteMetadata: { siteMetadata: {
title: 'Iteck', title: 'Nextream',
description: 'Iteck - Multi-Purpose React.js Gatsby Template', description: 'Nextream - Tech & IT Solutions',
author: 'ThemesCamp', author: 'Nextream.net',
}, },
plugins: ['gatsby-plugin-resolve-src', 'gatsby-plugin-eslint'], plugins: ['gatsby-plugin-resolve-src', 'gatsby-plugin-eslint',
{
resolve: `gatsby-plugin-intl`,
options: {
// language JSON resource path
path: `${__dirname}/src/intl`,
// supported language
languages: [`en`, `es`],
// language file path
defaultLanguage: `es`,
// option to redirect to `/ko` when connecting `/`
redirect: true,
// Utilizar la URL del recurso JSON de idioma desde las variables de entorno
remoteJsonUrl: `http://localhost:8000/data/language/languages.json`,
},
},
],
trailingSlash: 'always', trailingSlash: 'always',
}; };

View File

@ -33,5 +33,11 @@ exports.onCreateWebpackConfig = ({
); );
} }
} }
// Add path-browserify to the fallback configuration
config.resolve.fallback = {
...config.resolve.fallback,
path: require.resolve('path-browserify'),
};
actions.replaceWebpackConfig(config); actions.replaceWebpackConfig(config);
}; };

403
package-lock.json generated
View File

@ -9,13 +9,17 @@
"version": "1.0.0", "version": "1.0.0",
"dependencies": { "dependencies": {
"axios": "^0.27.2", "axios": "^0.27.2",
"dompurify": "^3.1.6",
"gatsby": "^4.24.1", "gatsby": "^4.24.1",
"gatsby-plugin-intl": "^5.10.0",
"gatsby-plugin-resolve-src": "^2.1.0", "gatsby-plugin-resolve-src": "^2.1.0",
"lightgallery": "^2.5.0", "lightgallery": "^2.5.0",
"mini-css-extract-plugin": "^2.7.7", "mini-css-extract-plugin": "^2.7.7",
"path-browserify": "^1.0.1",
"rc-slider": "^10.0.1", "rc-slider": "^10.0.1",
"react": "^17.0.2", "react": "^17.0.2",
"react-dom": "^17.0.2", "react-dom": "^17.0.2",
"react-intl": "^6.6.8",
"react-modal-video": "^1.2.9", "react-modal-video": "^1.2.9",
"swiper": "^8.3.2" "swiper": "^8.3.2"
}, },
@ -1793,11 +1797,11 @@
} }
}, },
"node_modules/@babel/runtime": { "node_modules/@babel/runtime": {
"version": "7.19.0", "version": "7.25.6",
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.19.0.tgz", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.6.tgz",
"integrity": "sha512-eR8Lo9hnDS7tqkO7NsV+mKvCmv5boaXFSZ70DnfhcgiEne8hv9oCEd36Klw74EtizEqLsy4YnW8UWwpBVolHZA==", "integrity": "sha512-VBj9MYyDb9tuLq7yzqjgzt6Q+IBQLrGZfdjOekyEirZPHxXWoTSGUTMrpsfi58Up73d13NfYLv8HT9vmznjzhQ==",
"dependencies": { "dependencies": {
"regenerator-runtime": "^0.13.4" "regenerator-runtime": "^0.14.0"
}, },
"engines": { "engines": {
"node": ">=6.9.0" "node": ">=6.9.0"
@ -1815,6 +1819,11 @@
"node": ">=6.9.0" "node": ">=6.9.0"
} }
}, },
"node_modules/@babel/runtime/node_modules/regenerator-runtime": {
"version": "0.14.1",
"resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz",
"integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw=="
},
"node_modules/@babel/template": { "node_modules/@babel/template": {
"version": "7.18.10", "version": "7.18.10",
"resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz",
@ -1942,6 +1951,112 @@
"node": ">= 4" "node": ">= 4"
} }
}, },
"node_modules/@formatjs/ecma402-abstract": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-2.0.0.tgz",
"integrity": "sha512-rRqXOqdFmk7RYvj4khklyqzcfQl9vEL/usogncBHRZfZBDOwMGuSRNFl02fu5KGHXdbinju+YXyuR+Nk8xlr/g==",
"dependencies": {
"@formatjs/intl-localematcher": "0.5.4",
"tslib": "^2.4.0"
}
},
"node_modules/@formatjs/fast-memoize": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/@formatjs/fast-memoize/-/fast-memoize-2.2.0.tgz",
"integrity": "sha512-hnk/nY8FyrL5YxwP9e4r9dqeM6cAbo8PeU9UjyXojZMNvVad2Z06FAVHyR3Ecw6fza+0GH7vdJgiKIVXTMbSBA==",
"dependencies": {
"tslib": "^2.4.0"
}
},
"node_modules/@formatjs/icu-messageformat-parser": {
"version": "2.7.8",
"resolved": "https://registry.npmjs.org/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.7.8.tgz",
"integrity": "sha512-nBZJYmhpcSX0WeJ5SDYUkZ42AgR3xiyhNCsQweFx3cz/ULJjym8bHAzWKvG5e2+1XO98dBYC0fWeeAECAVSwLA==",
"dependencies": {
"@formatjs/ecma402-abstract": "2.0.0",
"@formatjs/icu-skeleton-parser": "1.8.2",
"tslib": "^2.4.0"
}
},
"node_modules/@formatjs/icu-skeleton-parser": {
"version": "1.8.2",
"resolved": "https://registry.npmjs.org/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.8.2.tgz",
"integrity": "sha512-k4ERKgw7aKGWJZgTarIcNEmvyTVD9FYh0mTrrBMHZ1b8hUu6iOJ4SzsZlo3UNAvHYa+PnvntIwRPt1/vy4nA9Q==",
"dependencies": {
"@formatjs/ecma402-abstract": "2.0.0",
"tslib": "^2.4.0"
}
},
"node_modules/@formatjs/intl": {
"version": "2.10.4",
"resolved": "https://registry.npmjs.org/@formatjs/intl/-/intl-2.10.4.tgz",
"integrity": "sha512-56483O+HVcL0c7VucAS2tyH020mt9XTozZO67cwtGg0a7KWDukS/FzW3OnvaHmTHDuYsoPIzO+ZHVfU6fT/bJw==",
"dependencies": {
"@formatjs/ecma402-abstract": "2.0.0",
"@formatjs/fast-memoize": "2.2.0",
"@formatjs/icu-messageformat-parser": "2.7.8",
"@formatjs/intl-displaynames": "6.6.8",
"@formatjs/intl-listformat": "7.5.7",
"intl-messageformat": "10.5.14",
"tslib": "^2.4.0"
},
"peerDependencies": {
"typescript": "^4.7 || 5"
},
"peerDependenciesMeta": {
"typescript": {
"optional": true
}
}
},
"node_modules/@formatjs/intl-displaynames": {
"version": "6.6.8",
"resolved": "https://registry.npmjs.org/@formatjs/intl-displaynames/-/intl-displaynames-6.6.8.tgz",
"integrity": "sha512-Lgx6n5KxN16B3Pb05z3NLEBQkGoXnGjkTBNCZI+Cn17YjHJ3fhCeEJJUqRlIZmJdmaXQhjcQVDp6WIiNeRYT5g==",
"dependencies": {
"@formatjs/ecma402-abstract": "2.0.0",
"@formatjs/intl-localematcher": "0.5.4",
"tslib": "^2.4.0"
}
},
"node_modules/@formatjs/intl-listformat": {
"version": "7.5.7",
"resolved": "https://registry.npmjs.org/@formatjs/intl-listformat/-/intl-listformat-7.5.7.tgz",
"integrity": "sha512-MG2TSChQJQT9f7Rlv+eXwUFiG24mKSzmF144PLb8m8OixyXqn4+YWU+5wZracZGCgVTVmx8viCf7IH3QXoiB2g==",
"dependencies": {
"@formatjs/ecma402-abstract": "2.0.0",
"@formatjs/intl-localematcher": "0.5.4",
"tslib": "^2.4.0"
}
},
"node_modules/@formatjs/intl-localematcher": {
"version": "0.5.4",
"resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.5.4.tgz",
"integrity": "sha512-zTwEpWOzZ2CiKcB93BLngUX59hQkuZjT2+SAQEscSm52peDW/getsawMcWF1rGRpMCX6D7nSJA3CzJ8gn13N/g==",
"dependencies": {
"tslib": "^2.4.0"
}
},
"node_modules/@formatjs/intl-pluralrules": {
"version": "5.2.14",
"resolved": "https://registry.npmjs.org/@formatjs/intl-pluralrules/-/intl-pluralrules-5.2.14.tgz",
"integrity": "sha512-l6Ev7aOGXJSh5EPDEqzsbyufdCCKXZk993QXRQebLsB0TXRhIyF4alqjdMEatLwIigK/Mka8kiVIOLeFP5Cj9Q==",
"dependencies": {
"@formatjs/ecma402-abstract": "2.0.0",
"@formatjs/intl-localematcher": "0.5.4",
"tslib": "^2.4.0"
}
},
"node_modules/@formatjs/intl-relativetimeformat": {
"version": "11.2.14",
"resolved": "https://registry.npmjs.org/@formatjs/intl-relativetimeformat/-/intl-relativetimeformat-11.2.14.tgz",
"integrity": "sha512-g1tor23+Z8DUzT9VAlMHzdeNxyhnD6sgaFRFxti6+4cODdaG4mudo77Th8ONg8Z3El2Ienf+CXcCNzJpOG1E7A==",
"dependencies": {
"@formatjs/ecma402-abstract": "2.0.0",
"@formatjs/intl-localematcher": "0.5.4",
"tslib": "^2.4.0"
}
},
"node_modules/@gatsbyjs/parcel-namer-relative-to-cwd": { "node_modules/@gatsbyjs/parcel-namer-relative-to-cwd": {
"version": "1.9.0", "version": "1.9.0",
"resolved": "https://registry.npmjs.org/@gatsbyjs/parcel-namer-relative-to-cwd/-/parcel-namer-relative-to-cwd-1.9.0.tgz", "resolved": "https://registry.npmjs.org/@gatsbyjs/parcel-namer-relative-to-cwd/-/parcel-namer-relative-to-cwd-1.9.0.tgz",
@ -3463,6 +3578,15 @@
"@types/node": "*" "@types/node": "*"
} }
}, },
"node_modules/@types/hoist-non-react-statics": {
"version": "3.3.5",
"resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.5.tgz",
"integrity": "sha512-SbcrWzkKBw2cdwRTwQAswfpB9g9LJWfjtUeW/jvNwbhC8cpmmNYVePa+ncbUe0rGTQ7G3Ff6mYUN2VMfLVr+Sg==",
"dependencies": {
"@types/react": "*",
"hoist-non-react-statics": "^3.3.0"
}
},
"node_modules/@types/http-cache-semantics": { "node_modules/@types/http-cache-semantics": {
"version": "4.0.1", "version": "4.0.1",
"resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz", "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz",
@ -6369,6 +6493,11 @@
"url": "https://github.com/fb55/domhandler?sponsor=1" "url": "https://github.com/fb55/domhandler?sponsor=1"
} }
}, },
"node_modules/dompurify": {
"version": "3.1.6",
"resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.1.6.tgz",
"integrity": "sha512-cTOAhc36AalkjtBpfG6O8JimdTMWNXjiePT2xQH/ppBGi/4uIpmj8eKyIkMJErXWARyINV/sB38yf8JCLF5pbQ=="
},
"node_modules/domutils": { "node_modules/domutils": {
"version": "2.8.0", "version": "2.8.0",
"resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz",
@ -8544,6 +8673,24 @@
"gatsby": "^2 || ^3 || ^4" "gatsby": "^2 || ^3 || ^4"
} }
}, },
"node_modules/gatsby-plugin-intl": {
"version": "5.10.0",
"resolved": "https://registry.npmjs.org/gatsby-plugin-intl/-/gatsby-plugin-intl-5.10.0.tgz",
"integrity": "sha512-dqJB/M7IVHL52HR+vUArxzMNRd49DThQeLgm1ToPpSrdMcscbQvnbPyQ2kn3boJGXtjkY0boDWiQM5/t/xCk+w==",
"dependencies": {
"@babel/runtime": "^7.21.0",
"@formatjs/intl-pluralrules": "^5.1.10",
"@formatjs/intl-relativetimeformat": "^11.1.10",
"browser-lang": "^0.2.1",
"intl": "^1.2.5",
"react-intl": "^6.3.2"
}
},
"node_modules/gatsby-plugin-intl/node_modules/browser-lang": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/browser-lang/-/browser-lang-0.2.1.tgz",
"integrity": "sha512-+xmtsTxVZKWrKHoNUQp4Tm7BEXlnMwOMAHZAh1SSot1+n04qHLFIH0K5anX52k5BkcauggbaNlWT8f3bVwDh/Q=="
},
"node_modules/gatsby-plugin-page-creator": { "node_modules/gatsby-plugin-page-creator": {
"version": "4.24.0", "version": "4.24.0",
"resolved": "https://registry.npmjs.org/gatsby-plugin-page-creator/-/gatsby-plugin-page-creator-4.24.0.tgz", "resolved": "https://registry.npmjs.org/gatsby-plugin-page-creator/-/gatsby-plugin-page-creator-4.24.0.tgz",
@ -9376,6 +9523,14 @@
"tslib": "^2.0.3" "tslib": "^2.0.3"
} }
}, },
"node_modules/hoist-non-react-statics": {
"version": "3.3.2",
"resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz",
"integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==",
"dependencies": {
"react-is": "^16.7.0"
}
},
"node_modules/hosted-git-info": { "node_modules/hosted-git-info": {
"version": "3.0.8", "version": "3.0.8",
"resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.8.tgz", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.8.tgz",
@ -9649,6 +9804,22 @@
"node": ">= 0.4" "node": ">= 0.4"
} }
}, },
"node_modules/intl": {
"version": "1.2.5",
"resolved": "https://registry.npmjs.org/intl/-/intl-1.2.5.tgz",
"integrity": "sha512-rK0KcPHeBFBcqsErKSpvZnrOmWOj+EmDkyJ57e90YWaQNqbcivcqmKDlHEeNprDWOsKzPsh1BfSpPQdDvclHVw=="
},
"node_modules/intl-messageformat": {
"version": "10.5.14",
"resolved": "https://registry.npmjs.org/intl-messageformat/-/intl-messageformat-10.5.14.tgz",
"integrity": "sha512-IjC6sI0X7YRjjyVH9aUgdftcmZK7WXdHeil4KwbjDnRWjnVitKpAx3rr6t6di1joFp5188VqKcobOPA6mCLG/w==",
"dependencies": {
"@formatjs/ecma402-abstract": "2.0.0",
"@formatjs/fast-memoize": "2.2.0",
"@formatjs/icu-messageformat-parser": "2.7.8",
"tslib": "^2.4.0"
}
},
"node_modules/invariant": { "node_modules/invariant": {
"version": "2.2.4", "version": "2.2.4",
"resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
@ -11748,6 +11919,11 @@
"cross-spawn": "^6.0.5" "cross-spawn": "^6.0.5"
} }
}, },
"node_modules/path-browserify": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz",
"integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g=="
},
"node_modules/path-case": { "node_modules/path-case": {
"version": "3.0.4", "version": "3.0.4",
"resolved": "https://registry.npmjs.org/path-case/-/path-case-3.0.4.tgz", "resolved": "https://registry.npmjs.org/path-case/-/path-case-3.0.4.tgz",
@ -12999,6 +13175,32 @@
"resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.11.tgz", "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.11.tgz",
"integrity": "sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==" "integrity": "sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg=="
}, },
"node_modules/react-intl": {
"version": "6.6.8",
"resolved": "https://registry.npmjs.org/react-intl/-/react-intl-6.6.8.tgz",
"integrity": "sha512-M0pkhzcgV31h++2901BiRXWl69hp2zPyLxRrSwRjd1ErXbNoubz/f4M6DrRTd4OiSUrT4ajRQzrmtS5plG4FtA==",
"dependencies": {
"@formatjs/ecma402-abstract": "2.0.0",
"@formatjs/icu-messageformat-parser": "2.7.8",
"@formatjs/intl": "2.10.4",
"@formatjs/intl-displaynames": "6.6.8",
"@formatjs/intl-listformat": "7.5.7",
"@types/hoist-non-react-statics": "^3.3.1",
"@types/react": "16 || 17 || 18",
"hoist-non-react-statics": "^3.3.2",
"intl-messageformat": "10.5.14",
"tslib": "^2.4.0"
},
"peerDependencies": {
"react": "^16.6.0 || 17 || 18",
"typescript": "^4.7 || 5"
},
"peerDependenciesMeta": {
"typescript": {
"optional": true
}
}
},
"node_modules/react-is": { "node_modules/react-is": {
"version": "16.13.1", "version": "16.13.1",
"resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
@ -16771,11 +16973,18 @@
} }
}, },
"@babel/runtime": { "@babel/runtime": {
"version": "7.19.0", "version": "7.25.6",
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.19.0.tgz", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.6.tgz",
"integrity": "sha512-eR8Lo9hnDS7tqkO7NsV+mKvCmv5boaXFSZ70DnfhcgiEne8hv9oCEd36Klw74EtizEqLsy4YnW8UWwpBVolHZA==", "integrity": "sha512-VBj9MYyDb9tuLq7yzqjgzt6Q+IBQLrGZfdjOekyEirZPHxXWoTSGUTMrpsfi58Up73d13NfYLv8HT9vmznjzhQ==",
"requires": { "requires": {
"regenerator-runtime": "^0.13.4" "regenerator-runtime": "^0.14.0"
},
"dependencies": {
"regenerator-runtime": {
"version": "0.14.1",
"resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz",
"integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw=="
}
} }
}, },
"@babel/runtime-corejs3": { "@babel/runtime-corejs3": {
@ -16878,6 +17087,104 @@
} }
} }
}, },
"@formatjs/ecma402-abstract": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-2.0.0.tgz",
"integrity": "sha512-rRqXOqdFmk7RYvj4khklyqzcfQl9vEL/usogncBHRZfZBDOwMGuSRNFl02fu5KGHXdbinju+YXyuR+Nk8xlr/g==",
"requires": {
"@formatjs/intl-localematcher": "0.5.4",
"tslib": "^2.4.0"
}
},
"@formatjs/fast-memoize": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/@formatjs/fast-memoize/-/fast-memoize-2.2.0.tgz",
"integrity": "sha512-hnk/nY8FyrL5YxwP9e4r9dqeM6cAbo8PeU9UjyXojZMNvVad2Z06FAVHyR3Ecw6fza+0GH7vdJgiKIVXTMbSBA==",
"requires": {
"tslib": "^2.4.0"
}
},
"@formatjs/icu-messageformat-parser": {
"version": "2.7.8",
"resolved": "https://registry.npmjs.org/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.7.8.tgz",
"integrity": "sha512-nBZJYmhpcSX0WeJ5SDYUkZ42AgR3xiyhNCsQweFx3cz/ULJjym8bHAzWKvG5e2+1XO98dBYC0fWeeAECAVSwLA==",
"requires": {
"@formatjs/ecma402-abstract": "2.0.0",
"@formatjs/icu-skeleton-parser": "1.8.2",
"tslib": "^2.4.0"
}
},
"@formatjs/icu-skeleton-parser": {
"version": "1.8.2",
"resolved": "https://registry.npmjs.org/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.8.2.tgz",
"integrity": "sha512-k4ERKgw7aKGWJZgTarIcNEmvyTVD9FYh0mTrrBMHZ1b8hUu6iOJ4SzsZlo3UNAvHYa+PnvntIwRPt1/vy4nA9Q==",
"requires": {
"@formatjs/ecma402-abstract": "2.0.0",
"tslib": "^2.4.0"
}
},
"@formatjs/intl": {
"version": "2.10.4",
"resolved": "https://registry.npmjs.org/@formatjs/intl/-/intl-2.10.4.tgz",
"integrity": "sha512-56483O+HVcL0c7VucAS2tyH020mt9XTozZO67cwtGg0a7KWDukS/FzW3OnvaHmTHDuYsoPIzO+ZHVfU6fT/bJw==",
"requires": {
"@formatjs/ecma402-abstract": "2.0.0",
"@formatjs/fast-memoize": "2.2.0",
"@formatjs/icu-messageformat-parser": "2.7.8",
"@formatjs/intl-displaynames": "6.6.8",
"@formatjs/intl-listformat": "7.5.7",
"intl-messageformat": "10.5.14",
"tslib": "^2.4.0"
}
},
"@formatjs/intl-displaynames": {
"version": "6.6.8",
"resolved": "https://registry.npmjs.org/@formatjs/intl-displaynames/-/intl-displaynames-6.6.8.tgz",
"integrity": "sha512-Lgx6n5KxN16B3Pb05z3NLEBQkGoXnGjkTBNCZI+Cn17YjHJ3fhCeEJJUqRlIZmJdmaXQhjcQVDp6WIiNeRYT5g==",
"requires": {
"@formatjs/ecma402-abstract": "2.0.0",
"@formatjs/intl-localematcher": "0.5.4",
"tslib": "^2.4.0"
}
},
"@formatjs/intl-listformat": {
"version": "7.5.7",
"resolved": "https://registry.npmjs.org/@formatjs/intl-listformat/-/intl-listformat-7.5.7.tgz",
"integrity": "sha512-MG2TSChQJQT9f7Rlv+eXwUFiG24mKSzmF144PLb8m8OixyXqn4+YWU+5wZracZGCgVTVmx8viCf7IH3QXoiB2g==",
"requires": {
"@formatjs/ecma402-abstract": "2.0.0",
"@formatjs/intl-localematcher": "0.5.4",
"tslib": "^2.4.0"
}
},
"@formatjs/intl-localematcher": {
"version": "0.5.4",
"resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.5.4.tgz",
"integrity": "sha512-zTwEpWOzZ2CiKcB93BLngUX59hQkuZjT2+SAQEscSm52peDW/getsawMcWF1rGRpMCX6D7nSJA3CzJ8gn13N/g==",
"requires": {
"tslib": "^2.4.0"
}
},
"@formatjs/intl-pluralrules": {
"version": "5.2.14",
"resolved": "https://registry.npmjs.org/@formatjs/intl-pluralrules/-/intl-pluralrules-5.2.14.tgz",
"integrity": "sha512-l6Ev7aOGXJSh5EPDEqzsbyufdCCKXZk993QXRQebLsB0TXRhIyF4alqjdMEatLwIigK/Mka8kiVIOLeFP5Cj9Q==",
"requires": {
"@formatjs/ecma402-abstract": "2.0.0",
"@formatjs/intl-localematcher": "0.5.4",
"tslib": "^2.4.0"
}
},
"@formatjs/intl-relativetimeformat": {
"version": "11.2.14",
"resolved": "https://registry.npmjs.org/@formatjs/intl-relativetimeformat/-/intl-relativetimeformat-11.2.14.tgz",
"integrity": "sha512-g1tor23+Z8DUzT9VAlMHzdeNxyhnD6sgaFRFxti6+4cODdaG4mudo77Th8ONg8Z3El2Ienf+CXcCNzJpOG1E7A==",
"requires": {
"@formatjs/ecma402-abstract": "2.0.0",
"@formatjs/intl-localematcher": "0.5.4",
"tslib": "^2.4.0"
}
},
"@gatsbyjs/parcel-namer-relative-to-cwd": { "@gatsbyjs/parcel-namer-relative-to-cwd": {
"version": "1.9.0", "version": "1.9.0",
"resolved": "https://registry.npmjs.org/@gatsbyjs/parcel-namer-relative-to-cwd/-/parcel-namer-relative-to-cwd-1.9.0.tgz", "resolved": "https://registry.npmjs.org/@gatsbyjs/parcel-namer-relative-to-cwd/-/parcel-namer-relative-to-cwd-1.9.0.tgz",
@ -17922,6 +18229,15 @@
"@types/node": "*" "@types/node": "*"
} }
}, },
"@types/hoist-non-react-statics": {
"version": "3.3.5",
"resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.5.tgz",
"integrity": "sha512-SbcrWzkKBw2cdwRTwQAswfpB9g9LJWfjtUeW/jvNwbhC8cpmmNYVePa+ncbUe0rGTQ7G3Ff6mYUN2VMfLVr+Sg==",
"requires": {
"@types/react": "*",
"hoist-non-react-statics": "^3.3.0"
}
},
"@types/http-cache-semantics": { "@types/http-cache-semantics": {
"version": "4.0.1", "version": "4.0.1",
"resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz", "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz",
@ -20110,6 +20426,11 @@
"domelementtype": "^2.2.0" "domelementtype": "^2.2.0"
} }
}, },
"dompurify": {
"version": "3.1.6",
"resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.1.6.tgz",
"integrity": "sha512-cTOAhc36AalkjtBpfG6O8JimdTMWNXjiePT2xQH/ppBGi/4uIpmj8eKyIkMJErXWARyINV/sB38yf8JCLF5pbQ=="
},
"domutils": { "domutils": {
"version": "2.8.0", "version": "2.8.0",
"resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz",
@ -21864,6 +22185,26 @@
"webpack-merge": "^5.8.0" "webpack-merge": "^5.8.0"
} }
}, },
"gatsby-plugin-intl": {
"version": "5.10.0",
"resolved": "https://registry.npmjs.org/gatsby-plugin-intl/-/gatsby-plugin-intl-5.10.0.tgz",
"integrity": "sha512-dqJB/M7IVHL52HR+vUArxzMNRd49DThQeLgm1ToPpSrdMcscbQvnbPyQ2kn3boJGXtjkY0boDWiQM5/t/xCk+w==",
"requires": {
"@babel/runtime": "^7.21.0",
"@formatjs/intl-pluralrules": "^5.1.10",
"@formatjs/intl-relativetimeformat": "^11.1.10",
"browser-lang": "^0.2.1",
"intl": "^1.2.5",
"react-intl": "^6.3.2"
},
"dependencies": {
"browser-lang": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/browser-lang/-/browser-lang-0.2.1.tgz",
"integrity": "sha512-+xmtsTxVZKWrKHoNUQp4Tm7BEXlnMwOMAHZAh1SSot1+n04qHLFIH0K5anX52k5BkcauggbaNlWT8f3bVwDh/Q=="
}
}
},
"gatsby-plugin-page-creator": { "gatsby-plugin-page-creator": {
"version": "4.24.0", "version": "4.24.0",
"resolved": "https://registry.npmjs.org/gatsby-plugin-page-creator/-/gatsby-plugin-page-creator-4.24.0.tgz", "resolved": "https://registry.npmjs.org/gatsby-plugin-page-creator/-/gatsby-plugin-page-creator-4.24.0.tgz",
@ -22332,6 +22673,14 @@
"tslib": "^2.0.3" "tslib": "^2.0.3"
} }
}, },
"hoist-non-react-statics": {
"version": "3.3.2",
"resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz",
"integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==",
"requires": {
"react-is": "^16.7.0"
}
},
"hosted-git-info": { "hosted-git-info": {
"version": "3.0.8", "version": "3.0.8",
"resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.8.tgz", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.8.tgz",
@ -22516,6 +22865,22 @@
"side-channel": "^1.0.4" "side-channel": "^1.0.4"
} }
}, },
"intl": {
"version": "1.2.5",
"resolved": "https://registry.npmjs.org/intl/-/intl-1.2.5.tgz",
"integrity": "sha512-rK0KcPHeBFBcqsErKSpvZnrOmWOj+EmDkyJ57e90YWaQNqbcivcqmKDlHEeNprDWOsKzPsh1BfSpPQdDvclHVw=="
},
"intl-messageformat": {
"version": "10.5.14",
"resolved": "https://registry.npmjs.org/intl-messageformat/-/intl-messageformat-10.5.14.tgz",
"integrity": "sha512-IjC6sI0X7YRjjyVH9aUgdftcmZK7WXdHeil4KwbjDnRWjnVitKpAx3rr6t6di1joFp5188VqKcobOPA6mCLG/w==",
"requires": {
"@formatjs/ecma402-abstract": "2.0.0",
"@formatjs/fast-memoize": "2.2.0",
"@formatjs/icu-messageformat-parser": "2.7.8",
"tslib": "^2.4.0"
}
},
"invariant": { "invariant": {
"version": "2.2.4", "version": "2.2.4",
"resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
@ -24056,6 +24421,11 @@
"cross-spawn": "^6.0.5" "cross-spawn": "^6.0.5"
} }
}, },
"path-browserify": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz",
"integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g=="
},
"path-case": { "path-case": {
"version": "3.0.4", "version": "3.0.4",
"resolved": "https://registry.npmjs.org/path-case/-/path-case-3.0.4.tgz", "resolved": "https://registry.npmjs.org/path-case/-/path-case-3.0.4.tgz",
@ -24891,6 +25261,23 @@
"resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.11.tgz", "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.11.tgz",
"integrity": "sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==" "integrity": "sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg=="
}, },
"react-intl": {
"version": "6.6.8",
"resolved": "https://registry.npmjs.org/react-intl/-/react-intl-6.6.8.tgz",
"integrity": "sha512-M0pkhzcgV31h++2901BiRXWl69hp2zPyLxRrSwRjd1ErXbNoubz/f4M6DrRTd4OiSUrT4ajRQzrmtS5plG4FtA==",
"requires": {
"@formatjs/ecma402-abstract": "2.0.0",
"@formatjs/icu-messageformat-parser": "2.7.8",
"@formatjs/intl": "2.10.4",
"@formatjs/intl-displaynames": "6.6.8",
"@formatjs/intl-listformat": "7.5.7",
"@types/hoist-non-react-statics": "^3.3.1",
"@types/react": "16 || 17 || 18",
"hoist-non-react-statics": "^3.3.2",
"intl-messageformat": "10.5.14",
"tslib": "^2.4.0"
}
},
"react-is": { "react-is": {
"version": "16.13.1", "version": "16.13.1",
"resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",

View File

@ -16,13 +16,17 @@
}, },
"dependencies": { "dependencies": {
"axios": "^0.27.2", "axios": "^0.27.2",
"dompurify": "^3.1.6",
"gatsby": "^4.24.1", "gatsby": "^4.24.1",
"gatsby-plugin-intl": "^5.10.0",
"gatsby-plugin-resolve-src": "^2.1.0", "gatsby-plugin-resolve-src": "^2.1.0",
"lightgallery": "^2.5.0", "lightgallery": "^2.5.0",
"mini-css-extract-plugin": "^2.7.7", "mini-css-extract-plugin": "^2.7.7",
"path-browserify": "^1.0.1",
"rc-slider": "^10.0.1", "rc-slider": "^10.0.1",
"react": "^17.0.2", "react": "^17.0.2",
"react-dom": "^17.0.2", "react-dom": "^17.0.2",
"react-intl": "^6.6.8",
"react-modal-video": "^1.2.9", "react-modal-video": "^1.2.9",
"swiper": "^8.3.2" "swiper": "^8.3.2"
}, },

33
src/common/api.js Normal file
View File

@ -0,0 +1,33 @@
class Api {
constructor() {
if (!Api.instance) {
Api.instance = this;
}
return Api.instance;
}
async get(endpoint, jsonFile) {
const data = await this.readJsonFile(jsonFile);
if (!data[endpoint]) {
throw new Error(`Error fetching ${endpoint}: Endpoint not found`);
}
return data[endpoint];
}
async readJsonFile(jsonFile) {
const filePath = `/data/${jsonFile}`;
const response = await fetch(filePath);
if (!response.ok) {
throw new Error(`Error fetching ${jsonFile}: ${response.statusText}`);
}
const data = await response.json();
return data;
}
// Otros métodos HTTP (POST, PUT, DELETE, etc.) pueden ser añadidos aquí si es necesario
}
const instance = new Api();
Object.freeze(instance);
export default instance;

22
src/common/urlHelper.js Normal file
View File

@ -0,0 +1,22 @@
let instance = null;
class UrlHelper {
constructor(locale) {
if (!instance) {
this.locale = locale;
instance = this;
}
return instance;
}
setLocale(locale) {
this.locale = locale;
}
getLocalizedUrl(path) {
return `/${this.locale}${path}`;
}
}
export default UrlHelper;

View File

@ -1,7 +1,12 @@
import React from 'react'; import React from 'react';
import DOMPurify from 'dompurify';
import aboutData from 'data/ITCreative/about.json'; import aboutData from 'data/ITCreative/about.json';
import { useIntl } from "gatsby-plugin-intl";
const About = () => { const About = () => {
const intl = useIntl();
const title_1= DOMPurify.sanitize(intl.formatMessage({ id: "header_1" }).trim().replace(/^"|"$/g, ''));
return ( return (
<section className="about style-7"> <section className="about style-7">
<div className="container"> <div className="container">
@ -13,8 +18,8 @@ const About = () => {
<img src="/assets/img/line_l.png" alt="" /> <img src="/assets/img/line_l.png" alt="" />
<h5> About Us </h5> <h5> About Us </h5>
</div> </div>
<h2 className=""> <h2 className="" dangerouslySetInnerHTML={{ __html: title_1 }}>
Meet With <span> A House </span> <br /> Of Creatives.
</h2> </h2>
</div> </div>
<div className="text mb-30"> <div className="text mb-30">

View File

@ -0,0 +1,34 @@
import React from 'react';
import { changeLocale, IntlContextConsumer } from 'gatsby-plugin-intl';
const LanguageSelector = () => {
return (
<div>
<IntlContextConsumer>
{({ languages, language: currentLocale }) => (
<div>
<button className="icon-35 dropdown-toggle p-0 border-0 bg-transparent rounded-circle img-cover text-white" type="button" id="dropdownMenuButton1" data-bs-toggle="dropdown" aria-expanded="false">
<img src={currentLocale === 'en' ? '/assets/img/lang.png' : '/assets/img/lang-es.png'} alt="Language flag" />
</button>
<ul className="dropdown-menu" aria-labelledby="dropdownMenuButton1">
{languages.map((language) => (
<button className="dropdown-item"
key={language}
onClick={() => changeLocale(language)}
disabled={language === currentLocale}>
{language === 'en' ? 'English' : 'Español'}
</button>
))}
</ul>
</div> // Cerrar el elemento contenedor
)}
</IntlContextConsumer>
</div>
);
};
export default LanguageSelector

View File

@ -0,0 +1,53 @@
import React, { useEffect, useState } from 'react';
import { IntlProvider, useIntl } from 'gatsby-plugin-intl';
import { navigate } from 'gatsby';
const LanguageSwitcher = () => {
const [messages, setMessages] = useState({});
const [languages, setLanguages] = useState([]);
const intl = useIntl();
const currentLanguage = intl.locale;
useEffect(() => {
const fetchMessages = async () => {
try {
const response = await fetch('/data/language/languages.json');
const data = await response.json();
setMessages(data);
setLanguages(Object.keys(data));
} catch (error) {
console.error('Error fetching texts:', error);
}
};
fetchMessages();
}, []);
const handleLanguageChange = (newLanguage) => {
const path = window.location.pathname;
const newPath = `/${newLanguage}${path.substring(3)}`;
navigate(newPath);
};
return (
<IntlProvider locale={currentLanguage} messages={messages[currentLanguage]}>
<div>
<button className="icon-35 dropdown-toggle p-0 border-0 bg-transparent rounded-circle img-cover text-white" type="button" id="dropdownMenuButton1" data-bs-toggle="dropdown" aria-expanded="false">
<img src={currentLanguage === 'en' ? '/assets/img/lang.png' : '/assets/img/lang-es.png'} alt="Language flag" />
</button>
<ul className="dropdown-menu" aria-labelledby="dropdownMenuButton1">
{languages.map((lang) => (
<button className="dropdown-item"
key={lang}
onClick={() => handleLanguageChange(lang)}
disabled={lang === currentLanguage}>
{lang === 'en' ? 'English' : 'Español'}
</button>
))}
</ul>
</div>
</IntlProvider>
);
};
export default LanguageSwitcher;

View File

@ -1,6 +1,7 @@
import React, { useEffect, useRef } from 'react'; import React, { useEffect, useRef } from 'react';
import navbarScrollEffect from "common/navbarScrollEffect"; import navbarScrollEffect from "common/navbarScrollEffect";
import scrollToSection from 'common/scrollToSection'; import scrollToSection from 'common/scrollToSection';
import LanguageSelector from '../LanguageSelector/LanguageSwitcher';
const OnePageNav = () => { const OnePageNav = () => {
const navbarRef = useRef(null); const navbarRef = useRef(null);
@ -100,15 +101,7 @@ const OnePageNav = () => {
<i className="bi bi-search"></i> <i className="bi bi-search"></i>
</a> </a>
<div className="dropdown" onMouseMove={handleMouseMove} onMouseLeave={handleMouseLeave}> <div className="dropdown" onMouseMove={handleMouseMove} onMouseLeave={handleMouseLeave}>
<button <LanguageSelector />
className="icon-35 dropdown-toggle p-0 border-0 bg-transparent rounded-circle img-cover text-white"
type="button" id="dropdownMenuButton1" data-bs-toggle="dropdown" aria-expanded="false">
<img src="/assets/img/lang.png" alt="" />
</button>
<ul className="dropdown-menu" aria-labelledby="dropdownMenuButton1">
<li><a className="dropdown-item" href="#">English</a></li>
<li><a className="dropdown-item" href="#">Arabic</a></li>
</ul>
</div> </div>
</div> </div>
</div> </div>

View File

@ -1,15 +1,37 @@
import React from 'react'; import React,{ useEffect, useState } from 'react';
import { Link } from 'gatsby'; import { Link } from 'gatsby';
import aboutData from 'data/Software/about.json'; import DOMPurify from 'dompurify';
import { useIntl, FormattedMessage } from "gatsby-plugin-intl";
import api from '../../common/api';
import UrlHelper from '../../common/urlHelper';
const About = () => { const About = () => {
const intl = useIntl();
const about_title1= DOMPurify.sanitize(intl.formatMessage({ id: "about_title1" }).trim().replace(/^"|"$/g, ''));
const about_title5= DOMPurify.sanitize(intl.formatMessage({ id: "about_title5" }).trim().replace(/^"|"$/g, ''));
const [dataAbout, setAboutData] = useState({numbers: [], features: []});
const urlHelper = new UrlHelper(intl.locale);
useEffect(() => {
const fetchData = async () => {
try {
const response = await api.get('about','about.json');
setAboutData(response);
} catch (error) {
console.error(error);
}
};
fetchData();
}, []);
return ( return (
<section className="about section-padding style-3" data-scroll-index="3"> <section className="about section-padding style-3" data-scroll-index="3">
<div className="top-content"> <div className="top-content">
<div className="img img-left"> <div className="img img-left">
<img src="/assets/img/about/style_3_1.png" alt="" /> <img src="/assets/img/about/style_3_1.png" alt="" />
{ {
aboutData.numbers.map((number, index) => ( dataAbout.numbers.map((number, index) => (
<div className="info-circle" key={index}> <div className="info-circle" key={index}>
<div className="cont"> <div className="cont">
<h2>{ number.value }</h2> <h2>{ number.value }</h2>
@ -23,23 +45,20 @@ const About = () => {
<div className="row gx-0 justify-content-end"> <div className="row gx-0 justify-content-end">
<div className="col-lg-5"> <div className="col-lg-5">
<div className="info"> <div className="info">
<div className="section-head long-shape mb-40 style-3"> <div className="section-head long-shape mb-40 style-3" dangerouslySetInnerHTML={{ __html: about_title1 }}>
<h3>Itecks <span>Mission & Vision</span></h3>
</div> </div>
<h5 className="h5"> <h5 className="h5">
It is only when they go wrong that machines remind you how powerful they are. {intl.formatMessage({ id: "about_title2" })}
</h5> </h5>
<div className="text mb-20"> <div className="text mb-20">
Iteck Co is the partner of choice for many of the worlds leading enterprises, SMEs {intl.formatMessage({ id: "about_title3" })}
and technology challengers. We help businesses elevate their value through custom
software development, product design, QA and consultancy services.
</div> </div>
<div className="text mb-70"> <div className="text mb-70">
Iteck specializes in technological and IT-related services such as product {intl.formatMessage({ id: "about_title4" })}
engineering, warranty management, building cloud, etc.
</div> </div>
<Link to="/page-about-5" className="btn rounded-pill bg-blue2 sm-butn text-white"> <Link to={urlHelper.getLocalizedUrl('/page-about-5')} className="btn rounded-pill bg-blue2 sm-butn text-white">
<span>More About Us</span> <span><FormattedMessage id="more_about" defaultMessage="Loading..." /></span>
</Link> </Link>
</div> </div>
</div> </div>
@ -51,20 +70,19 @@ const About = () => {
<div className="row"> <div className="row">
<div className="col-lg-5"> <div className="col-lg-5">
<div className="info pe-lg-5"> <div className="info pe-lg-5">
<div className="section-head mb-40 style-3"> <div className="section-head mb-40 style-3" dangerouslySetInnerHTML={{ __html: about_title5 }}>
<h3>Itecks <span>Technology</span></h3>
</div> </div>
<div className="text mb-30"> <div className="text mb-30">
Our team can assist you in transforming your business through latest tech {intl.formatMessage({ id: "about_title6" })}
capabilities to stay ahead of the curve.
</div> </div>
<ul> <ul>
{ {
aboutData.features.map((feature, index) => (<li key={index}> <i className="bi bi-star-fill me-3"></i> { feature }</li>)) dataAbout.features.map((feature, index) => (<li key={index}> <i className="bi bi-star-fill me-3"></i> { feature }</li>))
} }
</ul> </ul>
<Link to="/page-about-5" className="btn rounded-pill border-blue2 hover-blue2 mt-60 sm-butn"> <Link to={urlHelper.getLocalizedUrl('/page-about-5')} className="btn rounded-pill border-blue2 hover-blue2 mt-60 sm-butn">
<span>How We Works</span> <span>{intl.formatMessage({ id: "about_title7" })}</span>
</Link> </Link>
</div> </div>
</div> </div>
@ -78,4 +96,5 @@ const About = () => {
) )
} }
export default About export default About

View File

@ -1,19 +1,40 @@
import React from 'react'; import React,{ useEffect, useState } from 'react';
import { Link } from 'gatsby'; import { Link } from 'gatsby';
import DOMPurify from 'dompurify';
import data from 'data/Software/blog.json'; import data from 'data/Software/blog.json';
import { useIntl } from "gatsby-plugin-intl";
import api from '../../common/api';
const Blog = () => { const Blog = () => {
const intl = useIntl();
const blog_title1= DOMPurify.sanitize(intl.formatMessage({ id: "blog_title1" }).trim().replace(/^"|"$/g, ''));
const [dataBlog, setBlogs] = useState({blogs: [], faq: [],clients: []});
useEffect(() => {
const fetchData = async () => {
try {
const response = await api.get('blog','blog.json');
setBlogs(response);
} catch (error) {
console.error(error);
}
};
fetchData();
}, []);
return ( return (
<section className="blog section-padding style-3" data-scroll-index="7"> <section className="blog section-padding style-3" data-scroll-index="7">
<div className="container"> <div className="container">
<div className="row gx-0 justify-content-between"> <div className="row gx-0 justify-content-between">
<div className="col-lg-5"> <div className="col-lg-5">
<div className="blog-content"> <div className="blog-content">
<div className="section-head style-3 d-flex align-items-center mb-50"> <div className="section-head style-3 d-flex align-items-center mb-50" >
<h3>Itecks <span>Journal</span></h3> <Link to="/page-blog-5" className="text-muted ms-5 ps-5 mt-2">All Articles <i className="bi bi-chevron-right ms-1"></i></Link> <div dangerouslySetInnerHTML={{ __html: blog_title1 }}></div>
<Link to="/page-blog-5" className="text-muted ms-5 ps-5 mt-2">{intl.formatMessage({ id: "all_articles" })} <i className="bi bi-chevron-right ms-1"></i></Link>
</div> </div>
{ {
data.blogs.map((post, i) => ( dataBlog.blogs.map((post, i) => (
<div className={`card border-0 bg-transparent rounded-0 ${i !== data.blogs.length - 1 ? 'border-bottom brd-gray':''} pb-4 mb-4`} key={i}> <div className={`card border-0 bg-transparent rounded-0 ${i !== data.blogs.length - 1 ? 'border-bottom brd-gray':''} pb-4 mb-4`} key={i}>
<div className="row align-items-center"> <div className="row align-items-center">
<div className="col-lg-4"> <div className="col-lg-4">
@ -60,7 +81,7 @@ const Blog = () => {
</div> </div>
<div className="accordion" id="accordionExample"> <div className="accordion" id="accordionExample">
{ {
data.faq.map((item, index) => ( dataBlog.faq.map((item, index) => (
<div className="accordion-item" key={index}> <div className="accordion-item" key={index}>
<h2 className="accordion-header" id={`heading${index+1}`}> <h2 className="accordion-header" id={`heading${index+1}`}>
<button className={`accordion-button ${index === 0 ? '':'collapsed'}`} type="button" data-bs-toggle="collapse" data-bs-target={`#collapse${index+1}`} aria-expanded="true" aria-controls={`collapse${index+1}`}> <button className={`accordion-button ${index === 0 ? '':'collapsed'}`} type="button" data-bs-toggle="collapse" data-bs-target={`#collapse${index+1}`} aria-expanded="true" aria-controls={`collapse${index+1}`}>
@ -85,7 +106,7 @@ const Blog = () => {
<div className="client-logos mt-100"> <div className="client-logos mt-100">
<div className="row align-items-center"> <div className="row align-items-center">
{ {
data.clients.map((client, index) => ( dataBlog.clients.map((client, index) => (
<div className="col-6 col-lg-2" key={index}> <div className="col-6 col-lg-2" key={index}>
<a href="#" className="img d-block"> <a href="#" className="img d-block">
<img src={client} alt="" /> <img src={client} alt="" />

View File

@ -86,7 +86,7 @@ const Footer = () => {
</div> </div>
<div className="col-lg-6"> <div className="col-lg-6">
<small className="small"> <small className="small">
© 2022 Copyrights by <a href="#" className="fw-bold text-decoration-underline">Iteck Co.</a> All Rights Reserved. Designed by <a href="#" className="fw-bold text-decoration-underline">ThemesCamp</a> © 2024 Copyrights by <a href="#" className="fw-bold text-decoration-underline">Nextream</a> All Rights Reserved. Designed by <a href="#" className="fw-bold text-decoration-underline">Nextream</a>
</small> </small>
</div> </div>
</div> </div>

View File

@ -1,6 +1,11 @@
import React from 'react'; import React from 'react';
import DOMPurify from 'dompurify';
import { useIntl } from "gatsby-plugin-intl";
const Header = () => { const Header = () => {
const intl = useIntl();
const header_1= DOMPurify.sanitize(intl.formatMessage({ id: "header_1" }).trim().replace(/^"|"$/g, ''));
return ( return (
<header className="style-3 overflow-hidden" data-scroll-index="0"> <header className="style-3 overflow-hidden" data-scroll-index="0">
<div className="container"> <div className="container">
@ -8,29 +13,27 @@ const Header = () => {
<div className="row"> <div className="row">
<div className="col-lg-5"> <div className="col-lg-5">
<div className="info"> <div className="info">
<h1 className="h1">Make your life easier with help from <span>Iteck</span></h1> <h1 className="h1" dangerouslySetInnerHTML={{ __html: header_1 }}></h1>
<p className="p">We help businesses elevate their value through custom software development, product design, QA & consultancy services.</p> <p className="p">{intl.formatMessage({ id: "header_2" })}</p>
<h5 className="h5">Get Free Quote! <span className="fw-normal ms-1">Well contact back in 24h</span></h5> <h5 className="h5">{intl.formatMessage({ id: "get_free_quotes" })} <span className="fw-normal ms-1">{intl.formatMessage({ id: "header_3" })}</span></h5>
<form action="contact.php" className="form mt-30" method="post"> <form action="contact.php" className="form mt-30" method="post">
<div className="row gx-3"> <div className="row gx-3">
<div className="col-6"> <div className="col-6">
<div className="form-group input-with-icon"> <div className="form-group input-with-icon">
<input type="text" className="form-control" placeholder="Your Email *" /> <input type="text" className="form-control" placeholder={intl.formatMessage({ id: "your_email" })} />
<span className="input-icon"><i className="far fa-envelope"></i></span> <span className="input-icon"><i className="far fa-envelope"></i></span>
</div> </div>
</div> </div>
<div className="col-6"> <div className="col-6">
<div className="form-group"> <div className="form-group">
<select className="form-select" defaultValue={"Your inquiry about"}> <select className="form-select" defaultValue={"Your inquiry about"}>
<option value="">Your inquiry about</option> <option value="">{intl.formatMessage({ id: "inquiry_about" })}</option>
<option value="">Your inquiry about</option>
<option value="">Your inquiry about</option>
</select> </select>
</div> </div>
</div> </div>
<div className="col-12"> <div className="col-12">
<button className="btn dark-butn hover-darkBlue rounded-pill w-100 mt-3"> <button className="btn dark-butn hover-darkBlue rounded-pill w-100 mt-3">
<span>Request A Consultation</span> <span>{intl.formatMessage({ id: "request_a_consultation" })}</span>
</button> </button>
</div> </div>
</div> </div>

View File

@ -1,13 +1,15 @@
import React from 'react'; import React from 'react';
import { Link } from 'gatsby'; import { Link } from 'gatsby';
import projects from 'data/Software/projects.json'; import projects from 'data/Software/projects.json';
import { useIntl } from "gatsby-plugin-intl";
const Projects = () => { const Projects = () => {
const intl = useIntl();
return ( return (
<section className="projects section-padding style-3" data-scroll-index="4"> <section className="projects section-padding style-3" data-scroll-index="4">
<div className="container"> <div className="container">
<div className="section-head style-3 text-center"> <div className="section-head style-3 text-center">
<h3>Our Featured <span>Projects</span></h3> <h3>{intl.formatMessage({ id: "our_featured" })} <span>{intl.formatMessage({ id: "projects" })}</span></h3>
</div> </div>
<div className="content"> <div className="content">
<div className="row"> <div className="row">
@ -15,11 +17,11 @@ const Projects = () => {
projects.map((project, i) => ( projects.map((project, i) => (
<div className={i === 0 ? 'col-lg-7' : i === 1 ? 'col-lg-5' : 'col-lg-6'} key={i}> <div className={i === 0 ? 'col-lg-7' : i === 1 ? 'col-lg-5' : 'col-lg-6'} key={i}>
<div className="project-card d-block mb-30 style-3"> <div className="project-card d-block mb-30 style-3">
<Link to="/page-single-project-5" className="img img-cover d-block"> <Link to={ project.link } className="img img-cover d-block">
<img src={project.image} alt="" /> <img src={project.image} alt="" />
</Link> </Link>
<div className="info"> <div className="info">
<h5 className="h5"><Link to="/page-single-project-5">{ project.title }</Link></h5> <h5 className="h5"><Link to={ project.link }>{ project.title }</Link></h5>
<small className="small"><a href="#">{ project.description }</a></small> <small className="small"><a href="#">{ project.description }</a></small>
</div> </div>
</div> </div>
@ -28,8 +30,8 @@ const Projects = () => {
} }
</div> </div>
<div className="text-center"> <div className="text-center">
<Link to="/page-portfolio-5" className="btn rounded-pill bg-blue2 sm-butn mt-60 text-white"> <Link to="http://surteloya.com" className="btn rounded-pill bg-blue2 sm-butn mt-60 text-white">
<span>See All Projects</span> <span>{intl.formatMessage({ id: "see_all_projects" })}</span>
</Link> </Link>
</div> </div>
</div> </div>

View File

@ -1,13 +1,15 @@
import React from 'react'; import React from 'react';
import { Link } from 'gatsby'; import { Link } from 'gatsby';
import { useIntl } from "gatsby-plugin-intl";
import services from 'data/Software/services.json'; import services from 'data/Software/services.json';
const Services = () => { const Services = () => {
const intl = useIntl();
return ( return (
<section className="services style-3 section-padding pb-70" data-scroll-index="2"> <section className="services style-3 section-padding pb-70" data-scroll-index="2">
<div className="container"> <div className="container">
<div className="section-head style-3 d-flex align-items-center"> <div className="section-head style-3 d-flex align-items-center">
<h3>Our Main <span>Services</span></h3> <Link to="/page-services-5" className="text-muted ms-5 ps-5 mt-2">See full services <i className="bi bi-chevron-right ms-1"></i></Link> <h3>{intl.formatMessage({ id: "our_main" })} <span>{intl.formatMessage({ id: "services" })}</span></h3> <Link to="/page-services-5" className="text-muted ms-5 ps-5 mt-2">{intl.formatMessage({ id: "see_full_services" })} <i className="bi bi-chevron-right ms-1"></i></Link>
</div> </div>
<div className="row"> <div className="row">
{ {
@ -22,7 +24,7 @@ const Services = () => {
<div className="text"> <div className="text">
{ service.details } { service.details }
</div> </div>
<Link to="/page-portfolio-5"><span>see projects</span> <i className="bi bi-chevron-right ms-1"></i></Link> <Link to="/page-portfolio-5"><span>{intl.formatMessage({ id: "see_projects" })}</span> <i className="bi bi-chevron-right ms-1"></i></Link>
</div> </div>
</div> </div>
</div> </div>

View File

@ -1,7 +1,9 @@
import React from 'react'; import React , { useEffect, useState }from 'react';
import { Swiper, SwiperSlide } from 'swiper/react'; import { Swiper, SwiperSlide } from 'swiper/react';
import SwiperCore, { Pagination, Navigation, Autoplay } from 'swiper'; import SwiperCore, { Pagination, Navigation, Autoplay } from 'swiper';
import testimonials from 'data/Software/testimonials.json'; import { useIntl } from "gatsby-plugin-intl";
//import testimonials from 'data/Software/testimonials.json';
import api from '../../common/api';
import "swiper/css"; import "swiper/css";
import 'swiper/css/autoplay'; import 'swiper/css/autoplay';
@ -11,12 +13,27 @@ import 'swiper/css/pagination';
SwiperCore.use([Pagination, Navigation, Autoplay]); SwiperCore.use([Pagination, Navigation, Autoplay]);
const Testimonials = () => { const Testimonials = () => {
const intl = useIntl();
const [testimonials, setTestimonials] = useState([]);
useEffect(() => {
const fetchData = async () => {
try {
const response = await api.get('testimonials', 'testimonials.json');
setTestimonials(response);
} catch (error) {
console.error(error);
}
};
fetchData();
}, []);
return ( return (
<section className="testimonials style-3" data-scroll-index="1"> <section className="testimonials style-3" data-scroll-index="1">
<div className="container"> <div className="container">
<div className="content section-padding"> <div className="content section-padding">
<div className="section-head style-3"> <div className="section-head style-3">
<h3>Loved By Thousand <span>Clients</span></h3> <h3> {intl.formatMessage({ id: "loved_thousands" })} <span>{intl.formatMessage({ id: "clients" })}</span></h3>
</div> </div>
<div className="testimonial-slider style-3"> <div className="testimonial-slider style-3">
<Swiper <Swiper

View File

@ -2,21 +2,25 @@
{ {
"image": "/assets/img/projects/3.png", "image": "/assets/img/projects/3.png",
"title": "Catty Boxes NFT Blockchain", "title": "Catty Boxes NFT Blockchain",
"description": "Game Development" "description": "Game Development",
"link":"http://surteloya.com"
}, },
{ {
"image": "/assets/img/projects/4.png", "image": "/assets/img/projects/4.png",
"title": "Catty Boxes NFT Blockchain", "title": "Catty Boxes NFT Blockchain",
"description": "Game Development" "description": "Game Development",
"link":"http://surteloya.com"
}, },
{ {
"image": "/assets/img/projects/5.png", "image": "/assets/img/projects/5.png",
"title": "Catty Boxes NFT Blockchain", "title": "Catty Boxes NFT Blockchain",
"description": "Game Development" "description": "Game Development",
"link":"http://surteloya.com"
}, },
{ {
"image": "/assets/img/projects/6.png", "image": "/assets/img/projects/6.png",
"title": "Catty Boxes NFT Blockchain", "title": "Catty Boxes NFT Blockchain",
"description": "Game Development" "description": "Game Development",
"link":"http://surteloya.com"
} }
] ]

30
src/intl/en.json Normal file
View File

@ -0,0 +1,30 @@
{
"welcome": "Welcome to our website",
"features": "Features",
"get_free_quotes": "Get Free Quotes!",
"built_with_best_features": "Built With Best Features & Good UX",
"header_1":" Make your life easier with help from <span>Nextream</span>",
"header_2":"We help businesses elevate their value through custom software development, product design, QA & consultancy services.",
"header_3":"Well contact back in 24h",
"inquiry_about":"Your inquiry about",
"request_a_consultation":"Request a consultation!",
"about_title1":"<h3>Nextreams <span>Mission & Vision</span></h3>",
"about_title2":"“It is only when they go wrong that machines remind you how powerful they are.”",
"about_title3":" Nextream Co is the partner of choice for many of the worlds leading enterprises, SMEs and technology challengers. We help businesses elevate their value through custom software development, product design, QA and consultancy services.",
"about_title4":" Nextream specializes in technological and IT-related services such as product engineering, warranty management, building cloud, etc.",
"about_title5":"<h3>Nextreams <span>Technology</span></h3>",
"about_title6":"Our team can assist you in transforming your business through latest tech capabilities to stay ahead of the curve.",
"about_title7":"How We Works",
"more_about":"More About Us",
"loved_thousands":"Loved By Thousand",
"clients":"Clients",
"our_main":"Our Main",
"services":"Services",
"see_full_services":"See Full Services",
"see_projects":"See Projects",
"our_featured":"Our Featured",
"projects":"Projects",
"see_all_projects":"See All Projects",
"blog_title1":"<h3>Nextream's <span>Journal</span></h3>",
"all_articles":"All Articles"
}

31
src/intl/es.json Normal file
View File

@ -0,0 +1,31 @@
{
"welcome": "Bienvenido a nuestro sitio web",
"features": "Características",
"get_free_quotes": "¡Obtenga una cotización gratuita!",
"built_with_best_features": "Construido con las mejores características y buena UX",
"header_1":"Haz tu vida más fácil con la ayuda de <span>Nextream</span>",
"header_2":"Ayudamos a las empresas a aumentar su valor mediante el desarrollo de software personalizado, diseño de productos, control de calidad y servicios de consultoría.",
"header_3":"Nos pondremos en contacto en 24h.",
"inquiry_about":"Su consulta sobre",
"request_a_consultation":"¡Solicite una consulta!",
"your_email":"Su correo electrónico *",
"about_title1":"<h3>Nextreams <span>Misión & Vision</span></h3>",
"about_title2":"“Sólo cuando funcionan mal las máquinas te recuerdan lo poderosas que son.”",
"about_title3":" Nextream Co es el socio elegido por muchas de las empresas, pymes y desafíos tecnológicos líderes del mundo. Ayudamos a las empresas a aumentar su valor mediante el desarrollo de software personalizado, diseño de productos, control de calidad y servicios de consultoría.",
"about_title4":" Nextream está especializado en servicios tecnológicos y relacionados con TI como ingeniería de producto, gestión de garantías, construcción de nube, etc.",
"about_title5":"<h3>Nextreams <span>Tecnología</span></h3>",
"about_title6":"Nuestro equipo puede ayudarlo a transformar su negocio a través de las últimas capacidades tecnológicas para mantenerse a la vanguardia.",
"about_title7":"Cómo trabajamos",
"more_about":"Más sobre nosotros",
"loved_thousands":"Amado por miles de",
"clients":"Clientes",
"our_main":"Nuestros principales",
"services":"Servicios",
"see_full_services":"Ver los Servicios",
"see_projects":"Ver el proyecto",
"our_featured":"Nuestros Actuales",
"projects":"Proyectos",
"see_all_projects":"Ver todo los proyectos",
"blog_title1":"<h3>Nextream <span>Noticias</span></h3> ",
"all_articles":"Ver artículos"
}

View File

@ -1,59 +1,47 @@
import React, { useEffect } from 'react'; import React from 'react';
//= Layout //= Layout
import PreviewLayout from 'layouts/Preview'; import MainLayout from 'layouts/Main';
//= Components //= Components
import Header from 'components/Preview/Header'; import Navbar from 'components/Navbars/SoftwareNav/OnePageNav';
import Features from 'components/Preview/Features'; import Header from 'components/Software/Header';
import Demos from 'components/Preview/Demos'; import Testimonials from 'components/Software/Testimonials';
import InnerPages from 'components/Preview/InnerPages'; import Services from 'components/Software/Services';
import BuyNow from 'components/Preview/BuyNow'; import About from 'components/Software/About';
import Portfolio from 'components/Preview/Portfolio'; import Projects from 'components/Software/Projects';
import Codei from 'components/Preview/Codei'; import Pricing from 'components/Software/Pricing';
import BestFeatures from 'components/Preview/BestFeatures'; import Team from 'components/Software/Team';
import Responsive from 'components/Preview/Responsive'; import Blog from 'components/Software/Blog';
import AllFeatures from 'components/Preview/AllFeatures'; import ChatBanner from 'components/Software/ChatBanner';
import Testimonials from 'components/Preview/Testimonials'; import Footer from 'components/Software/Footer';
import CallToAction from 'components/Preview/CallToAction';
//= Scripts
import { fixPreviewStylesheetOrder } from 'common/fixStylesheetsOrder';
const LandingPreview = () => {
useEffect(() => {
document.body.classList.add('index-main');
return () => document.body.classList.remove('index-main');
}, []);
useEffect(() => {
fixPreviewStylesheetOrder();
}, []);
const HomeSoftwareCompanyOnePage = () => {
return ( return (
<PreviewLayout> <MainLayout>
<Navbar />
<Header /> <Header />
<Features /> <main>
<Demos /> <Testimonials />
<InnerPages /> <Services />
<BuyNow /> <About />
<Portfolio /> <Projects />
<Codei /> <Pricing />
<BestFeatures /> <Team />
<Responsive /> <Blog />
<AllFeatures /> <ChatBanner />
<Testimonials /> </main>
<CallToAction /> <Footer />
</PreviewLayout> </MainLayout>
); )
}; }
export const Head = () => { export const Head = () => {
return ( return (
<> <>
<title>Iteck - Preview</title> <title>Nextream - Tech & IT Solutions</title>
<link rel="stylesheet" href="/assets/css/lib/bootstrap.min.css" /> <link rel="stylesheet" href="/assets/css/lib/bootstrap.min.css" />
<link rel="stylesheet" href="/assets/css/style.css" /> <link rel="stylesheet" href="/assets/css/style.css" />
<link rel="stylesheet" href="/landing-preview/css/preview-style.css" />
</> </>
); )
}; }
export default LandingPreview; export default HomeSoftwareCompanyOnePage;

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

After

Width:  |  Height:  |  Size: 134 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 88 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

28
static/data/about.json Normal file
View File

@ -0,0 +1,28 @@
{
"about": {
"numbers": [
{
"value": "1,2k",
"title": "Projects done"
},
{
"value": "165",
"title": "satisfied clients"
},
{
"value": "26",
"title": "awards winner"
},
{
"value": "15",
"title": "years of experience"
}
],
"features": [
"Latest IT Solutions & Integration With Blockchain",
"Over 100+ Payment Gateways Support",
"AI Machine & Deep Learning",
"Dedicated Support 24/7"
]
}
}

66
static/data/blog.json Normal file
View File

@ -0,0 +1,66 @@
{
"blog":{
"blogs": [
{
"cover": "/assets/img/blog/6.png",
"type": "tips & tricks",
"time": "12 Days ago",
"title": "How To Become A Python Develop Expert",
"userImage": "a",
"username": "Admin",
"comments": "24",
"views": "774k"
},
{
"cover": "/assets/img/blog/7.png",
"type": "News",
"time": "5 Days ago",
"title": "AI With Fingerprint",
"userImage": "a",
"username": "David",
"comments": "24",
"views": "774k"
},
{
"cover": "/assets/img/blog/8.png",
"type": "tips & tricks",
"time": "1 month ago",
"title": "Solutions For Big Data Issue, Expert Perspective",
"userImage": "a",
"username": "Moussa",
"comments": "24",
"views": "774k"
}
],
"faq": [
{
"question": "How Benefit That I Got When Choose Basic Plan?",
"answer": "Through the collaboration with customers in discussing needs and demand, we're able to attain mutual understanding, gain customer trust to offer appropriate advice"
},
{
"question": "Can I Pay With Paypal or Payoneer?",
"answer": "Through the collaboration with customers in discussing needs and demand, we're able to attain mutual understanding, gain customer trust to offer appropriate advice"
},
{
"question": "How Long For A Standard Project?",
"answer": "Through the collaboration with customers in discussing needs and demand, we're able to attain mutual understanding, gain customer trust to offer appropriate advice"
},
{
"question": "How About Data Security & NDA Agreement?",
"answer": "Through the collaboration with customers in discussing needs and demand, we're able to attain mutual understanding, gain customer trust to offer appropriate advice"
},
{
"question": "Can We Make An Own Tailored-AI ?",
"answer": "Through the collaboration with customers in discussing needs and demand, we're able to attain mutual understanding, gain customer trust to offer appropriate advice"
}
],
"clients": [
"/assets/img/logos/1.png",
"/assets/img/logos/2.png",
"/assets/img/logos/3.png",
"/assets/img/logos/4.png",
"/assets/img/logos/5.png",
"/assets/img/logos/6.png"
]
}
}

20
static/data/footer.json Normal file
View File

@ -0,0 +1,20 @@
{
"address": "223 Thatcher Road St, Brookly, Manhattan, NY 10463, United States",
"phone": "+031 5689 89 98",
"email": "contact@Itecksolution.co",
"usefulLinks": [
{ "link": "/home-saas-technology", "title": "Home" },
{ "link": "/page-about-5", "title": "About Iteck" },
{ "link": "/page-portfolio-5", "title": "Projects" },
{ "link": "/page-about-5", "title": "How It Works" },
{ "link": "/page-blog-5", "title": "Blog" },
{ "link": "/page-contact-5", "title": "Contact" }
],
"services": [
{ "link": "/page-services-5", "title": "It Consultation" },
{ "link": "/page-services-5", "title": "Software Development" },
{ "link": "/page-services-5", "title": "AI Machine Learning" },
{ "link": "/page-services-5", "title": "Data Security" },
{ "link": "/page-services-5", "title": "Cloud Services" }
]
}

View File

@ -0,0 +1,64 @@
{
"es":{
"welcome": "Bienvenido a nuestro sitio web",
"features": "Características",
"get_free_quotes": "¡Obtenga una cotización gratuita!",
"built_with_best_features": "Construido con las mejores características y buena UX",
"header_1":"Haz tu vida más fácil con la ayuda de <span>Nextream</span>",
"header_2":"Ayudamos a las empresas a aumentar su valor mediante el desarrollo de software personalizado, diseño de productos, control de calidad y servicios de consultoría.",
"header_3":"Nos pondremos en contacto en 24h.",
"inquiry_about":"Su consulta sobre",
"request_a_consultation":"¡Solicite una consulta!",
"your_email":"Su correo electrónico *",
"about_title1":"<h3>Nextreams <span>Misión & Vision</span></h3>",
"about_title2":"“Sólo cuando funcionan mal las máquinas te recuerdan lo poderosas que son.”",
"about_title3":" Nextream Co es el socio elegido por muchas de las empresas, pymes y desafíos tecnológicos líderes del mundo. Ayudamos a las empresas a aumentar su valor mediante el desarrollo de software personalizado, diseño de productos, control de calidad y servicios de consultoría.",
"about_title4":" Nextream está especializado en servicios tecnológicos y relacionados con TI como ingeniería de producto, gestión de garantías, construcción de nube, etc.",
"about_title5":"<h3>Nextreams <span>Tecnología</span></h3>",
"about_title6":"Nuestro equipo puede ayudarlo a transformar su negocio a través de las últimas capacidades tecnológicas para mantenerse a la vanguardia.",
"about_title7":"Cómo trabajamos",
"more_about":"Más sobre nosotros",
"loved_thousands":"Amado por miles de",
"clients":"Clientes",
"our_main":"Nuestros principales",
"services":"Servicios",
"see_full_services":"Ver los Servicios",
"see_projects":"Ver el proyecto",
"our_featured":"Nuestros Actuales",
"projects":"Proyectos",
"see_all_projects":"Ver todo los proyectos",
"blog_title1":"<h3>Nextream <span>Noticias</span></h3> ",
"all_articles":"Ver artículos"
},
"en": {
"welcome": "Welcome to our website",
"features": "Features",
"get_free_quotes": "Get Free Quotes!",
"built_with_best_features": "Built With Best Features & Good UX",
"header_1":" Make your life easier with help from <span>Nextream</span>",
"header_2":"We help businesses elevate their value through custom software development, product design, QA & consultancy services.",
"header_3":"Well contact back in 24h",
"inquiry_about":"Your inquiry about",
"request_a_consultation":"Request a consultation!",
"about_title1":"<h3>Nextreams <span>Mission & Vision</span></h3>",
"about_title2":"“It is only when they go wrong that machines remind you how powerful they are.”",
"about_title3":" Nextream Co is the partner of choice for many of the worlds leading enterprises, SMEs and technology challengers. We help businesses elevate their value through custom software development, product design, QA and consultancy services.",
"about_title4":" Nextream specializes in technological and IT-related services such as product engineering, warranty management, building cloud, etc.",
"about_title5":"<h3>Nextreams <span>Technology</span></h3>",
"about_title6":"Our team can assist you in transforming your business through latest tech capabilities to stay ahead of the curve.",
"about_title7":"How We Works",
"more_about":"More About Us",
"loved_thousands":"Loved By Thousand",
"clients":"Clients",
"our_main":"Our Main",
"services":"Services",
"see_full_services":"See Full Services",
"see_projects":"See Projects",
"our_featured":"Our Featured",
"projects":"Projects",
"see_all_projects":"See All Projects",
"blog_title1":"<h3>Nextream's <span>Journal</span></h3>",
"all_articles":"All Articles"
}
}

25
static/data/plans.json Normal file
View File

@ -0,0 +1,25 @@
[
{
"title": "Standard",
"description": "Basic features",
"price": "$29",
"features": [
"3 Projects",
"6 Months Support & SEO",
"Basic Dashboard"
]
},
{
"title": "Pro",
"recommended": true,
"description": "Premium features",
"price": "$59",
"features": [
"Unlimited Projects",
"Lifetime Support & SEO Experts Consult",
"Advance Dashboard",
"Data Security & Backup",
"Cloud Hosting & Domain"
]
}
]

26
static/data/projects.json Normal file
View File

@ -0,0 +1,26 @@
[
{
"image": "/assets/img/projects/3.png",
"title": "Catty Boxes NFT Blockchain",
"description": "Game Development",
"link":"http://surteloya.com"
},
{
"image": "/assets/img/projects/4.png",
"title": "Catty Boxes NFT Blockchain",
"description": "Game Development",
"link":"http://surteloya.com"
},
{
"image": "/assets/img/projects/5.png",
"title": "Catty Boxes NFT Blockchain",
"description": "Game Development",
"link":"http://surteloya.com"
},
{
"image": "/assets/img/projects/6.png",
"title": "Catty Boxes NFT Blockchain",
"description": "Game Development",
"link":"http://surteloya.com"
}
]

22
static/data/services.json Normal file
View File

@ -0,0 +1,22 @@
[
{
"icon": "/assets/img/icons/serv_icons/10.png",
"title": "IT Consultation",
"details": "We provide best IT solutions for any type of business as stragegy, management."
},
{
"icon": "/assets/img/icons/serv_icons/11.png",
"title": "Software Development",
"details": "We bring methods for design and development as website, mobile app, etc"
},
{
"icon": "/assets/img/icons/serv_icons/12.png",
"title": "Data Security",
"details": "Analys & Management Big Data alway big issue of companies management."
},
{
"icon": "/assets/img/icons/serv_icons/13.png",
"title": "AI Machine Learning",
"details": "Turn AI & Machine Learning in the life. Enhance the quality and the effeciency"
}
]

27
static/data/team.json Normal file
View File

@ -0,0 +1,27 @@
[
{
"picture": "/assets/img/team/1.jpeg",
"name": "Michael Edwards",
"position": "CEO Founder"
},
{
"picture": "/assets/img/team/2.jpeg",
"name": "Bobby Kane",
"position": "CTO"
},
{
"picture": "/assets/img/team/3.jpeg",
"name": "Robert Downey Jr",
"position": "Project Manager"
},
{
"picture": "/assets/img/team/4.jpeg",
"name": "Andrew Robertson",
"position": "Marketing Leader"
},
{
"picture": "/assets/img/team/5.jpeg",
"name": "Alexander Avery",
"position": "Creative Director"
}
]

View File

@ -0,0 +1,22 @@
{
"testimonials": [
{
"text": "“We encountered a problem with processing big data and after only 1 week, all fixed, professional, fast & affordable price!”",
"image": "/assets/img/testimonials/testi.jpeg",
"author": "Robert Downey Jr",
"positon": "Technical Leader at Airbnb"
},
{
"text": "“Iteck is 1st our choice for cloud service methods. Extremely security and fast support.”",
"image": "/assets/img/testimonials/user1.jpeg",
"author": "Conor McGregor",
"positon": "CTO at IBM"
},
{
"text": "“Itecks Experts really is amazing! high speciality, professional and friendly. Our profit increased so much. Really very satisfied!”",
"image": "/assets/img/testimonials/user2.jpeg",
"author": "Lucas Digne",
"positon": "Product Management at Invisionapp"
}
]
}