-

+
+
![]()
{
diff --git a/src/components/sections/ourservices/OurServices.tsx b/src/components/sections/ourservices/OurServices.tsx
index c5c12be..c2a8ec1 100644
--- a/src/components/sections/ourservices/OurServices.tsx
+++ b/src/components/sections/ourservices/OurServices.tsx
@@ -2,10 +2,14 @@
import SectionTitle from '@/components/utils/SectionTitle'
import Service from '@/components/sections/ourservices/Service'
import Button from '@/components/utils/Button'
+import getObfuscatedEmail from '@/utils/emailObfuscator'
const OurServices: React.FC = () => {
const mailTo = () => {
- window.open('mailto:contact@support-informatique.ch', '_blank')
+ const email = getObfuscatedEmail()
+ .replace(/<[^>]*>/g, '')
+ .replace(/(\d+);/g, (_, dec) => String.fromCharCode(dec))
+ window.open(`mailto:${email}`, '_blank')
}
return (
diff --git a/src/components/sections/ourteam/OurTeam.tsx b/src/components/sections/ourteam/OurTeam.tsx
index 339cdbd..34a24cb 100644
--- a/src/components/sections/ourteam/OurTeam.tsx
+++ b/src/components/sections/ourteam/OurTeam.tsx
@@ -16,7 +16,7 @@ const OurTeam: React.FC = () => {
/>
{
}
const mailTo = () => {
- window.open('mailto:contact@support-informatique.ch', '_blank')
+ const email = getObfuscatedEmail()
+ .replace(/<[^>]*>/g, '')
+ .replace(/(\d+);/g, (_, dec) => String.fromCharCode(dec))
+ window.open(`mailto:${email}`, '_blank')
}
return (
@@ -39,7 +43,7 @@ const WhyUs: React.FC = () => {
type='filled'
onClick={scrollToOurServices}
/>
-
)
diff --git a/src/data/data.ts b/src/data/data.ts
index a0e6d72..6106589 100644
--- a/src/data/data.ts
+++ b/src/data/data.ts
@@ -6,10 +6,31 @@ import projectPreviewSarigai from '@/assets/images/project-preview-sarigai.png'
import projectPreviewCapSurLaConfiance from '@/assets/images/project-preview-cap-sur-la-confiance.png'
import projectPreviewCapSurLaConfianceMobile from '@/assets/images/project-preview-cap-sur-la-confiance-mobile.png'
import projectPreviewLogistock from '@/assets/images/project-preview-logistock.png'
+import projectPreviewLavageDuColisee from '@/assets/images/project-preview-lavage-du-colisee.png'
+import projectPreviewPayEvent from '@/assets/images/project-preview-pay-event.png'
export const heroImages = [bluredBackground, darkLogo, whiteBottomRounded]
export const projects = [
+ {
+ title: 'LOGISTOCK',
+ description: [
+ "Développement d'une plateforme de E-Commerce pour l'entreprise Logistock.",
+ "Site d'annonces/achats de matériaux de constructions pour les chantiers en cours."
+ ],
+ image: projectPreviewLogistock,
+ link: 'https://app.logistock.ch'
+ },
+
+ {
+ title: 'PAY EVENT',
+ description: [
+ "Point de vente simple et intuitif pour l'organisation d'événements.",
+ 'Système de génération de QRCode Twint pour faciliter les transactions.'
+ ],
+ image: projectPreviewPayEvent,
+ link: 'https://pay-event.ch/'
+ },
{
title: 'SARIGAI',
description: [
@@ -30,12 +51,12 @@ export const projects = [
link: 'https://app.capsurlaconfiance.ch'
},
{
- title: 'LOGISTOCK',
+ title: 'LAVAGE DU COLISÉE',
description: [
- "Développement d'une plateforme de E-Commerce pour l'entreprise Logistock.",
- "Site d'annonces/achats de matériaux de constructions pour les chantiers en cours."
+ "Développement d'un système de gestion du paiement et de l'utilisation des machines de lavage.",
+ 'Système hébergé sur place en mode kiosk pour une utilisation autonome.'
],
- image: projectPreviewLogistock,
- link: 'https://app.logistock.ch'
+ image: projectPreviewLavageDuColisee,
+ link: 'https://lavageducolisee.ch/'
}
]
diff --git a/src/utils/emailObfuscator.ts b/src/utils/emailObfuscator.ts
new file mode 100644
index 0000000..a3b2a5d
--- /dev/null
+++ b/src/utils/emailObfuscator.ts
@@ -0,0 +1,41 @@
+/**
+ * Email obfuscation utility to prevent bot scraping
+ * Uses multiple obfuscation techniques:
+ * - Character encoding
+ * - Dynamic string building
+ * - HTML entity encoding
+ * - String reversal
+ * - HTML element splitting
+ */
+
+const getObfuscatedEmail = (): string => {
+ // Split the email into parts
+ const parts = [
+ // contact
+ String.fromCharCode(99, 111, 110, 116, 97, 99, 116),
+ // @
+ String.fromCharCode(64),
+ // codevs
+ String.fromCharCode(99, 111, 100, 101, 118, 115),
+ // .
+ String.fromCharCode(46),
+ // ch
+ String.fromCharCode(99, 104)
+ ]
+
+ // Build the email with some dynamic operations
+ const email = parts.reduce((acc, part) => acc + part, '')
+
+ // Split the email into multiple spans with HTML entities
+ const obfuscatedEmail = email
+ .split('')
+ .map((char, index) => {
+ const charCode = char.charCodeAt(0)
+ return `