Compare commits
10
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2b89661b02 | ||
|
|
8278d62e1c | ||
|
|
ae34843303 | ||
|
|
0f32c5441d | ||
|
|
94908040dd | ||
|
|
74769f78ce | ||
|
|
d5a14354ec | ||
|
|
c5d921e470 | ||
|
|
3cbf508664 | ||
|
|
601d5ac89d |
+13
@@ -0,0 +1,13 @@
|
||||
FROM node:18-alpine
|
||||
|
||||
# Path: /app
|
||||
|
||||
WORKDIR /lk-results/
|
||||
|
||||
COPY . .
|
||||
|
||||
RUN npm install
|
||||
RUN npm run build
|
||||
RUN npm install -g serve
|
||||
|
||||
CMD ["serve", "-s", "build"]
|
||||
+1
-1
@@ -13,7 +13,7 @@
|
||||
></script>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<link rel="icon" href="./logo.ico" />
|
||||
<title>LK Solutions</title>
|
||||
<title>LK Results</title>
|
||||
</head>
|
||||
<body>
|
||||
<div id="root"></div>
|
||||
|
||||
Generated
+169
-7
@@ -8,14 +8,20 @@
|
||||
"name": "marketing-business-frontend",
|
||||
"version": "0.0.0",
|
||||
"dependencies": {
|
||||
"@emailjs/browser": "^4.3.3",
|
||||
"@headlessui/react": "^1.7.18",
|
||||
"@heroicons/react": "^2.1.3",
|
||||
"i18next": "^23.11.5",
|
||||
"i18next-browser-languagedetector": "^8.0.0",
|
||||
"i18next-http-backend": "^2.5.2",
|
||||
"localforage": "^1.10.0",
|
||||
"match-sorter": "^6.3.4",
|
||||
"react": "^18.2.0",
|
||||
"react-dom": "^18.2.0",
|
||||
"react-i18next": "^14.1.2",
|
||||
"react-icons": "^5.0.1",
|
||||
"react-router-dom": "^6.22.3",
|
||||
"react-toastify": "^10.0.5",
|
||||
"sort-by": "^0.0.2"
|
||||
},
|
||||
"devDependencies": {
|
||||
@@ -424,6 +430,15 @@
|
||||
"node": ">=6.9.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@emailjs/browser": {
|
||||
"version": "4.3.3",
|
||||
"resolved": "https://registry.npmjs.org/@emailjs/browser/-/browser-4.3.3.tgz",
|
||||
"integrity": "sha512-ltpt2S/WVREIBXptxYAVYBvXb2O6yTUYiRUWF8OLikMxlmiGsIgKpgHppikNd4Df0uAav7jCsQKcOJ3TJFUx5g==",
|
||||
"license": "BSD-3-Clause",
|
||||
"engines": {
|
||||
"node": ">=14.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@esbuild/aix-ppc64": {
|
||||
"version": "0.20.2",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz",
|
||||
@@ -1798,12 +1813,13 @@
|
||||
}
|
||||
},
|
||||
"node_modules/braces": {
|
||||
"version": "3.0.2",
|
||||
"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
|
||||
"integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
|
||||
"version": "3.0.3",
|
||||
"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
|
||||
"integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"fill-range": "^7.0.1"
|
||||
"fill-range": "^7.1.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=8"
|
||||
@@ -1934,6 +1950,15 @@
|
||||
"resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz",
|
||||
"integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA=="
|
||||
},
|
||||
"node_modules/clsx": {
|
||||
"version": "2.1.1",
|
||||
"resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz",
|
||||
"integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=6"
|
||||
}
|
||||
},
|
||||
"node_modules/color-convert": {
|
||||
"version": "1.9.3",
|
||||
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
|
||||
@@ -1970,6 +1995,14 @@
|
||||
"integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/cross-fetch": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.0.0.tgz",
|
||||
"integrity": "sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g==",
|
||||
"dependencies": {
|
||||
"node-fetch": "^2.6.12"
|
||||
}
|
||||
},
|
||||
"node_modules/cross-spawn": {
|
||||
"version": "7.0.3",
|
||||
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
|
||||
@@ -2485,10 +2518,11 @@
|
||||
}
|
||||
},
|
||||
"node_modules/fill-range": {
|
||||
"version": "7.0.1",
|
||||
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
|
||||
"integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
|
||||
"version": "7.1.1",
|
||||
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
|
||||
"integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"to-regex-range": "^5.0.1"
|
||||
},
|
||||
@@ -2709,6 +2743,52 @@
|
||||
"node": ">= 0.4"
|
||||
}
|
||||
},
|
||||
"node_modules/html-parse-stringify": {
|
||||
"version": "3.0.1",
|
||||
"resolved": "https://registry.npmjs.org/html-parse-stringify/-/html-parse-stringify-3.0.1.tgz",
|
||||
"integrity": "sha512-KknJ50kTInJ7qIScF3jeaFRpMpE8/lfiTdzf/twXyPBLAGrLRTmkz3AdTnKeh40X8k9L2fdYwEp/42WGXIRGcg==",
|
||||
"dependencies": {
|
||||
"void-elements": "3.1.0"
|
||||
}
|
||||
},
|
||||
"node_modules/i18next": {
|
||||
"version": "23.11.5",
|
||||
"resolved": "https://registry.npmjs.org/i18next/-/i18next-23.11.5.tgz",
|
||||
"integrity": "sha512-41pvpVbW9rhZPk5xjCX2TPJi2861LEig/YRhUkY+1FQ2IQPS0bKUDYnEqY8XPPbB48h1uIwLnP9iiEfuSl20CA==",
|
||||
"funding": [
|
||||
{
|
||||
"type": "individual",
|
||||
"url": "https://locize.com"
|
||||
},
|
||||
{
|
||||
"type": "individual",
|
||||
"url": "https://locize.com/i18next.html"
|
||||
},
|
||||
{
|
||||
"type": "individual",
|
||||
"url": "https://www.i18next.com/how-to/faq#i18next-is-awesome.-how-can-i-support-the-project"
|
||||
}
|
||||
],
|
||||
"dependencies": {
|
||||
"@babel/runtime": "^7.23.2"
|
||||
}
|
||||
},
|
||||
"node_modules/i18next-browser-languagedetector": {
|
||||
"version": "8.0.0",
|
||||
"resolved": "https://registry.npmjs.org/i18next-browser-languagedetector/-/i18next-browser-languagedetector-8.0.0.tgz",
|
||||
"integrity": "sha512-zhXdJXTTCoG39QsrOCiOabnWj2jecouOqbchu3EfhtSHxIB5Uugnm9JaizenOy39h7ne3+fLikIjeW88+rgszw==",
|
||||
"dependencies": {
|
||||
"@babel/runtime": "^7.23.2"
|
||||
}
|
||||
},
|
||||
"node_modules/i18next-http-backend": {
|
||||
"version": "2.5.2",
|
||||
"resolved": "https://registry.npmjs.org/i18next-http-backend/-/i18next-http-backend-2.5.2.tgz",
|
||||
"integrity": "sha512-+K8HbDfrvc1/2X8jpb7RLhI9ZxBDpx3xogYkQwGKlWAUXLSEGXzgdt3EcUjLlBCdMwdQY+K+EUF6oh8oB6rwHw==",
|
||||
"dependencies": {
|
||||
"cross-fetch": "4.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/ignore": {
|
||||
"version": "5.3.1",
|
||||
"resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz",
|
||||
@@ -2823,6 +2903,7 @@
|
||||
"resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
|
||||
"integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=0.12.0"
|
||||
}
|
||||
@@ -3118,6 +3199,25 @@
|
||||
"integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/node-fetch": {
|
||||
"version": "2.7.0",
|
||||
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz",
|
||||
"integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==",
|
||||
"dependencies": {
|
||||
"whatwg-url": "^5.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": "4.x || >=6.0.0"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"encoding": "^0.1.0"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"encoding": {
|
||||
"optional": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"node_modules/node-releases": {
|
||||
"version": "2.0.14",
|
||||
"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz",
|
||||
@@ -3541,6 +3641,27 @@
|
||||
"react": "^18.2.0"
|
||||
}
|
||||
},
|
||||
"node_modules/react-i18next": {
|
||||
"version": "14.1.2",
|
||||
"resolved": "https://registry.npmjs.org/react-i18next/-/react-i18next-14.1.2.tgz",
|
||||
"integrity": "sha512-FSIcJy6oauJbGEXfhUgVeLzvWBhIBIS+/9c6Lj4niwKZyGaGb4V4vUbATXSlsHJDXXB+ociNxqFNiFuV1gmoqg==",
|
||||
"dependencies": {
|
||||
"@babel/runtime": "^7.23.9",
|
||||
"html-parse-stringify": "^3.0.1"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"i18next": ">= 23.2.3",
|
||||
"react": ">= 16.8.0"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"react-dom": {
|
||||
"optional": true
|
||||
},
|
||||
"react-native": {
|
||||
"optional": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"node_modules/react-icons": {
|
||||
"version": "5.0.1",
|
||||
"resolved": "https://registry.npmjs.org/react-icons/-/react-icons-5.0.1.tgz",
|
||||
@@ -3588,6 +3709,19 @@
|
||||
"react-dom": ">=16.8"
|
||||
}
|
||||
},
|
||||
"node_modules/react-toastify": {
|
||||
"version": "10.0.5",
|
||||
"resolved": "https://registry.npmjs.org/react-toastify/-/react-toastify-10.0.5.tgz",
|
||||
"integrity": "sha512-mNKt2jBXJg4O7pSdbNUfDdTsK9FIdikfsIE/yUCxbAEXl4HMyJaivrVFcn3Elvt5xvCQYhUZm+hqTIu1UXM3Pw==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"clsx": "^2.1.0"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"react": ">=18",
|
||||
"react-dom": ">=18"
|
||||
}
|
||||
},
|
||||
"node_modules/read-cache": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
|
||||
@@ -4073,6 +4207,7 @@
|
||||
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
|
||||
"integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"is-number": "^7.0.0"
|
||||
},
|
||||
@@ -4080,6 +4215,11 @@
|
||||
"node": ">=8.0"
|
||||
}
|
||||
},
|
||||
"node_modules/tr46": {
|
||||
"version": "0.0.3",
|
||||
"resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
|
||||
"integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw=="
|
||||
},
|
||||
"node_modules/ts-api-utils": {
|
||||
"version": "1.2.1",
|
||||
"resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.2.1.tgz",
|
||||
@@ -4235,6 +4375,28 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"node_modules/void-elements": {
|
||||
"version": "3.1.0",
|
||||
"resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz",
|
||||
"integrity": "sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==",
|
||||
"engines": {
|
||||
"node": ">=0.10.0"
|
||||
}
|
||||
},
|
||||
"node_modules/webidl-conversions": {
|
||||
"version": "3.0.1",
|
||||
"resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
|
||||
"integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ=="
|
||||
},
|
||||
"node_modules/whatwg-url": {
|
||||
"version": "5.0.0",
|
||||
"resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
|
||||
"integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
|
||||
"dependencies": {
|
||||
"tr46": "~0.0.3",
|
||||
"webidl-conversions": "^3.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/which": {
|
||||
"version": "2.0.2",
|
||||
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
|
||||
|
||||
@@ -10,14 +10,20 @@
|
||||
"preview": "vite preview"
|
||||
},
|
||||
"dependencies": {
|
||||
"@emailjs/browser": "^4.3.3",
|
||||
"@headlessui/react": "^1.7.18",
|
||||
"@heroicons/react": "^2.1.3",
|
||||
"i18next": "^23.11.5",
|
||||
"i18next-browser-languagedetector": "^8.0.0",
|
||||
"i18next-http-backend": "^2.5.2",
|
||||
"localforage": "^1.10.0",
|
||||
"match-sorter": "^6.3.4",
|
||||
"react": "^18.2.0",
|
||||
"react-dom": "^18.2.0",
|
||||
"react-i18next": "^14.1.2",
|
||||
"react-icons": "^5.0.1",
|
||||
"react-router-dom": "^6.22.3",
|
||||
"react-toastify": "^10.0.5",
|
||||
"sort-by": "^0.0.2"
|
||||
},
|
||||
"devDependencies": {
|
||||
|
||||
@@ -0,0 +1,174 @@
|
||||
{
|
||||
"navbar": {
|
||||
"services": "Services",
|
||||
"optimization": "Optimization",
|
||||
"advantages": "Advantages",
|
||||
"contact": "Contact"
|
||||
},
|
||||
"hero": {
|
||||
"heading": {
|
||||
"part1": "GROW YOUR",
|
||||
"part2": "BUSINESS"
|
||||
},
|
||||
"subheading": {
|
||||
"part1": "We do all the digital footprint for you,",
|
||||
"part2": "so you can focus on what's important!"
|
||||
},
|
||||
"button": "Yes, I want that!"
|
||||
},
|
||||
"services": {
|
||||
"heading": {
|
||||
"part1": "We've Got Your",
|
||||
"part2": "Footprint",
|
||||
"part3": "Bullsh",
|
||||
"part4": "*",
|
||||
"part5": "t Covered!"
|
||||
},
|
||||
"subheading": "Unlock the full potential of your business with our services.",
|
||||
"cards": {
|
||||
"marketing": {
|
||||
"card1": {
|
||||
"title": "Analyze",
|
||||
"description": "Problem"
|
||||
},
|
||||
"card2": {
|
||||
"title": "Create",
|
||||
"description": "Strategy"
|
||||
},
|
||||
"card3": {
|
||||
"title": "Scale",
|
||||
"description": "Company"
|
||||
},
|
||||
"card4": {
|
||||
"title": "Execute",
|
||||
"description": "Plan"
|
||||
}
|
||||
},
|
||||
"website": {
|
||||
"card1": {
|
||||
"title": "Idealize",
|
||||
"description": "Website"
|
||||
},
|
||||
"card2": {
|
||||
"title": "Design",
|
||||
"description": "Website"
|
||||
},
|
||||
"card3": {
|
||||
"title": "Develop",
|
||||
"description": "Website"
|
||||
},
|
||||
"card4": {
|
||||
"title": "Build",
|
||||
"description": "Website"
|
||||
}
|
||||
},
|
||||
"social": {
|
||||
"card1": {
|
||||
"title": "Analyze",
|
||||
"description": "Algorithm"
|
||||
},
|
||||
"card2": {
|
||||
"title": "Schedule",
|
||||
"description": "Content"
|
||||
},
|
||||
"card3": {
|
||||
"title": "Target",
|
||||
"description": "Audience"
|
||||
},
|
||||
"card4": {
|
||||
"title": "Expand",
|
||||
"description": "Platforms"
|
||||
}
|
||||
},
|
||||
"media": {
|
||||
"card1": {
|
||||
"title": "Envision",
|
||||
"description": "Prespective"
|
||||
},
|
||||
"card2": {
|
||||
"title": "Capture",
|
||||
"description": "Moments"
|
||||
},
|
||||
"card3": {
|
||||
"title": "Edit",
|
||||
"description": "Moments"
|
||||
},
|
||||
"card4": {
|
||||
"title": "Publish",
|
||||
"description": "Content"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"optimization": {
|
||||
"heading": {
|
||||
"part1": "So How Do You Optimize",
|
||||
"part2": "Your Business?"
|
||||
},
|
||||
"cards": {
|
||||
"card1": {
|
||||
"title": "HANDLE EVERYTHING YOURSELF?",
|
||||
"description": "That's fine if you have very little on your plate.\n\nBut if you're pretty swamped already... this isn't a viable option."
|
||||
},
|
||||
"card2": {
|
||||
"title": "NEW STAFF?",
|
||||
"description": "Finding good people isn't easy. Training and onboarding staff is costly.\n\n And even if you do find the perfect man or woman for the position... you're still depending on one person!"
|
||||
},
|
||||
"card3": {
|
||||
"title": "HIRE AN AGENCY?",
|
||||
"description": "Don't have a marketing budget of tens of thousands of euros?\n\n Then your account could end up being managed by the intern of the assistants' assistant.\n\n Not exactly optimal."
|
||||
}
|
||||
}
|
||||
},
|
||||
"results": {
|
||||
"heading": {
|
||||
"part1": "Ok... So What Makes",
|
||||
"part2": "Us Different?"
|
||||
},
|
||||
"subheading": "We have helped many businesses grow and expand their digital footprint.",
|
||||
"cards": {
|
||||
"card1": {
|
||||
"title": "GUARANTEED",
|
||||
"description": "We only win if you win!\nThat’s the basis for a good\npartnership.\nYou won’t carry all the risk,\nwe’ll share it."
|
||||
},
|
||||
"card2": {
|
||||
"title": "RESULTS",
|
||||
"description": "Our first priority is to get\nyou results.\n\nLess talk, more walk."
|
||||
},
|
||||
"card3": {
|
||||
"title": "LOCAL",
|
||||
"description": "We’re not a anonymous call\ncenter. We’re a local\ncompany, so you’ll be able to\nreach us when you need us"
|
||||
},
|
||||
"card4": {
|
||||
"title": "SPECIALIZED",
|
||||
"description": "Jack of all trades... master\nof none. Specialization\nworks. We work with\nindustries we know, so we\ncan guarantee results."
|
||||
}
|
||||
}
|
||||
},
|
||||
"contact": {
|
||||
"heading": {
|
||||
"part1": "Contact Us For",
|
||||
"part2": "A",
|
||||
"part3": "Free",
|
||||
"part4": "Analysis"
|
||||
},
|
||||
"subheading": {
|
||||
"part1": "Would you like to know what we could do for you? Fill out the form ad we’ll get",
|
||||
"part2": "back to you No obligation, no annoying tactics. We won’t waste your time."
|
||||
},
|
||||
"form": {
|
||||
"name": "Name",
|
||||
"email": "Email",
|
||||
"company": "Company",
|
||||
"phone": "Phone",
|
||||
"question": "What is your most important question?",
|
||||
"message": "Message",
|
||||
"button": "Send"
|
||||
},
|
||||
"toasts": {
|
||||
"success": "Your message has been sent successfully!",
|
||||
"error": "An error occurred while sending your message. Please try again later.",
|
||||
"empty": "Please fill out all the fields before sending the message."
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,174 @@
|
||||
{
|
||||
"navbar": {
|
||||
"services": "Serviços",
|
||||
"optimization": "Otimização",
|
||||
"advantages": "Vantagens",
|
||||
"contact": "Contacto"
|
||||
},
|
||||
"hero": {
|
||||
"heading": {
|
||||
"part1": "CRESÇA O",
|
||||
"part2": "SEU NEGÓCIO"
|
||||
},
|
||||
"subheading": {
|
||||
"part1": "Nós tratamos de toda a sua presença digital,",
|
||||
"part2": "para que possa concentrar-se no que é importante!"
|
||||
},
|
||||
"button": "Eu quero isto!"
|
||||
},
|
||||
"services": {
|
||||
"heading": {
|
||||
"part1": "Nós Cuidamos Da Sua",
|
||||
"part2": "Presença",
|
||||
"part3": "Digital",
|
||||
"part4": " ",
|
||||
"part5": "Por Completo!"
|
||||
},
|
||||
"subheading": "Desbloqueie todo o potencial do seu negócio com os nossos serviços.",
|
||||
"cards": {
|
||||
"marketing": {
|
||||
"card1": {
|
||||
"title": "Analisar",
|
||||
"description": "Problema"
|
||||
},
|
||||
"card2": {
|
||||
"title": "Criar",
|
||||
"description": "Estratégia"
|
||||
},
|
||||
"card3": {
|
||||
"title": "Escalar",
|
||||
"description": "Empresa"
|
||||
},
|
||||
"card4": {
|
||||
"title": "Executar",
|
||||
"description": "Plano"
|
||||
}
|
||||
},
|
||||
"website": {
|
||||
"card1": {
|
||||
"title": "Idealizar",
|
||||
"description": "Website"
|
||||
},
|
||||
"card2": {
|
||||
"title": "Design",
|
||||
"description": "Website"
|
||||
},
|
||||
"card3": {
|
||||
"title": "Desenvolver",
|
||||
"description": "Website"
|
||||
},
|
||||
"card4": {
|
||||
"title": "Construir",
|
||||
"description": "Website"
|
||||
}
|
||||
},
|
||||
"social": {
|
||||
"card1": {
|
||||
"title": "Analisar",
|
||||
"description": "Algoritmo"
|
||||
},
|
||||
"card2": {
|
||||
"title": "Agendar",
|
||||
"description": "Conteúdo"
|
||||
},
|
||||
"card3": {
|
||||
"title": "Segmentar",
|
||||
"description": "Audiência"
|
||||
},
|
||||
"card4": {
|
||||
"title": "Expandir",
|
||||
"description": "Plataformas"
|
||||
}
|
||||
},
|
||||
"media": {
|
||||
"card1": {
|
||||
"title": "Visualizar",
|
||||
"description": "Perspectiva"
|
||||
},
|
||||
"card2": {
|
||||
"title": "Capturar",
|
||||
"description": "Momentos"
|
||||
},
|
||||
"card3": {
|
||||
"title": "Editar",
|
||||
"description": "Momentos"
|
||||
},
|
||||
"card4": {
|
||||
"title": "Publicar",
|
||||
"description": "Conteúdo"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"optimization": {
|
||||
"heading": {
|
||||
"part1": "Portanto, Como Otimizo",
|
||||
"part2": "O Meu Negócio?"
|
||||
},
|
||||
"cards": {
|
||||
"card1": {
|
||||
"title": "TRATAR DE TUDO SOZINHO?",
|
||||
"description": "Está ótimo se tens muito pouco em mãos.\n\nMas se já estás bastante ocupado... esta não é uma opção viável."
|
||||
},
|
||||
"card2": {
|
||||
"title": "NOVA STAFF?",
|
||||
"description": "Encontrar boas pessoas não é fácil. Treinar e integrar funcionários é dispendioso.\n\n E mesmo quando encontras a pessoa perfeita para o cargo... ainda estás dependente de uma só pessoa!"
|
||||
},
|
||||
"card3": {
|
||||
"title": "CONTRATAR UMA AGÊNCIA?",
|
||||
"description": "Não tens um orçamento de dezenas de milhares de euros?\n\n Então a tua conta pode acabar a ser gerida pelo estagiário do assistente do assistente...\n\n Não é o cenário ideal."
|
||||
}
|
||||
}
|
||||
},
|
||||
"results": {
|
||||
"heading": {
|
||||
"part1": "Ok... Então O Que Nos Torna",
|
||||
"part2": "Diferentes?"
|
||||
},
|
||||
"subheading": "Ajudamos muitos negócios a crescer e expandir a sua presença digital.",
|
||||
"cards": {
|
||||
"card1": {
|
||||
"title": "GARANTIDO",
|
||||
"description": "Nós só ganhamos se você ganhar!\nEssa é a base para uma boa\nparceria.\nVocê não vai carregar todo o risco,\nnós vamos compartilhá-lo."
|
||||
},
|
||||
"card2": {
|
||||
"title": "RESULTADOS",
|
||||
"description": "A nossa primeira prioridade é obter\nresultados.\n\nMenos conversa, mais ação."
|
||||
},
|
||||
"card3": {
|
||||
"title": "LOCAL",
|
||||
"description": "Não somos um centro de chamadas anónimo. Somos uma\nempresa local, por isso poderá\ncontactar-nos quando precisar."
|
||||
},
|
||||
"card4": {
|
||||
"title": "ESPECIALIZADO",
|
||||
"description": "Faz-tudo... mestre de nada. A especialização\nfunciona. Trabalhamos com\nindústrias que conhecemos, para que possamos\ngarantir resultados."
|
||||
}
|
||||
}
|
||||
},
|
||||
"contact": {
|
||||
"heading": {
|
||||
"part1": "Contacte-nos para uma",
|
||||
"part2": "Análise",
|
||||
"part3": "Gratuita",
|
||||
"part4": ""
|
||||
},
|
||||
"subheading": {
|
||||
"part1": "Gostaria de saber o que podemos fazer por si? Preencha o formulário e nós entraremos",
|
||||
"part2": "em contacto consigo. Sem obrigações, sem táticas irritantes. Não vamos desperdiçar o seu tempo."
|
||||
},
|
||||
"form": {
|
||||
"name": "Nome",
|
||||
"email": "Email",
|
||||
"company": "Empresa",
|
||||
"phone": "Telefone",
|
||||
"question": "Qual é a sua pergunta mais importante?",
|
||||
"message": "Mensagem",
|
||||
"button": "Enviar"
|
||||
},
|
||||
"toasts": {
|
||||
"success": "A sua mensagem foi enviada com sucesso!",
|
||||
"error": "Ocorreu um erro ao enviar a sua mensagem. Por favor, tente novamente mais tarde.",
|
||||
"empty": "Por favor, preencha todos os campos antes de enviar a mensagem."
|
||||
}
|
||||
}
|
||||
}
|
||||
+2
-2
@@ -3,9 +3,9 @@ import Home from "./routes/Home";
|
||||
|
||||
export default function App() {
|
||||
return (
|
||||
<div className="font-baijam bg-gradient-to-br from-custom-bglight to-custom-bgdark min-h-screen text-white">
|
||||
<div className="font-baijam min-h-screen text-white">
|
||||
<Routes>
|
||||
<Route path="/" element={<Home />} />
|
||||
<Route path="*" element={<Home />} />
|
||||
</Routes>
|
||||
</div>
|
||||
);
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
interface IProps {
|
||||
title: string;
|
||||
description: string;
|
||||
image: string;
|
||||
}
|
||||
|
||||
const Card = ({ title, description, image }: IProps) => {
|
||||
const defaultImgClasses = `w-full h-20 mt-5`;
|
||||
const imgClasses = image ? defaultImgClasses : `${defaultImgClasses} hidden`;
|
||||
|
||||
return (
|
||||
<div className="mt-5 xl:mt-0 flex flex-1 bg-gradient-to-b from-gold-light to-gold-dark p-0.5 shadow-lg">
|
||||
<div className="w-full font-medium flex-col md:px-4 py-1 bg-gradient-to-br from-custom-bglight to-custom-bgdark">
|
||||
<object type="image/svg+xml" data={image} className={imgClasses} aria-label={title}></object>
|
||||
<h1 className="mt-2 lg:mt-6 text-3xl xl:text-5xl">{title}</h1>
|
||||
<h2 className="px-2 mb-2 mt-3 italic text-xl xl:text-3xl font-medium text-gray-300">
|
||||
{description.split("\n").map((line, i) => (
|
||||
<span key={i}>
|
||||
{line}
|
||||
<br />
|
||||
</span>
|
||||
))}
|
||||
</h2>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
export default Card;
|
||||
@@ -0,0 +1,40 @@
|
||||
import { FaFacebook, FaLinkedin, FaInstagram } from "react-icons/fa";
|
||||
import { FaXTwitter } from "react-icons/fa6";
|
||||
|
||||
const Footer = () => {
|
||||
return (
|
||||
<footer className="flex flex-col space-y-10 justify-center m-10">
|
||||
<div className="flex justify-center space-x-5">
|
||||
<a
|
||||
href="https://www.facebook.com/people/LK-Marketing/61556714037746/"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
<FaFacebook className="text-gold-light" size={30} />
|
||||
</a>
|
||||
<a
|
||||
href="https://www.linkedin.com/company/lk-results"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
<FaLinkedin className="text-gold-light" size={30} />
|
||||
</a>
|
||||
{/* <a
|
||||
href="https://instagram.com"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
<FaInstagram className="text-gold-light" size={30} />
|
||||
</a>
|
||||
<a href="https://twitter.com" target="_blank" rel="noopener noreferrer">
|
||||
<FaXTwitter className="text-gold-light" size={30} />
|
||||
</a> */}
|
||||
</div>
|
||||
<p className="text-center text-gray-400 font-medium">
|
||||
© 2024 LK Results. All rights reservered.
|
||||
</p>
|
||||
</footer>
|
||||
);
|
||||
};
|
||||
|
||||
export default Footer;
|
||||
@@ -1,45 +0,0 @@
|
||||
import HeroImg from "../../assets/HeroImg.svg";
|
||||
import Stars from "../../assets/Stars.svg";
|
||||
|
||||
const Hero = () => {
|
||||
return (
|
||||
<div className="flex flex-col lg:mt-20 lg:flex-row 1920:padding-calc items-center">
|
||||
<div className="lg:w-1/2 w-full xl:w-1/2 hidden lg:flex transform origin-left">
|
||||
<img className="items-center" src={HeroImg} alt="hero"></img>
|
||||
</div>
|
||||
<div className="justify-center items-center lg:w-1/2 xl:w-1/2">
|
||||
<div className="flex flex-col text-center lg:pt-10 lg:pr-20 lg:text-right 2xl:pr-40">
|
||||
<img
|
||||
src={Stars}
|
||||
alt="hero"
|
||||
className="md:px-0 ml-auto mr-auto lg:mr-0 lg:text-right"
|
||||
></img>
|
||||
<div>
|
||||
<h1 className="header-text">GROW YOUR</h1>
|
||||
<h1 className="header-text">BUSINESS</h1>
|
||||
<div>
|
||||
<img
|
||||
src={HeroImg}
|
||||
alt="heroSm"
|
||||
className="flex mt-6 lg:hidden"
|
||||
></img>
|
||||
</div>
|
||||
</div>
|
||||
<h2 className="italic text-lg md:text-2xl 2xl:text-3xl mt-4 md:mt-10">
|
||||
We do all the digital footprint for you,
|
||||
</h2>
|
||||
<h2 className="italic text-lg md:text-2xl 2xl:text-3xl">
|
||||
so you can focus on what's important!
|
||||
</h2>
|
||||
<div className="flex mt-5 lg:mt-12 mx-10 sm:mx-40 lg:mx-0 lg:ml-auto rounded-xl bg-gradient-to-br from-gold-light to-gold-dark p-0.5 shadow-lg">
|
||||
<button className="flex-1 font-medium md:px-8 py-3 text-2xl md:text-3xl bg-gradient-to-br from-custom-bglight to-custom-bgdark rounded-xl hover:bg-transparent hover:from-transparent hover:to-transparent transition duration-500">
|
||||
Yes, I want that!
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
export default Hero;
|
||||
@@ -1,14 +1,14 @@
|
||||
import { useEffect, useState } from "react";
|
||||
import { useState } from "react";
|
||||
import { FaTimes, FaBars } from "react-icons/fa";
|
||||
|
||||
import Logo from "../../assets/logo.svg";
|
||||
import { useTranslation } from "react-i18next";
|
||||
|
||||
export default () => {
|
||||
const [state, setState] = useState(false);
|
||||
const [colorChange, setColorChange] = useState(false);
|
||||
const [isNavbarCollapsed, setIsNavbarCollapsed] = useState(
|
||||
window.innerWidth <= 768
|
||||
);
|
||||
const { t, i18n } = useTranslation();
|
||||
|
||||
const [colorChange, setColorChange] = useState(false);
|
||||
const changeColor = () => {
|
||||
if (window.scrollY >= 100) {
|
||||
setColorChange(true);
|
||||
@@ -17,28 +17,28 @@ export default () => {
|
||||
}
|
||||
};
|
||||
|
||||
const checkNavbarCollapse = () => {
|
||||
if (window.innerWidth <= 768) {
|
||||
setIsNavbarCollapsed(true);
|
||||
} else {
|
||||
setIsNavbarCollapsed(false);
|
||||
window.addEventListener("scroll", changeColor);
|
||||
|
||||
const navigation = [
|
||||
{ title: t("navbar.services"), path: "Services" },
|
||||
{ title: t("navbar.optimization"), path: "Optimization" },
|
||||
{ title: t("navbar.advantages"), path: "Advantages" },
|
||||
{ title: t("navbar.contact"), path: "Contact" },
|
||||
];
|
||||
|
||||
const handleNavigation = (path: string) => {
|
||||
const element = document.getElementById(path);
|
||||
const navbarHeight = 110; // Replace with your navbar's height
|
||||
if (element) {
|
||||
const top =
|
||||
element.getBoundingClientRect().top + window.scrollY - navbarHeight;
|
||||
window.scrollTo({ top: top, behavior: "smooth" });
|
||||
}
|
||||
};
|
||||
|
||||
useEffect(() => {
|
||||
window.addEventListener("scroll", changeColor);
|
||||
window.addEventListener("resize", checkNavbarCollapse);
|
||||
return () => {
|
||||
window.removeEventListener("scroll", changeColor);
|
||||
window.removeEventListener("resize", checkNavbarCollapse);
|
||||
};
|
||||
}, []);
|
||||
|
||||
// Replace javascript:void(0) path with your path
|
||||
const navigation = [
|
||||
{ title: "Services", path: "#Services" },
|
||||
{ title: "Contact", path: "javascript:void(0)" },
|
||||
];
|
||||
const changeLanguage = (lng: string) => {
|
||||
i18n.changeLanguage(lng);
|
||||
};
|
||||
|
||||
return (
|
||||
<nav
|
||||
@@ -49,32 +49,50 @@ export default () => {
|
||||
}`}
|
||||
>
|
||||
<div className="items-center px-4 max-w-screen-xl mx-auto md:flex md:px-8">
|
||||
<div className="flex items-center justify-center md:justify-between py-3 md:py-5 md:block">
|
||||
{isNavbarCollapsed ? (
|
||||
<div className="flex items-center justify-between py-3 md:py-5 md:block">
|
||||
<a
|
||||
href="Top"
|
||||
onClick={(e) => {
|
||||
e.preventDefault(); // Prevent the default anchor tag behavior
|
||||
window.scrollTo({ top: 0, behavior: "smooth" }); // Scroll to the top of the page
|
||||
}}
|
||||
>
|
||||
<img src={Logo} width={60} height={60} alt="logo" />
|
||||
</a>
|
||||
<div className="md:hidden">
|
||||
<button
|
||||
className="outline-none p-2 rounded-md focus:border-gray-400 focus:border"
|
||||
onClick={() => setState(!state)}
|
||||
>
|
||||
<img src={Logo} width={60} height={60} alt="logo" />
|
||||
{state ? (
|
||||
<FaTimes className="h-6 w-6" />
|
||||
) : (
|
||||
<FaBars className="h-6 w-6" />
|
||||
)}
|
||||
</button>
|
||||
) : (
|
||||
<a href="/">
|
||||
<img src={Logo} width={60} height={60} alt="logo" />
|
||||
</a>
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
<div
|
||||
className={`flex-1 justify-self-center pb-3 mt-8 md:block md:pb-0 md:mt-0 ${
|
||||
state ? "block" : "hidden"
|
||||
className={`absolute top-[3.24rem] md:top-0 left-0 w-full z-50 flex flex-col md:flex-row items-center justify-center pb-3 mt-8 md:relative md:bg-transparent md:pb-0 md:mt-0 ${
|
||||
state
|
||||
? colorChange
|
||||
? "block bg-black bg-opacity-80 transition duration-500"
|
||||
: "block bg-gradient-to-br from-custom-bglight to-custom-bgdark"
|
||||
: "hidden md:flex"
|
||||
}`}
|
||||
>
|
||||
<ul className="text-text-gold justify-center items-center space-y-8 md:flex md:space-x-6 md:space-y-0">
|
||||
<ul className="text-text-gold space-y-8 md:ml-auto md:flex md:space-x-6 md:space-y-0 justify-center items-center">
|
||||
{navigation.map((item, idx) => {
|
||||
return (
|
||||
<li key={idx} className="hover:text-white">
|
||||
<a
|
||||
href={item.path}
|
||||
className="block py-2 md:py-0 md:px-4 text-xl font-medium$"
|
||||
className="block py-2 md:py-0 md:px-4 text-xl font-medium"
|
||||
onClick={(e) => {
|
||||
e.preventDefault(); // Prevent the default anchor tag behavior
|
||||
setState(false); // Close the navigation
|
||||
handleNavigation(item.path); // Navigate to the section
|
||||
}}
|
||||
>
|
||||
{item.title}
|
||||
</a>
|
||||
@@ -82,6 +100,12 @@ export default () => {
|
||||
);
|
||||
})}
|
||||
</ul>
|
||||
<button
|
||||
className="mt-5 md:mt-0 md:ml-auto"
|
||||
onClick={() => changeLanguage(i18n.language === "en" ? "pt" : "en")}
|
||||
>
|
||||
{i18n.language === "en" ? "PT" : "EN"}
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
@@ -0,0 +1,127 @@
|
||||
import React from "react";
|
||||
import emailjs from "@emailjs/browser";
|
||||
import { ToastContainer, toast } from "react-toastify";
|
||||
import "react-toastify/dist/ReactToastify.css";
|
||||
import { useTranslation } from "react-i18next";
|
||||
|
||||
const ContactForm = () => {
|
||||
const { t } = useTranslation();
|
||||
|
||||
const notify = () => {
|
||||
toast.success(t("contact.toasts.success"));
|
||||
};
|
||||
|
||||
const errorToast = () => {
|
||||
toast.error(t("contact.toasts.error"));
|
||||
};
|
||||
|
||||
const emptyForm = () => {
|
||||
toast.warning(t("contact.toasts.empty"));
|
||||
};
|
||||
|
||||
const sendEmail = (e: React.FormEvent<HTMLFormElement>) => {
|
||||
e.preventDefault();
|
||||
|
||||
let isEmpty = Array.from(e.currentTarget.elements).some(
|
||||
(input) =>
|
||||
(input as HTMLInputElement).type !== "submit" &&
|
||||
(input as HTMLInputElement).value.trim() === ""
|
||||
);
|
||||
|
||||
if (isEmpty) {
|
||||
emptyForm();
|
||||
return;
|
||||
}
|
||||
|
||||
emailjs
|
||||
.sendForm("service_42i3ig6", "template_f30zlog", e.currentTarget, {
|
||||
publicKey: "vcSOwPedqkRH3nmr9",
|
||||
})
|
||||
.then(
|
||||
(result) => {
|
||||
console.log(result.text);
|
||||
notify();
|
||||
},
|
||||
(error) => {
|
||||
console.log(error.text);
|
||||
errorToast();
|
||||
}
|
||||
);
|
||||
|
||||
e.currentTarget.reset();
|
||||
};
|
||||
|
||||
return (
|
||||
<div className="mt-10 mx-5 lg:mx-0 flex justify-center items-center">
|
||||
<form onSubmit={sendEmail} className="w-full md:w-auto">
|
||||
<div className="flex flex-col md:flex-row md:gap-3">
|
||||
<input
|
||||
className="form-input"
|
||||
type="text"
|
||||
name="user_name"
|
||||
placeholder={t("contact.form.name")}
|
||||
/>
|
||||
<input
|
||||
className="form-input"
|
||||
type="email"
|
||||
name="user_email"
|
||||
placeholder={t("contact.form.email")}
|
||||
/>
|
||||
</div>
|
||||
<div className="flex flex-col md:flex-row md:gap-3">
|
||||
<input
|
||||
className="form-input"
|
||||
type="text"
|
||||
name="user_company"
|
||||
placeholder={t("contact.form.company")}
|
||||
/>
|
||||
<input
|
||||
className="form-input"
|
||||
type="number"
|
||||
name="user_phone"
|
||||
placeholder={t("contact.form.phone")}
|
||||
/>
|
||||
</div>
|
||||
<div className="flex flex-col">
|
||||
<input
|
||||
className="form-input"
|
||||
type="text"
|
||||
name="user_question"
|
||||
placeholder={t("contact.form.question")}
|
||||
></input>
|
||||
|
||||
<textarea
|
||||
className="form-input"
|
||||
name="message"
|
||||
placeholder={t("contact.form.message")}
|
||||
rows={6}
|
||||
></textarea>
|
||||
</div>
|
||||
|
||||
<div className="flex mt-5 mb-10 lg:mt-12 mx-10 lg:mx-20 rounded-xl bg-gradient-to-br from-gold-light to-gold-dark p-0.5 shadow-lg">
|
||||
<button
|
||||
type="submit"
|
||||
className="flex-1 font-medium md:px-8 py-3 text-2xl md:text-3xl bg-gradient-to-br from-custom-bglight to-custom-bgdark rounded-xl hover:bg-transparent hover:from-transparent hover:to-transparent transition duration-500"
|
||||
>
|
||||
{t("contact.form.button")}
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<ToastContainer
|
||||
position="top-center"
|
||||
autoClose={5000}
|
||||
hideProgressBar
|
||||
newestOnTop={false}
|
||||
closeOnClick
|
||||
rtl={false}
|
||||
pauseOnFocusLoss
|
||||
draggable
|
||||
pauseOnHover
|
||||
theme="dark"
|
||||
/>
|
||||
</form>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
export default ContactForm;
|
||||
@@ -0,0 +1,26 @@
|
||||
import { useTranslation } from "react-i18next";
|
||||
import ContactForm from "./ContactForm";
|
||||
|
||||
const ContactPage = () => {
|
||||
const { t } = useTranslation();
|
||||
|
||||
return (
|
||||
<div className="h-full">
|
||||
<div className="header-text">
|
||||
<h1>
|
||||
{t("contact.heading.part1")} <br />
|
||||
{t("contact.heading.part2")}{" "}
|
||||
<span className="gold-text">{t("contact.heading.part3")}</span>{" "}
|
||||
{t("contact.heading.part4")}
|
||||
</h1>
|
||||
<h2 className="sub-header-text ">
|
||||
{t("contact.subheading.part1")} <br />
|
||||
{t("contact.subheading.part2")}
|
||||
</h2>
|
||||
</div>
|
||||
<ContactForm />
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
export default ContactPage;
|
||||
@@ -0,0 +1,69 @@
|
||||
import { useTranslation } from "react-i18next";
|
||||
import HeroImg from "../../../assets/HeroImg.svg";
|
||||
import Stars from "../../../assets/Stars.svg";
|
||||
|
||||
const Hero = () => {
|
||||
const { t } = useTranslation();
|
||||
|
||||
const handleNavigation = (path: string) => {
|
||||
const element = document.getElementById(path);
|
||||
const navbarHeight = 110; // Replace with your navbar's height
|
||||
if (element) {
|
||||
const top =
|
||||
element.getBoundingClientRect().top + window.scrollY - navbarHeight;
|
||||
window.scrollTo({ top: top, behavior: "smooth" });
|
||||
}
|
||||
};
|
||||
|
||||
return (
|
||||
<div className="flex flex-col lg:mt-20 lg:flex-row 1920:padding-calc items-center">
|
||||
<div className="lg:w-1/2 w-full xl:w-1/2 hidden lg:flex transform origin-left">
|
||||
<img className="items-center" src={HeroImg} alt="hero"></img>
|
||||
</div>
|
||||
<div className="justify-center items-center lg:w-1/2 xl:w-1/2">
|
||||
<div className="flex flex-col text-center lg:pt-10 lg:pr-20 lg:text-right 2xl:pr-40">
|
||||
<img
|
||||
src={Stars}
|
||||
alt="hero"
|
||||
className="md:px-0 ml-auto mr-auto lg:mr-0 lg:text-right"
|
||||
></img>
|
||||
<div>
|
||||
<h1 className="hero-text">{t("hero.heading.part1")}</h1>
|
||||
<h1 className="hero-text">{t("hero.heading.part2")}</h1>
|
||||
<div>
|
||||
<img
|
||||
src={HeroImg}
|
||||
alt="heroSm"
|
||||
className="flex mt-6 lg:hidden"
|
||||
></img>
|
||||
</div>
|
||||
</div>
|
||||
<div className="mx-5 lg:mx-0">
|
||||
<h2 className="italic text-lg md:text-2xl 2xl:text-3xl mt-4 md:mt-10">
|
||||
{t("hero.subheading.part1")}
|
||||
</h2>
|
||||
<h2 className="italic text-lg md:text-2xl 2xl:text-3xl">
|
||||
{t("hero.subheading.part2")}
|
||||
</h2>
|
||||
</div>
|
||||
<div className="flex mt-5 lg:mt-12 mx-10 lg:mx-0 lg:ml-auto rounded-xl bg-gradient-to-br from-gold-light to-gold-dark p-0.5 shadow-lg">
|
||||
<a
|
||||
className="flex w-full"
|
||||
href="Contact"
|
||||
onClick={(e) => {
|
||||
e.preventDefault();
|
||||
handleNavigation("Contact");
|
||||
}}
|
||||
>
|
||||
<button className="flex-1 font-medium md:px-8 py-3 text-2xl md:text-3xl bg-gradient-to-br from-custom-bglight to-custom-bgdark rounded-xl hover:bg-transparent hover:from-transparent hover:to-transparent transition duration-500">
|
||||
{t("hero.button")}
|
||||
</button>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
export default Hero;
|
||||
@@ -0,0 +1,32 @@
|
||||
import Card from "../../Card";
|
||||
import yourself from "../../../assets/Yourself.svg"
|
||||
import staff from "../../../assets/staff.svg"
|
||||
import agency from "../../../assets/agency.svg"
|
||||
import { useTranslation } from "react-i18next";
|
||||
|
||||
const CardContainer = () => {
|
||||
|
||||
const { t } = useTranslation();
|
||||
|
||||
return (
|
||||
<div className="mt-10 lg:mt-32 flex gap-10 flex-col h-full lg:flex-row px-10 lg:px-32 1920:margin-calc">
|
||||
<Card
|
||||
title={t("optimization.cards.card1.title")}
|
||||
description={t("optimization.cards.card1.description")}
|
||||
image={yourself}
|
||||
/>
|
||||
<Card
|
||||
title={t("optimization.cards.card2.title")}
|
||||
description={t("optimization.cards.card2.description")}
|
||||
image={staff}
|
||||
/>
|
||||
<Card
|
||||
title={t("optimization.cards.card3.title")}
|
||||
description={t("optimization.cards.card3.description")}
|
||||
image={agency}
|
||||
/>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
export default CardContainer;
|
||||
@@ -0,0 +1,18 @@
|
||||
import CardContainer from './CardContainer'
|
||||
import { useTranslation } from 'react-i18next'
|
||||
|
||||
const Optimization = () => {
|
||||
const { t } = useTranslation('optimization')
|
||||
return (
|
||||
<div className="header-text">
|
||||
<h1>
|
||||
<span className="gold-text">"</span>
|
||||
{t("optimization.heading.part1")} <br /> {t("optimization.heading.part2")}
|
||||
<span className="gold-text">"</span>
|
||||
</h1>
|
||||
<CardContainer />
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
export default Optimization
|
||||
@@ -0,0 +1,33 @@
|
||||
import { useTranslation } from "react-i18next";
|
||||
import Card from "../../Card";
|
||||
|
||||
const CardContainer = () => {
|
||||
const { t } = useTranslation();
|
||||
|
||||
return (
|
||||
<div className="mt-10 flex-col h-full lg:grid lg:grid-cols-2 lg:gap-10 px-10 lg:px-40 2xl:px-96 1920:margin-calc">
|
||||
<Card
|
||||
title={t("results.cards.card1.title")}
|
||||
description={t("results.cards.card1.description")}
|
||||
image=""
|
||||
/>
|
||||
<Card
|
||||
title={t("results.cards.card2.title")}
|
||||
description={t("results.cards.card2.description")}
|
||||
image=""
|
||||
/>
|
||||
<Card
|
||||
title={t("results.cards.card3.title")}
|
||||
description={t("results.cards.card3.description")}
|
||||
image=""
|
||||
/>
|
||||
<Card
|
||||
title={t("results.cards.card4.title")}
|
||||
description={t("results.cards.card4.description")}
|
||||
image=""
|
||||
/>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
export default CardContainer;
|
||||
@@ -0,0 +1,19 @@
|
||||
import { useTranslation } from "react-i18next";
|
||||
import CardContainer from "./CardContainer";
|
||||
|
||||
const ResultsPage = () => {
|
||||
const { t } = useTranslation();
|
||||
|
||||
return (
|
||||
<div className="header-text">
|
||||
<h1>
|
||||
<span className="gold-text">"</span>
|
||||
{t("results.heading.part1")} <br /> {t("results.heading.part2")}
|
||||
<span className="gold-text">"</span>
|
||||
</h1>
|
||||
<CardContainer />
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
export default ResultsPage;
|
||||
@@ -16,7 +16,7 @@ const Buttons = ({ changeActiveGroup }: props) => {
|
||||
};
|
||||
|
||||
return (
|
||||
<div className="lg:px-40 flex flex-row gap-2 mx-2 md:gap-5 mt-10 mb-4 flex-wrap justify-center">
|
||||
<div className="lg:px-40 flex flex-row 2xl:gap-8 gap-2 mx-2 md:gap-5 mt-10 mb-4 flex-wrap justify-center">
|
||||
<CardBtn
|
||||
title="Marketing"
|
||||
onClick={() => handleClick("markCards")}
|
||||
@@ -0,0 +1,41 @@
|
||||
import Card from "./ServiceCard";
|
||||
import EnvisionImg from "../../../assets/imgs/Envision.jpg";
|
||||
import CaptureImg from "../../../assets/imgs/Capture.png";
|
||||
import EditImg from "../../../assets/imgs/Edit.png";
|
||||
import PublishImg from "../../../assets/imgs/Publish.jpg";
|
||||
import { useTranslation } from "react-i18next";
|
||||
|
||||
const CameraCards = () => {
|
||||
const { t } = useTranslation();
|
||||
|
||||
return (
|
||||
<div className="h-full flex lg:mt-20 flex-col flex-wrap gap-4 xl:flex-row mx-4">
|
||||
<Card
|
||||
title={t("services.cards.media.card1.title")}
|
||||
description={t("services.cards.media.card1.description")}
|
||||
imgSrc={EnvisionImg}
|
||||
delay="0s"
|
||||
/>
|
||||
<Card
|
||||
title={t("services.cards.media.card2.title")}
|
||||
description={t("services.cards.media.card2.description")}
|
||||
imgSrc={CaptureImg}
|
||||
delay="0.2s"
|
||||
/>
|
||||
<Card
|
||||
title={t("services.cards.media.card3.title")}
|
||||
description={t("services.cards.media.card3.description")}
|
||||
imgSrc={EditImg}
|
||||
delay="0.4s"
|
||||
/>
|
||||
<Card
|
||||
title={t("services.cards.media.card4.title")}
|
||||
description={t("services.cards.media.card4.description")}
|
||||
imgSrc={PublishImg}
|
||||
delay="0.6s"
|
||||
/>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
export default CameraCards;
|
||||
@@ -6,7 +6,7 @@ interface props {
|
||||
|
||||
const CardBtn = ({ title, onClick, isSelected }: props) => {
|
||||
const buttonClass = isSelected
|
||||
? "w-full font-medium md:px-4 py-1 text-xs lg:text-sm xl:text-lg bg-gradient-to-br from-custom-bglight to-custom-bgdark"
|
||||
? "w-full font-bold md:px-4 py-1 text-xs lg:text-sm xl:text-lg bg-gradient-to-br from-custom-bglight to-custom-bgdark"
|
||||
: "w-full font-medium md:px-4 py-1 text-xs lg:text-sm xl:text-lg bg-gradient-to-br from-custom-bglight to-custom-bgdark text-gray-400 shadow-inner";
|
||||
|
||||
const divClass = isSelected
|
||||
@@ -0,0 +1,41 @@
|
||||
import Card from "./ServiceCard";
|
||||
import AnaliseImg from "../../../assets/imgs/Analise.jpg";
|
||||
import CreateImg from "../../../assets/imgs/Create.jpg";
|
||||
import ScaleImg from "../../../assets/imgs/Scale.jpg";
|
||||
import ExecuteImg from "../../../assets/imgs/Execute.jpg";
|
||||
import { useTranslation } from "react-i18next";
|
||||
|
||||
const MarketingCards = () => {
|
||||
const { t } = useTranslation();
|
||||
|
||||
return (
|
||||
<div className="h-full flex lg:mt-20 flex-col flex-wrap gap-4 xl:flex-row mx-4">
|
||||
<Card
|
||||
title={t("services.cards.marketing.card1.title")}
|
||||
description={t("services.cards.marketing.card1.description")}
|
||||
imgSrc={AnaliseImg}
|
||||
delay="0s"
|
||||
/>
|
||||
<Card
|
||||
title={t("services.cards.marketing.card2.title")}
|
||||
description={t("services.cards.marketing.card2.description")}
|
||||
imgSrc={CreateImg}
|
||||
delay="0.2s"
|
||||
/>
|
||||
<Card
|
||||
title={t("services.cards.marketing.card3.title")}
|
||||
description={t("services.cards.marketing.card3.description")}
|
||||
imgSrc={ScaleImg}
|
||||
delay="0.4s"
|
||||
/>
|
||||
<Card
|
||||
title={t("services.cards.marketing.card4.title")}
|
||||
description={t("services.cards.marketing.card4.description")}
|
||||
imgSrc={ExecuteImg}
|
||||
delay="0.6s"
|
||||
/>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
export default MarketingCards;
|
||||
@@ -0,0 +1,36 @@
|
||||
interface IProps {
|
||||
title: string;
|
||||
description: string;
|
||||
imgSrc: string;
|
||||
delay: string;
|
||||
}
|
||||
|
||||
const Card = ({ title, description, imgSrc, delay }: IProps) => {
|
||||
return (
|
||||
<div
|
||||
className="flex flex-col justify-end flex-1 h-full border-solid border shadow-lg bg-cover bg-center text-center"
|
||||
style={{
|
||||
backgroundImage: `url(${imgSrc})`,
|
||||
animation: `fadeEffect 1s ${delay} forwards`,
|
||||
opacity: 0, // Add this line
|
||||
}}
|
||||
>
|
||||
<div className="lg:my-6">
|
||||
<h2
|
||||
className="drop-shadow-[0_1.2px_1.2px_rgba(0,0,0,0.8)]
|
||||
text-3xl font-bold"
|
||||
>
|
||||
{title}
|
||||
</h2>
|
||||
<p
|
||||
className="drop-shadow-[0_1.2px_1.2px_rgba(0,0,0,0.8)]
|
||||
xl:mb-10 font-thin text-xl"
|
||||
>
|
||||
{description}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
export default Card;
|
||||
@@ -0,0 +1,33 @@
|
||||
import { useTranslation } from "react-i18next";
|
||||
import Underline from "../../../assets/Underline.svg";
|
||||
import ServiceCardContainer from "./ServiceCardContainer";
|
||||
|
||||
const Services = () => {
|
||||
const { t } = useTranslation();
|
||||
|
||||
return (
|
||||
<div className="header-text">
|
||||
<h1>
|
||||
{t("services.heading.part1")}{" "}
|
||||
<span className="relative inline-block">
|
||||
{t("services.heading.part2")}{" "}
|
||||
<img
|
||||
src={Underline}
|
||||
alt="underline"
|
||||
className="absolute bottom-0 left-0"
|
||||
/>
|
||||
</span>{" "}
|
||||
</h1>
|
||||
<h1>
|
||||
{t("services.heading.part3")}
|
||||
<span className="gold-text">{t("services.heading.part4")}</span>
|
||||
{t("services.heading.part5")}
|
||||
</h1>
|
||||
|
||||
<h2 className="sub-header-text">{t("services.subheading")}</h2>
|
||||
|
||||
<ServiceCardContainer />
|
||||
</div>
|
||||
);
|
||||
};
|
||||
export default Services;
|
||||
@@ -0,0 +1,41 @@
|
||||
import Card from "./ServiceCard";
|
||||
import AlgorithmImg from "../../../assets/imgs/Algorithm.jpg";
|
||||
import ScheduleImg from "../../../assets/imgs/Schedule.jpg";
|
||||
import TargetImg from "../../../assets/imgs/Target.jpg";
|
||||
import ExpandImg from "../../../assets/imgs/Expand.jpg";
|
||||
import { useTranslation } from "react-i18next";
|
||||
|
||||
const SocialMediaCards = () => {
|
||||
const { t } = useTranslation();
|
||||
|
||||
return (
|
||||
<div className="h-full flex lg:mt-20 flex-col flex-wrap gap-4 xl:flex-row mx-4">
|
||||
<Card
|
||||
title={t("services.cards.social.card1.title")}
|
||||
description={t("services.cards.social.card1.description")}
|
||||
imgSrc={AlgorithmImg}
|
||||
delay="0s"
|
||||
/>
|
||||
<Card
|
||||
title={t("services.cards.social.card2.title")}
|
||||
description={t("services.cards.social.card2.description")}
|
||||
imgSrc={ScheduleImg}
|
||||
delay="0.2s"
|
||||
/>
|
||||
<Card
|
||||
title={t("services.cards.social.card3.title")}
|
||||
description={t("services.cards.social.card3.description")}
|
||||
imgSrc={TargetImg}
|
||||
delay="0.4s"
|
||||
/>
|
||||
<Card
|
||||
title={t("services.cards.social.card4.title")}
|
||||
description={t("services.cards.social.card4.description")}
|
||||
imgSrc={ExpandImg}
|
||||
delay="0.6s"
|
||||
/>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
export default SocialMediaCards;
|
||||
@@ -0,0 +1,41 @@
|
||||
import Card from "./ServiceCard";
|
||||
import IdealizeImg from "../../../assets/imgs/Idealize.png";
|
||||
import DesignImg from "../../../assets/imgs/Design.png";
|
||||
import CodeImg from "../../../assets/imgs/Code.jpg";
|
||||
import BuildImg from "../../../assets/imgs/Build.png";
|
||||
import { useTranslation } from "react-i18next";
|
||||
|
||||
const WesiteCards = () => {
|
||||
const { t } = useTranslation();
|
||||
|
||||
return (
|
||||
<div className="h-full flex lg:mt-20 flex-col flex-wrap gap-4 xl:flex-row mx-4">
|
||||
<Card
|
||||
title={t("services.cards.website.card1.title")}
|
||||
description={t("services.cards.website.card1.description")}
|
||||
imgSrc={IdealizeImg}
|
||||
delay="0s"
|
||||
/>
|
||||
<Card
|
||||
title={t("services.cards.website.card2.title")}
|
||||
description={t("services.cards.website.card2.description")}
|
||||
imgSrc={DesignImg}
|
||||
delay="0.2s"
|
||||
/>
|
||||
<Card
|
||||
title={t("services.cards.website.card3.title")}
|
||||
description={t("services.cards.website.card3.description")}
|
||||
imgSrc={CodeImg}
|
||||
delay="0.4s"
|
||||
/>
|
||||
<Card
|
||||
title={t("services.cards.website.card4.title")}
|
||||
description={t("services.cards.website.card4.description")}
|
||||
imgSrc={BuildImg}
|
||||
delay="0.6s"
|
||||
/>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
export default WesiteCards;
|
||||
@@ -1,18 +0,0 @@
|
||||
import Card from "./ServiceCard";
|
||||
import EnvisionImg from "../../assets/imgs/Envision.jpg";
|
||||
import CaptureImg from "../../assets/imgs/Capture.png";
|
||||
import EditImg from "../../assets/imgs/Edit.png";
|
||||
import PublishImg from "../../assets/imgs/Publish.jpg";
|
||||
|
||||
const CameraCards = () => {
|
||||
return (
|
||||
<div className="h-full flex lg:mt-20 flex-col flex-wrap gap-4 xl:flex-row mx-4">
|
||||
<Card title="Envision" description="Prespective" imgSrc={EnvisionImg} />
|
||||
<Card title="Capture" description="Moments" imgSrc={CaptureImg} />
|
||||
<Card title="Edit" description="Moments" imgSrc={EditImg} />
|
||||
<Card title="Publish" description="Content" imgSrc={PublishImg} />
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
export default CameraCards;
|
||||
@@ -1,18 +0,0 @@
|
||||
import Card from "./ServiceCard";
|
||||
import AnaliseImg from "../../assets/imgs/Analise.jpg";
|
||||
import CreateImg from "../../assets/imgs/Create.jpg";
|
||||
import ScaleImg from "../../assets/imgs/Scale.jpg";
|
||||
import ExecuteImg from "../../assets/imgs/Execute.jpg";
|
||||
|
||||
const MarketingCards = () => {
|
||||
return (
|
||||
<div className="h-full flex lg:mt-20 flex-col flex-wrap gap-4 xl:flex-row mx-4">
|
||||
<Card title="Analise" description="Problem" imgSrc={AnaliseImg} />
|
||||
<Card title="Create" description="Strategy" imgSrc={CreateImg} />
|
||||
<Card title="Scale" description="Company" imgSrc={ScaleImg} />
|
||||
<Card title="Execute" description="Plan" imgSrc={ExecuteImg} />
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
export default MarketingCards;
|
||||
@@ -1,21 +0,0 @@
|
||||
interface IProps {
|
||||
title: string;
|
||||
description: string;
|
||||
imgSrc: string;
|
||||
}
|
||||
|
||||
const Card = ({ title, description, imgSrc }: IProps) => {
|
||||
return (
|
||||
<div
|
||||
className="flex flex-col justify-end flex-1 h-full border-solid border shadow-lg bg-cover bg-center text-center"
|
||||
style={{ backgroundImage: `url(${imgSrc})` }}
|
||||
>
|
||||
<div className="lg:my-6">
|
||||
<h2 className="text-3xl font-bold">{title}</h2>
|
||||
<p className="xl:mb-10 font-thin text-xl">{description}</p>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
export default Card;
|
||||
@@ -1,34 +0,0 @@
|
||||
import Underline from "../../assets/Underline.svg";
|
||||
import ServiceCardContainer from "./ServiceCardContainer";
|
||||
|
||||
const Services = () => {
|
||||
return (
|
||||
<div className="mt-20 lg:mt-60 text-4xl md:text-7xl xl:text-8xl text-center">
|
||||
<h1>
|
||||
We've got your{" "}
|
||||
<span className="relative inline-block">
|
||||
footprint{" "}
|
||||
<img
|
||||
src={Underline}
|
||||
alt="underline"
|
||||
className="absolute bottom-0 left-0"
|
||||
/>
|
||||
</span>{" "}
|
||||
</h1>
|
||||
<h1>
|
||||
bullsh
|
||||
<span className="bg-clip-text text-transparent bg-gradient-to-br from-gold-light to-gold-dark">
|
||||
*
|
||||
</span>
|
||||
t covered
|
||||
</h1>
|
||||
|
||||
<h2 className="italic font-thin hidden md:block md:text-2xl mt-2">
|
||||
Unlock the full potential of your business with our services.
|
||||
</h2>
|
||||
|
||||
<ServiceCardContainer />
|
||||
</div>
|
||||
);
|
||||
};
|
||||
export default Services;
|
||||
@@ -1,18 +0,0 @@
|
||||
import Card from "./ServiceCard";
|
||||
import AlgorithmImg from "../../assets/imgs/Algorithm.jpg";
|
||||
import ScheduleImg from "../../assets/imgs/Schedule.jpg";
|
||||
import TargetImg from "../../assets/imgs/Target.jpg";
|
||||
import ExpandImg from "../../assets/imgs/Expand.jpg";
|
||||
|
||||
const SocialMediaCards = () => {
|
||||
return (
|
||||
<div className="h-full flex lg:mt-20 flex-col flex-wrap gap-4 xl:flex-row mx-4">
|
||||
<Card title="Algorithm" description="Analise" imgSrc={AlgorithmImg} />
|
||||
<Card title="Schedule" description="Content" imgSrc={ScheduleImg} />
|
||||
<Card title="Target" description="Audience" imgSrc={TargetImg} />
|
||||
<Card title="Expand" description="Platforms" imgSrc={ExpandImg} />
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
export default SocialMediaCards;
|
||||
@@ -1,18 +0,0 @@
|
||||
import Card from "./ServiceCard";
|
||||
import IdealizeImg from "../../assets/imgs/Idealize.png";
|
||||
import DesignImg from "../../assets/imgs/Design.png";
|
||||
import CodeImg from "../../assets/imgs/Code.jpg";
|
||||
import BuildImg from "../../assets/imgs/Build.png";
|
||||
|
||||
const WesiteCards = () => {
|
||||
return (
|
||||
<div className="h-full flex lg:mt-20 flex-col flex-wrap gap-4 xl:flex-row mx-4">
|
||||
<Card title="Idealize" description="Website" imgSrc={IdealizeImg} />
|
||||
<Card title="Design" description="Website" imgSrc={DesignImg} />
|
||||
<Card title="Code" description="Website" imgSrc={CodeImg} />
|
||||
<Card title="Build" description="Website" imgSrc={BuildImg} />
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
export default WesiteCards;
|
||||
@@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="utf-8"?><!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
|
||||
<svg fill="#000000" width="800px" height="800px" viewBox="0 0 50 50" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<defs>
|
||||
<linearGradient id="goldGradient" x1="0%" y1="0%" x2="100%" y2="100%">
|
||||
<stop offset="0%" style="stop-color:#FACC97;stop-opacity:1" />
|
||||
<stop offset="100%" style="stop-color:#54330F;stop-opacity:1" />
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<path d="M9 0C7.355469 0 6 1.355469 6 3L6 50L44 50L44 3C44 1.355469 42.644531 0 41 0 Z M 9 2L41 2C41.554688 2 42 2.445313 42 3L42 48L38 48L38 36L27 36L27 48L8 48L8 3C8 2.445313 8.445313 2 9 2 Z M 12 6L12 14L23 14L23 6 Z M 27 6L27 14L38 14L38 6 Z M 14 8L21 8L21 12L14 12 Z M 29 8L36 8L36 12L29 12 Z M 12 16L12 24L23 24L23 16 Z M 27 16L27 24L38 24L38 16 Z M 14 18L21 18L21 22L14 22 Z M 29 18L36 18L36 22L29 22 Z M 12 26L12 34L23 34L23 26 Z M 27 26L27 34L38 34L38 26 Z M 14 28L21 28L21 32L14 32 Z M 29 28L36 28L36 32L29 32 Z M 12 36L12 44L23 44L23 36 Z M 14 38L21 38L21 42L14 42 Z M 29 38L36 38L36 48L29 48Z" fill="url(#goldGradient)"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.1 KiB |
@@ -0,0 +1,61 @@
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
|
||||
<svg height="800px" width="800px" version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
viewBox="0 0 200.688 200.688" xml:space="preserve">
|
||||
<defs>
|
||||
<linearGradient id="goldGradient" x1="0%" y1="0%" x2="100%" y2="100%">
|
||||
<stop offset="0%" style="stop-color:#FACC97;stop-opacity:1" />
|
||||
<stop offset="100%" style="stop-color:#54330F;stop-opacity:1" />
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<g>
|
||||
<path d="M190.985,111.644l-0.293-0.347c-1.399-1.729-4.459-4.187-8.922-5.891l-0.684-0.208
|
||||
c-4.649-2.144-8.861-3.582-10.096-3.987c-0.97-0.319-1.782-0.666-2.43-0.948c-5.128-2.53-5.708-4.008-5.791-4.237l-0.233-0.544
|
||||
l0.197-0.49c3.811-4.746,6.488-10.275,7.508-15.486l0.15-0.354c1.052-1.342,1.725-2.91,1.993-4.638
|
||||
c1.213-4.384,1.263-7.605,0.175-9.863l-0.097-0.2l0.05-0.222c1.353-5.665,2.656-16.277-3.847-23.681
|
||||
c-1.038-1.303-5.025-5.705-12.759-7.97l-3.772-1.292c-6.181-1.904-10.089-2.362-10.74-2.373c-0.412,0-0.78,0.05-1.317,0.168
|
||||
l-0.465,0.093c-0.272-0.043-0.555-0.068-0.873-0.068c-2.069,0-4.305,0.909-4.305,0.909c-2.18,0.916-13.252,6.023-16.763,16.874
|
||||
c-0.583,1.542-1.772,6.231-0.233,16.488l0.039,0.254l-0.161,0.215c-1.578,2.126-1.711,5.572-0.397,10.203
|
||||
c0.344,2.051,1.013,3.69,1.997,4.924l0.165,0.347c0.97,5.372,3.357,10.665,6.904,15.317l0.283,0.376l-0.265,0.376
|
||||
c-0.154,0.229-0.261,0.465-0.301,0.637c-0.544,1.553-4.706,4.012-11.159,6.596c-1.442-0.523-2.444-0.852-2.799-0.97
|
||||
c-1.306-0.437-2.398-0.905-3.282-1.292c-6.825-3.368-7.723-5.332-7.859-5.783l-0.358-0.798l0.315-0.741
|
||||
c5.121-6.381,8.715-13.811,10.096-20.843l0.211-0.483c1.417-1.8,2.323-3.905,2.663-6.199c1.628-5.866,1.714-10.182,0.247-13.192
|
||||
l-0.161-0.319l0.086-0.344c1.822-7.609,3.568-21.845-5.161-31.762c-1.385-1.736-6.703-7.641-17.096-10.683l-5.078-1.743
|
||||
C77.89,4.865,72.629,4.296,71.946,4.289c-0.558,0-1.041,0.061-1.746,0.229l-0.68,0.111c-2.813-0.455-6.27,0.88-6.896,1.124
|
||||
c-2.928,1.228-17.769,8.092-22.475,22.643c-0.784,2.061-2.373,8.346-0.308,22.114l0.061,0.415l-0.258,0.344
|
||||
c-2.104,2.813-2.265,7.412-0.501,13.621c0.451,2.734,1.346,4.917,2.673,6.589l0.233,0.49c1.285,7.208,4.491,14.326,9.266,20.593
|
||||
l0.447,0.583l-0.426,0.616c-0.208,0.304-0.347,0.616-0.379,0.812c-1.185,3.375-14.394,9.276-25.968,12.809
|
||||
c-8.332,3.157-11.989,8.271-12.011,8.303C1.503,132.72,0.05,169.292,0,170.863c0.179,9.513,4.499,11.445,5.329,11.724l0.73,0.319
|
||||
c25.385,11.077,62.462,13.235,66.61,13.446l1.296,0.039c1.238,0,2.494-0.068,3.672-0.132l0.104-0.004l0.383,0.029
|
||||
c0.308,0.075,0.558,0.115,0.816,0.115h0.004l0.175-0.007c1.678-0.086,41.486-2.348,66.327-13.496
|
||||
c1.356-0.358,5.737-2.24,6.131-11.488c8.858-0.766,30.048-3.207,44.439-9.659c1.066-0.279,4.556-1.761,4.674-9.273
|
||||
C200.527,149.587,199.142,123.776,190.985,111.644z M55.104,98.377l0.691-0.644l0.687,0.644c6.077,5.726,12.809,8.872,18.936,8.872
|
||||
c6.438,0,13.084-2.792,19.218-8.081l0.519-0.437L96.5,99.39c1.145,1.041,3.196,2.537,4.116,2.988l1.267,0.619l-0.136,0.129
|
||||
l0.487,0.293c1.16,0.684,2.394,1.353,3.804,2.054c1.428,0.633,2.652,1.109,3.951,1.539c0.254,0.086,6.317,2.044,13.227,5.243
|
||||
l1.235,0.383c6.567,2.502,9.344,6.027,9.445,6.148c10.193,15.131,11.907,48.157,12.075,51.85c-0.079,5.161-1.55,6.499-1.933,6.757
|
||||
c-22.844,10.225-57.355,12.884-64.033,13.31l-0.186,0.011l-0.19-0.057c-0.225-0.068-0.455-0.1-0.741-0.1h-0.007l-0.236,0.011
|
||||
c-1.825,0.125-3.335,0.186-4.746,0.186h-1.106c-4.159-0.251-41.372-2.688-65.189-13.285c-0.48-0.2-1.886-1.825-1.99-6.571
|
||||
c0.004-0.354,1.228-36.003,11.925-51.893c0.523-0.659,3.432-4.048,9.244-6.267c5.107-1.571,17.751-5.762,24.665-10.769
|
||||
c0.29-0.175,0.576-0.469,0.884-0.784C52.838,100.639,53.89,99.508,55.104,98.377z M126.273,107.299l-0.945-0.276
|
||||
c-1.553-0.716-3.182-1.424-4.867-2.115c2.38-1.113,4.327-2.205,5.773-3.26c0.233-0.136,0.465-0.372,0.684-0.601
|
||||
c0.523-0.562,1.228-1.317,2.051-2.086l0.44-0.404l0.422,0.412c4.549,4.273,9.573,6.617,14.144,6.617
|
||||
c4.817,0,9.781-2.083,14.351-6.027l0.326-0.276l0.923,0.447c0.841,0.784,2.373,1.886,3.056,2.226l0.798,0.379l-0.097,0.097
|
||||
l0.501,0.293c0.87,0.519,1.8,1.013,2.842,1.528c1.07,0.472,1.979,0.83,2.942,1.152c0.186,0.061,4.656,1.496,9.824,3.89l0.909,0.279
|
||||
c4.706,1.8,6.753,4.27,6.95,4.527c7.605,11.273,8.833,35.71,8.944,38.433c-0.054,3.779-1.102,4.746-1.364,4.917
|
||||
c-14.308,6.403-34.851,8.808-43.49,9.566c-0.777-11.216-3.547-37.632-12.787-51.371l-0.39-0.469
|
||||
C136.34,112.868,132.239,109.583,126.273,107.299z M120.922,66.479l0.161-0.19c0.723-0.53,1.077-1.349,0.941-2.197
|
||||
c-1.718-10.318-0.601-14.648-0.218-15.74c2.996-9.187,12.419-13.474,14.272-14.233c0.372-0.143,1.092-0.358,1.854-0.487
|
||||
l0.229-0.054l1.421-0.075l0.011,0.097l0.429-0.039c0.319-0.025,0.626-0.075,0.841-0.122l0.48-0.107
|
||||
c0.304,0.007,4.026,0.49,9.42,2.144l3.804,1.306c6.907,2.04,10.107,5.851,10.697,6.621c5.551,6.299,4.062,15.776,2.677,20.868
|
||||
c-0.157,0.626-0.061,1.27,0.297,1.797l0.308,0.397c0.39,0.523,0.744,2.602-0.458,7.083c-0.225,1.36-0.73,2.452-1.453,3.178
|
||||
c-0.293,0.308-0.49,0.709-0.562,1.167c-1.872,10.998-11.721,23.291-22.096,23.291c-8.811,0-18.857-11.316-20.664-23.291
|
||||
c-0.075-0.455-0.268-0.855-0.587-1.217c-0.737-0.762-1.213-1.875-1.507-3.554C120.35,70.008,120.253,67.492,120.922,66.479z
|
||||
M44.249,54.626l0.24-0.276c0.931-0.669,1.381-1.721,1.21-2.809c-2.33-13.986-0.809-19.805-0.286-21.266
|
||||
C49.46,17.853,62.215,12.045,64.72,11.014c0.523-0.2,1.496-0.494,2.527-0.662l0.276-0.064l2.101-0.115l0.007,0.132l0.451-0.043
|
||||
c0.419-0.039,0.83-0.104,1.31-0.2l0.48-0.111c0.39,0.004,5.315,0.623,12.741,2.899l5.107,1.757
|
||||
c9.334,2.759,13.682,7.924,14.48,8.958c7.508,8.521,5.504,21.344,3.643,28.234c-0.218,0.795-0.086,1.621,0.369,2.294l0.415,0.533
|
||||
c0.684,0.916,0.941,3.983-0.587,9.663c-0.308,1.854-0.998,3.357-2.008,4.355c-0.369,0.394-0.608,0.909-0.712,1.492
|
||||
c-2.541,14.87-15.869,31.497-29.905,31.497c-11.928,0-25.528-15.303-27.983-31.487c-0.082-0.583-0.322-1.109-0.744-1.568
|
||||
c-1.024-1.056-1.671-2.577-2.069-4.839C43.437,59.479,43.315,56.054,44.249,54.626z" fill="url(#goldGradient)"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 6.0 KiB |
@@ -0,0 +1,16 @@
|
||||
<?xml version='1.0' encoding='iso-8859-1'?>
|
||||
<!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
|
||||
<svg fill="#000000" height="800px" width="800px" version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 463.001 463.001" xmlns:xlink="http://www.w3.org/1999/xlink" enable-background="new 0 0 463.001 463.001">
|
||||
<defs>
|
||||
<linearGradient id="goldGradient" x1="0%" y1="0%" x2="100%" y2="100%">
|
||||
<stop offset="0%" style="stop-color:#FACC97;stop-opacity:1" />
|
||||
<stop offset="100%" style="stop-color:#54330F;stop-opacity:1" />
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<g>
|
||||
<g>
|
||||
<path d="m441.044,308.903c-3.285-8.994-10.277-15.956-19.184-19.102-8.9-3.145-18.637-2.163-26.706,2.69l-78.169,46.902-10.752,4.607h-56.404c-0.691,0-1.077-0.386-1.278-0.71-0.202-0.324-0.379-0.841-0.073-1.46 0.174-0.354 0.474-0.622 0.845-0.754l42.802-15.295c16.563-5.566 26.054-22.511 21.614-38.615-2.33-8.452-7.861-15.368-15.573-19.475-7.594-4.044-16.624-4.798-24.766-2.071l-44.166,14.719-115.97,7.733c-7.614,0.508-14.778,3.759-20.173,9.154l-63.084,63.083c-12.102,12.102-13.223,31.298-2.553,43.701 2.82,3.279 14.975,14.926 33.195,32.322 10.618,10.137 20.646,19.711 25.407,24.472 1.458,1.458 3.378,2.197 5.306,2.197 1.698,0 3.403-0.575 4.8-1.738l34.649-28.875c7.263-6.053 16.471-9.387 25.927-9.387h118.622c4.294,0 8.473-0.857 12.42-2.549l55.987-23.995c0.156-0.067 0.31-0.139 0.46-0.216l2.842-1.453c0.151-0.077 0.3-0.159 0.444-0.247l79.285-47.571c13.38-8.028 19.371-24.037 14.246-38.067zm-21.962,25.204l-79.067,47.44-2.39,1.222-55.753,23.895c-2.069,0.887-4.261,1.336-6.512,1.336h-118.622c-12.958,0-25.576,4.568-35.53,12.864l-29.436,24.53c-5.38-5.224-12.912-12.415-20.765-19.912-13.202-12.604-29.632-28.289-32.183-31.255-5.488-6.379-4.686-16.837 1.789-23.312l63.084-63.084c2.824-2.825 6.576-4.527 10.563-4.793l116.93-7.797c0.638-0.042 1.267-0.166 1.872-0.368l45.088-15.027c1.724-0.577 3.49-0.863 5.247-0.863 2.656,0 5.289,0.654 7.716,1.946 4.04,2.152 6.939,5.782 8.163,10.223 2.288,8.298-3.086,17.461-11.979,20.425-0.051,0.017-0.102,0.035-0.151,0.053l-42.872,15.32c-4.063,1.452-7.35,4.384-9.256,8.256-2.534,5.152-2.236,11.137 0.798,16.011 3.034,4.874 8.272,7.783 14.013,7.783h57.943c1.016,0 2.021-0.206 2.954-0.606l12.635-5.414c0.312-0.133 0.614-0.288 0.904-0.462l78.612-47.168c4.224-2.542 9.32-3.052 13.986-1.405 4.737,1.674 8.321,5.262 10.09,10.105 2.62,7.17-0.764,15.793-7.871,20.057z" fill="url(#goldGradient)"/>
|
||||
<path d="m283.86,222.171v17.329c0,4.142 3.357,7.5 7.5,7.5s7.5-3.358 7.5-7.5v-23.144c0-0.003 0-0.007 0-0.01v-35.026c72.319-10.024 129.001-68.702 135.967-141.961 0.211-2.227-0.582-4.432-2.163-6.013-1.582-1.583-3.791-2.378-6.014-2.163-56.453,5.368-104.245,40.259-127.79,89.077v-88.76c0-9.098 7.401-16.5 16.5-16.5 4.143,0 7.5-3.358 7.5-7.5s-3.357-7.5-7.5-7.5c-17.369,0-31.5,14.131-31.5,31.5v28.212c-15.596-24.116-41.665-40.814-71.79-43.678-2.224-0.212-4.433,0.581-6.014,2.163-1.581,1.582-2.374,3.787-2.163,6.013 4.147,43.615 37.298,78.706 79.967,85.844v51.058c-23.546-48.818-71.337-83.711-127.79-89.078-2.227-0.214-4.432,0.581-6.014,2.163-1.581,1.582-2.374,3.787-2.163,6.013 6.966,73.259 63.648,131.936 135.967,141.961zm-63.519-189.691c30.938,6.768 55.271,31.101 62.039,62.04-30.94-6.768-55.273-31.101-62.039-62.04zm198.349,14.839c-9.04,55.857-50.24,100.852-104.009,115.466l61.982-61.982c2.929-2.929 2.929-7.678 0-10.606-2.93-2.929-7.678-2.929-10.607,0l-63.451,63.451c13.935-54.904 59.426-97.159 116.085-106.329zm-138.575,147.179l-63.451-63.451c-2.93-2.929-7.678-2.929-10.607,0s-2.929,7.678 0,10.606l61.982,61.982c-53.77-14.615-94.969-59.61-104.009-115.466 56.658,9.17 102.15,51.426 116.085,106.329z" fill="url(#goldGradient)"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 3.6 KiB |
+27
@@ -0,0 +1,27 @@
|
||||
import i18n from "i18next";
|
||||
import { initReactI18next } from "react-i18next";
|
||||
import LanguageDetector from "i18next-browser-languagedetector";
|
||||
import Backend from "i18next-http-backend";
|
||||
|
||||
i18n
|
||||
.use(Backend)
|
||||
// detect user language
|
||||
// learn more: https://github.com/i18next/i18next-browser-languageDetector
|
||||
.use(LanguageDetector)
|
||||
// pass the i18n instance to react-i18next.
|
||||
.use(initReactI18next)
|
||||
// init i18next
|
||||
// for all options read: https://www.i18next.com/overview/configuration-options
|
||||
.init({
|
||||
backend: {
|
||||
// translation file path
|
||||
loadPath: "/locales/{{lng}}.json",
|
||||
},
|
||||
debug: true,
|
||||
fallbackLng: "en",
|
||||
interpolation: {
|
||||
escapeValue: false, // not needed for react as it escapes by default
|
||||
},
|
||||
});
|
||||
|
||||
export default i18n;
|
||||
+21
-36
@@ -4,50 +4,35 @@
|
||||
@tailwind components;
|
||||
@tailwind utilities;
|
||||
|
||||
.header-text {
|
||||
body {
|
||||
@apply bg-gradient-to-br from-custom-bglight to-custom-bgdark;
|
||||
}
|
||||
|
||||
.hero-text {
|
||||
@apply font-medium text-5xl lg:text-7xl xl:text-8xl;
|
||||
}
|
||||
|
||||
.fade-in {
|
||||
animation: fadeIn ease 1s;
|
||||
-webkit-animation: fadeIn ease 1s;
|
||||
-moz-animation: fadeIn ease 1s;
|
||||
-o-animation: fadeIn ease 1s;
|
||||
-ms-animation: fadeIn ease 1s;
|
||||
.header-text {
|
||||
@apply mt-20 lg:mt-48 text-3xl md:text-5xl xl:text-7xl text-center;
|
||||
}
|
||||
@keyframes fadeIn {
|
||||
0% {
|
||||
opacity: 0;
|
||||
}
|
||||
100% {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
.sub-header-text {
|
||||
@apply italic font-thin block text-sm mx-10 md:text-2xl mt-5 text-gray-400;
|
||||
}
|
||||
@-moz-keyframes fadeIn {
|
||||
0% {
|
||||
opacity: 0;
|
||||
}
|
||||
100% {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
.form-input {
|
||||
@apply rounded-xl px-4 py-2 mt-2 bg-gray-bg border-solid border border-gray-300 text-sm md:text-lg;
|
||||
}
|
||||
@-webkit-keyframes fadeIn {
|
||||
0% {
|
||||
opacity: 0;
|
||||
}
|
||||
100% {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
.gold-text {
|
||||
@apply bg-clip-text text-transparent bg-gradient-to-br from-gold-light to-gold-dark;
|
||||
}
|
||||
@-o-keyframes fadeIn {
|
||||
0% {
|
||||
opacity: 0;
|
||||
}
|
||||
100% {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
.fade-effect {
|
||||
animation: fadeEffect 1s ease-in-out;
|
||||
}
|
||||
@-ms-keyframes fadeIn {
|
||||
|
||||
@keyframes fadeEffect {
|
||||
0% {
|
||||
opacity: 0;
|
||||
}
|
||||
|
||||
+6
-2
@@ -1,13 +1,17 @@
|
||||
import React from "react";
|
||||
import React, { Suspense } from "react";
|
||||
import ReactDOM from "react-dom/client";
|
||||
import App from "./App.tsx";
|
||||
import "./index.css";
|
||||
import { BrowserRouter } from "react-router-dom";
|
||||
|
||||
import "./i18n";
|
||||
|
||||
ReactDOM.createRoot(document.getElementById("root")!).render(
|
||||
<BrowserRouter>
|
||||
<React.StrictMode>
|
||||
<App />
|
||||
<Suspense fallback="...is loading">
|
||||
<App />
|
||||
</Suspense>
|
||||
</React.StrictMode>
|
||||
</BrowserRouter>
|
||||
);
|
||||
|
||||
+16
-2
@@ -1,6 +1,10 @@
|
||||
import Navbar from "../Components/Navbar/Navbar";
|
||||
import Hero from "../Components/Hero/Hero";
|
||||
import Services from "../Components/Services/Services";
|
||||
import Hero from "../Components/Pages/Hero/Hero";
|
||||
import Services from "../Components/Pages/Services/Services";
|
||||
import ResultsPage from "../Components/Pages/Results/ResultsPage";
|
||||
import Optimization from "../Components/Pages/Optimization/Optimization";
|
||||
import ContactPage from "../Components/Pages/Contact/ContactPage";
|
||||
import Footer from "../Components/Footer/Footer";
|
||||
|
||||
const Home = () => {
|
||||
return (
|
||||
@@ -10,6 +14,16 @@ const Home = () => {
|
||||
<div id="Services">
|
||||
<Services />
|
||||
</div>
|
||||
<div id="Optimization">
|
||||
<Optimization />
|
||||
</div>
|
||||
<div id="Advantages">
|
||||
<ResultsPage />
|
||||
</div>
|
||||
<div id="Contact">
|
||||
<ContactPage />
|
||||
</div>
|
||||
<Footer />
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
@@ -12,6 +12,7 @@ export default {
|
||||
"text-gold": "#FACC97",
|
||||
"gold-light": "#FACC97",
|
||||
"gold-dark": "#54330F",
|
||||
"gray-bg": "#1C1C1C",
|
||||
},
|
||||
fontFamily: {
|
||||
baijam: ['"Bai Jamjuree"', "sans-serif"],
|
||||
|
||||
+13
-5
@@ -2,10 +2,13 @@
|
||||
"compilerOptions": {
|
||||
"target": "ES2020",
|
||||
"useDefineForClassFields": true,
|
||||
"lib": ["ES2020", "DOM", "DOM.Iterable"],
|
||||
"lib": [
|
||||
"ES2020",
|
||||
"DOM",
|
||||
"DOM.Iterable"
|
||||
],
|
||||
"module": "ESNext",
|
||||
"skipLibCheck": true,
|
||||
|
||||
/* Bundler mode */
|
||||
"moduleResolution": "bundler",
|
||||
"allowImportingTsExtensions": true,
|
||||
@@ -13,13 +16,18 @@
|
||||
"isolatedModules": true,
|
||||
"noEmit": true,
|
||||
"jsx": "react-jsx",
|
||||
|
||||
/* Linting */
|
||||
"strict": true,
|
||||
"noUnusedLocals": true,
|
||||
"noUnusedParameters": true,
|
||||
"noFallthroughCasesInSwitch": true
|
||||
},
|
||||
"include": ["src"],
|
||||
"references": [{ "path": "./tsconfig.node.json" }]
|
||||
"include": [
|
||||
"src"
|
||||
],
|
||||
"references": [
|
||||
{
|
||||
"path": "./tsconfig.node.json"
|
||||
}
|
||||
]
|
||||
}
|
||||
Reference in New Issue
Block a user