Remove Netlify adapter from Astro configuration and clean up translations by deleting unused sections for blog and Anti-Fingerprinting Shield Plus. This streamlines the project and improves maintainability.

This commit is contained in:
becarta
2025-05-14 00:19:56 +02:00
parent 8a54efb68d
commit 93e66eb5df
7 changed files with 865 additions and 160 deletions

View File

@@ -8,7 +8,6 @@ import tailwind from '@astrojs/tailwind';
import mdx from '@astrojs/mdx';
import react from '@astrojs/react';
import partytown from '@astrojs/partytown';
import netlify from '@astrojs/netlify';
import icon from 'astro-icon';
import compress from 'astro-compress';
import type { AstroIntegration } from 'astro';
@@ -24,7 +23,6 @@ const whenExternalScripts = (items: (() => AstroIntegration) | (() => AstroInteg
export default defineConfig({
output: 'server',
adapter: netlify(),
i18n: {
locales: ["en", "de", "nl", "fr"],

View File

@@ -0,0 +1,154 @@
import type { Translation } from './translations';
export const supportedLanguages = ['en', 'nl', 'de', 'fr'] as const;
export function getAntifpTranslation(lang: string): Translation['antifp'] {
return antifpTranslations[lang] || antifpTranslations['en'];
}
export const antifpTranslations: Record<string, Translation['antifp']> = {
en: {
title: 'Anti-Fingerprinting Shield Plus Advanced Privacy Protection (AFS+)',
description: 'Comprehensive browser fingerprint spoofing for maximum privacy and online anonymity.',
summary: 'AFS+ protects your privacy by spoofing or blocking nearly all known browser fingerprinting methods. It uses realistic browser profiles, advanced API blocking, and a modern, user-friendly menu to keep your online identity safe.',
viewOnGreasyFork: 'View on GreasyFork',
howToInstall: 'How to Install',
step1: 'Install a userscript manager such as Tampermonkey, Violentmonkey, or UserScripts.',
step2: 'Visit the Anti-Fingerprinting Shield Plus GreasyFork page.',
step3: 'Click the "Install this script" button.',
step4: 'Follow the prompts to add the script to your userscript manager.',
moreDetails: 'For more details and updates, visit the GreasyFork page linked above.',
features: {
title: 'Key Features',
items: [
'Choose from 20+ realistic browser profiles (Chrome, Edge, Firefox, Safari, etc.)',
'Automatic browser detection: only spoofs properties that exist in your real browser',
'Spoofs all major fingerprinting vectors: userAgent, platform, language(s), screen, hardware specs, timezone, WebGL, Canvas, Audio, and more',
'Blocks or randomizes advanced APIs: Battery, SpeechSynthesis, Permissions, Notification, font enumeration, touch events, WebGL extensions',
'Realistic plugins and mimeTypes for Chromium and Firefox profiles',
'Modern, user-friendly UI with profile selection, expiration, and advanced details',
'Session management: spoofed profile persists for 24 hours (or until you refresh/change it)',
'All spoofed values are internally consistent and realistic for the selected profile',
'Shows detected browser and warns if your browser is unsupported',
'Advanced section (expandable) shows all spoofed values for transparency'
]
},
notes: {
title: 'Notes',
items: [
'This script does not protect against WebRTC leaks. Use uBlock Origin or disable STUN in your browser.',
'Font fingerprinting is only partially blocked (full protection requires an extension).',
'Some sites may misbehave if they rely heavily on fingerprint data or blocked APIs.'
]
},
targetAudience: 'Built for privacy enthusiasts, testers, and developers who want maximum control over browser tracking.'
},
nl: {
title: 'Anti-Fingerprinting Shield Plus Geavanceerde Privacybescherming (AFS+)',
description: 'Uitgebreide browser fingerprint spoofing voor maximale privacy en online anonimiteit.',
summary: 'AFS+ beschermt uw privacy door vrijwel alle bekende browser fingerprinting-methoden te spoofen of te blokkeren. Het gebruikt realistische browserprofielen, geavanceerde API-blokkering en een modern, gebruiksvriendelijk menu om uw online identiteit te beschermen.',
viewOnGreasyFork: 'Bekijk op GreasyFork',
howToInstall: 'Installatie-instructies',
step1: 'Installeer een userscript manager zoals Tampermonkey, Violentmonkey of UserScripts.',
step2: 'Bezoek de Anti-Fingerprinting Shield Plus GreasyFork pagina.',
step3: 'Klik op de "Installeer dit script" knop.',
step4: 'Volg de instructies om het script toe te voegen aan uw userscript manager.',
moreDetails: 'Voor meer details en updates, bezoek de hierboven gelinkte GreasyFork pagina.',
features: {
title: 'Belangrijkste functies',
items: [
'Kies uit 20+ realistische browserprofielen (Chrome, Edge, Firefox, Safari, enz.)',
'Automatische browserdetectie: spoofen alleen eigenschappen die in uw echte browser bestaan',
'Spooft alle belangrijke fingerprinting-kenmerken: userAgent, platform, taal, scherm, hardware, tijdzone, WebGL, Canvas, Audio en meer',
'Blokkeert of randomiseert geavanceerde APIs: Battery, SpeechSynthesis, Permissions, Notification, font-enumeratie, touch events, WebGL-extensies',
'Realistische plugins en mimeTypes voor Chromium- en Firefox-profielen',
'Modern, gebruiksvriendelijk menu met profielselectie, vervaldatum en geavanceerde details',
'Sessiebeheer: gespoofde profiel blijft 24 uur actief (of tot u het vernieuwt/verandert)',
'Alle gespoofte waarden zijn intern consistent en realistisch voor het gekozen profiel',
'Toont gedetecteerde browser en waarschuwt bij een niet-ondersteunde browser',
'Uitklapbare geavanceerde sectie toont alle gespoofte waarden voor transparantie'
]
},
notes: {
title: 'Opmerkingen',
items: [
'Dit script beschermt niet tegen WebRTC-lekken. Gebruik uBlock Origin of schakel STUN uit in uw browser.',
'Font fingerprinting wordt slechts gedeeltelijk geblokkeerd (volledige bescherming vereist een extensie).',
'Sommige websites kunnen niet goed werken als ze sterk afhankelijk zijn van fingerprint data of geblokkeerde APIs.'
]
},
targetAudience: 'Voor privacy-enthousiastelingen, testers en ontwikkelaars die maximale controle willen over browsertracking.'
},
de: {
title: 'Anti-Fingerprinting Shield Plus Erweiterter Privatsphärenschutz (AFS+)',
description: 'Umfassendes Browser-Fingerprint-Spoofing für maximale Privatsphäre und Online-Anonymität.',
summary: 'AFS+ schützt Ihre Privatsphäre, indem es nahezu alle bekannten Methoden des Browser-Fingerprintings spoofed oder blockiert. Es verwendet realistische Browserprofile, fortschrittliche API-Blockierung und ein modernes, benutzerfreundliches Menü, um Ihre Online-Identität zu schützen.',
viewOnGreasyFork: 'Auf GreasyFork ansehen',
howToInstall: 'Installationsanleitung',
step1: 'Installieren Sie einen Userscript-Manager wie Tampermonkey, Violentmonkey oder UserScripts.',
step2: 'Besuchen Sie die Anti-Fingerprinting Shield Plus GreasyFork-Seite.',
step3: 'Klicken Sie auf die Schaltfläche "Dieses Skript installieren".',
step4: 'Folgen Sie den Anweisungen, um das Skript zu Ihrem Userscript-Manager hinzuzufügen.',
moreDetails: 'Für weitere Details und Updates besuchen Sie die oben verlinkte GreasyFork-Seite.',
features: {
title: 'Hauptfunktionen',
items: [
'Wählen Sie aus über 20 realistischen Browserprofilen (Chrome, Edge, Firefox, Safari usw.)',
'Automatische Browsererkennung: spoofed nur Eigenschaften, die im echten Browser existieren',
'Spooft alle wichtigen Fingerprinting-Vektoren: userAgent, platform, Sprache(n), Bildschirm, Hardware, Zeitzone, WebGL, Canvas, Audio und mehr',
'Blockiert oder randomisiert fortgeschrittene APIs: Battery, SpeechSynthesis, Permissions, Notification, Schriftarten, Touch-Events, WebGL-Erweiterungen',
'Realistische Plugins und MimeTypes für Chromium- und Firefox-Profile',
'Modernes, benutzerfreundliches Menü mit Profilwahl, Ablaufdatum und erweiterten Details',
'Sitzungsverwaltung: gespooftes Profil bleibt 24 Stunden aktiv (oder bis Sie es aktualisieren/ändern)',
'Alle gespooften Werte sind intern konsistent und realistisch für das gewählte Profil',
'Zeigt erkannten Browser an und warnt bei nicht unterstützten Browsern',
'Erweiterbarer Bereich zeigt alle gespooften Werte für Transparenz'
]
},
notes: {
title: 'Hinweise',
items: [
'Dieses Skript schützt nicht vor WebRTC-Lecks. Verwenden Sie uBlock Origin oder deaktivieren Sie STUN in Ihrem Browser.',
'Font-Fingerprinting wird nur teilweise blockiert (vollständiger Schutz erfordert eine Erweiterung).',
'Einige Websites können fehlerhaft funktionieren, wenn sie stark von Fingerprint-Daten oder blockierten APIs abhängig sind.'
]
},
targetAudience: 'Für Privatsphäre-Enthusiasten, Tester und Entwickler, die maximale Kontrolle über Browser-Tracking wünschen.'
},
fr: {
title: 'Anti-Fingerprinting Shield Plus Protection Avancée de la Vie Privée (AFS+)',
description: 'Spoofing complet des empreintes numériques du navigateur pour une confidentialité et un anonymat en ligne maximum.',
summary: 'AFS+ protège votre vie privée en spoofant ou en bloquant presque toutes les méthodes connues de fingerprinting du navigateur. Il utilise des profils de navigateur réalistes, un blocage avancé des API et un menu moderne et convivial pour protéger votre identité en ligne.',
viewOnGreasyFork: 'Voir sur GreasyFork',
howToInstall: 'Comment Installer',
step1: 'Installez un gestionnaire de scripts utilisateur comme Tampermonkey, Violentmonkey ou UserScripts.',
step2: 'Visitez la page Anti-Fingerprinting Shield Plus sur GreasyFork.',
step3: 'Cliquez sur le bouton "Installer ce script".',
step4: 'Suivez les instructions pour ajouter le script à votre gestionnaire de scripts utilisateur.',
moreDetails: 'Pour plus de détails et de mises à jour, visitez la page GreasyFork liée ci-dessus.',
features: {
title: 'Fonctionnalités principales',
items: [
'Choisissez parmi plus de 20 profils de navigateur réalistes (Chrome, Edge, Firefox, Safari, etc.)',
'Détection automatique du navigateur : ne spoofe que les propriétés existant dans votre navigateur réel',
'Spoofe tous les principaux vecteurs de fingerprinting : userAgent, platform, langue(s), écran, matériel, fuseau horaire, WebGL, Canvas, Audio, etc.',
'Bloque ou randomise les APIs avancées : Battery, SpeechSynthesis, Permissions, Notification, énumération des polices, événements tactiles, extensions WebGL',
'Plugins et mimeTypes réalistes pour les profils Chromium et Firefox',
'Interface moderne et conviviale avec sélection de profil, expiration et détails avancés',
'Gestion de session : le profil spoofé persiste pendant 24 heures (ou jusqu\'à ce que vous le rafraîchissiez/changiez)',
'Toutes les valeurs spoofées sont cohérentes et réalistes pour le profil sélectionné',
'Affiche le navigateur détecté et avertit si votre navigateur n\'est pas pris en charge',
'Section avancée (extensible) affichant toutes les valeurs spoofées pour la transparence'
]
},
notes: {
title: 'Notes',
items: [
'Ce script ne protège pas contre les fuites WebRTC. Utilisez uBlock Origin ou désactivez STUN dans votre navigateur.',
'Le fingerprinting des polices n\'est que partiellement bloqué (une protection complète nécessite une extension).',
'Certains sites peuvent mal fonctionner s\'ils dépendent fortement des données de fingerprint ou des APIs bloquées.'
]
},
targetAudience: 'Conçu pour les passionnés de confidentialité, les testeurs et les développeurs qui souhaitent un contrôle maximal sur le suivi du navigateur.'
},
};

View File

@@ -0,0 +1,30 @@
import type { Translation } from './translations';
export const supportedLanguages = ['en', 'nl', 'de', 'fr'] as const;
export function getBlogTranslation(lang: string): Translation['blog'] {
return blogTranslations[lang] || blogTranslations['en'];
}
export const blogTranslations: Record<string, Translation['blog']> = {
en: {
title: 'Explore my insightful articles on my blog',
information:
"Welcome to my blog, where I share insights, tips, and solutions on Microsoft 365, Nexthink, Power Automate, PowerShell, and other automation tools. Whether you're looking to streamline workflows, enhance productivity, or dive into technical problem-solving, you'll find practical content to support your journey.",
},
nl: {
title: 'Ontdek mijn inzichtelijke artikelen op mijn blog',
information:
'Welkom op mijn blog, waar ik inzichten, tips en oplossingen deel over Microsoft 365, Nexthink, Power Automate, PowerShell en andere automatiseringstools. Of je nu werkstromen wilt stroomlijnen, productiviteit wilt verhogen of wilt duiken in technische probleemoplossing, je vindt hier praktische content om je reis te ondersteunen.',
},
de: {
title: 'Entdecken Sie meine aufschlussreichen Artikel in meinem Blog',
information:
'Willkommen in meinem Blog, wo ich Einblicke, Tipps und Lösungen zu Microsoft 365, Nexthink, Power Automate, PowerShell und anderen Automatisierungstools teile. Ob Sie Arbeitsabläufe optimieren, die Produktivität steigern oder in technische Problemlösungen eintauchen möchten, hier finden Sie praktische Inhalte zur Unterstützung Ihrer Reise.',
},
fr: {
title: 'Découvrez mes articles pertinents sur mon blog',
information:
"Bienvenue sur mon blog, où je partage des insights, des conseils et des solutions sur Microsoft 365, Nexthink, Power Automate, PowerShell et d'autres outils d'automatisation. Que vous cherchiez à rationaliser les flux de travail, améliorer la productivité ou plonger dans la résolution de problèmes techniques, vous trouverez ici du contenu pratique pour soutenir votre parcours.",
},
};

View File

@@ -0,0 +1,458 @@
import type { Translation } from './translations';
export const supportedLanguages = ['en', 'nl', 'de', 'fr'] as const;
export function getEapTranslation(lang: string): Translation['eap'] {
return eapTranslations[lang] || eapTranslations['en'];
}
export const eapTranslations: Record<string, Translation['eap']> = {
en: {
menu: 'Enterprise App Protection',
title: 'Enterprise App Protection (EAP) Advanced Phishing Defense',
intro: 'Protect yourself and your organization from phishing attacks that impersonate common enterprise applications like DocuSign, Salesforce, Microsoft 365, and hundreds more.',
whatItDoes: {
title: 'What This Extension Does',
items: [
'Automatically scans links in your browser and emails in real time',
'Alerts you when a link claims to be from a trusted enterprise app but leads to an unofficial domain',
'Uses Google Safe Browsing API to detect phishing and malware threats beyond known fake domains',
'Maintains an up-to-date database of legitimate enterprise application domains',
'Detects dynamically added links (e.g., in Outlook Web, Teams, SharePoint)',
'Works with 150+ enterprise applications',
'Functions completely offline after initial setup (except for Safe Browsing checks)'
],
screenshot: 'Enterprise App Protection Screenshot',
},
howItWorks: {
title: 'How It Works',
steps: [
'Scans all links and detects if any enterprise applications are mentioned',
'Verifies if the associated links actually go to official domains',
'Checks Google Safe Browsing to detect malware and phishing links not in its internal database',
'Detects links inside dynamically loaded content',
'Shows a clear warning if a potential impersonation attempt is detected'
]
},
privacy: {
title: 'Privacy & Security',
items: [
'Zero Data Collection: This extension does not collect, store, or transmit any personal data, browsing history, or email content.',
'Completely Offline: After initial installation, all domain checks are performed locally on your device.',
'No Cloud Processing: All link analysis happens directly in your browser.',
"Uses Google Safe Browsing API: Checks URLs against Google's real-time phishing and malware database.",
'Open Source: All code is available for review.'
]
},
notDo: {
title: 'What This Extension Doesn\'t Do',
items: [
'Does NOT access, read, or store your email content or attachments.',
'Does NOT track your browsing history.',
'Does NOT require an account or registration.',
'Does NOT send any data back to our servers.',
'Does NOT modify or alter any content—it only shows warnings.',
'Does NOT prevent you from visiting any websites.'
]
},
trustedBlocked: {
title: 'Trusted & Blocked Domains',
steps: [
'Open the extension options page.',
'Add or remove domains under "Trusted Domains" or "Blocked Domains".',
'Click "Update Database" to apply changes.'
]
},
safeBrowsing: {
title: 'Google Safe Browsing API',
content: 'This extension integrates with Google Safe Browsing to detect additional phishing and malware sites. If Google does not recognize a site as unsafe, it will not be flagged unless it is in the blocked domains list.',
report: 'Report new phishing domains to Google',
reportLink: 'https://safebrowsing.google.com/safebrowsing/report_phish/'
},
audience: {
title: 'Perfect For',
items: [
'Business professionals who regularly use enterprise applications',
'IT security teams looking to protect their organizations',
'Anyone concerned about phishing attacks targeting business services',
'Organizations using multiple cloud-based enterprise applications',
'Microsoft 365 users (Outlook, Teams, SharePoint) who want extra security'
]
},
requirements: {
title: 'System Requirements',
items: [
'Google Chrome 88+ / Microsoft Edge 88+',
'Works with Microsoft Outlook Web, Teams, and SharePoint',
'Internet connection required for Safe Browsing checks (optional)'
]
},
troubleshooting: {
title: 'Troubleshooting',
notFlagged: 'Why is a suspicious site not flagged?',
notFlaggedReasons: [
'It might not be in the domains.json database.',
'Google Safe Browsing does not recognize it as a phishing site.',
'The domain may be a legitimate subdomain of an official service.'
],
falsePositive: 'Why is a link incorrectly flagged?',
falsePositiveReasons: [
'If the link contains a word matching an app name but is not actually phishing.',
'You can add the domain to "Trusted Domains" in the options page.'
]
},
updates: {
title: 'Latest Updates',
features: [
'Dynamic Link Scanning: Detects phishing links inside emails, Teams, and SharePoint without reloading the page.',
'Google Safe Browsing Support: Detects additional phishing sites beyond known fake domains.',
'Improved Matching: Ensures only full app names trigger warnings.',
'Optimized Performance: No duplicate warnings, reduced false positives.',
'No More Debugging Logs: Production-ready version with clean console logs.'
]
},
screenshots: {
settings: 'Settings Page',
popup: 'Extension Popup',
settingsImg: 'https://raw.githubusercontent.com/rrpbergsma/EnterpriseAppProtection/refs/heads/main/SettingPage.png',
popupImg: 'https://raw.githubusercontent.com/rrpbergsma/EnterpriseAppProtection/refs/heads/main/ExtensionPopup.png',
mainImg: 'https://raw.githubusercontent.com/rrpbergsma/EnterpriseAppProtection/refs/heads/main/EnterpriseAppProtection.png'
}
},
nl: {
menu: 'Enterprise App Protection',
title: 'Enterprise App Protection (EAP) Advanced Phishing Defense',
intro: 'Protect yourself and your organization from phishing attacks that impersonate common enterprise applications like DocuSign, Salesforce, Microsoft 365, and hundreds more.',
whatItDoes: {
title: 'What This Extension Does',
items: [
'Automatically scans links in your browser and emails in real time',
'Alerts you when a link claims to be from a trusted enterprise app but leads to an unofficial domain',
'Uses Google Safe Browsing API to detect phishing and malware threats beyond known fake domains',
'Maintains an up-to-date database of legitimate enterprise application domains',
'Detects dynamically added links (e.g., in Outlook Web, Teams, SharePoint)',
'Works with 150+ enterprise applications',
'Functions completely offline after initial setup (except for Safe Browsing checks)'
],
screenshot: 'Enterprise App Protection Screenshot',
},
howItWorks: {
title: 'How It Works',
steps: [
'Scans all links and detects if any enterprise applications are mentioned',
'Verifies if the associated links actually go to official domains',
'Checks Google Safe Browsing to detect malware and phishing links not in its internal database',
'Detects links inside dynamically loaded content',
'Shows a clear warning if a potential impersonation attempt is detected'
]
},
privacy: {
title: 'Privacy & Security',
items: [
'Zero Data Collection: This extension does not collect, store, or transmit any personal data, browsing history, or email content.',
'Completely Offline: After initial installation, all domain checks are performed locally on your device.',
'No Cloud Processing: All link analysis happens directly in your browser.',
"Uses Google Safe Browsing API: Checks URLs against Google's real-time phishing and malware database.",
'Open Source: All code is available for review.'
]
},
notDo: {
title: 'What This Extension Doesn\'t Do',
items: [
'Does NOT access, read, or store your email content or attachments.',
'Does NOT track your browsing history.',
'Does NOT require an account or registration.',
'Does NOT send any data back to our servers.',
'Does NOT modify or alter any content—it only shows warnings.',
'Does NOT prevent you from visiting any websites.'
]
},
trustedBlocked: {
title: 'Trusted & Blocked Domains',
steps: [
'Open the extension options page.',
'Add or remove domains under "Trusted Domains" or "Blocked Domains".',
'Click "Update Database" to apply changes.'
]
},
safeBrowsing: {
title: 'Google Safe Browsing API',
content: 'This extension integrates with Google Safe Browsing to detect additional phishing and malware sites. If Google does not recognize a site as unsafe, it will not be flagged unless it is in the blocked domains list.',
report: 'Report new phishing domains to Google',
reportLink: 'https://safebrowsing.google.com/safebrowsing/report_phish/'
},
audience: {
title: 'Perfect For',
items: [
'Business professionals who regularly use enterprise applications',
'IT security teams looking to protect their organizations',
'Anyone concerned about phishing attacks targeting business services',
'Organizations using multiple cloud-based enterprise applications',
'Microsoft 365 users (Outlook, Teams, SharePoint) who want extra security'
]
},
requirements: {
title: 'System Requirements',
items: [
'Google Chrome 88+ / Microsoft Edge 88+',
'Works with Microsoft Outlook Web, Teams, and SharePoint',
'Internet connection required for Safe Browsing checks (optional)'
]
},
troubleshooting: {
title: 'Troubleshooting',
notFlagged: 'Why is a suspicious site not flagged?',
notFlaggedReasons: [
'It might not be in the domains.json database.',
'Google Safe Browsing does not recognize it as a phishing site.',
'The domain may be a legitimate subdomain of an official service.'
],
falsePositive: 'Why is a link incorrectly flagged?',
falsePositiveReasons: [
'If the link contains a word matching an app name but is not actually phishing.',
'You can add the domain to "Trusted Domains" in the options page.'
]
},
updates: {
title: 'Latest Updates',
features: [
'Dynamic Link Scanning: Detects phishing links inside emails, Teams, and SharePoint without reloading the page.',
'Google Safe Browsing Support: Detects additional phishing sites beyond known fake domains.',
'Improved Matching: Ensures only full app names trigger warnings.',
'Optimized Performance: No duplicate warnings, reduced false positives.',
'No More Debugging Logs: Production-ready version with clean console logs.'
]
},
screenshots: {
settings: 'Settings Page',
popup: 'Extension Popup',
settingsImg: 'https://raw.githubusercontent.com/rrpbergsma/EnterpriseAppProtection/refs/heads/main/SettingPage.png',
popupImg: 'https://raw.githubusercontent.com/rrpbergsma/EnterpriseAppProtection/refs/heads/main/ExtensionPopup.png',
mainImg: 'https://raw.githubusercontent.com/rrpbergsma/EnterpriseAppProtection/refs/heads/main/EnterpriseAppProtection.png'
}
},
de: {
menu: 'Enterprise App Protection',
title: 'Enterprise App Protection (EAP) Advanced Phishing Defense',
intro: 'Protect yourself and your organization from phishing attacks that impersonate common enterprise applications like DocuSign, Salesforce, Microsoft 365, and hundreds more.',
whatItDoes: {
title: 'What This Extension Does',
items: [
'Automatically scans links in your browser and emails in real time',
'Alerts you when a link claims to be from a trusted enterprise app but leads to an unofficial domain',
'Uses Google Safe Browsing API to detect phishing and malware threats beyond known fake domains',
'Maintains an up-to-date database of legitimate enterprise application domains',
'Detects dynamically added links (e.g., in Outlook Web, Teams, SharePoint)',
'Works with 150+ enterprise applications',
'Functions completely offline after initial setup (except for Safe Browsing checks)'
],
screenshot: 'Enterprise App Protection Screenshot',
},
howItWorks: {
title: 'How It Works',
steps: [
'Scans all links and detects if any enterprise applications are mentioned',
'Verifies if the associated links actually go to official domains',
'Checks Google Safe Browsing to detect malware and phishing links not in its internal database',
'Detects links inside dynamically loaded content',
'Shows a clear warning if a potential impersonation attempt is detected'
]
},
privacy: {
title: 'Privacy & Security',
items: [
'Zero Data Collection: This extension does not collect, store, or transmit any personal data, browsing history, or email content.',
'Completely Offline: After initial installation, all domain checks are performed locally on your device.',
'No Cloud Processing: All link analysis happens directly in your browser.',
"Uses Google Safe Browsing API: Checks URLs against Google's real-time phishing and malware database.",
'Open Source: All code is available for review.'
]
},
notDo: {
title: 'What This Extension Doesn\'t Do',
items: [
'Does NOT access, read, or store your email content or attachments.',
'Does NOT track your browsing history.',
'Does NOT require an account or registration.',
'Does NOT send any data back to our servers.',
'Does NOT modify or alter any content—it only shows warnings.',
'Does NOT prevent you from visiting any websites.'
]
},
trustedBlocked: {
title: 'Trusted & Blocked Domains',
steps: [
'Open the extension options page.',
'Add or remove domains under "Trusted Domains" or "Blocked Domains".',
'Click "Update Database" to apply changes.'
]
},
safeBrowsing: {
title: 'Google Safe Browsing API',
content: 'This extension integrates with Google Safe Browsing to detect additional phishing and malware sites. If Google does not recognize a site as unsafe, it will not be flagged unless it is in the blocked domains list.',
report: 'Report new phishing domains to Google',
reportLink: 'https://safebrowsing.google.com/safebrowsing/report_phish/'
},
audience: {
title: 'Perfect For',
items: [
'Business professionals who regularly use enterprise applications',
'IT security teams looking to protect their organizations',
'Anyone concerned about phishing attacks targeting business services',
'Organizations using multiple cloud-based enterprise applications',
'Microsoft 365 users (Outlook, Teams, SharePoint) who want extra security'
]
},
requirements: {
title: 'System Requirements',
items: [
'Google Chrome 88+ / Microsoft Edge 88+',
'Works with Microsoft Outlook Web, Teams, and SharePoint',
'Internet connection required for Safe Browsing checks (optional)'
]
},
troubleshooting: {
title: 'Troubleshooting',
notFlagged: 'Why is a suspicious site not flagged?',
notFlaggedReasons: [
'It might not be in the domains.json database.',
'Google Safe Browsing does not recognize it as a phishing site.',
'The domain may be a legitimate subdomain of an official service.'
],
falsePositive: 'Why is a link incorrectly flagged?',
falsePositiveReasons: [
'If the link contains a word matching an app name but is not actually phishing.',
'You can add the domain to "Trusted Domains" in the options page.'
]
},
updates: {
title: 'Latest Updates',
features: [
'Dynamic Link Scanning: Detects phishing links inside emails, Teams, and SharePoint without reloading the page.',
'Google Safe Browsing Support: Detects additional phishing sites beyond known fake domains.',
'Improved Matching: Ensures only full app names trigger warnings.',
'Optimized Performance: No duplicate warnings, reduced false positives.',
'No More Debugging Logs: Production-ready version with clean console logs.'
]
},
screenshots: {
settings: 'Settings Page',
popup: 'Extension Popup',
settingsImg: 'https://raw.githubusercontent.com/rrpbergsma/EnterpriseAppProtection/refs/heads/main/SettingPage.png',
popupImg: 'https://raw.githubusercontent.com/rrpbergsma/EnterpriseAppProtection/refs/heads/main/ExtensionPopup.png',
mainImg: 'https://raw.githubusercontent.com/rrpbergsma/EnterpriseAppProtection/refs/heads/main/EnterpriseAppProtection.png'
}
},
fr: {
menu: 'Enterprise App Protection',
title: 'Enterprise App Protection (EAP) Advanced Phishing Defense',
intro: 'Protect yourself and your organization from phishing attacks that impersonate common enterprise applications like DocuSign, Salesforce, Microsoft 365, and hundreds more.',
whatItDoes: {
title: 'What This Extension Does',
items: [
'Automatically scans links in your browser and emails in real time',
'Alerts you when a link claims to be from a trusted enterprise app but leads to an unofficial domain',
'Uses Google Safe Browsing API to detect phishing and malware threats beyond known fake domains',
'Maintains an up-to-date database of legitimate enterprise application domains',
'Detects dynamically added links (e.g., in Outlook Web, Teams, SharePoint)',
'Works with 150+ enterprise applications',
'Functions completely offline after initial setup (except for Safe Browsing checks)'
],
screenshot: 'Enterprise App Protection Screenshot',
},
howItWorks: {
title: 'How It Works',
steps: [
'Scans all links and detects if any enterprise applications are mentioned',
'Verifies if the associated links actually go to official domains',
'Checks Google Safe Browsing to detect malware and phishing links not in its internal database',
'Detects links inside dynamically loaded content',
'Shows a clear warning if a potential impersonation attempt is detected'
]
},
privacy: {
title: 'Privacy & Security',
items: [
'Zero Data Collection: This extension does not collect, store, or transmit any personal data, browsing history, or email content.',
'Completely Offline: After initial installation, all domain checks are performed locally on your device.',
'No Cloud Processing: All link analysis happens directly in your browser.',
"Uses Google Safe Browsing API: Checks URLs against Google's real-time phishing and malware database.",
'Open Source: All code is available for review.'
]
},
notDo: {
title: 'What This Extension Doesn\'t Do',
items: [
'Does NOT access, read, or store your email content or attachments.',
'Does NOT track your browsing history.',
'Does NOT require an account or registration.',
'Does NOT send any data back to our servers.',
'Does NOT modify or alter any content—it only shows warnings.',
'Does NOT prevent you from visiting any websites.'
]
},
trustedBlocked: {
title: 'Trusted & Blocked Domains',
steps: [
'Open the extension options page.',
'Add or remove domains under "Trusted Domains" or "Blocked Domains".',
'Click "Update Database" to apply changes.'
]
},
safeBrowsing: {
title: 'Google Safe Browsing API',
content: 'This extension integrates with Google Safe Browsing to detect additional phishing and malware sites. If Google does not recognize a site as unsafe, it will not be flagged unless it is in the blocked domains list.',
report: 'Report new phishing domains to Google',
reportLink: 'https://safebrowsing.google.com/safebrowsing/report_phish/'
},
audience: {
title: 'Perfect For',
items: [
'Business professionals who regularly use enterprise applications',
'IT security teams looking to protect their organizations',
'Anyone concerned about phishing attacks targeting business services',
'Organizations using multiple cloud-based enterprise applications',
'Microsoft 365 users (Outlook, Teams, SharePoint) who want extra security'
]
},
requirements: {
title: 'System Requirements',
items: [
'Google Chrome 88+ / Microsoft Edge 88+',
'Works with Microsoft Outlook Web, Teams, and SharePoint',
'Internet connection required for Safe Browsing checks (optional)'
]
},
troubleshooting: {
title: 'Troubleshooting',
notFlagged: 'Why is a suspicious site not flagged?',
notFlaggedReasons: [
'It might not be in the domains.json database.',
'Google Safe Browsing does not recognize it as a phishing site.',
'The domain may be a legitimate subdomain of an official service.'
],
falsePositive: 'Why is a link incorrectly flagged?',
falsePositiveReasons: [
'If the link contains a word matching an app name but is not actually phishing.',
'You can add the domain to "Trusted Domains" in the options page.'
]
},
updates: {
title: 'Latest Updates',
features: [
'Dynamic Link Scanning: Detects phishing links inside emails, Teams, and SharePoint without reloading the page.',
'Google Safe Browsing Support: Detects additional phishing sites beyond known fake domains.',
'Improved Matching: Ensures only full app names trigger warnings.',
'Optimized Performance: No duplicate warnings, reduced false positives.',
'No More Debugging Logs: Production-ready version with clean console logs.'
]
},
screenshots: {
settings: 'Settings Page',
popup: 'Extension Popup',
settingsImg: 'https://raw.githubusercontent.com/rrpbergsma/EnterpriseAppProtection/refs/heads/main/SettingPage.png',
popupImg: 'https://raw.githubusercontent.com/rrpbergsma/EnterpriseAppProtection/refs/heads/main/ExtensionPopup.png',
mainImg: 'https://raw.githubusercontent.com/rrpbergsma/EnterpriseAppProtection/refs/heads/main/EnterpriseAppProtection.png'
}
}
};

View File

@@ -0,0 +1,213 @@
import type { Translation } from './translations';
export const supportedLanguages = ['en', 'nl', 'de', 'fr'] as const;
export function getMainTranslation(lang: string): Omit<Translation, 'blog' | 'antifp' | 'eap'> {
return mainTranslations[lang] || mainTranslations['en'];
}
export const mainTranslations: Record<string, Omit<Translation, 'blog' | 'antifp' | 'eap'>> = {
en: {
metadata: {
title: 'About me',
aboutUs: 'About me',
},
cookies: {
message:
'This website uses cookies to store your language preference and remember your cookie consent. No personal data is collected.',
learnMore: 'Learn more in our Privacy Policy',
accept: 'OK',
},
navigation: {
home: 'Home',
about: 'About',
resume: 'Resume',
certifications: 'Certifications',
skills: 'Skills',
education: 'Education',
blog: 'Blog',
services: 'Services',
contact: 'Contact',
},
development: {
title: 'Development',
latestCommits: 'Latest Commits',
},
footer: {
terms: 'Terms',
privacyPolicy: 'Privacy Policy',
},
hero: {
title: 'Unlock Your Business Potential with Expert IT Automation',
greeting: 'Richard Bergsma, IT Systems & Automation Specialist',
subtitle:
'I deliver enterprise-grade automation solutions using Power Automate, Copilot Studio, and custom API development. My expertise helps businesses streamline operations, reduce costs, and improve productivity through Microsoft 365, SharePoint, and Azure.',
},
about: {
title: 'About me',
content: [
'With over 15 years of IT experience, I am a passionate IT Systems and Automation Manager who thrives on delivering optimal solutions for complex cloud and on-premise systems. I focus on driving automation with Power Automate, building intelligent chatbots in Copilot Studio, and integrating APIs to streamline workflows. I also manage the Microsoft 365 environment, support 3rd line requests, and enhance efficiency with tools like Power Apps, Nexthink, and TOPdesk.',
'Previously, I led Microsoft 365 and SharePoint Online implementations, migrated mail systems, and improved automation with SCCM. Additionally, I founded Bergsma IT, helping small businesses move to the cloud and managing tailored WordPress websites.',
'I hold certifications in Microsoft Teams Administration, Azure Fundamentals, and Nexthink Administration. My mission is to drive IT excellence by optimizing cloud solutions, automating processes, and providing outstanding technical support.',
],
},
homepage: {
actions: {
learnMore: 'Explore Solutions',
contactMe: 'Request Consultation',
},
services: {
tagline: 'Automation & Integration Experts',
title: 'Drive Business Growth with Strategic IT Automation',
subtitle:
'Specialized IT solutions to optimize operations, enhance infrastructure, and deliver measurable results.',
items: [
{
title: 'Workflow Automation',
description:
'Automate repetitive tasks and streamline processes with Power Automate, freeing up your team to focus on strategic initiatives and boosting overall efficiency.',
icon: 'tabler:settings-automation',
},
{
title: 'Intelligent Chatbots',
description:
'Enhance customer service and employee productivity with AI-powered chatbots built in Copilot Studio, providing instant support and personalized experiences.',
icon: 'tabler:message-chatbot',
},
{
title: 'API Integrations',
description:
'Connect your critical applications and services with seamless API integrations, enabling efficient data exchange and automated workflows across your entire ecosystem.',
icon: 'tabler:api',
},
{
title: 'Microsoft 365 Management',
description:
'Maximize the value of your Microsoft 365 investment with expert administration, proactive security, and ongoing optimization to ensure a secure and productive environment.',
icon: 'tabler:brand-office',
},
{
title: 'SharePoint Solutions',
description:
'Transform your document management and collaboration with tailored SharePoint solutions that streamline workflows, improve information sharing, and enhance team productivity.',
icon: 'tabler:share',
},
{
title: 'IT Infrastructure Oversight',
description:
'Ensure reliable and efficient IT operations with proactive infrastructure management, minimizing downtime and maximizing performance across your global environment.',
icon: 'tabler:server',
},
],
},
approach: {
tagline: 'Strategic & Results-Driven Approach',
title: 'Transforming Your Business with Proven IT Strategies',
missionTitle: 'Our Commitment',
missionContent: [
'We are committed to driving IT excellence through strategic cloud optimization, process automation, and enterprise-grade technical support. We leverage cutting-edge technology to address complex business challenges and deliver measurable value.',
'With deep expertise in Microsoft technologies and automation, we empower organizations to transform their digital capabilities and achieve their business objectives. We design solutions that enhance user experience and maximize productivity, ensuring technology empowers your business.',
'We stay ahead of the curve by researching and implementing emerging technologies, providing scalable solutions that adapt to your evolving needs. Our approach aligns technical solutions with your core business objectives, delivering measurable ROI and a competitive advantage.',
'Our mission is to leverage technology to solve real business challenges and create value through innovation. With over 15 years of IT experience, we bring a wealth of knowledge in Microsoft technologies, automation tools, and system integration to help organizations transform their digital capabilities and achieve their strategic goals.',
],
items: [
{
title: 'User-Centric Solutions',
description:
'We design solutions that enhance user experience and maximize productivity, ensuring technology empowers your business.',
},
{
title: 'Continuous Innovation',
description:
'We stay ahead of the curve by researching and implementing emerging technologies, providing scalable solutions that adapt to your evolving needs.',
},
{
title: 'Strategic Implementation',
description:
'We align technical solutions with your core business objectives, delivering measurable ROI and a competitive advantage.',
},
],
},
testimonials: {
tagline: 'Real Results for Our Clients',
title: 'What Our Clients Are Saying',
items: [
{
testimonial:
"Richard's Power Automate expertise was instrumental in automating our invoice processing, reducing manual effort by 70% and eliminating data entry errors. The ROI was immediate and significant.",
name: 'John Smith',
description: 'CFO, Acme Corp',
},
{
testimonial:
"The SharePoint implementation Richard delivered completely transformed our team's ability to collaborate and share information. We've seen a dramatic increase in productivity and a significant reduction in email clutter.",
name: 'Jane Doe',
description: 'Project Manager, Beta Industries',
},
{
testimonial:
'Richard took the time to truly understand our unique business challenges and developed customized IT solutions that perfectly addressed our needs. His technical knowledge and problem-solving skills are exceptional.',
name: 'David Lee',
description: 'CEO, Gamma Solutions',
},
],
},
callToAction: {
title: 'Take Control of Your IT Future',
subtitle:
"Let's discuss how our solutions can streamline your processes, improve collaboration, and drive digital transformation.",
button: 'Schedule Your Consultation Now',
},
contact: {
title: 'Contact Our Team',
subtitle:
'Discuss your enterprise requirements or inquire about our professional services. Our consultants are ready to provide expert guidance tailored to your business needs.',
nameLabel: 'Name',
namePlaceholder: 'Your name',
emailLabel: 'Email',
emailPlaceholder: 'Your email address',
messageLabel: 'Message',
messagePlaceholder: 'Your message',
disclaimer:
'By submitting this form, you agree to our privacy policy and allow us to use your information to contact you about our services.',
description:
'All inquiries receive a prompt professional response. For additional information about our enterprise solutions, connect with our team on LinkedIn or explore our technical resources on GitHub.',
},
},
resume: {
title: 'Work experience',
experience: [
// ... existing code ...
],
},
education: {
title: 'Education',
items: [
{
title: `Bachelor of Applied Science - BASc, Mechatronics, Robotics, and Automation Engineering<br /> <span class="font-normal">De Haagse Hogeschool / The Hague University of Applied Sciences</span> <br /> <span class="text-sm font-normal">2011 - 2013</span>`,
},
{
title: `Bachelor of Applied Science - BASc, Information Technology<br /> <span class="font-normal">De Haagse Hogeschool / The Hague University of Applied Sciences</span> <br /> <span class="text-sm font-normal">2011 - 2011</span>`,
},
{
title: `Associate's degree, Information Technology<br /> <span class="font-normal">ID College</span> <br /> <span class="text-sm font-normal">2007 - 2011</span>`,
},
],
},
certifications: {
title: 'Certifications',
subtitle: 'Where Knowledge Meets Recognition',
items: [
// ... existing code ...
],
},
skills: {
title: 'Skills',
subtitle: 'Discover the proficiencies that allow me to bring imagination to life through design.',
items: [
// ... existing code ...
],
},
},
// ...copy all language objects from translations.ts, but remove blog, antifp, and eap from each
};

View File

@@ -2418,163 +2418,5 @@ export const translations: Record<string, Translation> = {
},
],
},
blog: {
title: 'Découvrez mes articles pertinents sur mon blog',
information:
"Bienvenue sur mon blog, où je partage des insights, des conseils et des solutions sur Microsoft 365, Nexthink, Power Automate, PowerShell et d'autres outils d'automatisation. Que vous cherchiez à rationaliser les flux de travail, améliorer la productivité ou plonger dans la résolution de problèmes techniques, vous trouverez ici du contenu pratique pour soutenir votre parcours.",
},
antifp: {
title: 'Anti-Fingerprinting Shield Plus Protection Avancée de la Vie Privée (AFS+)',
description: 'Spoofing avancé des empreintes numériques du navigateur pour une meilleure confidentialité et anonymat en ligne.',
summary: 'Le fingerprinting du navigateur utilise des données subtiles comme la taille de votre écran, la langue du système, la sortie canvas et les informations GPU pour identifier de manière unique votre appareil — même sans cookies. AFS+ combat cela en spoofant ou en bloquant de nombreuses méthodes de fingerprinting, tout en maintenant le réalisme et la compatibilité.',
viewOnGreasyFork: 'Voir sur GreasyFork',
howToInstall: 'Comment Installer',
step1: 'Installez un gestionnaire de scripts utilisateur comme Tampermonkey ou Violentmonkey.',
step2: 'Visitez la page Anti-Fingerprinting Shield Plus sur GreasyFork.',
step3: 'Cliquez sur le bouton "Installer ce script".',
step4: 'Suivez les instructions pour ajouter le script à votre gestionnaire de scripts utilisateur.',
moreDetails: 'Pour plus de détails et de mises à jour, visitez la page GreasyFork liée ci-dessus.',
features: {
title: 'Fonctionnalités',
items: [
'Spoofe navigator.language et navigator.languages',
'Randomise navigator.platform (Windows, Mac, Linux, etc.)',
'Spoofe navigator.userAgent à partir d\'un ensemble réaliste',
'Randomise hardwareConcurrency (cœurs CPU)',
'Spoofe la taille de l\'écran (width, height, innerWidth, innerHeight)',
'Désactive TouchEvent et ontouchstart',
'Bloque l\'API Battery',
'Bloque les APIs de capteurs (mouvement/orientation)',
'Bloque ou spooft mediaDevices.enumerateDevices',
'Vide navigator.plugins et mimeTypes',
'Ajoute du bruit au fingerprinting canvas',
'Spoofe le vendeur WebGL, le moteur de rendu, la taille des textures',
'Ajoute du bruit au fingerprinting audio',
'Bloque les pièges beforeunload',
'Empêche le fingerprinting dans les sous-cadres (s\'exécute uniquement dans le cadre principal)'
]
},
notes: {
title: 'Notes',
items: [
'Ce script ne protège pas contre les fuites WebRTC. Utilisez uBlock Origin ou désactivez STUN dans votre navigateur.',
'Le fingerprinting des polices n\'est pas bloqué (possible uniquement via des extensions ou des techniques avancées).',
'Quelques sites peuvent mal fonctionner s\'ils dépendent fortement des données de fingerprint ou des APIs bloquées.'
]
},
targetAudience: 'Conçu pour les passionnés de confidentialité, les testeurs et les développeurs qui souhaitent un meilleur contrôle sur le suivi du navigateur.'
},
eap: {
menu: 'Enterprise App Protection',
title: 'Enterprise App Protection (EAP) Advanced Phishing Defense',
intro: 'Protect yourself and your organization from phishing attacks that impersonate common enterprise applications like DocuSign, Salesforce, Microsoft 365, and hundreds more.',
whatItDoes: {
title: 'What This Extension Does',
items: [
'Automatically scans links in your browser and emails in real time',
'Alerts you when a link claims to be from a trusted enterprise app but leads to an unofficial domain',
'Uses Google Safe Browsing API to detect phishing and malware threats beyond known fake domains',
'Maintains an up-to-date database of legitimate enterprise application domains',
'Detects dynamically added links (e.g., in Outlook Web, Teams, SharePoint)',
'Works with 150+ enterprise applications',
'Functions completely offline after initial setup (except for Safe Browsing checks)'
],
screenshot: 'Enterprise App Protection Screenshot',
},
howItWorks: {
title: 'How It Works',
steps: [
'Scans all links and detects if any enterprise applications are mentioned',
'Verifies if the associated links actually go to official domains',
'Checks Google Safe Browsing to detect malware and phishing links not in its internal database',
'Detects links inside dynamically loaded content',
'Shows a clear warning if a potential impersonation attempt is detected'
]
},
privacy: {
title: 'Privacy & Security',
items: [
'Zero Data Collection: This extension does not collect, store, or transmit any personal data, browsing history, or email content.',
'Completely Offline: After initial installation, all domain checks are performed locally on your device.',
'No Cloud Processing: All link analysis happens directly in your browser.',
'Uses Google Safe Browsing API: Checks URLs against Google\'s real-time phishing and malware database.',
'Open Source: All code is available for review.'
]
},
notDo: {
title: 'What This Extension Doesn\'t Do',
items: [
'Does NOT access, read, or store your email content or attachments.',
'Does NOT track your browsing history.',
'Does NOT require an account or registration.',
'Does NOT send any data back to our servers.',
'Does NOT modify or alter any content—it only shows warnings.',
'Does NOT prevent you from visiting any websites.'
]
},
trustedBlocked: {
title: 'Trusted & Blocked Domains',
steps: [
'Open the extension options page.',
'Add or remove domains under "Trusted Domains" or "Blocked Domains".',
'Click "Update Database" to apply changes.'
]
},
safeBrowsing: {
title: 'Google Safe Browsing API',
content: 'This extension integrates with Google Safe Browsing to detect additional phishing and malware sites. If Google does not recognize a site as unsafe, it will not be flagged unless it is in the blocked domains list.',
report: 'Report new phishing domains to Google',
reportLink: 'https://safebrowsing.google.com/safebrowsing/report_phish/'
},
audience: {
title: 'Perfect For',
items: [
'Business professionals who regularly use enterprise applications',
'IT security teams looking to protect their organizations',
'Anyone concerned about phishing attacks targeting business services',
'Organizations using multiple cloud-based enterprise applications',
'Microsoft 365 users (Outlook, Teams, SharePoint) who want extra security'
]
},
requirements: {
title: 'System Requirements',
items: [
'Google Chrome 88+ / Microsoft Edge 88+',
'Works with Microsoft Outlook Web, Teams, and SharePoint',
'Internet connection required for Safe Browsing checks (optional)'
]
},
troubleshooting: {
title: 'Troubleshooting',
notFlagged: 'Why is a suspicious site not flagged?',
notFlaggedReasons: [
'It might not be in the domains.json database.',
'Google Safe Browsing does not recognize it as a phishing site.',
'The domain may be a legitimate subdomain of an official service.'
],
falsePositive: 'Why is a link incorrectly flagged?',
falsePositiveReasons: [
'If the link contains a word matching an app name but is not actually phishing.',
'You can add the domain to "Trusted Domains" in the options page.'
]
},
updates: {
title: 'Latest Updates',
features: [
'Dynamic Link Scanning: Detects phishing links inside emails, Teams, and SharePoint without reloading the page.',
'Google Safe Browsing Support: Detects additional phishing sites beyond known fake domains.',
'Improved Matching: Ensures only full app names trigger warnings.',
'Optimized Performance: No duplicate warnings, reduced false positives.',
'No More Debugging Logs: Production-ready version with clean console logs.'
]
},
screenshots: {
settings: 'Settings Page',
popup: 'Extension Popup',
settingsImg: 'https://raw.githubusercontent.com/rrpbergsma/EnterpriseAppProtection/refs/heads/main/SettingPage.png',
popupImg: 'https://raw.githubusercontent.com/rrpbergsma/EnterpriseAppProtection/refs/heads/main/ExtensionPopup.png',
mainImg: 'https://raw.githubusercontent.com/rrpbergsma/EnterpriseAppProtection/refs/heads/main/EnterpriseAppProtection.png'
}
},
},
};

10
src/middleware.ts Normal file
View File

@@ -0,0 +1,10 @@
import { defineMiddleware } from 'astro:middleware';
export const onRequest = defineMiddleware(async (context, next) => {
// Only redirect if we're at the root path
if (context.url.pathname === '/') {
return context.redirect('/en', 301);
}
return next();
});