diff --git a/nuxt-frontend/assets/css/global.css b/nuxt-frontend/assets/css/global.css
index be1b084d6..bc774d4d8 100644
--- a/nuxt-frontend/assets/css/global.css
+++ b/nuxt-frontend/assets/css/global.css
@@ -66,6 +66,29 @@
@apply from-[#f2709c] to-[#ff9472] bg-clip-text text-transparent bg-gradient-[89.88deg];
}
+ .cta-gradient-text {
+ @apply bg-gradient-to-r from-[#f2709c] via-[#ff909c] to-[#ff9472] bg-clip-text text-transparent;
+ }
+
+ .cta-gradient-border {
+ border-image: linear-gradient(to bottom, #f2709c, #ff835b) 1;
+ }
+
+ .hoverable-text:hover {
+ @apply bg-gradient-to-r from-[#f2709c] via-[#ff909c] to-[#ff9472] bg-clip-text text-transparent;
+ }
+
+ .cta-section {
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ }
+
+ .cta-box-shadow {
+ -webkit-appearance: none;
+ -webkit-box-shadow: 0 10px 15px rgba(0, 0, 0, 0.25);
+ box-shadow: 0 10px 15px rgba(0, 0, 0, 0.25);
+ }
+
.v2-canopas-gradient-text {
@apply from-[#FF835B] to-[#F2709C] bg-clip-text text-transparent bg-gradient-[270.11deg];
}
diff --git a/nuxt-frontend/assets/images/CTA/fifth-cta-800w.webp b/nuxt-frontend/assets/images/CTA/fifth-cta-800w.webp
new file mode 100644
index 000000000..c4ea05bfe
Binary files /dev/null and b/nuxt-frontend/assets/images/CTA/fifth-cta-800w.webp differ
diff --git a/nuxt-frontend/assets/images/CTA/first-cta-2400w.webp b/nuxt-frontend/assets/images/CTA/first-cta-2400w.webp
new file mode 100644
index 000000000..bb35f5a0d
Binary files /dev/null and b/nuxt-frontend/assets/images/CTA/first-cta-2400w.webp differ
diff --git a/nuxt-frontend/assets/images/CTA/first-cta-400w.webp b/nuxt-frontend/assets/images/CTA/first-cta-400w.webp
new file mode 100644
index 000000000..796327544
Binary files /dev/null and b/nuxt-frontend/assets/images/CTA/first-cta-400w.webp differ
diff --git a/nuxt-frontend/assets/images/CTA/fourth-cta-2400w.webp b/nuxt-frontend/assets/images/CTA/fourth-cta-2400w.webp
new file mode 100644
index 000000000..0e58246ec
Binary files /dev/null and b/nuxt-frontend/assets/images/CTA/fourth-cta-2400w.webp differ
diff --git a/nuxt-frontend/assets/images/CTA/second-cta-2400.svg b/nuxt-frontend/assets/images/CTA/second-cta-2400.svg
new file mode 100644
index 000000000..5e4e46d43
--- /dev/null
+++ b/nuxt-frontend/assets/images/CTA/second-cta-2400.svg
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/nuxt-frontend/assets/images/CTA/second-cta-400.svg b/nuxt-frontend/assets/images/CTA/second-cta-400.svg
new file mode 100644
index 000000000..a946fbdef
--- /dev/null
+++ b/nuxt-frontend/assets/images/CTA/second-cta-400.svg
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/nuxt-frontend/assets/images/small-loader.svg b/nuxt-frontend/assets/images/small-loader.svg
new file mode 100644
index 000000000..6e36eba89
--- /dev/null
+++ b/nuxt-frontend/assets/images/small-loader.svg
@@ -0,0 +1,52 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/nuxt-frontend/components/CTA/CTA1.vue b/nuxt-frontend/components/CTA/CTA1.vue
new file mode 100644
index 000000000..4458b435a
--- /dev/null
+++ b/nuxt-frontend/components/CTA/CTA1.vue
@@ -0,0 +1,88 @@
+
+
+
+
+
+
+ Get started today
+
+
+ Let's build the next big thing!
+
+
+ Let's improve your business's digital strategy and implement
+ robust mobile apps to achieve your business objectives. Schedule Your
+ Free Consultation Now.
+
+
+
+
+ Get Free Consultation
+
+
+
+
+
+
+
+
+
+
+ Get started today
+
+
+ Let's build the next big thing!
+
+
+ Let's improve your business's digital strategy and implement
+ robust mobile apps to achieve your business objectives. Schedule Your
+ Free Consultation Now.
+
+
+
+
+ Get Free Consultation
+
+
+
+
+
+
+
+
+
diff --git a/nuxt-frontend/components/CTA/CTA2.vue b/nuxt-frontend/components/CTA/CTA2.vue
new file mode 100644
index 000000000..5a4e592a6
--- /dev/null
+++ b/nuxt-frontend/components/CTA/CTA2.vue
@@ -0,0 +1,338 @@
+
+
+
+
+
+
+
+
+
+ Say Hello!
+
+
+
+
+
+
diff --git a/nuxt-frontend/components/CTA/CTA3.vue b/nuxt-frontend/components/CTA/CTA3.vue
new file mode 100644
index 000000000..28ea98694
--- /dev/null
+++ b/nuxt-frontend/components/CTA/CTA3.vue
@@ -0,0 +1,348 @@
+
+
+
+
+
+
+
+
+ Talk to an expert
+
+
+ get in
+ touch
+
+
+ Our team is happy to answer your questions. Fill out the form and
+ we’ll get back to you as soon as possible
+
+
+
+
+
+
+
+
+
+
+ Name*
+
+
+
+ Name is required
+
+
+
+
+
+
+ Email*
+
+
+
+ Email is required
+
+
+
+ Please enter valid email address
+
+
+
+
+
+ Phone number*
+
+
+
+ Phone number is required
+
+
+
+ Please enter valid Phone number
+
+
+
+
+
+ Project detail*
+
+
+
+ This field is required
+
+
+
+
+
+
+
+
+
+
+ {{ errorMessage }}
+
+
+
+
+
+ Get Free Consultation
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/nuxt-frontend/components/CTA/CTA4.vue b/nuxt-frontend/components/CTA/CTA4.vue
new file mode 100644
index 000000000..3c310932f
--- /dev/null
+++ b/nuxt-frontend/components/CTA/CTA4.vue
@@ -0,0 +1,75 @@
+
+
+
+
+
+
+
+
+
+
+
+ Whether you need...
+
+
+
+ *
+
+ {{ reason }}
+
+
+
+
+ Bring us your toughest challenge and we'll show you the path
+ to a sleek solution.
+
+
+
+
+ Talk to our experts
+
+
+
+
+
+
+
+
+
+
+
diff --git a/nuxt-frontend/components/CTA/CTA5.vue b/nuxt-frontend/components/CTA/CTA5.vue
new file mode 100644
index 000000000..b8edbae36
--- /dev/null
+++ b/nuxt-frontend/components/CTA/CTA5.vue
@@ -0,0 +1,66 @@
+
+
+
+
+
+
+
+
+
+ L et's
+ W ork
+
+ T ogether
+
+
+ Not sure where to start? We also offer code and architecture
+ reviews, strategic planning, and more.
+
+
+
+
+ Get Free Consultation
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/nuxt-frontend/components/mobile-app-development/CTASection2.vue b/nuxt-frontend/components/mobile-app-development/CTASection2.vue
index 278d18ac9..7a1b9735c 100644
--- a/nuxt-frontend/components/mobile-app-development/CTASection2.vue
+++ b/nuxt-frontend/components/mobile-app-development/CTASection2.vue
@@ -20,7 +20,7 @@
W ork
- T ogether
diff --git a/nuxt-frontend/package.json b/nuxt-frontend/package.json
index dc0187e64..302ceb684 100644
--- a/nuxt-frontend/package.json
+++ b/nuxt-frontend/package.json
@@ -11,7 +11,7 @@
},
"devDependencies": {
"@babel/eslint-parser": "^7.22.15",
- "@canopassoftware/nuxt-blog-kit": "^1.0.3",
+ "@canopassoftware/nuxt-blog-kit": "^1.0.4",
"@ivanv/vue-collapse-transition": "^1.0.2",
"@nuxt/devtools": "latest",
"@nuxtjs/sitemap": "^5.1.0",
diff --git a/nuxt-frontend/pages/[slug].vue b/nuxt-frontend/pages/[slug].vue
index ce9311df9..3cbc02bad 100644
--- a/nuxt-frontend/pages/[slug].vue
+++ b/nuxt-frontend/pages/[slug].vue
@@ -10,6 +10,21 @@
:contact-api-url="config.API_BASE"
/>
+
+
+
+
+
+
+
import Header from "@/components/partials/NewHeader.vue";
+import CTA1 from "@/components/CTA/CTA1.vue";
+import CTA2 from "@/components/CTA/CTA2.vue";
+import CTA3 from "@/components/CTA/CTA3.vue";
+import CTA4 from "@/components/CTA/CTA4.vue";
+import CTA5 from "@/components/CTA/CTA5.vue";
import { useRoute } from "vue-router";
import config from "@/config";
import { useBlogDetailStore } from "@/stores/resources";
@@ -29,6 +49,7 @@ const { $mixpanel } = useNuxtApp();
const post = ref({});
const route = useRoute();
const slug = ref(route.params.slug);
+const CTACompName = ref("");
const store = useBlogDetailStore();
const postData = computed(() => store.item);
@@ -53,6 +74,9 @@ if (status.value !== config.SUCCESS) {
published_time = new Date(post.value?.published_on).toLocaleTimeString();
}
+const CTAData = post.value?.cta?.data;
+CTACompName.value = CTAData?.attributes.component_name;
+
useHead({
script: [
{
diff --git a/nuxt-frontend/tailwind.config.js b/nuxt-frontend/tailwind.config.js
index 76b66bbc1..575805551 100644
--- a/nuxt-frontend/tailwind.config.js
+++ b/nuxt-frontend/tailwind.config.js
@@ -18,6 +18,7 @@ module.exports = {
xl: "1200px",
xl2: "1330px",
"2xl": "1400px",
+ "2x": "1600px",
"2xll": "1800px",
xll: "2440px",
"3xl": "3840px",
@@ -283,7 +284,8 @@ module.exports = {
"linear-gradient(to bottom, #FFFFFF , #FDE0E2 23%, #FDE0E2 88%, #FFFFFF 100%);",
"gradient-L": "linear-gradient(178deg, #FFFFFF 68%, #f77783 40%);",
"gradient-W": "linear-gradient(257deg, #FFFFFF 65%, #f77783 68%);",
- "gradient-T": "linear-gradient(540deg, #FFFFFF 33%, #f77783 10%);",
+ "gradient-T": "linear-gradient(540deg, #FFFFFF 30.5%, #f77783 10%);",
+ "gradient-T-small": "linear-gradient(540deg, #FFFFFF 33%, #f77783 10%);",
"multiple-underline-out":
"linear-gradient(transparent calc(100% - 5px), white 1px)",
"gradient-underline-out":
@@ -333,7 +335,7 @@ module.exports = {
120: "120deg",
135: "135deg",
}),
- },
+ }
);
}),
function ({ addComponents }) {
@@ -366,6 +368,29 @@ module.exports = {
maxWidth: "2550px",
},
},
+ ".blog-container": {
+ margin: "auto",
+ padding: "0 0.75rem",
+ maxWidth: "100%",
+ "@screen sm": {
+ maxWidth: "540px",
+ },
+ "@screen md": {
+ maxWidth: "720px",
+ },
+ "@screen lg": {
+ maxWidth: "960px",
+ },
+ "@screen xl": {
+ maxWidth: "1140px",
+ },
+ "@screen 2xl": {
+ maxWidth: "1320px",
+ },
+ "@screen 2x": {
+ maxWidth: "1470px",
+ },
+ },
});
},
],
diff --git a/nuxt-frontend/utils.js b/nuxt-frontend/utils.js
index 9338ea118..c73b57600 100644
--- a/nuxt-frontend/utils.js
+++ b/nuxt-frontend/utils.js
@@ -36,7 +36,7 @@ function setGithubStars(contributions, githubRepos) {
.filter(
(repo) =>
repo.name ==
- contribution.link.slice(contribution.link.lastIndexOf("/") + 1),
+ contribution.link.slice(contribution.link.lastIndexOf("/") + 1)
)
.map((repo) => repo.stargazers_count.toString())[0];
});
@@ -79,7 +79,7 @@ function getJobDates() {
currentDay <= maxDays
? startDateOfMonth
: new Date(
- startDateOfMonth.setDate(startDateOfMonth.getDate() + maxDays),
+ startDateOfMonth.setDate(startDateOfMonth.getDate() + maxDays)
);
const datePosted = jobPosted.toISOString().split("T")[0];
@@ -160,6 +160,17 @@ function formateDate(date) {
return [formattedDate, formattedTime];
}
+function isValidPhone(phoneNumber) {
+ const phoneRegex = /^[0-9]{10}$/;
+ return !phoneRegex.test(phoneNumber);
+}
+
+function isValidEmail(email) {
+ const emailRegx =
+ /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
+ return !emailRegx.test(email);
+}
+
export {
elementInViewPort,
handleAnimationOnScroll,
@@ -169,4 +180,6 @@ export {
getJobDates,
getDiffrentWidthImages,
setPostFields,
+ isValidPhone,
+ isValidEmail,
};
diff --git a/nuxt-frontend/yarn.lock b/nuxt-frontend/yarn.lock
index a04805558..f2c6047cd 100644
--- a/nuxt-frontend/yarn.lock
+++ b/nuxt-frontend/yarn.lock
@@ -1667,10 +1667,10 @@
"@babel/helper-validator-identifier" "^7.22.20"
to-fast-properties "^2.0.0"
-"@canopassoftware/nuxt-blog-kit@^1.0.3":
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/@canopassoftware/nuxt-blog-kit/-/nuxt-blog-kit-1.0.3.tgz#4da4e6d79ca584683542e2e7001ca39990758f2d"
- integrity sha512-Cm3izWTi27eDzE/WXHq0TTAssPajvC18Md+B+1EV83Ky0jlpWUuA+zolpfOjQ14q60UMm73iZRd3NuLQhkvsSg==
+"@canopassoftware/nuxt-blog-kit@^1.0.4":
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/@canopassoftware/nuxt-blog-kit/-/nuxt-blog-kit-1.0.4.tgz#9c240043c1921a90522dc0a0419f9d3751784566"
+ integrity sha512-XSRfht/DheVL9SZQHGafRCNhpG6fBfXqslgvWgAAtRjFJKbUhRcLOr241oLjgE0ySJzAGUbp31NRlMdSvD/F0A==
dependencies:
"@nuxt/kit" "^3.7.4"
"@pinia/nuxt" "^0.5.0"