Compare commits
18 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 0d08deac73 | |||
| e35c367e1b | |||
| c7c6e9187e | |||
| 46bd7779a7 | |||
| 681ceff837 | |||
| a0e1f0d033 | |||
| 75ac5d01d8 | |||
| c196d3c65c | |||
| e55d8007b8 | |||
| bab0f08a6e | |||
| 411088fae3 | |||
| d3ca6ec8f9 | |||
| 8afdb652c3 | |||
| 9d089d6447 | |||
| 1ffdd86b5c | |||
| 586be08f8b | |||
| 2e17d1828c | |||
| 063390c53f |
@@ -4,14 +4,9 @@ import { Inter } from "next/font/google";
|
|||||||
import "./globals.css";
|
import "./globals.css";
|
||||||
import { ServiceWrapper } from "@/components/ServiceWrapper";
|
import { ServiceWrapper } from "@/components/ServiceWrapper";
|
||||||
import Tag from "@/tag/Tag";
|
import Tag from "@/tag/Tag";
|
||||||
|
import { Poppins } from "next/font/google";
|
||||||
|
|
||||||
const mulish = Mulish({
|
|
||||||
variable: "--font-mulish", subsets: ["latin"],
|
|
||||||
});
|
|
||||||
|
|
||||||
const inter = Inter({
|
|
||||||
variable: "--font-inter", subsets: ["latin"],
|
|
||||||
});
|
|
||||||
|
|
||||||
export const metadata: Metadata = {
|
export const metadata: Metadata = {
|
||||||
title: "Nexus Marketing | Strategic Digital Marketing Agency", description: "Award-winning marketing agency specializing in digital strategy, content creation, SEO, and brand design. Drive growth with data-driven campaigns.", keywords: "marketing agency, digital marketing, brand strategy, SEO, content marketing, marketing campaigns", openGraph: {
|
title: "Nexus Marketing | Strategic Digital Marketing Agency", description: "Award-winning marketing agency specializing in digital strategy, content creation, SEO, and brand design. Drive growth with data-driven campaigns.", keywords: "marketing agency, digital marketing, brand strategy, SEO, content marketing, marketing campaigns", openGraph: {
|
||||||
@@ -23,6 +18,12 @@ export const metadata: Metadata = {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const poppins = Poppins({
|
||||||
|
variable: "--font-poppins",
|
||||||
|
subsets: ["latin"],
|
||||||
|
weight: ["100", "200", "300", "400", "500", "600", "700", "800", "900"],
|
||||||
|
});
|
||||||
|
|
||||||
export default function RootLayout({
|
export default function RootLayout({
|
||||||
children,
|
children,
|
||||||
}: Readonly<{
|
}: Readonly<{
|
||||||
@@ -31,9 +32,7 @@ export default function RootLayout({
|
|||||||
return (
|
return (
|
||||||
<html lang="en" suppressHydrationWarning>
|
<html lang="en" suppressHydrationWarning>
|
||||||
<ServiceWrapper>
|
<ServiceWrapper>
|
||||||
<body
|
<body className={`${poppins.variable} antialiased`}>
|
||||||
className={`${mulish.variable} ${inter.variable} antialiased`}
|
|
||||||
>
|
|
||||||
<Tag />
|
<Tag />
|
||||||
{children}
|
{children}
|
||||||
|
|
||||||
@@ -278,9 +277,7 @@ export default function RootLayout({
|
|||||||
const getElementInfo = (element, assignId = false) => {
|
const getElementInfo = (element, assignId = false) => {
|
||||||
const rect = element.getBoundingClientRect();
|
const rect = element.getBoundingClientRect();
|
||||||
const tagName = element.tagName.toLowerCase();
|
const tagName = element.tagName.toLowerCase();
|
||||||
const selector = getUniqueSelector(element, assignId);
|
|
||||||
const sectionId = getSectionId(element);
|
|
||||||
|
|
||||||
let className = undefined;
|
let className = undefined;
|
||||||
try {
|
try {
|
||||||
if (element.className) {
|
if (element.className) {
|
||||||
@@ -308,8 +305,7 @@ export default function RootLayout({
|
|||||||
};
|
};
|
||||||
|
|
||||||
if (tagName === 'img') {
|
if (tagName === 'img') {
|
||||||
const originalSrc = extractOriginalUrl(element.src);
|
info.imageData = {
|
||||||
info.imageData = {
|
|
||||||
src: originalSrc,
|
src: originalSrc,
|
||||||
alt: element.alt || undefined,
|
alt: element.alt || undefined,
|
||||||
naturalWidth: element.naturalWidth,
|
naturalWidth: element.naturalWidth,
|
||||||
@@ -320,8 +316,7 @@ export default function RootLayout({
|
|||||||
|
|
||||||
if (tagName === 'video') {
|
if (tagName === 'video') {
|
||||||
const rawSrc = element.src || element.currentSrc || (element.querySelector('source') && element.querySelector('source').src) || '';
|
const rawSrc = element.src || element.currentSrc || (element.querySelector('source') && element.querySelector('source').src) || '';
|
||||||
const resolvedSrc = extractOriginalUrl(rawSrc);
|
info.imageData = {
|
||||||
info.imageData = {
|
|
||||||
src: resolvedSrc,
|
src: resolvedSrc,
|
||||||
alt: element.getAttribute('aria-label') || undefined,
|
alt: element.getAttribute('aria-label') || undefined,
|
||||||
isBackground: false,
|
isBackground: false,
|
||||||
@@ -334,8 +329,7 @@ export default function RootLayout({
|
|||||||
if (backgroundImage && backgroundImage !== 'none') {
|
if (backgroundImage && backgroundImage !== 'none') {
|
||||||
const urlMatch = backgroundImage.match(/url(['"]?([^'")]+)['"]?)/);
|
const urlMatch = backgroundImage.match(/url(['"]?([^'")]+)['"]?)/);
|
||||||
if (urlMatch) {
|
if (urlMatch) {
|
||||||
const originalBgSrc = extractOriginalUrl(urlMatch[1]);
|
if (tagName !== 'img') {
|
||||||
if (tagName !== 'img') {
|
|
||||||
info.imageData = {
|
info.imageData = {
|
||||||
src: originalBgSrc,
|
src: originalBgSrc,
|
||||||
isBackground: true
|
isBackground: true
|
||||||
@@ -347,8 +341,7 @@ export default function RootLayout({
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const elementType = getElementType(element);
|
info.elementType = elementType;
|
||||||
info.elementType = elementType;
|
|
||||||
|
|
||||||
if (elementType === 'Button') {
|
if (elementType === 'Button') {
|
||||||
const buttonText = element.textContent?.trim() || element.value || element.getAttribute('aria-label') || '';
|
const buttonText = element.textContent?.trim() || element.value || element.getAttribute('aria-label') || '';
|
||||||
@@ -441,13 +434,11 @@ export default function RootLayout({
|
|||||||
};
|
};
|
||||||
|
|
||||||
const isTextElement = (element) => {
|
const isTextElement = (element) => {
|
||||||
const elementType = getElementType(element);
|
return elementType === 'Text';
|
||||||
return elementType === 'Text';
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const isButtonElement = (element) => {
|
const isButtonElement = (element) => {
|
||||||
const elementType = getElementType(element);
|
return elementType === 'Button';
|
||||||
return elementType === 'Button';
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const updateButtonText = (element, newText) => {
|
const updateButtonText = (element, newText) => {
|
||||||
@@ -522,8 +513,7 @@ export default function RootLayout({
|
|||||||
};
|
};
|
||||||
|
|
||||||
const handleInput = () => {
|
const handleInput = () => {
|
||||||
const elementInfo = getElementInfo(element);
|
let currentText = element.textContent;
|
||||||
let currentText = element.textContent;
|
|
||||||
|
|
||||||
// Ensure there's always at least a space to keep the element editable
|
// Ensure there's always at least a space to keep the element editable
|
||||||
if (currentText === '' || currentText === null || currentText.length === 0) {
|
if (currentText === '' || currentText === null || currentText.length === 0) {
|
||||||
@@ -636,8 +626,7 @@ export default function RootLayout({
|
|||||||
}, '*');
|
}, '*');
|
||||||
|
|
||||||
if (save && originalContent !== element.textContent) {
|
if (save && originalContent !== element.textContent) {
|
||||||
const elementInfo = getElementInfo(element);
|
let finalText = element.textContent;
|
||||||
let finalText = element.textContent;
|
|
||||||
|
|
||||||
// Trim the final text and convert space-only to empty string for saving
|
// Trim the final text and convert space-only to empty string for saving
|
||||||
if (finalText === ' ' || finalText.trim() === '') {
|
if (finalText === ' ' || finalText.trim() === '') {
|
||||||
@@ -766,7 +755,7 @@ export default function RootLayout({
|
|||||||
lastMouseX = e.clientX;
|
lastMouseX = e.clientX;
|
||||||
lastMouseY = e.clientY;
|
lastMouseY = e.clientY;
|
||||||
|
|
||||||
const target = getMostSpecificElement(e.clientX, e.clientY) || e.target;
|
|| e.target;
|
||||||
|
|
||||||
if (!isValidElement(target) || target === hoveredElement || target === selectedElement) {
|
if (!isValidElement(target) || target === hoveredElement || target === selectedElement) {
|
||||||
return;
|
return;
|
||||||
@@ -798,8 +787,7 @@ export default function RootLayout({
|
|||||||
hoverOverlay = createHoverOverlay(target);
|
hoverOverlay = createHoverOverlay(target);
|
||||||
}
|
}
|
||||||
|
|
||||||
const elementType = getElementType(target);
|
showElementTypeLabel(target, elementType);
|
||||||
showElementTypeLabel(target, elementType);
|
|
||||||
|
|
||||||
window.parent.postMessage({
|
window.parent.postMessage({
|
||||||
type: 'webild-element-hover',
|
type: 'webild-element-hover',
|
||||||
@@ -841,7 +829,7 @@ export default function RootLayout({
|
|||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
e.stopPropagation();
|
e.stopPropagation();
|
||||||
|
|
||||||
const target = getMostSpecificElement(e.clientX, e.clientY) || e.target;
|
|| e.target;
|
||||||
if (!isValidElement(target)) return;
|
if (!isValidElement(target)) return;
|
||||||
|
|
||||||
if (selectedElement && selectedElement !== target) {
|
if (selectedElement && selectedElement !== target) {
|
||||||
@@ -886,8 +874,7 @@ export default function RootLayout({
|
|||||||
hoveredElement = null;
|
hoveredElement = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
const elementInfo = getElementInfo(target, true);
|
selectedElement.dataset.webildSelector = elementInfo.selector;
|
||||||
selectedElement.dataset.webildSelector = elementInfo.selector;
|
|
||||||
showElementTypeLabel(target, elementInfo.elementType);
|
showElementTypeLabel(target, elementInfo.elementType);
|
||||||
|
|
||||||
window.parent.postMessage({
|
window.parent.postMessage({
|
||||||
@@ -970,8 +957,7 @@ export default function RootLayout({
|
|||||||
isScrolling = false;
|
isScrolling = false;
|
||||||
|
|
||||||
if (lastMouseX > 0 && lastMouseY > 0) {
|
if (lastMouseX > 0 && lastMouseY > 0) {
|
||||||
const target = getMostSpecificElement(lastMouseX, lastMouseY);
|
if (target && isValidElement(target) && target !== selectedElement) {
|
||||||
if (target && isValidElement(target) && target !== selectedElement) {
|
|
||||||
hoveredElement = target;
|
hoveredElement = target;
|
||||||
|
|
||||||
const computedStyle = window.getComputedStyle(target);
|
const computedStyle = window.getComputedStyle(target);
|
||||||
@@ -985,8 +971,7 @@ export default function RootLayout({
|
|||||||
hoveredElement.classList.add(hoverClass);
|
hoveredElement.classList.add(hoverClass);
|
||||||
hoverOverlay = createHoverOverlay(target);
|
hoverOverlay = createHoverOverlay(target);
|
||||||
|
|
||||||
const elementType = getElementType(target);
|
showElementTypeLabel(target, elementType);
|
||||||
showElementTypeLabel(target, elementType);
|
|
||||||
|
|
||||||
window.parent.postMessage({
|
window.parent.postMessage({
|
||||||
type: 'webild-element-hover',
|
type: 'webild-element-hover',
|
||||||
@@ -1009,8 +994,7 @@ export default function RootLayout({
|
|||||||
|
|
||||||
const saveChangeToStorage = (change) => {
|
const saveChangeToStorage = (change) => {
|
||||||
try {
|
try {
|
||||||
const storageKey = getStorageKey();
|
const existingChanges = JSON.parse(localStorage.getItem(storageKey) || '[]');
|
||||||
const existingChanges = JSON.parse(localStorage.getItem(storageKey) || '[]');
|
|
||||||
|
|
||||||
const filteredChanges = existingChanges.filter(c => {
|
const filteredChanges = existingChanges.filter(c => {
|
||||||
return !(c.oldValue === change.oldValue && c.sectionId === change.sectionId);
|
return !(c.oldValue === change.oldValue && c.sectionId === change.sectionId);
|
||||||
@@ -1030,8 +1014,7 @@ export default function RootLayout({
|
|||||||
|
|
||||||
const clearLocalChanges = () => {
|
const clearLocalChanges = () => {
|
||||||
try {
|
try {
|
||||||
const storageKey = getStorageKey();
|
localStorage.removeItem(storageKey);
|
||||||
localStorage.removeItem(storageKey);
|
|
||||||
window.parent.postMessage({
|
window.parent.postMessage({
|
||||||
type: 'webild-local-changes-cleared',
|
type: 'webild-local-changes-cleared',
|
||||||
data: {}
|
data: {}
|
||||||
@@ -1080,8 +1063,7 @@ export default function RootLayout({
|
|||||||
|
|
||||||
if (e.data.type === 'webild-cancel-changes') {
|
if (e.data.type === 'webild-cancel-changes') {
|
||||||
try {
|
try {
|
||||||
const storageKey = getStorageKey();
|
const savedChanges = localStorage.getItem(storageKey);
|
||||||
const savedChanges = localStorage.getItem(storageKey);
|
|
||||||
if (savedChanges) {
|
if (savedChanges) {
|
||||||
const changes = JSON.parse(savedChanges);
|
const changes = JSON.parse(savedChanges);
|
||||||
changes.forEach(change => {
|
changes.forEach(change => {
|
||||||
@@ -1103,8 +1085,7 @@ export default function RootLayout({
|
|||||||
if (isBackground) {
|
if (isBackground) {
|
||||||
element.style.backgroundImage = change.oldValue ? 'url(' + change.oldValue + ')' : '';
|
element.style.backgroundImage = change.oldValue ? 'url(' + change.oldValue + ')' : '';
|
||||||
} else {
|
} else {
|
||||||
const oldMediaType = getMediaTypeFromUrl(change.oldValue);
|
if (revertTag === 'video' && oldMediaType === 'image') {
|
||||||
if (revertTag === 'video' && oldMediaType === 'image') {
|
|
||||||
swapMediaElement(element, 'img', change.oldValue);
|
swapMediaElement(element, 'img', change.oldValue);
|
||||||
} else if (revertTag === 'img' && oldMediaType === 'video') {
|
} else if (revertTag === 'img' && oldMediaType === 'video') {
|
||||||
swapMediaElement(element, 'video', change.oldValue);
|
swapMediaElement(element, 'video', change.oldValue);
|
||||||
@@ -1152,8 +1133,7 @@ export default function RootLayout({
|
|||||||
const el = textElements[i];
|
const el = textElements[i];
|
||||||
if (isTextElement(el) && el.textContent.trim() === (oldValue || '').trim()) {
|
if (isTextElement(el) && el.textContent.trim() === (oldValue || '').trim()) {
|
||||||
element = el;
|
element = el;
|
||||||
const newSelector = getUniqueSelector(element, true);
|
if (newSelector) {
|
||||||
if (newSelector) {
|
|
||||||
element.dataset.webildSelector = newSelector;
|
element.dataset.webildSelector = newSelector;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@@ -1244,10 +1224,8 @@ export default function RootLayout({
|
|||||||
replaced = true;
|
replaced = true;
|
||||||
} else if (element.tagName.toLowerCase() === 'img') {
|
} else if (element.tagName.toLowerCase() === 'img') {
|
||||||
oldValue = element.src;
|
oldValue = element.src;
|
||||||
const newMediaType = getMediaTypeFromUrl(newSrc);
|
if (newMediaType === 'video' && allowMediaTypeSwap) {
|
||||||
if (newMediaType === 'video' && allowMediaTypeSwap) {
|
if (selectedElement === element) selectedElement = swapped;
|
||||||
const swapped = swapMediaElement(element, 'video', newSrc);
|
|
||||||
if (selectedElement === element) selectedElement = swapped;
|
|
||||||
element = swapped;
|
element = swapped;
|
||||||
} else {
|
} else {
|
||||||
element.src = newSrc;
|
element.src = newSrc;
|
||||||
@@ -1255,11 +1233,9 @@ export default function RootLayout({
|
|||||||
replaced = true;
|
replaced = true;
|
||||||
} else if (element.tagName.toLowerCase() === 'video') {
|
} else if (element.tagName.toLowerCase() === 'video') {
|
||||||
oldValue = element.src || element.currentSrc || '';
|
oldValue = element.src || element.currentSrc || '';
|
||||||
const newMediaType = getMediaTypeFromUrl(newSrc);
|
const sources = element.querySelectorAll('source');
|
||||||
const sources = element.querySelectorAll('source');
|
|
||||||
if (newMediaType === 'image' && allowMediaTypeSwap) {
|
if (newMediaType === 'image' && allowMediaTypeSwap) {
|
||||||
const swapped = swapMediaElement(element, 'img', newSrc);
|
if (selectedElement === element) selectedElement = swapped;
|
||||||
if (selectedElement === element) selectedElement = swapped;
|
|
||||||
element = swapped;
|
element = swapped;
|
||||||
} else {
|
} else {
|
||||||
if (sources.length > 0) {
|
if (sources.length > 0) {
|
||||||
@@ -1281,8 +1257,7 @@ export default function RootLayout({
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (replaced) {
|
if (replaced) {
|
||||||
const elementInfo = getElementInfo(element);
|
|
||||||
|
|
||||||
let cleanOldValue = oldValue;
|
let cleanOldValue = oldValue;
|
||||||
if (oldValue.includes('url(')) {
|
if (oldValue.includes('url(')) {
|
||||||
const urlMatch = oldValue.match(/url(['"]?([^'")]+)['"]?)/);
|
const urlMatch = oldValue.match(/url(['"]?([^'")]+)['"]?)/);
|
||||||
@@ -1353,13 +1328,7 @@ export default function RootLayout({
|
|||||||
}
|
}
|
||||||
}, true);
|
}, true);
|
||||||
|
|
||||||
const urlCheckInterval = setInterval(() => {
|
|
||||||
if (lastPathname !== window.location.pathname) {
|
|
||||||
lastPathname = window.location.pathname;
|
|
||||||
notifyPageChange();
|
|
||||||
}
|
|
||||||
}, 500);
|
|
||||||
|
|
||||||
notifyPageChange();
|
notifyPageChange();
|
||||||
|
|
||||||
window.webildCleanup = () => {
|
window.webildCleanup = () => {
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
"use client"
|
"use client";
|
||||||
|
|
||||||
import { ThemeProvider } from "@/providers/themeProvider/ThemeProvider";
|
import { ThemeProvider } from "@/providers/themeProvider/ThemeProvider";
|
||||||
import NavbarLayoutFloatingInline from '@/components/navbar/NavbarLayoutFloatingInline';
|
import NavbarLayoutFloatingInline from '@/components/navbar/NavbarLayoutFloatingInline';
|
||||||
import HeroBillboardRotatedCarousel from '@/components/sections/hero/HeroBillboardRotatedCarousel';
|
import HeroSplitDualMedia from '@/components/sections/hero/HeroSplitDualMedia';
|
||||||
import TextSplitAbout from '@/components/sections/about/TextSplitAbout';
|
import TextSplitAbout from '@/components/sections/about/TextSplitAbout';
|
||||||
import FeatureCardTwentyFive from '@/components/sections/feature/FeatureCardTwentyFive';
|
import FeatureCardTwentyFive from '@/components/sections/feature/FeatureCardTwentyFive';
|
||||||
import MetricCardThree from '@/components/sections/metrics/MetricCardThree';
|
import MetricCardThree from '@/components/sections/metrics/MetricCardThree';
|
||||||
@@ -41,10 +41,10 @@ export default function LandingPage() {
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="hero" data-section="hero">
|
<div id="hero" data-section="hero">
|
||||||
<HeroBillboardRotatedCarousel
|
<HeroSplitDualMedia
|
||||||
title="Elevate Your Brand Through Strategic Marketing"
|
title="Transform Your Brand With Expert Marketing"
|
||||||
description="We create targeted marketing campaigns that drive growth, increase brand awareness, and convert customers. Partner with our award-winning team to transform your vision into measurable results."
|
description="Strategic marketing campaigns designed to elevate your brand presence and drive measurable business growth."
|
||||||
tag="Marketing Excellence"
|
tag="Marketing Solutions"
|
||||||
tagIcon={Sparkles}
|
tagIcon={Sparkles}
|
||||||
tagAnimation="slide-up"
|
tagAnimation="slide-up"
|
||||||
buttons={[
|
buttons={[
|
||||||
@@ -53,28 +53,17 @@ export default function LandingPage() {
|
|||||||
]}
|
]}
|
||||||
buttonAnimation="slide-up"
|
buttonAnimation="slide-up"
|
||||||
background={{ variant: "plain" }}
|
background={{ variant: "plain" }}
|
||||||
carouselItems={[
|
mediaItems={[
|
||||||
{
|
{
|
||||||
id: "1", imageSrc: "http://img.b2bpic.net/free-photo/laptop-computer-with-company-profit-progress-screen_482257-77678.jpg", imageAlt: "Marketing dashboard with analytics"
|
imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3AM9hp4M6eDzEwMxDU5gYArbELf/uploaded-1772445436332-4x4u1wfq.png", imageAlt: "Marketing dashboard with analytics"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: "2", imageSrc: "http://img.b2bpic.net/free-photo/professionals-present-financial-charts-meeting_482257-121150.jpg", imageAlt: "Business strategy planning session"
|
imageSrc: "https://images.unsplash.com/photo-1552664730-d307ca884978?w=800&h=600&fit=crop&_wi=2", imageAlt: "Business strategy planning session"
|
||||||
},
|
|
||||||
{
|
|
||||||
id: "3", imageSrc: "http://img.b2bpic.net/free-photo/young-coworkers-sharing-concepts-together_329181-19755.jpg", imageAlt: "Creative team brainstorming"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
id: "4", imageSrc: "http://img.b2bpic.net/free-photo/media-marketing-internet-digital-global_53876-138500.jpg", imageAlt: "Social media marketing strategy"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
id: "5", imageSrc: "http://img.b2bpic.net/free-vector/gradient-ui-ux-background_52683-68958.jpg", imageAlt: "Creative design and UI"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
id: "6", imageSrc: "http://img.b2bpic.net/free-photo/growth-status-technology-online-website-concept_53876-21396.jpg", imageAlt: "Business growth metrics"
|
|
||||||
}
|
}
|
||||||
]}
|
]}
|
||||||
autoPlay={true}
|
mediaAnimation="slide-up"
|
||||||
autoPlayInterval={4000}
|
rating={5}
|
||||||
|
ratingText="Trusted by industry leaders"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -82,7 +71,7 @@ export default function LandingPage() {
|
|||||||
<TextSplitAbout
|
<TextSplitAbout
|
||||||
title="Why Choose Nexus Marketing"
|
title="Why Choose Nexus Marketing"
|
||||||
description={[
|
description={[
|
||||||
"At Nexus Marketing, we combine data-driven insights with creative excellence to deliver campaigns that resonate with your audience and drive real business growth. Our team of strategists, designers, and copywriters work collaboratively to ensure every aspect of your marketing aligns with your brand vision and business goals.", "With over a decade of experience across industries, we've helped hundreds of brands achieve their marketing objectives through innovative strategies, compelling storytelling, and measurable results. We don't just create campaigns—we create connections."
|
"At Nexus Marketing, we combine data-driven insights with creative excellence to deliver campaigns that resonate with your audience and drive real business growth."
|
||||||
]}
|
]}
|
||||||
buttons={[
|
buttons={[
|
||||||
{ text: "Explore Our Services", href: "#services" }
|
{ text: "Explore Our Services", href: "#services" }
|
||||||
@@ -103,10 +92,10 @@ export default function LandingPage() {
|
|||||||
title: "Digital Marketing Strategy", description: "Develop comprehensive digital strategies that align with your business goals and maximize ROI across all channels.", icon: Target,
|
title: "Digital Marketing Strategy", description: "Develop comprehensive digital strategies that align with your business goals and maximize ROI across all channels.", icon: Target,
|
||||||
mediaItems: [
|
mediaItems: [
|
||||||
{
|
{
|
||||||
imageSrc: "http://img.b2bpic.net/free-vector/digital-marketing-agency-corporate-social-media-banner-instagram-post-template_1435-1951.jpg?_wi=1", imageAlt: "Digital marketing strategy visualization"
|
imageSrc: "https://images.unsplash.com/photo-1460925895917-adf4e5a5bbf1?w=800&h=600&fit=crop&_wi=1", imageAlt: "Digital marketing strategy visualization"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
imageSrc: "http://img.b2bpic.net/free-vector/search-engine-optimization_24908-55724.jpg?_wi=1", imageAlt: "Analytics dashboard"
|
imageSrc: "https://images.unsplash.com/photo-1460925895917-adf4e5a5bbf1?w=800&h=600&fit=crop&_wi=2", imageAlt: "Analytics dashboard"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -114,10 +103,10 @@ export default function LandingPage() {
|
|||||||
title: "Content Creation & Management", description: "Craft compelling content that engages your audience, establishes authority, and drives meaningful conversations around your brand.", icon: PenTool,
|
title: "Content Creation & Management", description: "Craft compelling content that engages your audience, establishes authority, and drives meaningful conversations around your brand.", icon: PenTool,
|
||||||
mediaItems: [
|
mediaItems: [
|
||||||
{
|
{
|
||||||
imageSrc: "http://img.b2bpic.net/free-photo/young-woman-with-glasses-cafe_273609-3980.jpg?_wi=1", imageAlt: "Content creation workspace"
|
imageSrc: "http://img.b2bpic.net/free-photo/focused-team-leader-presenting-marketing-plan-interested-multiracial-coworkers-serious-speaker-boss-executive-business-trainer-explaining-development-strategy-motivated-mixed-race-employees_482257-13781.jpg?id=17983464", imageAlt: "Content creation workspace"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
imageSrc: "http://img.b2bpic.net/free-vector/digital-marketing-agency-corporate-social-media-banner-instagram-post-template_1435-1951.jpg?_wi=2", imageAlt: "Social media content grid"
|
imageSrc: "https://images.unsplash.com/photo-1552664730-d307ca884978?w=800&h=600&fit=crop&_wi=4", imageAlt: "Social media content grid"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -125,10 +114,10 @@ export default function LandingPage() {
|
|||||||
title: "SEO & Search Marketing", description: "Boost your online visibility with data-driven SEO strategies and targeted search campaigns that attract qualified leads.", icon: Search,
|
title: "SEO & Search Marketing", description: "Boost your online visibility with data-driven SEO strategies and targeted search campaigns that attract qualified leads.", icon: Search,
|
||||||
mediaItems: [
|
mediaItems: [
|
||||||
{
|
{
|
||||||
imageSrc: "http://img.b2bpic.net/free-vector/search-engine-optimization_24908-55724.jpg?_wi=2", imageAlt: "SEO analytics and metrics"
|
imageSrc: "https://images.unsplash.com/photo-1460925895917-adf4e5a5bbf1?w=800&h=600&fit=crop&_wi=3", imageAlt: "SEO analytics and metrics"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
imageSrc: "http://img.b2bpic.net/free-vector/digital-marketing-agency-corporate-social-media-banner-instagram-post-template_1435-1951.jpg?_wi=3", imageAlt: "Search engine optimization"
|
imageSrc: "https://images.unsplash.com/photo-1460925895917-adf4e5a5bbf1?w=800&h=600&fit=crop&_wi=4", imageAlt: "Search engine optimization"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -136,10 +125,10 @@ export default function LandingPage() {
|
|||||||
title: "Brand Identity & Design", description: "Build a distinctive brand identity that resonates with your target audience and sets you apart from competitors.", icon: Palette,
|
title: "Brand Identity & Design", description: "Build a distinctive brand identity that resonates with your target audience and sets you apart from competitors.", icon: Palette,
|
||||||
mediaItems: [
|
mediaItems: [
|
||||||
{
|
{
|
||||||
imageSrc: "http://img.b2bpic.net/free-vector/modern-business-card-template-with-geometric-design_23-2147941082.jpg", imageAlt: "Brand design and identity"
|
imageSrc: "https://images.unsplash.com/photo-1561070791-2526d30994b5?w=800&h=600&fit=crop&_wi=1", imageAlt: "Brand design and identity"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
imageSrc: "http://img.b2bpic.net/free-photo/young-woman-with-glasses-cafe_273609-3980.jpg?_wi=2", imageAlt: "Creative brand assets"
|
imageSrc: "https://images.unsplash.com/photo-1561070791-2526d30994b5?w=800&h=600&fit=crop&_wi=2", imageAlt: "Creative brand assets"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
@@ -187,22 +176,22 @@ export default function LandingPage() {
|
|||||||
author="Sarah Mitchell, CEO of TechFlow Solutions"
|
author="Sarah Mitchell, CEO of TechFlow Solutions"
|
||||||
avatars={[
|
avatars={[
|
||||||
{
|
{
|
||||||
src: "http://img.b2bpic.net/free-photo/close-up-portrait-young-handsome-successful-man_1163-5475.jpg", alt: "Sarah Mitchell"
|
src: "https://images.unsplash.com/photo-1507003211169-0a1dd7228f2d?w=100&h=100&fit=crop", alt: "Sarah Mitchell"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
src: "http://img.b2bpic.net/free-photo/close-up-portrait-young-handsome-successful-man_1163-5475.jpg", alt: "Team member 2"
|
src: "https://images.unsplash.com/photo-1507003211169-0a1dd7228f2d?w=100&h=100&fit=crop", alt: "Team member 2"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
src: "http://img.b2bpic.net/free-photo/close-up-portrait-young-handsome-successful-man_1163-5475.jpg", alt: "Team member 3"
|
src: "https://images.unsplash.com/photo-1507003211169-0a1dd7228f2d?w=100&h=100&fit=crop", alt: "Team member 3"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
src: "http://img.b2bpic.net/free-photo/close-up-portrait-young-handsome-successful-man_1163-5475.jpg", alt: "Team member 4"
|
src: "https://images.unsplash.com/photo-1507003211169-0a1dd7228f2d?w=100&h=100&fit=crop", alt: "Team member 4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
src: "http://img.b2bpic.net/free-photo/close-up-portrait-young-handsome-successful-man_1163-5475.jpg", alt: "Team member 5"
|
src: "https://images.unsplash.com/photo-1507003211169-0a1dd7228f2d?w=100&h=100&fit=crop", alt: "Team member 5"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
src: "http://img.b2bpic.net/free-photo/close-up-portrait-young-handsome-successful-man_1163-5475.jpg", alt: "Team member 6"
|
src: "https://images.unsplash.com/photo-1507003211169-0a1dd7228f2d?w=100&h=100&fit=crop", alt: "Team member 6"
|
||||||
}
|
}
|
||||||
]}
|
]}
|
||||||
ratingAnimation="slide-up"
|
ratingAnimation="slide-up"
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ html {
|
|||||||
body {
|
body {
|
||||||
background-color: var(--background);
|
background-color: var(--background);
|
||||||
color: var(--foreground);
|
color: var(--foreground);
|
||||||
font-family: var(--font-inter), sans-serif;
|
font-family: var(--font-poppins), sans-serif;
|
||||||
position: relative;
|
position: relative;
|
||||||
min-height: 100vh;
|
min-height: 100vh;
|
||||||
overscroll-behavior: none;
|
overscroll-behavior: none;
|
||||||
@@ -24,5 +24,5 @@ h3,
|
|||||||
h4,
|
h4,
|
||||||
h5,
|
h5,
|
||||||
h6 {
|
h6 {
|
||||||
font-family: var(--font-mulish), sans-serif;
|
font-family: var(--font-poppins), sans-serif;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,23 +2,23 @@
|
|||||||
/* Base units */
|
/* Base units */
|
||||||
/* --vw is set by ThemeProvider */
|
/* --vw is set by ThemeProvider */
|
||||||
|
|
||||||
/* --background: #f5f5f5;;
|
/* --background: #0a0a0a;;;
|
||||||
--card: #ffffff;;
|
--card: #1a1a1a;;;
|
||||||
--foreground: #1c1c1c;;
|
--foreground: #fffffae6;;;
|
||||||
--primary-cta: #6139e6;;
|
--primary-cta: #fde047;;;
|
||||||
--secondary-cta: #ffffff;;
|
--secondary-cta: #1a1a1a;;;
|
||||||
--accent: #6139e6;;
|
--accent: #737373;;;
|
||||||
--background-accent: #b3a8e8;; */
|
--background-accent: #737373;;; */
|
||||||
|
|
||||||
--background: #f5f5f5;;
|
--background: #0a0a0a;;;
|
||||||
--card: #ffffff;;
|
--card: #1a1a1a;;;
|
||||||
--foreground: #1c1c1c;;
|
--foreground: #fffffae6;;;
|
||||||
--primary-cta: #6139e6;;
|
--primary-cta: #fde047;;;
|
||||||
--primary-cta-text: #f5f5f5;;
|
--primary-cta-text: #0a0a0a;;;
|
||||||
--secondary-cta: #ffffff;;
|
--secondary-cta: #1a1a1a;;;
|
||||||
--secondary-cta-text: #1c1c1c;;
|
--secondary-cta-text: #fffffae6;;;
|
||||||
--accent: #6139e6;;
|
--accent: #737373;;;
|
||||||
--background-accent: #b3a8e8;;
|
--background-accent: #737373;;;
|
||||||
|
|
||||||
/* text sizing - set by ThemeProvider */
|
/* text sizing - set by ThemeProvider */
|
||||||
/* --text-2xs: clamp(0.465rem, 0.62vw, 0.62rem);
|
/* --text-2xs: clamp(0.465rem, 0.62vw, 0.62rem);
|
||||||
|
|||||||
Reference in New Issue
Block a user