diff --git a/src/app/[lang]/page.tsx b/src/app/[lang]/page.tsx index ea771d0..f8e8adc 100644 --- a/src/app/[lang]/page.tsx +++ b/src/app/[lang]/page.tsx @@ -8,7 +8,8 @@ import ProductVisual from "@/components/product-visuals"; import Link from "next/link"; import { home } from "@/content/home"; import { localize } from "@/i18n/config"; -import { getLocale } from "@/i18n/server"; +import { getUI } from "@/i18n/server"; +import CtaBand from "@/components/cta-band"; type Vars = CSSProperties & Record<`--${string}`, string | number>; const delay = (ms: number) => ({ "--d": `${ms}ms` }) as Vars; @@ -25,7 +26,7 @@ function Eyebrow({ index, children }: { index?: string; children: ReactNode }) { } export default async function Home() { - const locale = await getLocale(); + const { locale, t } = await getUI(); const c = home[locale]; const to = (path: string) => localize(path, locale); const { hero, numbers, capabilities, technology, discovery, journey, difference, cta } = c; @@ -134,6 +135,8 @@ export default async function Home() { + + {/* ───────────────────────── Proprietary technology ───────────────────────── */}
@@ -241,6 +244,8 @@ export default async function Home() {
+ + {/* ───────────────────────── Attention to action ───────────────────────── */}
diff --git a/src/app/favicon.ico b/src/app/favicon.ico new file mode 100644 index 0000000..d913874 Binary files /dev/null and b/src/app/favicon.ico differ diff --git a/src/app/globals.css b/src/app/globals.css index d85a78f..b0f48eb 100644 --- a/src/app/globals.css +++ b/src/app/globals.css @@ -2939,3 +2939,55 @@ html[lang="ar"] .btn, html[lang="ar"] .nav a { font-size: 13px; } + +/* booking band between sections */ +.cta-band { + position: relative; + padding-block: clamp(36px, 5vw, 56px); + border-block: 1px solid var(--grafite); + background: + radial-gradient(ellipse at 85% 50%, rgba(var(--ink-rgb), 0.05), transparent 60%), + var(--nero); +} + +.cta-band-inner { + display: flex; + align-items: center; + justify-content: space-between; + gap: 32px; +} + +.cta-band-copy { + display: flex; + flex-direction: column; + gap: 10px; + min-width: 0; +} + +.cta-band-title { + margin: 0; + font-size: clamp(20px, 2.2vw, 30px); + font-weight: 300; + letter-spacing: -0.02em; + line-height: 1.2; + color: var(--bianco); + text-wrap: balance; +} + +.cta-band-body { + margin: 0; + max-width: 60ch; + font-size: 15px; + color: var(--argento); +} + +.cta-band .btn { + flex: none; +} + +@media (max-width: 760px) { + .cta-band-inner { + flex-direction: column; + align-items: flex-start; + } +} diff --git a/src/components/content/content-page.tsx b/src/components/content/content-page.tsx index 241cea9..d7c1b27 100644 --- a/src/components/content/content-page.tsx +++ b/src/components/content/content-page.tsx @@ -1,9 +1,10 @@ -import type { CSSProperties, ReactNode } from "react"; +import { Fragment, type CSSProperties, type ReactNode } from "react"; import Link from "next/link"; import GlobeCanvas from "@/components/globe-canvas"; import StatCounter from "@/components/stat-counter"; import RevealObserver from "@/components/reveal-observer"; import ContactForm from "./contact-form"; +import CtaBand from "@/components/cta-band"; import { localize } from "@/i18n/config"; import { getUI } from "@/i18n/server"; import type { UI } from "@/i18n/ui"; @@ -537,9 +538,12 @@ export default async function ContentPage({ page, trail }: { page: Page; trail: {body.map((section, i) => { const Variant = variants[section.kind] ?? TextSection; + // A booking band after the 2nd section and every 3rd after that, unless the section + // already ends in its own call to action or holds the form. + const band = i % 3 === 1 && i < body.length - 1 && !section.form && section.ctas.length === 0; return ( +
@@ -552,6 +556,8 @@ export default async function ContentPage({ page, trail }: { page: Page; trail: )}
+ {band && } + ); })} {closing && } diff --git a/src/components/cta-band.tsx b/src/components/cta-band.tsx new file mode 100644 index 0000000..fae0f10 --- /dev/null +++ b/src/components/cta-band.tsx @@ -0,0 +1,20 @@ +import Link from "next/link"; +import { localize, type Locale } from "@/i18n/config"; +import type { UI } from "@/i18n/ui"; + +/** Compact call to action placed between sections, so a booking link is always close while scrolling. */ +export default function CtaBand({ t, locale }: { t: UI; locale: Locale }) { + return ( + + ); +} diff --git a/src/content/pages/ar/contact.json b/src/content/pages/ar/contact.json index 0857791..4bc708e 100644 --- a/src/content/pages/ar/contact.json +++ b/src/content/pages/ar/contact.json @@ -117,7 +117,7 @@ "subtitle": "المقر العالمي", "body": [ "مقرنا العالمي ومركز الابتكار لدينا في منطقة الشرق الأوسط وشمال أفريقيا.", - "Downtown Dubai, UAE\nPhone: +971 55 647 0342\nEmail: info@aigrowthtechnologies.com" + "Blue Bay Tower, Office 312, 3rd Floor\nMarasi Drive Street, Business Bay\nDubai, UAE\nPhone: +971 55 647 0342\nEmail: info@aigrowthtechnologies.com" ], "list": [], "cta": null diff --git a/src/content/pages/en/contact.json b/src/content/pages/en/contact.json index 5d11a12..82b7d63 100644 --- a/src/content/pages/en/contact.json +++ b/src/content/pages/en/contact.json @@ -117,7 +117,7 @@ "subtitle": "Global HQ", "body": [ "Our global headquarters and innovation hub in the MENA region.", - "Downtown Dubai, UAE\nPhone: +971 55 647 0342\nEmail: info@aigrowthtechnologies.com" + "Blue Bay Tower, Office 312, 3rd Floor\nMarasi Drive Street, Business Bay\nDubai, UAE\nPhone: +971 55 647 0342\nEmail: info@aigrowthtechnologies.com" ], "list": [], "cta": null diff --git a/src/content/pages/en/services.json b/src/content/pages/en/services.json index 16b7fa8..c3c8466 100644 --- a/src/content/pages/en/services.json +++ b/src/content/pages/en/services.json @@ -28,9 +28,9 @@ "eyebrow": "WHEN EVERY CHANNEL HAS ITS OWN PLAN", "title": "Good Marketing Can Still Add Up to a Bad Growth System.", "intro": [ - "Your SEO team is chasing rankings. Paid media is optimising campaigns. Social is building engagement. The website team is working through its own list. Everyone is busy.", + "Your SEO team is chasing rankings. Paid media is optimizing campaigns. Social is building engagement. The website team is working through its own list. Everyone is busy.", "But is the business learning anything across those channels?", - "A high-converting paid search term could shape organic content. Search behaviour could reveal questions worth targeting in AI answers. Website data could expose where promising traffic disappears. Brand insights could improve the ads people see before they ever search for you.", + "A high-converting paid search term could shape organic content. Search behavior could reveal questions worth targeting in AI answers. Website data could expose where promising traffic disappears. Brand insights could improve the ads people see before they ever search for you.", "When those signals stay inside separate teams and dashboards, the business misses part of their value.", "We bring them together so what works in one place can make the next decision smarter." ], @@ -108,7 +108,7 @@ "title": "Brand Creation & Optimization", "subtitle": null, "body": [ - "Clarify how your business looks, sounds, and positions itself so people recognise the same company wherever they encounter it.", + "Clarify how your business looks, sounds, and positions itself so people recognize the same company wherever they encounter it.", "Strong positioning gives search, media, social, and web a clearer message to carry." ], "list": [], @@ -147,7 +147,7 @@ "eyebrow": "THE VALUE IS IN WHAT CONNECTS", "title": "One Useful Signal Should Never Stop at One Channel.", "intro": [ - "A paid campaign tells us which message gets attention. Search data tells us what people are actively looking for. AI visibility shows where the brand is entering new forms of discovery. Website behaviour tells us what happens when people arrive.", + "A paid campaign tells us which message gets attention. Search data tells us what people are actively looking for. AI visibility shows where the brand is entering new forms of discovery. Website behavior tells us what happens when people arrive.", "None of those signals needs to live alone.", "We use what the business is already learning to improve what happens next.", "That is where an integrated growth system becomes more valuable over time. Not because there are more channels, but because each one gives the others better information." @@ -163,9 +163,9 @@ "eyebrow": "SAME SYSTEM. DIFFERENT REALITY.", "title": "Different Industries Change the Playbook.", "intro": [ - "The fundamentals of growth may travel. Customer behaviour does not.", - "A hospitality company doesn't acquire customers the same way a B2B organisation does. Medical and dental businesses operate within different constraints than e-commerce brands.", - "Home services, automotive companies, and creators each have their own buying cycles, competition, search behaviour, and conversion points.", + "The fundamentals of growth may travel. Customer behavior does not.", + "A hospitality company doesn't acquire customers the same way a B2B organization does. Medical and dental businesses operate within different constraints than e-commerce brands.", + "Home services, automotive companies, and creators each have their own buying cycles, competition, search behavior, and conversion points.", "We keep the capabilities connected while adapting the strategy to the market they have to perform in." ], "items": [], diff --git a/src/content/pages/en/services_paid-media.json b/src/content/pages/en/services_paid-media.json index baf59d8..32b3a59 100644 --- a/src/content/pages/en/services_paid-media.json +++ b/src/content/pages/en/services_paid-media.json @@ -123,7 +123,7 @@ "title": "Atrilyx Connects the Signals Behind the Spend.", "intro": [ "Paid media creates information everywhere.", - "Campaign platforms hold media data. Your website captures behaviour. Your CRM may know which leads became customers. Revenue data tells another part of the story.", + "Campaign platforms hold media data. Your website captures behavior. Your CRM may know which leads became customers. Revenue data tells another part of the story.", "Atrilyx brings those signals into a more connected view." ], "items": [ @@ -212,7 +212,7 @@ }, { "eyebrow": "A CLEARER WAY TO RUN PAID MEDIA", - "title": "From Audit to Ongoing Optimisation.", + "title": "From Audit to Ongoing Optimization.", "intro": [], "items": [ { @@ -256,7 +256,7 @@ "title": "Learn", "subtitle": null, "body": [ - "We evaluate acquisition cost, conversion behaviour, lead or customer quality, creative performance, and the wider signals available through Atrilyx." + "We evaluate acquisition cost, conversion behavior, lead or customer quality, creative performance, and the wider signals available through Atrilyx." ], "list": [], "cta": null, @@ -264,11 +264,11 @@ }, { "kicker": null, - "title": "Optimise", + "title": "Optimize", "subtitle": null, "body": [ "Budgets shift. Creative evolves. Weak assumptions get replaced. Strong campaigns earn room to scale.", - "Optimisation continues because the market keeps giving us new information." + "Optimization continues because the market keeps giving us new information." ], "list": [], "cta": null, @@ -285,7 +285,7 @@ "eyebrow": "ONE MEDIA PLAN DOESN’T FIT EVERY MARKET", "title": "Global Reach Needs Local Judgment.", "intro": [ - "Customer behaviour changes by market. So do competition, search patterns, platform usage, media costs, and creative expectations.", + "Customer behavior changes by market. So do competition, search patterns, platform usage, media costs, and creative expectations.", "AI Growth Technologies supports multi-market campaigns with a connected view of performance, while letting targeting, creative, channel mix, and budget decisions respond to local conditions.", "The strategy stays coordinated without pretending every market behaves the same way." ], @@ -302,7 +302,7 @@ "eyebrow": "PAID MEDIA DOESN’T WORK ALONE", "title": "Explore the Services Around Your Media Strategy.", "intro": [ - "Paid campaigns often reveal opportunities beyond the ad account. Search demand, landing-page behaviour, creative response, and conversion data can point to what to address next." + "Paid campaigns often reveal opportunities beyond the ad account. Search demand, landing-page behavior, creative response, and conversion data can point to what to address next." ], "items": [ { @@ -394,7 +394,7 @@ "title": "How do you measure paid media performance?", "subtitle": null, "body": [ - "That depends on what the business is trying to achieve. Measurement can include qualified leads, customer acquisition cost, revenue, ROAS, conversion behaviour, and other business outcomes alongside platform metrics." + "That depends on what the business is trying to achieve. Measurement can include qualified leads, customer acquisition cost, revenue, ROAS, conversion behavior, and other business outcomes alongside platform metrics." ], "list": [], "cta": null diff --git a/src/content/pages/en/services_seo.json b/src/content/pages/en/services_seo.json index 3fe52de..8cd0373 100644 --- a/src/content/pages/en/services_seo.json +++ b/src/content/pages/en/services_seo.json @@ -3,7 +3,7 @@ "path": "/services/seo", "meta": { "title": "SEO Services | AI Growth Technologies", - "description": "Build organic visibility with technical SEO, content, authority, local search, and meSEO insights that connect rankings with visitor behaviour." + "description": "Build organic visibility with technical SEO, content, authority, local search, and meSEO insights that connect rankings with visitor behavior." }, "hero": { "eyebrow": "RANKINGS ARE ONLY THE BEGINNING.", @@ -11,7 +11,7 @@ "intro": [ "A page can rank first and still bring the wrong traffic. Organic visits can climb while leads stay flat. A keyword report can look impressive without telling you what happened after someone landed.", "That is why we look at more than position.", - "AI Growth Technologies combines technical SEO, on-page optimisation, content, authority, and behavioural insight to build organic visibility around searches that matter to the business.", + "AI Growth Technologies combines technical SEO, on-page optimization, content, authority, and behavioral insight to build organic visibility around searches that matter to the business.", "Then meSEO helps us see what visitors actually do with that visibility." ], "items": [], @@ -32,7 +32,7 @@ "Useful information. Not the whole story.", "What did those visitors do next?", "Did they find what they came for? Which pages kept them moving? Where did they leave? Which search topics produced meaningful engagement or conversion?", - "We connect search performance with post-click behaviour, so SEO decisions are shaped by more than what happened on the results page." + "We connect search performance with post-click behavior, so SEO decisions are shaped by more than what happened on the results page." ], "items": [], "outro": [], @@ -107,7 +107,7 @@ "subtitle": null, "body": [ "See what organic visitors do once the ranking has done its job.", - "meSEO connects search visibility with on-site behaviour so we can identify where organic traffic engages, moves forward, converts, or disappears." + "meSEO connects search visibility with on-site behavior so we can identify where organic traffic engages, moves forward, converts, or disappears." ], "list": [], "cta": null @@ -164,7 +164,7 @@ "title": "Site Intelligence", "subtitle": null, "body": [ - "Identify technical health issues and optimisation opportunities that could affect organic performance." + "Identify technical health issues and optimization opportunities that could affect organic performance." ], "list": [], "cta": null @@ -198,12 +198,12 @@ }, { "eyebrow": "THE BEST SEO INSIGHT DOESN’T HAVE TO STAY IN SEO", - "title": "Search Behaviour Can Improve More Than Rankings.", + "title": "Search Behavior Can Improve More Than Rankings.", "intro": [ "Search is one of the clearest expressions of customer intent available to a business.", "People tell Google what they want to know, what they are comparing, what is confusing them, and sometimes exactly what they are ready to buy.", "That information can go further.", - "High-value queries can inform paid media. Recurring questions can reveal opportunities for LLMO and AI visibility. Organic behaviour can expose problems in web development. Search language can even sharpen brand messaging.", + "High-value queries can inform paid media. Recurring questions can reveal opportunities for LLMO and AI visibility. Organic behavior can expose problems in web development. Search language can even sharpen brand messaging.", "SEO becomes more useful when the rest of the growth system can learn from it." ], "items": [], @@ -272,7 +272,7 @@ "title": "Keep Compounding", "subtitle": null, "body": [ - "Search behaviour changes. Competitors publish. Sites grow. Algorithms evolve. New opportunities appear.", + "Search behavior changes. Competitors publish. Sites grow. Algorithms evolve. New opportunities appear.", "We keep refining the technical foundation, content, authority, and user experience around what the data continues to reveal." ], "list": [], @@ -380,7 +380,7 @@ "title": "What is included in your SEO services?", "subtitle": null, "body": [ - "SEO engagements can include technical SEO, on-page optimisation, content strategy, local SEO, internal linking, authority building, competitor analysis, measurement, and behavioural analysis through meSEO. The mix depends on what the site and business actually need." + "SEO engagements can include technical SEO, on-page optimization, content strategy, local SEO, internal linking, authority building, competitor analysis, measurement, and behavioral analysis through meSEO. The mix depends on what the site and business actually need." ], "list": [], "cta": null @@ -410,7 +410,7 @@ "title": "What is meSEO, and how does it support SEO?", "subtitle": null, "body": [ - "meSEO is AI Growth Technologies’ proprietary search and behavioural analytics platform. It helps connect ranking and search data with what organic visitors do after reaching the site, giving us another layer of evidence for content, technical, and conversion decisions." + "meSEO is AI Growth Technologies’ proprietary search and behavioral analytics platform. It helps connect ranking and search data with what organic visitors do after reaching the site, giving us another layer of evidence for content, technical, and conversion decisions." ], "list": [], "cta": null @@ -436,7 +436,7 @@ "title": "See Where Your Search Opportunities Really Are.", "intro": [ "If SEO is already producing traffic, we can assess what that visibility is contributing and where valuable opportunities may still be missed.", - "If organic growth has stalled, we can examine the technical foundation, content, authority, competitors, and visitor behaviour to understand what deserves attention first." + "If organic growth has stalled, we can examine the technical foundation, content, authority, competitors, and visitor behavior to understand what deserves attention first." ], "items": [], "outro": [], diff --git a/src/content/pages/es/contact.json b/src/content/pages/es/contact.json index 1a2e1d5..d733950 100644 --- a/src/content/pages/es/contact.json +++ b/src/content/pages/es/contact.json @@ -117,7 +117,7 @@ "subtitle": "Sede global", "body": [ "Nuestra sede global y centro de innovación en la región MENA.", - "Downtown Dubai, UAE\nPhone: +971 55 647 0342\nEmail: info@aigrowthtechnologies.com" + "Blue Bay Tower, Office 312, 3rd Floor\nMarasi Drive Street, Business Bay\nDubai, UAE\nPhone: +971 55 647 0342\nEmail: info@aigrowthtechnologies.com" ], "list": [], "cta": null diff --git a/src/i18n/ui/ar.ts b/src/i18n/ui/ar.ts index 26e7559..25866a0 100644 --- a/src/i18n/ui/ar.ts +++ b/src/i18n/ui/ar.ts @@ -23,6 +23,10 @@ export const ar: UI = { darkTheme: "التبديل إلى الوضع الداكن", }, bookCall: "احجز مكالمة استراتيجية", + ctaBand: { + title: "هل أنت مستعد لمعرفة أين يتعثر نمو أعمالك؟", + body: "تحدث مع أحد خبراء الاستراتيجية حول قنواتك وبياناتك وما يجب إصلاحه أولاً.", + }, services: { "paid-media": "الإعلانات المدفوعة", seo: "تحسين محركات البحث (SEO)", diff --git a/src/i18n/ui/en.ts b/src/i18n/ui/en.ts index c968805..f1dce30 100644 --- a/src/i18n/ui/en.ts +++ b/src/i18n/ui/en.ts @@ -23,6 +23,10 @@ export const en = { darkTheme: "Switch to dark theme", }, bookCall: "Book a Strategy Call", + ctaBand: { + title: "Ready to see where growth is getting stuck?", + body: "Talk to a strategist about your channels, your data, and what to fix first.", + }, services: { "paid-media": "Paid Media", seo: "SEO", diff --git a/src/i18n/ui/es.ts b/src/i18n/ui/es.ts index 562003a..c269448 100644 --- a/src/i18n/ui/es.ts +++ b/src/i18n/ui/es.ts @@ -23,6 +23,10 @@ export const es: UI = { darkTheme: "Cambiar a tema oscuro", }, bookCall: "Agenda una llamada estratégica", + ctaBand: { + title: "¿Listo para ver dónde se está frenando tu crecimiento?", + body: "Habla con un estratega sobre tus canales, tus datos y qué conviene resolver primero.", + }, services: { "paid-media": "Medios pagados", seo: "SEO",