Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
"preinstall": "node ./scripts/use-yarn.js",
"find:unused": "next-unused",
"prebuild": "node ./scripts/check-envs.js",
"dev": "next dev -p 3001",
"dev": "next dev --webpack -p 3001",
"dev:tw": "TAILWIND_MODE=watch tailwindcss -o src/tailwind.css --watch",
"build": "node ./scripts/check-envs.js && next build --webpack",
"start": "next start",
Expand Down
8 changes: 6 additions & 2 deletions public/js/cookiebanner.script.js
Original file line number Diff line number Diff line change
Expand Up @@ -156,10 +156,14 @@ var t = translations[lang];

var headerScripts = [
{
title: 'Google Analytics',
title: 'Google Tag Manager',
type: 'analytics',
value:
"\n<script async src=\"https://www.googletagmanager.com/gtag/js?id=G-CHHGLQTHSB\"></script>\n<script>\n window.dataLayer = window.dataLayer || [];\n function gtag(){dataLayer.push(arguments);}\n gtag('js', new Date());\n\n gtag('config', 'G-CHHGLQTHSB', { linker: { domains: [] } });\n</script>",
"<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':\n" +
"new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],\n" +
"j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=\n" +
"'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);\n" +
"})(window,document,'script','dataLayer','GTM-P7N7LW5G');</script>",
},
{
title: 'Google Analytics',
Expand Down
2 changes: 2 additions & 0 deletions src/assets/lang/de/specialOfferTemplate.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
"ai": "AI"
},
"title": "Der sicherste Cloud-Speicher **für weniger**",
"valentinesTitle": "//Liebe// verdient **Privatsphär**",
"description": "Sicherer Cloud-Speicher für weniger. Sichern Sie sich noch heute Ihren besonderen Rabatt. Erhalten Sie Zugang zu Internxts preisgekrönter Privatsphäre-Suite mit post-quantenverschlüsseltem Cloud-Speicher und vielem mehr.",
"subtitle": "Jetzt {{discount}}% Rabatt erhalten",
"claimDeal": "Angebot beanspruchen"
Expand Down Expand Up @@ -60,6 +61,7 @@
"tableSection": {
"title": "Internxt Tarife",
"hotLabel": "{{discount}}% Rabatt",
"valentinesTitle": "Sichere Liebe - ",
"planTitles": {
"header": "Wählen Sie Ihren Plan",
"individuals": "Jahrestärife",
Expand Down
2 changes: 2 additions & 0 deletions src/assets/lang/en/specialOfferTemplate.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
"ai": "AI"
},
"title": "Lifetime cloud storage **for less**",
"valentinesTitle": "//Love// deserves **privacy**",
"description": "Secure cloud storage for less. Claim your special discount today. Access Internxt's award-winning privacy suite with post-quantum encrypted cloud storage and much more.",
"subtitle": "Get {{discount}}% off now",
"claimDeal": "Claim deal"
Expand Down Expand Up @@ -59,6 +60,7 @@
},
"tableSection": {
"title": "Internxt Plans",
"valentinesTitle": "Secure love - ",
"hotLabel": "{{discount}}% off",
"planTitles": {
"header": "Select your lifetime plans",
Expand Down
2 changes: 2 additions & 0 deletions src/assets/lang/es/specialOfferTemplate.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
"ai": "AI"
},
"title": "El almacenamiento más seguro **por menos**",
"valentinesTitle": "El //amor// merece **privacidad**",
"description": "Almacenamiento seguro en la nube por menos. Reclama tu descuento especial hoy. Accede a la galardonada suite de privacidad de Internxt con almacenamiento en la nube encriptado post-cuántico y mucho más.",
"subtitle": "Obtén un {{discount}}% de descuento",
"claimDeal": "Reclamar oferta"
Expand Down Expand Up @@ -60,6 +61,7 @@
"tableSection": {
"title": "Planes de Internxt",
"hotLabel": "{{discount}}% de descuento",
"valentinesTitle": "Amor seguro - ",
"planTitles": {
"header": "Elige tu plan",
"individuals": "Planes Anuales",
Expand Down
2 changes: 2 additions & 0 deletions src/assets/lang/fr/specialOfferTemplate.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
"ai": "AI"
},
"title": "Le stockage cloud le plus sécurisé **pour moins cher**",
"valentinesTitle": "//L'amour// mérite **vie privée**",
"description": "Stockage cloud sécurisé pour moins cher. Réclamez votre remise spéciale dès aujourd'hui. Accédez à la suite de confidentialité primée d'Internxt avec un stockage cloud chiffré post-quantique et bien plus encore.",
"subtitle": "Obtenez {{discount}}% de réduction maintenant",
"claimDeal": "Réclamer l'offre"
Expand Down Expand Up @@ -60,6 +61,7 @@
"tableSection": {
"title": "Forfaits Internxt",
"hotLabel": "{{discount}}% remise",
"valentinesTitle": "Amour sécurisé - ",
"planTitles": {
"header": "Choisissez votre plan",
"individuals": "Forfaits Annuels",
Expand Down
2 changes: 2 additions & 0 deletions src/assets/lang/it/specialOfferTemplate.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
"ai": "AI"
},
"title": "Il cloud storage più sicuro **a meno**",
"valentinesTitle": "L'//amour// mérite **vie privée**",
"description": "Cloud storage sicuro a meno. Rivendica il tuo sconto speciale oggi. Accedi alla pluripremiata suite per la privacy di Internxt con cloud storage crittografato post-quantico e molto altro.",
"subtitle": "Ottieni {{discount}}% di sconto ora",
"claimDeal": "Rivendica l'offerta"
Expand Down Expand Up @@ -60,6 +61,7 @@
"tableSection": {
"title": "Piani Internxt",
"hotLabel": "{{discount}}% sconto",
"valentinesTitle": "Amore sicuro - ",
"planTitles": {
"header": "Scegli il tuo piano",
"individuals": "Piani Annuali",
Expand Down
2 changes: 2 additions & 0 deletions src/assets/lang/ru/specialOfferTemplate.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
"ai": "AI"
},
"title": "Самое безопасное облачное хранилище **за меньшие деньги**",
"valentinesTitle": "//Любовь// заслуживает **приватности**",
"description": "Безопасное облачное хранилище за меньшие деньги. Получите свою специальную скидку сегодня. Получите доступ к отмеченному наградами пакету конфиденциальности Internxt с пост-квантовым зашифрованным облачным хранилищем и многим другим.",
"subtitle": "Получите {{discount}}% скидки прямо сейчас",
"claimDeal": "Получить предложение"
Expand Down Expand Up @@ -60,6 +61,7 @@
"tableSection": {
"title": "Тарифы Internxt",
"hotLabel": "{{discount}}% скидка ",
"valentinesTitle": "Безопасная любовь - ",
"planTitles": {
"header": " Выберите свой план",
"individuals": "Годовые тарифы",
Expand Down
2 changes: 2 additions & 0 deletions src/assets/lang/zh-tw/specialOfferTemplate.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
"mail": "郵件"
},
"title": "最安全的雲端儲存**價格更優**",
"valentinesTitle": "//爱//值得**隐私**",
"description": "更優價格的安全雲端儲存。立即獲取您的專屬折扣。存取Internxt屢獲殊榮的隱私套件,包含後量子加密雲端儲存及更多功能。",
"subtitle": "立即享受{{discount}}%折扣",
"claimDeal": "領取優惠"
Expand Down Expand Up @@ -54,6 +55,7 @@
"tableSection": {
"title": "Internxt方案",
"hotLabel": "{{discount}}% 折扣 ",
"valentinesTitle": "安全的愛 - ",
"planTitles": {
"header": " 選擇您的計劃",
"individuals": "年度方案",
Expand Down
2 changes: 2 additions & 0 deletions src/assets/lang/zh/specialOfferTemplate.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
"mail": "邮箱"
},
"title": "最安全的云存储**价格更低**",
"valentinesTitle": "//爱//值得**隐私**",
"description": "更低价格的安全云存储。立即获取您的专属折扣。访问Internxt屡获殊荣的隐私套件,包含后量子加密云存储等更多功能。",
"subtitle": "立即享受{{discount}}%折扣",
"claimDeal": "获取优惠"
Expand Down Expand Up @@ -54,6 +55,7 @@
"tableSection": {
"title": "Internxt套餐",
"hotLabel": "{{discount}}% 折扣 ",
"valentinesTitle": "安全的爱 - ",
"planTitles": {
"header": " 選擇您的計劃",
"individuals": "年度套餐",
Expand Down
4 changes: 3 additions & 1 deletion src/components/home/HorizontalScrollableSection.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,13 @@ import { useRef, useState, useEffect } from 'react';
interface HorizontalScrollableProps {
textContent: any;
darkMode?: boolean;
isValentinesMode?: boolean;
}

export default function HorizontalScrollableSection({
textContent,
darkMode = false,
isValentinesMode = false,
}: Readonly<HorizontalScrollableProps>): JSX.Element {
const scrollContainerRef = useRef<HTMLDivElement>(null);
const [scrollState, setScrollState] = useState({
Expand Down Expand Up @@ -116,7 +118,7 @@ export default function HorizontalScrollableSection({
return (
<section
className={`flex h-min w-full flex-col items-center justify-center gap-8 overflow-hidden ${
darkMode ? 'bg-[#1C1C1C]' : 'bg-neutral-17'
isValentinesMode ? 'bg-pink-0' : darkMode ? 'bg-[#1C1C1C]' : 'bg-neutral-17'
} pb-10 lg:h-min lg:gap-16 lg:py-20`}
>
<div className="flex h-min w-[345px] flex-col justify-center gap-6 lg:w-[850px]">
Expand Down
10 changes: 9 additions & 1 deletion src/components/home/TrustedSection.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -7,20 +7,28 @@ interface TrustedSectionProps {
bottomBar?: boolean;
darkMode?: boolean;
image?: string;
isValentinesMode?: boolean;
}

export default function TrustedSection({
textContent,
bottomBar = true,
darkMode,
image,
isValentinesMode,
}: Readonly<TrustedSectionProps>): JSX.Element {
return (
<section
className={` flex h-full w-full flex-col items-start justify-start overflow-hidden px-8 py-10 lg:h-min lg:items-center lg:justify-center lg:gap-20 lg:px-32 lg:py-20 ${
darkMode ? 'bg-[#1C1C1C]' : ''
}`}
style={!darkMode && !image ? { background: 'linear-gradient(360deg, #FFFFFF 0%, #F4F8FF 100%)' } : undefined}
style={
isValentinesMode
? { background: 'linear-gradient(360deg, #FFFFFF 0%, #FFF2F8 100%)' }
: !darkMode && !image
? { background: 'linear-gradient(360deg, #FFFFFF 0%, #F4F8FF 100%)' }
: undefined
}
>
<div className="absolute left-8 right-8 top-0 h-[1px] bg-neutral-35 lg:bottom-0 lg:left-32 lg:right-32"></div>
{bottomBar && (
Expand Down
98 changes: 58 additions & 40 deletions src/components/partnersTemplate/HeroSection.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -21,13 +21,15 @@ interface HeroSectionForPartnerProps {
cloudWards?: boolean;
darkMode?: boolean;
image?: any;
isValentinesMode?: boolean;
}

export default function HeroSection({
textContent,
percentOff,
cloudWards = false,
darkMode = false,
isValentinesMode = false,
image = 'internxt-private-cloud',
}: Readonly<HeroSectionForPartnerProps>): JSX.Element {
const [currency, setCurrency] = useState<string>('€');
Expand All @@ -38,56 +40,61 @@ export default function HeroSection({
.then((currency) => {
setCurrency(currency.currency);
})
.catch(() => {
//
});
.catch(() => {});
}, []);

const products = [
{
icon: CloudArrowUp,
text: textContent.products.drive,
},
{
icon: ShieldPlus,
text: textContent.products.antivirus,
},
{
icon: Sparkle,
text: textContent.products.cleaner,
},
{
icon: CellTower,
text: textContent.products.vpn,
},
{
icon: VideoConference,
text: textContent.products.meet,
},
{
icon: Envelope,
text: textContent.products.mail,
},
{
icon: Brain,
text: textContent.products.ai,
},
{ icon: CloudArrowUp, text: textContent.products.drive },
{ icon: ShieldPlus, text: textContent.products.antivirus },
{ icon: Sparkle, text: textContent.products.cleaner },
{ icon: CellTower, text: textContent.products.vpn },
{ icon: VideoConference, text: textContent.products.meet },
{ icon: Envelope, text: textContent.products.mail },
{ icon: Brain, text: textContent.products.ai },
];

const parsePercentText = (text: string) => {
return typeof text === 'string' ? text.replace(/{{discount}}/g, percentOff) : text;
};

const StyledTitle = ({ rawText }: { rawText: string }) => {
const parts = rawText.split(/(\/\/.*?\/\/|\*\*.*?\*\*)/g);

return (
<>
{parts.map((part, index) => {
if (part.startsWith('//') && part.endsWith('//')) {
return (
<span key={index} style={{ color: '#E93D82' }}>
{part.slice(2, -2)}
</span>
);
}
if (part.startsWith('**') && part.endsWith('**')) {
return (
<span key={index} style={{ color: '#007bff' }}>
{part.slice(2, -2)}
</span>
);
}
return part;
})}
</>
);
};

return (
<section
className={`mt-20 flex h-min w-full flex-row items-center justify-center overflow-hidden py-10 lg:mt-16 lg:h-[657px] lg:justify-between lg:pl-10 lg:pr-4 xl:pl-32 xl:pr-16 3xl:pl-80 3xl:pr-60`}
style={{
background: darkMode
background: isValentinesMode
? 'linear-gradient(180deg, #FFF2F8 0%, #FFFFFF 100.01%)'
: darkMode
? 'linear-gradient(180deg, #082D66 0%, #1C1C1C 100%)'
: 'linear-gradient(180deg, #E5EFFF 0%, #FFFFFF 100%)',
}}
>
<div className="flex h-min w-[345px] flex-col justify-center gap-6 lg:h-[392px] lg:w-[566px] lg:justify-between">
<div className="flex h-min w-[345px] flex-col justify-center gap-6 lg:h-[392px] lg:w-[606px] lg:justify-between">
{cloudWards && (
<div className="flex flex-row items-center justify-center space-x-3.5 lg:justify-start ">
<Image
Expand Down Expand Up @@ -130,18 +137,27 @@ export default function HeroSection({
<h1
className={`text-30 font-semibold leading-tight ${darkMode ? 'text-white-95' : 'text-gray-100'} lg:text-5xl`}
>
<HighlightText text={textContent.title} />
{isValentinesMode ? (
<StyledTitle rawText={textContent.valentinesTitle} />
) : (
<HighlightText text={textContent.title} />
)}
</h1>
<div className="flex w-full flex-col justify-center gap-4 lg:gap-8">
<div className="flex flex-col justify-center gap-4">
{percentOff !== '0' && (
<p
className={`w-min whitespace-nowrap rounded-2 ${
darkMode ? 'bg-purple-100 text-purple-8' : 'bg-neutral-37 text-primary '
<span
className={`flex w-min whitespace-nowrap rounded-2 ${
isValentinesMode
? 'gap-0.5 bg-pink-10 text-pink-80'
: darkMode
? 'bg-purple-100 text-purple-8'
: 'bg-neutral-37 text-primary '
} px-1 py-0.5 text-base font-semibold leading-tight lg:text-xl`}
>
{parsePercentText(textContent.subtitle)}
</p>
{isValentinesMode ? '💘' : undefined}
</span>
)}
<p
className={`font-regular ${
Expand All @@ -157,15 +173,17 @@ export default function HeroSection({
<div className="flex w-full flex-row items-start gap-4">
<Link
href={'#billingButtons'}
className="z-10 flex items-center justify-center whitespace-nowrap rounded-sm-6 bg-primary px-6 py-4 text-base font-medium text-white hover:bg-primary-dark"
className="z-10 flex items-center justify-center whitespace-nowrap rounded-sm-6 bg-primary px-7 py-3 text-base font-medium text-white hover:bg-primary-dark"
>
{textContent.claimDeal}
</Link>
</div>
</div>
</div>

<div className="hidden h-[500px] w-[562px] justify-center lg:flex">
<div
className={`${isValentinesMode ? 'h-[580px] w-[582px]' : ' h-[500px] w-[562px]'} hidden justify-center lg:flex`}
>
<Image
src={getImage(`/images/influencers/${image}.webp`)}
alt="Internxt Partners HeroSection Image"
Expand Down
Loading
Loading