From 89eff8ff8539169505c2d03ec28bf9a56f8982cd Mon Sep 17 00:00:00 2001 From: Richard Bergsma Date: Sun, 15 Jun 2025 16:21:57 +0200 Subject: [PATCH] Enhance navigation and page layouts for improved user experience - Added a new navigation link for "Journii" in the navigation component. - Updated the layout of multiple pages including antifp, development, eap, privacy, terms, and uptime to enhance visual appeal and organization. - Introduced hero sections with engaging visuals and improved typography for better readability. - Enhanced table of contents and key highlights sections for clearer navigation and information presentation. - Improved styling consistency across pages with backdrop blur effects and responsive design adjustments. --- src/i18n/translations.journii.ts | 403 +++++++++++++++++++ src/navigation.ts | 5 + src/pages/[lang]/antifp.astro | 171 ++++++-- src/pages/[lang]/development.astro | 260 +++++++++---- src/pages/[lang]/eap.astro | 354 ++++++++++++----- src/pages/[lang]/journii.astro | 199 ++++++++++ src/pages/[lang]/privacy.astro | 602 ++++++++++++++++++----------- src/pages/[lang]/terms.astro | 383 +++++++++++++----- src/pages/[lang]/uptime.astro | 48 ++- 9 files changed, 1892 insertions(+), 533 deletions(-) create mode 100644 src/i18n/translations.journii.ts create mode 100644 src/pages/[lang]/journii.astro diff --git a/src/i18n/translations.journii.ts b/src/i18n/translations.journii.ts new file mode 100644 index 0000000..9678ae8 --- /dev/null +++ b/src/i18n/translations.journii.ts @@ -0,0 +1,403 @@ +export const supportedLanguages = ['en', 'nl', 'de', 'fr'] as const; +export type SupportedLanguage = typeof supportedLanguages[number]; + +interface JourniiTranslation { + title: string; + subtitle: string; + description: string; + status: string; + features: { + title: string; + fuel: { + title: string; + desc: string; + }; + maintenance: { + title: string; + desc: string; + }; + analytics: { + title: string; + desc: string; + }; + multi: { + title: string; + desc: string; + }; + customization: { + title: string; + desc: string; + }; + design: { + title: string; + desc: string; + }; + }; + progress: { + completed: string; + inProgress: string; + planned: string; + }; + roadmap: { + title: string; + phase1: { + title: string; + items: string[]; + }; + phase2: { + title: string; + items: string[]; + }; + phase3: { + title: string; + items: string[]; + }; + }; + tech: { + title: string; + desc: string; + }; + cta: { + title: string; + desc: string; + github: string; + updates: string; + }; +} + +const translations: Record = { + en: { + title: "Journii - Smart Vehicle Tracking", + subtitle: "Your Complete Vehicle Management Companion", + description: "Journii is a comprehensive mobile app designed to help you track, manage, and optimize your vehicle's performance. From fuel efficiency monitoring to maintenance scheduling, we're building the ultimate tool for modern vehicle owners.", + status: "Currently in Development", + features: { + title: "What We're Building", + fuel: { + title: "Smart Fuel Tracking", + desc: "Log fuel purchases, track efficiency trends, and get insights into your vehicle's consumption patterns with beautiful charts and analytics." + }, + maintenance: { + title: "Maintenance Management", + desc: "Schedule services, track repairs, store receipts, and never miss important maintenance milestones for your vehicles." + }, + analytics: { + title: "Advanced Analytics", + desc: "Visualize your vehicle data with interactive charts, efficiency trends, and cost breakdowns to make informed decisions." + }, + multi: { + title: "Multi-Vehicle Support", + desc: "Manage multiple vehicles from a single app - cars, motorcycles, trucks, or electric vehicles, each with tailored tracking." + }, + customization: { + title: "Flexible Settings", + desc: "Choose your preferred units (metric/imperial), currency, fuel efficiency formats, and themes to match your needs." + }, + design: { + title: "Modern Design", + desc: "Beautiful, intuitive interface with smooth animations, gradient designs, and a responsive layout that works on any device." + } + }, + progress: { + completed: "✅ Completed", + inProgress: "🚧 In Progress", + planned: "📋 Planned" + }, + roadmap: { + title: "Development Roadmap", + phase1: { + title: "Phase 1: Core Features", + items: [ + "Vehicle management and profiles", + "Fuel log tracking with efficiency calculations", + "Basic maintenance scheduling", + "Data export functionality", + "Multi-language support (EN, NL, DE, FR)" + ] + }, + phase2: { + title: "Phase 2: Enhanced Experience", + items: [ + "Advanced analytics and reporting", + "Photo attachments for logs", + "Trip tracking with GPS", + "Reminder notifications", + "Dark/light theme support" + ] + }, + phase3: { + title: "Phase 3: Smart Features", + items: [ + "Predictive maintenance suggestions", + "Fuel price tracking and alerts", + "Social features and sharing", + "Integration with vehicle APIs", + "Cloud backup and sync" + ] + } + }, + tech: { + title: "Built With Modern Technology", + desc: "Journii is being developed using React Native for cross-platform compatibility, ensuring a native experience on both iOS and Android devices." + }, + cta: { + title: "Stay Updated", + desc: "Journii is currently in active development. Follow our progress and be among the first to know when it launches.", + github: "View on GitHub", + updates: "Get Updates" + } + }, + + nl: { + title: "Journii - Slimme Voertuig Tracking", + subtitle: "Jouw Complete Voertuigbeheer Companion", + description: "Journii is een uitgebreide mobiele app ontworpen om je te helpen bij het bijhouden, beheren en optimaliseren van de prestaties van je voertuig. Van brandstofefficiëntie monitoring tot onderhoudsplanning, we bouwen het ultieme hulpmiddel voor moderne voertuigeigenaren.", + status: "Momenteel in Ontwikkeling", + features: { + title: "Wat We Bouwen", + fuel: { + title: "Slimme Brandstof Tracking", + desc: "Log brandstofaankopen, volg efficiëntietrends en krijg inzicht in de verbruikspatronen van je voertuig met mooie grafieken en analyses." + }, + maintenance: { + title: "Onderhoudsbeheer", + desc: "Plan services, houd reparaties bij, bewaar bonnetjes en mis nooit belangrijke onderhoudsmoment voor je voertuigen." + }, + analytics: { + title: "Geavanceerde Analytics", + desc: "Visualiseer je voertuigdata met interactieve grafieken, efficiëntietrends en kostenopstellingen om weloverwogen beslissingen te nemen." + }, + multi: { + title: "Multi-Voertuig Ondersteuning", + desc: "Beheer meerdere voertuigen vanuit één app - auto's, motorfietsen, vrachtwagens of elektrische voertuigen, elk met aangepaste tracking." + }, + customization: { + title: "Flexibele Instellingen", + desc: "Kies je voorkeursunits (metrisch/imperiaal), valuta, brandstofefficiëntieformaten en thema's die bij je behoeften passen." + }, + design: { + title: "Modern Design", + desc: "Mooie, intuïtieve interface met vloeiende animaties, gradiëntontwerpen en een responsieve lay-out die op elk apparaat werkt." + } + }, + progress: { + completed: "✅ Voltooid", + inProgress: "🚧 In Uitvoering", + planned: "📋 Gepland" + }, + roadmap: { + title: "Ontwikkelingsroadmap", + phase1: { + title: "Fase 1: Kernfuncties", + items: [ + "Voertuigbeheer en profielen", + "Brandstoflog tracking met efficiëntieberekeningen", + "Basis onderhoudsplanning", + "Data export functionaliteit", + "Meertalige ondersteuning (EN, NL, DE, FR)" + ] + }, + phase2: { + title: "Fase 2: Verbeterde Ervaring", + items: [ + "Geavanceerde analyses en rapportage", + "Foto bijlagen voor logs", + "Rit tracking met GPS", + "Herinneringsmeldingen", + "Donker/licht thema ondersteuning" + ] + }, + phase3: { + title: "Fase 3: Slimme Features", + items: [ + "Voorspellende onderhoudssuggesties", + "Brandstofprijs tracking en alerts", + "Sociale functies en delen", + "Integratie met voertuig API's", + "Cloud backup en synchronisatie" + ] + } + }, + tech: { + title: "Gebouwd Met Moderne Technologie", + desc: "Journii wordt ontwikkeld met React Native voor cross-platform compatibiliteit, wat zorgt voor een native ervaring op zowel iOS als Android apparaten." + }, + cta: { + title: "Blijf op de Hoogte", + desc: "Journii is momenteel in actieve ontwikkeling. Volg onze voortgang en wees een van de eersten die het weet wanneer het wordt gelanceerd.", + github: "Bekijk op GitHub", + updates: "Ontvang Updates" + } + }, + + de: { + title: "Journii - Intelligente Fahrzeugverfolgung", + subtitle: "Ihr Kompletter Fahrzeugmanagement-Begleiter", + description: "Journii ist eine umfassende mobile App, die entwickelt wurde, um Ihnen beim Verfolgen, Verwalten und Optimieren der Leistung Ihres Fahrzeugs zu helfen. Von der Kraftstoffeffizienz-Überwachung bis zur Wartungsplanung bauen wir das ultimative Tool für moderne Fahrzeugbesitzer.", + status: "Derzeit in Entwicklung", + features: { + title: "Was Wir Bauen", + fuel: { + title: "Intelligente Kraftstoffverfolgung", + desc: "Protokollieren Sie Kraftstoffkäufe, verfolgen Sie Effizienztrends und erhalten Sie Einblicke in die Verbrauchsmuster Ihres Fahrzeugs mit schönen Diagrammen und Analysen." + }, + maintenance: { + title: "Wartungsmanagement", + desc: "Planen Sie Services, verfolgen Sie Reparaturen, speichern Sie Belege und verpassen Sie nie wichtige Wartungsmeilensteine für Ihre Fahrzeuge." + }, + analytics: { + title: "Erweiterte Analytik", + desc: "Visualisieren Sie Ihre Fahrzeugdaten mit interaktiven Diagrammen, Effizienztrends und Kostenaufschlüsselungen, um fundierte Entscheidungen zu treffen." + }, + multi: { + title: "Multi-Fahrzeug-Unterstützung", + desc: "Verwalten Sie mehrere Fahrzeuge aus einer einzigen App - Autos, Motorräder, Lastwagen oder Elektrofahrzeuge, jedes mit maßgeschneiderter Verfolgung." + }, + customization: { + title: "Flexible Einstellungen", + desc: "Wählen Sie Ihre bevorzugten Einheiten (metrisch/imperial), Währung, Kraftstoffeffizienzformate und Themes, die Ihren Bedürfnissen entsprechen." + }, + design: { + title: "Modernes Design", + desc: "Schöne, intuitive Benutzeroberfläche mit glatten Animationen, Farbverläufen und einem responsiven Layout, das auf jedem Gerät funktioniert." + } + }, + progress: { + completed: "✅ Abgeschlossen", + inProgress: "🚧 In Bearbeitung", + planned: "📋 Geplant" + }, + roadmap: { + title: "Entwicklungsroadmap", + phase1: { + title: "Phase 1: Kernfunktionen", + items: [ + "Fahrzeugverwaltung und Profile", + "Kraftstoffprotokoll-Verfolgung mit Effizienzberechnungen", + "Grundlegende Wartungsplanung", + "Datenexport-Funktionalität", + "Mehrsprachige Unterstützung (EN, NL, DE, FR)" + ] + }, + phase2: { + title: "Phase 2: Verbesserte Erfahrung", + items: [ + "Erweiterte Analytik und Berichterstattung", + "Foto-Anhänge für Protokolle", + "Fahrtverfolgung mit GPS", + "Erinnerungsbenachrichtigungen", + "Dunkel/Hell Theme-Unterstützung" + ] + }, + phase3: { + title: "Phase 3: Intelligente Funktionen", + items: [ + "Vorausschauende Wartungsvorschläge", + "Kraftstoffpreis-Verfolgung und Warnungen", + "Soziale Funktionen und Teilen", + "Integration mit Fahrzeug-APIs", + "Cloud-Backup und Synchronisation" + ] + } + }, + tech: { + title: "Mit Moderner Technologie Gebaut", + desc: "Journii wird mit React Native für plattformübergreifende Kompatibilität entwickelt und gewährleistet eine native Erfahrung auf iOS- und Android-Geräten." + }, + cta: { + title: "Bleiben Sie Auf Dem Laufenden", + desc: "Journii befindet sich derzeit in aktiver Entwicklung. Verfolgen Sie unseren Fortschritt und gehören Sie zu den Ersten, die erfahren, wann es startet.", + github: "Auf GitHub Ansehen", + updates: "Updates Erhalten" + } + }, + + fr: { + title: "Journii - Suivi Intelligent de Véhicule", + subtitle: "Votre Compagnon Complet de Gestion de Véhicule", + description: "Journii est une application mobile complète conçue pour vous aider à suivre, gérer et optimiser les performances de votre véhicule. Du monitoring de l'efficacité carburant à la planification de maintenance, nous construisons l'outil ultime pour les propriétaires de véhicules modernes.", + status: "Actuellement en Développement", + features: { + title: "Ce Que Nous Construisons", + fuel: { + title: "Suivi Intelligent du Carburant", + desc: "Enregistrez les achats de carburant, suivez les tendances d'efficacité et obtenez des insights sur les modèles de consommation de votre véhicule avec de beaux graphiques et analyses." + }, + maintenance: { + title: "Gestion de la Maintenance", + desc: "Planifiez les services, suivez les réparations, stockez les reçus et ne manquez jamais les jalons de maintenance importants pour vos véhicules." + }, + analytics: { + title: "Analyses Avancées", + desc: "Visualisez les données de votre véhicule avec des graphiques interactifs, des tendances d'efficacité et des répartitions de coûts pour prendre des décisions éclairées." + }, + multi: { + title: "Support Multi-Véhicules", + desc: "Gérez plusieurs véhicules depuis une seule app - voitures, motos, camions ou véhicules électriques, chacun avec un suivi adapté." + }, + customization: { + title: "Paramètres Flexibles", + desc: "Choisissez vos unités préférées (métrique/impérial), devise, formats d'efficacité carburant et thèmes qui correspondent à vos besoins." + }, + design: { + title: "Design Moderne", + desc: "Belle interface intuitive avec des animations fluides, des designs en dégradé et une mise en page responsive qui fonctionne sur n'importe quel appareil." + } + }, + progress: { + completed: "✅ Terminé", + inProgress: "🚧 En Cours", + planned: "📋 Planifié" + }, + roadmap: { + title: "Feuille de Route de Développement", + phase1: { + title: "Phase 1: Fonctionnalités Principales", + items: [ + "Gestion des véhicules et profils", + "Suivi des journaux de carburant avec calculs d'efficacité", + "Planification de maintenance de base", + "Fonctionnalité d'export de données", + "Support multilingue (EN, NL, DE, FR)" + ] + }, + phase2: { + title: "Phase 2: Expérience Améliorée", + items: [ + "Analyses avancées et rapports", + "Pièces jointes photo pour les journaux", + "Suivi de voyage avec GPS", + "Notifications de rappel", + "Support thème sombre/clair" + ] + }, + phase3: { + title: "Phase 3: Fonctionnalités Intelligentes", + items: [ + "Suggestions de maintenance prédictive", + "Suivi des prix du carburant et alertes", + "Fonctionnalités sociales et partage", + "Intégration avec les APIs de véhicules", + "Sauvegarde cloud et synchronisation" + ] + } + }, + tech: { + title: "Construit Avec la Technologie Moderne", + desc: "Journii est développé en utilisant React Native pour la compatibilité multi-plateforme, garantissant une expérience native sur les appareils iOS et Android." + }, + cta: { + title: "Restez Informé", + desc: "Journii est actuellement en développement actif. Suivez nos progrès et soyez parmi les premiers à savoir quand il sera lancé.", + github: "Voir sur GitHub", + updates: "Recevoir les Mises à Jour" + } + } +}; + +export function getJourniiTranslation(lang: string): JourniiTranslation { + if (supportedLanguages.includes(lang as SupportedLanguage)) { + return translations[lang as SupportedLanguage]; + } + return translations.en; +} \ No newline at end of file diff --git a/src/navigation.ts b/src/navigation.ts index 734b5f9..d45bf76 100644 --- a/src/navigation.ts +++ b/src/navigation.ts @@ -58,6 +58,11 @@ export const getHeaderData = (lang = 'en') => { href: getPermalink('/eap', 'page', lang), isHashLink: false, }, + { + text: 'Journii', + href: getPermalink('/journii', 'page', lang), + isHashLink: false, + }, ], }, ], diff --git a/src/pages/[lang]/antifp.astro b/src/pages/[lang]/antifp.astro index fb10903..62ab18e 100644 --- a/src/pages/[lang]/antifp.astro +++ b/src/pages/[lang]/antifp.astro @@ -26,43 +26,146 @@ const metadata = { --- -
-

{t.title}

-

- {t.viewOnGreasyFork} -

-

- {t.summary} -

+
+ +
+
🛡️
+

+ {t.title} +

+

+ {t.summary} +

+ +
-
- Screenshot of Anti-Fingerprinting Shield Plus settings panel with all privacy options enabled -
This screenshot shows the settings panel for Anti-Fingerprinting Shield Plus, where all fingerprinting protection options are enabled.
-
+ +
+

+ {t.summary} +

+
-

{t.features.title}

-
    - {t.features.items.map((item) => ( -
  • {item}
  • - ))} -
+ +
+

Settings Panel Overview

+
+ Screenshot of Anti-Fingerprinting Shield Plus settings panel with all privacy options enabled +
+ This screenshot shows the settings panel for Anti-Fingerprinting Shield Plus, where all fingerprinting protection options are enabled. +
+
+
-

{t.howToInstall}

-
    -
  1. {t.step1}
  2. -
  3. {t.step2}
  4. -
  5. {t.step3}
  6. -
  7. {t.step4}
  8. -
+ +
+

{t.features.title}

+
+ {t.features.items.map((item, index) => ( +
+
+
+ {index === 0 ? '🔒' : + index === 1 ? '📊' : + index === 2 ? '🎭' : + index === 3 ? '🌐' : + index === 4 ? '⚡' : + index === 5 ? '🛠️' : '🔧'} +
+
+

{item}

+
+
+
+ ))} +
+
-

{t.notes.title}

-
    - {t.notes.items.map((item) => ( -
  • {item}
  • - ))} -
+ +
+
+
📦
+

{t.howToInstall}

+
+
+
    +
  1. +
    1
    +

    {t.step1}

    +
  2. +
  3. +
    2
    +

    {t.step2}

    +
  4. +
  5. +
    3
    +

    {t.step3}

    +
  6. +
  7. +
    4
    +

    {t.step4}

    +
  8. +
+
+
-

{t.targetAudience}

-

{t.moreDetails}

+ +
+
+
⚠️
+

{t.notes.title}

+
+
+ {t.notes.items.map((item, index) => ( +
+
+ + + +
+

{item}

+
+ ))} +
+
+ + +
+
+
+
👥
+

Who Is This For?

+
+

+ {t.targetAudience} +

+
+ +
+
+
📚
+

Learn More

+
+

+ {t.moreDetails} +

+
+
- \ No newline at end of file + \ No newline at end of file diff --git a/src/pages/[lang]/development.astro b/src/pages/[lang]/development.astro index a4d9dde..2ecf2b0 100644 --- a/src/pages/[lang]/development.astro +++ b/src/pages/[lang]/development.astro @@ -108,101 +108,191 @@ const formatDate = (dateString) => { const year = date.getFullYear(); return `${day}-${month}-${year}`; }; + +// Calculate some stats from contribution data +const totalContributions = Object.values(contributionData).reduce((sum, count) => sum + count, 0); +const contributionDays = Object.keys(contributionData).length; +const averagePerDay = contributionDays > 0 ? (totalContributions / contributionDays).toFixed(1) : 0; ---
-

{t.development.pageTitle || 'Development Progress'}

- {/* Collapsible Intro */} - - {/* Contribution Calendar */} -
+ +
+
👨‍💻
+

+ {t.development.pageTitle || 'Development Progress'} +

+

+ Live development activity and code contributions from the 365DevNet ecosystem +

+
+ + +
+ +
+ + +
+
+
📈
+

Total Contributions

+

{totalContributions}

+

This year

+
+
+
🗓️
+

Active Days

+

{contributionDays}

+

Days with commits

+
+
+
+

Daily Average

+

{averagePerDay}

+

Commits per active day

+
+
+ + +
+
+
📊
+
+

Contribution Activity

+

Development activity over time

+
+
-
-
-

{t.development.latestCommits || 'Latest Commits'}

-

Showing contributions for user Richard (all repositories).

- {Array.isArray(userCommits) && userCommits.length > 0 ? ( -
- {userCommits.map((commit) => ( -
-
-

{commit.message.split('\n')[0] || 'No message'}

- {/* Format commit description with bullet points on new lines */} - {commit.message ? ( - (() => { - const lines = commit.message.split('\n'); - const bullets = lines.filter(line => line.trim().startsWith('- ')); - if (bullets.length > 0) { - // Render as a list if there are bullet points - return ( -
    - {lines.map((line, idx) => - line.trim().startsWith('- ') - ?
  • {line.trim().slice(2)}
  • - : line.trim() !== '' &&
  • {line}
  • - )} -
- ); - } else { - // Render as a paragraph if no bullet points - return

{commit.message}

; - } - })() - ) : null} -
- {/* Desktop commit info card */} - - {/* Mobile commit info area, visually separated and two rows with left/right alignment */} -
-
- {commit.date ? formatDate(commit.date) : ''} - {commit.author && ( - {commit.author === 'becarta' ? 'Richard Bergsma' : commit.author} + + +
+
+
💻
+
+

{t.development.latestCommits || 'Latest Commits'}

+

+ Showing contributions for user Richard (all repositories) +

+
+
+ + {Array.isArray(userCommits) && userCommits.length > 0 ? ( +
+ {userCommits.map((commit, index) => ( +
+
+
+ +
+
+ {index + 1} +
+
+ + +
+

+ {commit.message.split('\n')[0] || 'No message'} +

+ + {/* Format commit description with bullet points on new lines */} + {commit.message && commit.message.split('\n').length > 1 && ( + (() => { + const lines = commit.message.split('\n').slice(1); + const bullets = lines.filter(line => line.trim().startsWith('- ')); + if (bullets.length > 0) { + return ( +
    + {lines.map((line, idx) => + line.trim().startsWith('- ') + ?
  • {line.trim().slice(2)}
  • + : line.trim() !== '' &&
  • {line}
  • + )} +
+ ); + } else { + const description = lines.filter(line => line.trim() !== '').join(' '); + return description && ( +

{description}

+ ); + } + })() + )} + + + {commit.repo && ( + )}
-
- {commit.repo && ( - - {commit.repo} - - )} - {commit.sha && ( - - Commit: - - {commit.sha.slice(0, 7)} - - - )} + + +
+
+ {/* Date */} +
+
📅
+ + {commit.date ? formatDate(commit.date) : 'Unknown date'} + +
+ + {/* Author */} + {commit.author && ( +
+
👤
+ + {commit.author === 'becarta' ? 'Richard Bergsma' : commit.author} + +
+ )} + + {/* Commit Hash */} + {commit.sha && ( + + )} +
- ))} -
- ) : ( -

Unable to fetch commit history at this time.

- )} -
+
+ ))} +
+ ) : ( +
+
🤷‍♂️
+

+ Unable to fetch commit history at this time. +

+

+ Please check back later or contact support if the issue persists. +

+
+ )}
-
\ No newline at end of file + \ No newline at end of file diff --git a/src/pages/[lang]/eap.astro b/src/pages/[lang]/eap.astro index 9e28a26..6dee9d3 100644 --- a/src/pages/[lang]/eap.astro +++ b/src/pages/[lang]/eap.astro @@ -25,98 +25,272 @@ const metadata = { --- -
-

{eap.title}

-

{eap.intro}

+
+ +
+
🛡️
+

+ {eap.title} +

+

+ {eap.intro} +

+
-

{eap.whatItDoes.title}

-
    - {eap.whatItDoes.items.map((item) => ( -
  • {item}
  • - ))} -
-
- {eap.whatItDoes.screenshot} -
{eap.whatItDoes.screenshot}
-
+ +
+
+
+

{eap.whatItDoes.title}

+
+ +
+ {eap.whatItDoes.items.map((item, index) => ( +
+
+ + + +
+

{item}

+
+ ))} +
-

{eap.howItWorks.title}

-
    - {eap.howItWorks.steps.map((step) => ( -
  1. {step}
  2. - ))} -
- -

{eap.privacy.title}

-
    - {eap.privacy.items.map((item) => ( -
  • {item}
  • - ))} -
- -

{eap.notDo.title}

-
    - {eap.notDo.items.map((item) => ( -
  • {item}
  • - ))} -
- -

{eap.trustedBlocked.title}

-
    - {eap.trustedBlocked.steps.map((step) => ( -
  1. {step}
  2. - ))} -
- -

{eap.safeBrowsing.title}

-

{eap.safeBrowsing.content}

- {eap.safeBrowsing.report} - -

{eap.audience.title}

-
    - {eap.audience.items.map((item) => ( -
  • {item}
  • - ))} -
- -

{eap.requirements.title}

-
    - {eap.requirements.items.map((item) => ( -
  • {item}
  • - ))} -
- -

{eap.troubleshooting.title}

- {eap.troubleshooting.notFlagged} -
    - {eap.troubleshooting.notFlaggedReasons.map((item) => ( -
  • {item}
  • - ))} -
- {eap.troubleshooting.falsePositive} -
    - {eap.troubleshooting.falsePositiveReasons.map((item) => ( -
  • {item}
  • - ))} -
- -

{eap.updates.title}

-
    - {eap.updates.features.map((item) => ( -
  • {item}
  • - ))} -
- -

Screenshots

-
-
- {eap.screenshots.settings} -
{eap.screenshots.settings}
-
-
- {eap.screenshots.popup} -
{eap.screenshots.popup}
+
+ {eap.whatItDoes.screenshot} +
+ {eap.whatItDoes.screenshot} +
+ + +
+
+
🔧
+

{eap.howItWorks.title}

+
+
+
    + {eap.howItWorks.steps.map((step, index) => ( +
  1. +
    + {index + 1} +
    +

    {step}

    +
  2. + ))} +
+
+
+ + +
+ +
+
+
🔒
+

{eap.privacy.title}

+
+
    + {eap.privacy.items.map((item) => ( +
  • +
    +

    {item}

    +
  • + ))} +
+
+ + +
+
+
🚫
+

{eap.notDo.title}

+
+
    + {eap.notDo.items.map((item) => ( +
  • +
    +

    {item}

    +
  • + ))} +
+
+
+ + +
+
+
⚙️
+

{eap.trustedBlocked.title}

+
+
+
    + {eap.trustedBlocked.steps.map((step, index) => ( +
  1. +
    + {index + 1} +
    +

    {step}

    +
  2. + ))} +
+
+
+ + +
+
+
🌐
+

{eap.safeBrowsing.title}

+
+

{eap.safeBrowsing.content}

+ + + + + {eap.safeBrowsing.report} + +
+ + +
+ +
+
+
👥
+

{eap.audience.title}

+
+
    + {eap.audience.items.map((item) => ( +
  • +
    +

    {item}

    +
  • + ))} +
+
+ + +
+
+
📋
+

{eap.requirements.title}

+
+
    + {eap.requirements.items.map((item) => ( +
  • +
    +

    {item}

    +
  • + ))} +
+
+
+ + +
+
+
🔧
+

{eap.troubleshooting.title}

+
+ +
+ +
+

+ {eap.troubleshooting.notFlagged} +

+
    + {eap.troubleshooting.notFlaggedReasons.map((item) => ( +
  • +
    +

    {item}

    +
  • + ))} +
+
+ + +
+

+ {eap.troubleshooting.falsePositive} +

+
    + {eap.troubleshooting.falsePositiveReasons.map((item) => ( +
  • +
    +

    {item}

    +
  • + ))} +
+
+
+
+ + +
+
+
🚀
+

{eap.updates.title}

+
+
+ {eap.updates.features.map((item) => ( +
+
+ + + +
+

{item}

+
+ ))} +
+
+ + +
+

Screenshots

+
+
+ {eap.screenshots.settings} +
+ {eap.screenshots.settings} +
+
+ +
+ {eap.screenshots.popup} +
+ {eap.screenshots.popup} +
+
+
+
- \ No newline at end of file + \ No newline at end of file diff --git a/src/pages/[lang]/journii.astro b/src/pages/[lang]/journii.astro new file mode 100644 index 0000000..49b331d --- /dev/null +++ b/src/pages/[lang]/journii.astro @@ -0,0 +1,199 @@ +--- +export const prerender = true; + +import Layout from '~/layouts/PageLayout.astro'; +import { getJourniiTranslation, supportedLanguages } from '~/i18n/translations.journii'; +import Image from '~/components/common/Image.astro'; +// Import images when available +// import journiiHomeImg from '~/assets/images/journii-home.png'; +// import journiiAnalyticsImg from '~/assets/images/journii-analytics.png'; + +export async function getStaticPaths() { + return supportedLanguages.map((lang) => ({ + params: { lang }, + })); +} + +const { lang } = Astro.params; +if (!supportedLanguages.includes(lang)) { + return Astro.redirect('/en/journii'); +} + +const t = getJourniiTranslation(lang); + +const metadata = { + title: t.title, + description: t.description, +}; +--- + + +
+ +
+
🚗
+

+ {t.title} +

+

+ {t.subtitle} +

+
+ 🚧 {t.status} +
+
+ + +
+

+ {t.description} +

+
+ + +
+

{t.features.title}

+
+
+
🚗
+

{t.features.fuel.title}

+

{t.features.fuel.desc}

+
+
+
🔧
+

{t.features.maintenance.title}

+

{t.features.maintenance.desc}

+
+
+
📊
+

{t.features.analytics.title}

+

{t.features.analytics.desc}

+
+
+
🚙
+

{t.features.multi.title}

+

{t.features.multi.desc}

+
+
+
⚙️
+

{t.features.customization.title}

+

{t.features.customization.desc}

+
+
+
+

{t.features.design.title}

+

{t.features.design.desc}

+
+
+
+ + +
+

{t.roadmap.title}

+
+ +
+

+ {t.progress.completed} {t.roadmap.phase1.title} +

+
    + {t.roadmap.phase1.items.map((item) => ( +
  • + + {item} +
  • + ))} +
+
+ + +
+

+ {t.progress.inProgress} {t.roadmap.phase2.title} +

+
    + {t.roadmap.phase2.items.map((item) => ( +
  • + 🔄 + {item} +
  • + ))} +
+
+ + +
+

+ {t.progress.planned} {t.roadmap.phase3.title} +

+
    + {t.roadmap.phase3.items.map((item) => ( +
  • + 📋 + {item} +
  • + ))} +
+
+
+
+ + +
+
+
+

{t.tech.title}

+

+ {t.tech.desc} +

+
+
+ + + + + +
+

{t.cta.title}

+

+ {t.cta.desc} +

+ +
+
+
\ No newline at end of file diff --git a/src/pages/[lang]/privacy.astro b/src/pages/[lang]/privacy.astro index 5e6b911..92bd768 100644 --- a/src/pages/[lang]/privacy.astro +++ b/src/pages/[lang]/privacy.astro @@ -27,17 +27,18 @@ const metadata = { // Table of Contents items const tocItems = [ - { id: 'introduction', title: 'Introduction' }, - { id: 'data-collection', title: 'Data Collection Policy' }, - { id: 'cookie-usage', title: 'Cookie & Storage Usage' }, - { id: 'sessionstorage', title: 'SessionStorage Usage' }, - { id: 'localstorage', title: 'LocalStorage Usage' }, - { id: 'clear-preferences', title: 'How to Clear Your Preferences' }, - { id: 'user-rights', title: 'Your Rights (GDPR & Dutch Law)' }, - { id: 'data-security', title: 'Data Security' }, - { id: 'third-party', title: 'Third-Party Websites' }, - { id: 'changes', title: 'Changes to Privacy Policy' }, - { id: 'contact', title: 'Contact Information' }, + { id: 'introduction', title: 'Introduction', icon: '📋' }, + { id: 'data-collection', title: 'Data Collection Policy', icon: '🔒' }, + { id: 'cookie-usage', title: 'Cookie & Storage Usage', icon: '🍪' }, + { id: 'sessionstorage', title: 'SessionStorage Usage', icon: '⏱️' }, + { id: 'localstorage', title: 'LocalStorage Usage', icon: '💾' }, + { id: 'clear-preferences', title: 'How to Clear Your Preferences', icon: '🧹' }, + { id: 'user-rights', title: 'Your Rights (GDPR & Dutch Law)', icon: '⚖️' }, + { id: 'data-security', title: 'Data Security', icon: '🛡️' }, + { id: 'third-party', title: 'Third-Party Websites', icon: '🔗' }, + { id: 'changes', title: 'Changes to Privacy Policy', icon: '📝' }, + { id: 'children-privacy', title: 'Children\'s Privacy', icon: '👶' }, + { id: 'contact', title: 'Contact Information', icon: '📧' }, ]; // Helper function to parse and format heartbeat times in UTC @@ -45,18 +46,6 @@ function parseAndFormatTime(rawTime) { const dt = DateTime.fromFormat(rawTime, 'yyyy-MM-dd HH:mm:ss.SSS', { zone: 'utc' }); return dt.isValid ? dt.toFormat('dd-LL-yyyy, HH:mm:ss \"UTC\"') : 'Invalid DateTime UTC'; } - -// Example usage: format all heartbeats in all lists -// (Assume apiData is your fetched API data) -// const apiData = { heartbeatList: { ... } }; -// const formattedHeartbeatList = Object.fromEntries( -// Object.entries(apiData.heartbeatList).map(([key, arr]) => [ -// key, -// arr.map(hb => ({ ...hb, formattedTime: parseAndFormatTime(hb.time) })) -// ]) -// ); -// -// Now, for each heartbeat, use hb.formattedTime for display in UTC. --- @@ -80,205 +69,382 @@ function parseAndFormatTime(rawTime) { }} /> - - - Last updated: 07 June 2025 - +
+ +
+
🔐
+

+ {t.footer.privacyPolicy} +

+

+ Transparent data practices and your privacy rights +

+
+ 📅 Last updated: 07 June 2025 +
+
- -
-
-

Table of Contents

- +
+
+
📚
+

Table of Contents

+
+
+ {tocItems.map((item) => ( + + {item.icon} + + {item.title} + + + ))} +
+
+ + +
+
+
🚫
+

No Personal Data

+

We don't collect or store any personal information

+
+
+
🍪
+

Essential Cookies Only

+

Only for language preference and consent

+
+
+
🛡️
+

GDPR Compliant

+

Full compliance with EU privacy laws

+
-
-

1. Introduction

-

- This Privacy Policy explains how we handle information when you visit our website. We are committed to - protecting your privacy and complying with applicable data protection laws, including the General Data - Protection Regulation (GDPR). -

-

- We value transparency and want you to understand what information we collect, why we collect it, and how we use - it. This policy applies to all visitors to our website. -

-

2. Data Collection Policy

-

- We do not collect or store any personal user data. Our website is designed to provide information - without requiring you to submit any personal information. -

-

- The only data stored is your preferences for language and theme settings, which are stored locally on your - device using browser technologies (cookies and LocalStorage) and are never transmitted to our servers. More - details about this are provided in the sections below. -

-

We do not:

-
    -
  • - Collect your name, email address, or other contact information unless you voluntarily provide it through our - contact form -
  • -
  • Track your browsing behavior
  • -
  • Use analytics services that collect personal data
  • -
  • Use advertising or marketing tracking technologies
  • -
  • Share any information with third parties
  • -
  • Store your preferences on our servers
  • -
-

- If you choose to contact us using our contact form, the information you provide (such as your name and email - address) will only be used to respond to your inquiry and will not be stored longer than necessary for that - purpose. Contact form submissions are deleted after your inquiry is resolved and are never used for marketing or shared with third parties. -

- -

- Our website uses cookies strictly for essential functionality. These cookies are necessary for the - proper functioning of our website and do not collect any personal information. -

-

Details about the cookies we use:

-
    -
  • - Name: preferredLanguage -
      -
    • Purpose: Remembers your language preference (e.g., English, Dutch, German, French)
    • -
    • Data stored: Only the language code (e.g., "en", "nl", "de", "fr")
    • -
    • Duration: 365 days
    • -
    • Type: First-party cookie (not shared with any third parties)
    • -
    -
  • -
  • - Name: cookieConsentAccepted -
      -
    • Purpose: Remembers that you have acknowledged our cookie notice
    • -
    • Data stored: A simple "true" value
    • -
    • Duration: 365 days
    • -
    • Type: First-party cookie and LocalStorage item (not shared with any third parties)
    • -
    -
  • -
-

- In addition to cookies, we also use LocalStorage to store certain preferences. Details about this are provided - in the next section. -

-

- We do not use any tracking, analytics, or third-party cookies. No personal information is collected through our - cookies or LocalStorage. -

-

4. SessionStorage Usage

-

- We use your browser's sessionStorage to temporarily store certain non-personal data that helps improve performance and user experience. This data is never sent to our servers and is automatically deleted as soon as you close your browser tab or window. No personal or identifying information is ever stored in sessionStorage. -

-

The following key may be stored:

-
    -
  • uptimeStatusCache: Temporarily caches the latest system status data for performance. Deleted when you close your browser tab or window.
  • -
-

5. LocalStorage Usage

-

- Our website uses your browser's localStorage to remember certain preferences and UI states. The following keys may be stored: -

-
    -
  • preferredLanguage: Remembers your language preference (e.g., "en", "nl").
  • -
  • cookieConsentAccepted: Remembers that you have accepted our cookie notice.
  • -
  • devnet-intro-collapsed: Remembers if you have collapsed the introduction section.
  • -
-

Data stored in localStorage remains on your device indefinitely unless you manually clear it via your browser settings or our website removes it.

-

6. How to Clear Your Preferences

-

- If you wish to reset your language or theme settings, you can clear your browser's cookies and LocalStorage - data. Here's how to do it in common browsers: -

-

- Chrome: -

-
    -
  1. Click the three dots in the top-right corner
  2. -
  3. Select "Settings"
  4. -
  5. Go to "Privacy and security"
  6. -
  7. Click "Clear browsing data"
  8. -
  9. Select "Cookies and other site data" and "Cached images and files"
  10. -
  11. Click "Clear data"
  12. -
-

- Firefox: -

-
    -
  1. Click the three lines in the top-right corner
  2. -
  3. Select "Settings"
  4. -
  5. Go to "Privacy & Security"
  6. -
  7. Under "Cookies and Site Data," click "Clear Data"
  8. -
  9. Ensure "Cookies and Site Data" is checked
  10. -
  11. Click "Clear"
  12. -
-

- Safari: -

-
    -
  1. Click "Safari" in the top menu
  2. -
  3. Select "Preferences"
  4. -
  5. Go to the "Privacy" tab
  6. -
  7. Click "Manage Website Data"
  8. -
  9. Find our website and click "Remove" or "Remove All"
  10. -
-

- After clearing your browser data, your language will reset to the default (English) and your theme will reset to - the system default. -

-

7. Your Rights (GDPR & Dutch Law)

-

Under the GDPR and Dutch law, you have the right to:

-
    -
  • Be informed about data collection and storage (this policy).
  • -
  • Access, correct, or delete your data (not applicable, as we store no personal data).
  • -
  • Lodge a complaint with the Dutch DPA (Autoriteit Persoonsgegevens) if you believe your rights are violated. For more information or to lodge a complaint, visit Autoriteit Persoonsgegevens.
  • -
-

8. Data Security

-

- We take appropriate technical and organizational measures to ensure the security of any information transmitted - to us. However, please be aware that no method of transmission over the internet or method of electronic storage - is 100% secure. -

-

- Our website uses HTTPS encryption to ensure that any communication between your browser and our website is - secure. -

-

9. Third-Party Websites

-

- Our website may contain links to other websites that are not operated by us. If you click on a third-party link, - you will be directed to that third party's site. We strongly advise you to review the Privacy Policy of every - site you visit. -

-

- We have no control over and assume no responsibility for the content, privacy policies, or practices of any - third-party sites or services. -

-

10. Changes to Privacy Policy

-

- We may update our Privacy Policy from time to time. We will notify you of any changes by posting the new Privacy - Policy on this page and updating the "Last updated" date at the top of this page. -

-

- You are advised to review this Privacy Policy periodically for any changes. Changes to this Privacy Policy are - effective when they are posted on this page. -

-

11. Contact Information

-

For privacy questions, contact info@365devnet.eu.
- Company name: 365devnet
- KvK number: 97226270

-

12. Children's Privacy

-

Our website and services are not intended for children under 16. We do not knowingly collect personal data from children.

+
+ + +
+
+
📋
+

1. Introduction

+
+
+

+ This Privacy Policy explains how we handle information when you visit our website. We are committed to + protecting your privacy and complying with applicable data protection laws, including the General Data + Protection Regulation (GDPR). +

+

+ We value transparency and want you to understand what information we collect, why we collect it, and how we use + it. This policy applies to all visitors to our website. +

+
+
+ + +
+
+
🔒
+

2. Data Collection Policy

+
+
+

+ We do not collect or store any personal user data. +

+

+ Our website is designed to provide information without requiring you to submit any personal information. +

+
+
+

+ The only data stored is your preferences for language and theme settings, which are stored locally on your + device using browser technologies (cookies and LocalStorage) and are never transmitted to our servers. +

+
+

Contact Form Submissions

+

+ If you choose to contact us using our contact form, the information you provide (such as your name and email address) will only be used to respond to your inquiry and will not be stored longer than necessary for that purpose. Contact form submissions are deleted after your inquiry is resolved and are never used for marketing or shared with third parties. +

+
+

We do not:

+
+ {[ + "Collect your name, email address, or other contact information", + "Track your browsing behavior", + "Use analytics services that collect personal data", + "Use advertising or marketing tracking technologies", + "Share any information with third parties", + "Store your preferences on our servers" + ].map((item) => ( +
+
+

{item}

+
+ ))} +
+
+
+ + + + + +
+ +
+
+
⏱️
+

4. SessionStorage Usage

+
+
+

Temporarily stores non-personal data for performance. Automatically deleted when you close your browser tab.

+
+

uptimeStatusCache

+

System status cache for performance

+
+
+
+ + +
+
+
💾
+

5. LocalStorage Usage

+
+
+

Stores preferences and UI states locally on your device.

+
+ {['preferredLanguage', 'cookieConsentAccepted', 'devnet-intro-collapsed'].map((key) => ( +
+ {key} +
+ ))} +
+
+
+
+ + +
+
+
🧹
+

6. How to Clear Your Preferences

+
+
+ {[ + { + browser: 'Chrome', + icon: '🟡', + steps: [ + 'Click three dots (top-right)', + 'Select "Settings"', + 'Go to "Privacy and security"', + 'Click "Clear browsing data"', + 'Select cookies and cached data', + 'Click "Clear data"' + ] + }, + { + browser: 'Firefox', + icon: '🦊', + steps: [ + 'Click three lines (top-right)', + 'Select "Settings"', + 'Go to "Privacy & Security"', + 'Click "Clear Data"', + 'Check "Cookies and Site Data"', + 'Click "Clear"' + ] + }, + { + browser: 'Safari', + icon: '🧭', + steps: [ + 'Click "Safari" in top menu', + 'Select "Preferences"', + 'Go to "Privacy" tab', + 'Click "Manage Website Data"', + 'Find our site and "Remove"' + ] + } + ].map((browser) => ( +
+

+ {browser.icon} + {browser.browser} +

+
    + {browser.steps.map((step, index) => ( +
  1. + + {index + 1} + + {step} +
  2. + ))} +
+
+ ))} +
+
+ + + +
+
+
⚖️
+

7. Your Rights (GDPR & Dutch Law)

+
+
+

Under the GDPR and Dutch law, you have the right to:

+
+ {[ + "Be informed about data collection and storage (this policy)", + "Access, correct, or delete your data (not applicable, as we store no personal data)", + "Lodge a complaint with the Dutch DPA (Autoriteit Persoonsgegevens)" + ].map((item) => ( +
+
⚖️
+

{item}

+
+ ))} +
+

+ For more information or to lodge a complaint, visit{' '} + + Autoriteit Persoonsgegevens + . +

+
+
+ + +
+
+
🛡️
+

8. Data Security

+
+
+

+ We take appropriate technical and organizational measures to ensure the security of any information transmitted + to us. However, please be aware that no method of transmission over the internet or method of electronic storage + is 100% secure. +

+
+

+ HTTPS Encryption: Our website uses HTTPS encryption to ensure that any communication between your browser and our website is secure. +

+
+
+
+ + +
+
+
🔗
+

9. Third-Party Websites

+
+
+

+ Our website may contain links to other websites that are not operated by us. If you click on a third-party link, + you will be directed to that third party's site. We strongly advise you to review the Privacy Policy of every + site you visit. +

+
+

+ No Responsibility: We have no control over and assume no responsibility for the content, privacy policies, or practices of any third-party sites or services. +

+
+
+
+ + +
+
+
📝
+

10. Changes to Privacy Policy

+
+
+

+ We may update our Privacy Policy from time to time. We will notify you of any changes by posting the new Privacy + Policy on this page and updating the "Last updated" date at the top of this page. +

+
+

+ Stay Informed: You are advised to review this Privacy Policy periodically for any changes. Changes to this Privacy Policy are effective when they are posted on this page. +

+
+
+
+ + +
+
+
👶
+

11. Children's Privacy

+
+
+

+ Our website and services are not intended for children under 16. We do not knowingly collect personal data from children. +

+
+
+ + +
+
📧
+

12. Contact Information

+
+

For privacy questions, contact info@365devnet.eu

+

Company: 365devnet

+

KvK number: 97226270

+

Location: Netherlands

+
+
- + \ No newline at end of file diff --git a/src/pages/[lang]/terms.astro b/src/pages/[lang]/terms.astro index f85e186..a76b424 100644 --- a/src/pages/[lang]/terms.astro +++ b/src/pages/[lang]/terms.astro @@ -24,16 +24,16 @@ const metadata = { description: 'Terms and Conditions for our website, outlining user rights, responsibilities, and legal information.', }; -// Table of Contents items +// Table of Contents items with icons const tocItems = [ - { id: 'scope', title: 'Scope of Services' }, - { id: 'user-rights', title: 'User Rights & Responsibilities' }, - { id: 'intellectual-property', title: 'Intellectual Property' }, - { id: 'liability', title: 'Limitation of Liability' }, - { id: 'governing-law', title: 'Governing Law' }, - { id: 'cookies', title: 'Cookie Usage' }, - { id: 'changes', title: 'Changes to Terms' }, - { id: 'contact', title: 'Contact Information' }, + { id: 'scope', title: 'Scope of Services', icon: '🎯' }, + { id: 'user-rights', title: 'User Rights & Responsibilities', icon: '👤' }, + { id: 'intellectual-property', title: 'Intellectual Property', icon: '©️' }, + { id: 'liability', title: 'Limitation of Liability', icon: '⚖️' }, + { id: 'governing-law', title: 'Governing Law', icon: '🏛️' }, + { id: 'cookies', title: 'Cookie Usage', icon: '🍪' }, + { id: 'changes', title: 'Changes to Terms', icon: '📝' }, + { id: 'contact', title: 'Contact Information', icon: '📧' }, ]; --- @@ -59,112 +59,287 @@ const tocItems = [ }} /> - - - Last updated: 07 June 2025 - +
+ +
+
📋
+

+ {t.footer.terms} +

+

+ Legal framework and guidelines for using our website +

+
+ 📅 Last updated: 07 June 2025 +
+
+ + +
+
+
⚠️
+
+

Important Notice

+

+ Please read these terms and conditions carefully before using our website. By accessing or using our website, + you agree to be bound by these terms and conditions. +

+
+
+
- -
-
-

Table of Contents

- +
+
+
📚
+

Table of Contents

+
+
+ {tocItems.map((item) => ( + + {item.icon} + + {item.title} + + + ))} +
+
+ + +
+
+
🌐
+

Informational Use

+

Content for general information purposes only

+
+
+
🏛️
+

Dutch Law

+

Governed by Dutch law and GDPR compliance

+
+
+
🔒
+

Your Rights

+

Clear user rights and responsibilities

+
-
-

- Please read these terms and conditions carefully before using our website. By accessing or using our website, - you agree to be bound by these terms and conditions. -

+
+ + +
+
+
🎯
+

1. Scope of Services

+
+
+

+ Our website provides information about our professional services, expertise, and industry insights. The content + on this website is for general informational purposes only and does not constitute professional advice. +

+
+

+ Important: We may update, modify, or remove content at any time without notice. +

+
+
+
-

1. Scope of Services

-

- Our website provides information about our professional services, expertise, and industry insights. The content - on this website is for general informational purposes only and does not constitute professional advice. We may - update, modify, or remove content at any time without notice. -

+ +
+
+
👤
+

2. User Rights & Responsibilities

+
+
+

When using our website, you agree to:

+
+ {[ + { + type: 'do', + text: 'Use the website in accordance with these terms and all applicable laws' + }, + { + type: 'do', + text: 'Respect intellectual property rights and terms of use' + }, + { + type: 'dont', + text: 'Use the website in any way that could damage or impair our services' + }, + { + type: 'dont', + text: 'Attempt to gain unauthorized access to any part of the website' + }, + { + type: 'dont', + text: 'Use any automated means to access or collect data from the website' + }, + { + type: 'dont', + text: 'Use the website to transmit any harmful code or material' + } + ].map((item) => ( +
+
+ {item.type === 'do' ? '✓' : '✗'} +
+

{item.text}

+
+ ))} +
+
+
-

2. User Rights & Responsibilities

-

When using our website, you agree to:

-
    -
  • Use the website in accordance with these terms and conditions and all applicable laws and regulations
  • -
  • Not use the website in any way that could damage, disable, overburden, or impair our services
  • -
  • - Not attempt to gain unauthorized access to any part of the website or any system or network connected to the - website -
  • -
  • Not use any automated means to access or collect data from the website
  • -
  • Not use the website to transmit any harmful code or material
  • -
+ +
+
+
©️
+

3. Intellectual Property

+
+
+

+ All content on this website, including but not limited to text, graphics, logos, images, audio clips, digital + downloads, and data compilations, is the property of the website owner or its content suppliers and is protected + by Dutch and international copyright laws. +

+
+

Permitted Use

+

+ You may view, download, and print content from this website for your personal, non-commercial use, provided that + you do not modify the content and that you retain all copyright and other proprietary notices. +

+
+
+
-

3. Intellectual Property

-

- All content on this website, including but not limited to text, graphics, logos, images, audio clips, digital - downloads, and data compilations, is the property of the website owner or its content suppliers and is protected - by Dutch and international copyright laws. -

-

- You may view, download, and print content from this website for your personal, non-commercial use, provided that - you do not modify the content and that you retain all copyright and other proprietary notices. -

+ +
+
+
⚖️
+

4. Limitation of Liability

+
+
+
+

⚠️ Important Legal Notice

+

+ To the fullest extent permitted by applicable law, we exclude all representations, warranties, and conditions + relating to our website and the use of this website. +

+
+

+ We will not be liable for any direct, indirect, or consequential loss or damage arising under these terms and + conditions or in connection with our website, including any loss of profit, contracts, business, goodwill, data, + income, revenue, or anticipated savings. +

+
+

+ Exception: This does not exclude our liability for death or personal injury resulting from + negligence, fraudulent misrepresentation, or any other liability which cannot be excluded under applicable law. +

+
+
+
-

4. Limitation of Liability

-

- To the fullest extent permitted by applicable law, we exclude all representations, warranties, and conditions - relating to our website and the use of this website. We will not be liable for any direct, indirect, or - consequential loss or damage arising under these terms and conditions or in connection with our website, whether - arising in tort, contract, or otherwise, including, without limitation, any loss of profit, contracts, business, - goodwill, data, income, revenue, or anticipated savings. -

-

- This does not exclude or limit our liability for death or personal injury resulting from our negligence, nor our - liability for fraudulent misrepresentation or misrepresentation as to a fundamental matter, nor any other - liability which cannot be excluded or limited under applicable law. -

+ +
+
+
🏛️
+

5. Governing Law

+
+
+
+

🇳🇱 Dutch Law

+

+ These terms are governed by Dutch law and the GDPR. Disputes will be handled by Dutch courts. +

+
+
+

🛡️ Consumer Rights

+

+ If you are a consumer, you will benefit from any mandatory provisions of the law of the country in which you are resident. +

+
+
+
-

5. Governing Law

-

- These terms are governed by Dutch law and the GDPR. Disputes will be handled by Dutch courts. If you are a consumer, you will benefit from any mandatory provisions of the law of the country in which you are resident. Nothing in these terms and conditions affects your rights as a consumer to rely on such mandatory provisions of local law. -

+ +
+
+
🍪
+

6. Cookie Usage

+
+
+

Our website uses two essential cookies:

+
+
+

+ 🌐 + preferredLanguage +

+

Stores your language preference

+
+
+

+ + cookieConsentAccepted +

+

Stores your cookie consent

+
+
+
+

+ No tracking: No tracking, analytics, or third-party cookies are used. No personal data is collected. +

+
+

+ For more information about how we use cookies and other browser storage technologies, please see our{' '} + Privacy Policy. +

+
+
-

6. Cookie Usage

-

- Our website uses two essential cookies: -

    -
  • preferredLanguage: Stores your language preference.
  • -
  • cookieConsentAccepted: Stores your cookie consent.
  • -
- No tracking, analytics, or third-party cookies are used. No personal data is collected. -

-

For more information about how we use cookies and other browser storage technologies, please see our Privacy Policy.

+ +
+
+
📝
+

7. Changes to Terms

+
+
+

+ We may revise these terms and conditions at any time by amending this page. You are expected to check this page + from time to time to take notice of any changes we make, as they are legally binding on you. +

+
+

+ Stay informed: Some provisions may also be superseded by notices published elsewhere on our website. +

+
+
+
-

7. Changes to Terms

-

- We may revise these terms and conditions at any time by amending this page. You are expected to check this page - from time to time to take notice of any changes we make, as they are legally binding on you. Some of the - provisions contained in these terms and conditions may also be superseded by provisions or notices published - elsewhere on our website. -

- -

8. Contact

-

For legal questions, contact info@365devnet.eu.
- Company name: 365devnet
- KvK number: 97226270
- Based in the Netherlands.

+ +
+
📧
+

8. Contact

+
+

Email: info@365devnet.eu

+

Company: 365devnet

+

KvK number: 97226270

+

Location: Netherlands

+
+
- + \ No newline at end of file diff --git a/src/pages/[lang]/uptime.astro b/src/pages/[lang]/uptime.astro index 8715524..7b208a2 100644 --- a/src/pages/[lang]/uptime.astro +++ b/src/pages/[lang]/uptime.astro @@ -40,9 +40,14 @@ if (!currentLang) { } const t = getTranslation(currentLang); + +const metadata = { + title: t.uptime.title || 'System Status & Uptime', + description: t.uptime.subtitle || 'Real-time status monitoring of 365DevNet services and infrastructure', +}; --- - +
@@ -51,5 +56,44 @@ const t = getTranslation(currentLang);
+ + +
+

Status Legend

+
+
+
+ Operational +
+
+
+ Degraded +
+
+
+ Outage +
+
+
+ Maintenance +
+
+
+ + +
+
+

🔄 Updates

+

+ Status checks every 30 minutes with automatic refresh +

+
+
+

📧 Support

+

+ Contact info@365devnet.eu for issues +

+
+
-
\ No newline at end of file +
\ No newline at end of file