Update dependencies, enhance security headers, and add brand information to translations
- Updated various dependencies in package.json and package-lock.json for improved performance and security. - Changed Cross-Origin-Embedder-Policy from 'require-corp' to 'credentialless' in server.js and nginx.conf for better compatibility. - Enhanced Content-Security-Policy to include specific domains for script and connect sources. - Added brand information to translations for multiple languages, improving localization and user experience. - Introduced a new BrandMarquee component in the homepage layout to showcase brands effectively.
This commit is contained in:
@@ -44,9 +44,9 @@ http {
|
||||
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
|
||||
add_header Permissions-Policy "geolocation=(), camera=(), microphone=(), interest-cohort=()" always;
|
||||
add_header Cross-Origin-Opener-Policy "same-origin" always;
|
||||
add_header Cross-Origin-Embedder-Policy "require-corp" always;
|
||||
add_header Cross-Origin-Embedder-Policy "credentialless" always;
|
||||
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
|
||||
add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'wasm-unsafe-eval' 'nonce-astro'; style-src 'self' 'unsafe-inline'; img-src 'self' data: https://cdn.pixabay.com https://raw.githubusercontent.com; font-src 'self' data:; connect-src 'self'; frame-ancestors 'none'; base-uri 'self'; form-action 'self'" always;
|
||||
add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'wasm-unsafe-eval' 'nonce-astro' https://chat.365devnet.eu; style-src 'self' 'unsafe-inline'; img-src 'self' data: https://cdn.pixabay.com https://raw.githubusercontent.com; font-src 'self' data:; connect-src 'self' https://chat.365devnet.eu wss://chat.365devnet.eu; frame-src https://chat.365devnet.eu; frame-ancestors 'none'; base-uri 'self'; form-action 'self'" always;
|
||||
|
||||
# Error pages
|
||||
error_page 404 /404.html;
|
||||
|
||||
96
package-lock.json
generated
96
package-lock.json
generated
@@ -10,8 +10,8 @@
|
||||
"dependencies": {
|
||||
"@astrojs/node": "^9.5.0",
|
||||
"@astrojs/prefetch": "^0.4.1",
|
||||
"@astrojs/react": "^4.4.0",
|
||||
"@astrojs/rss": "^4.0.11",
|
||||
"@astrojs/react": "^4.4.1",
|
||||
"@astrojs/rss": "^4.0.13",
|
||||
"@astrojs/sitemap": "^3.6.0",
|
||||
"@astrolib/analytics": "^0.6.1",
|
||||
"@astrolib/seo": "^1.0.0-beta.8",
|
||||
@@ -20,7 +20,7 @@
|
||||
"@tippyjs/react": "^4.2.6",
|
||||
"@types/react": "^19.0.10",
|
||||
"@types/react-dom": "^19.0.4",
|
||||
"astro": "^5.14.6",
|
||||
"astro": "^5.15.3",
|
||||
"astro-embed": "^0.9.0",
|
||||
"astro-icon": "^1.1.5",
|
||||
"compression": "^1.7.4",
|
||||
@@ -42,10 +42,10 @@
|
||||
"unpic": "^3.22.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@astrojs/check": "^0.9.4",
|
||||
"@astrojs/mdx": "^4.3.7",
|
||||
"@astrojs/partytown": "^2.1.3",
|
||||
"@astrojs/tailwind": "^6.0.0",
|
||||
"@astrojs/check": "^0.9.5",
|
||||
"@astrojs/mdx": "^4.3.9",
|
||||
"@astrojs/partytown": "^2.1.4",
|
||||
"@astrojs/tailwind": "^6.0.2",
|
||||
"@eslint/js": "^9.38.0",
|
||||
"@iconify-json/circle-flags": "^1.2.6",
|
||||
"@iconify-json/flat-color-icons": "^1.2.1",
|
||||
@@ -220,9 +220,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@astrojs/check": {
|
||||
"version": "0.9.4",
|
||||
"resolved": "https://registry.npmjs.org/@astrojs/check/-/check-0.9.4.tgz",
|
||||
"integrity": "sha512-IOheHwCtpUfvogHHsvu0AbeRZEnjJg3MopdLddkJE70mULItS/Vh37BHcI00mcOJcH1vhD3odbpvWokpxam7xA==",
|
||||
"version": "0.9.5",
|
||||
"resolved": "https://registry.npmjs.org/@astrojs/check/-/check-0.9.5.tgz",
|
||||
"integrity": "sha512-88vc8n2eJ1Oua74yXSGo/8ABMeypfQPGEzuoAx2awL9Ju8cE6tZ2Rz9jVx5hIExHK5gKVhpxfZj4WXm7e32g1w==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
@@ -322,9 +322,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@astrojs/mdx": {
|
||||
"version": "4.3.7",
|
||||
"resolved": "https://registry.npmjs.org/@astrojs/mdx/-/mdx-4.3.7.tgz",
|
||||
"integrity": "sha512-5SRmvMyT/UMWaU2eoD+htnXtE2mUZZEH2K/nEzhuEy+iCsOSuS/DUry59WuKUJRQETi1mgJFdNR4dZLJHYVuRA==",
|
||||
"version": "4.3.9",
|
||||
"resolved": "https://registry.npmjs.org/@astrojs/mdx/-/mdx-4.3.9.tgz",
|
||||
"integrity": "sha512-80LHiM4z3FxAjATHNgFpa8nlTNSprAWB4UUKnr/QG56Pwk7uRnJWrXlok4wSCi/3fg8kTZ98A408Q91M+iqJdw==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
@@ -334,7 +334,7 @@
|
||||
"es-module-lexer": "^1.7.0",
|
||||
"estree-util-visit": "^2.0.0",
|
||||
"hast-util-to-html": "^9.0.5",
|
||||
"kleur": "^4.1.5",
|
||||
"picocolors": "^1.1.1",
|
||||
"rehype-raw": "^7.0.0",
|
||||
"remark-gfm": "^4.0.1",
|
||||
"remark-smartypants": "^3.0.2",
|
||||
@@ -397,14 +397,14 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@astrojs/react": {
|
||||
"version": "4.4.0",
|
||||
"resolved": "https://registry.npmjs.org/@astrojs/react/-/react-4.4.0.tgz",
|
||||
"integrity": "sha512-RzblkVImAFdV1C0AWsSWzS70Z0FMtW2p0XXkNYu3QePfyVJta3JIy8m8jY8271etaCZtpFjsE2UaiHGZIBm6nw==",
|
||||
"version": "4.4.1",
|
||||
"resolved": "https://registry.npmjs.org/@astrojs/react/-/react-4.4.1.tgz",
|
||||
"integrity": "sha512-3M3RE+KYlbvov+uvn7SzgcO/zoMiK16Glwo9Ic0ZOJ0B+4PSULMeniwtyQg1m1Eq5k4BbqpIuC18lA2uzQSflQ==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@vitejs/plugin-react": "^4.7.0",
|
||||
"ultrahtml": "^1.6.0",
|
||||
"vite": "^6.3.6"
|
||||
"vite": "^6.4.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": "18.20.8 || ^20.3.0 || >=22.0.0"
|
||||
@@ -417,13 +417,13 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@astrojs/rss": {
|
||||
"version": "4.0.12",
|
||||
"resolved": "https://registry.npmjs.org/@astrojs/rss/-/rss-4.0.12.tgz",
|
||||
"integrity": "sha512-O5yyxHuDVb6DQ6VLOrbUVFSm+NpObulPxjs6XT9q3tC+RoKbN4HXMZLpv0LvXd1qdAjzVgJ1NFD+zKHJNDXikw==",
|
||||
"version": "4.0.13",
|
||||
"resolved": "https://registry.npmjs.org/@astrojs/rss/-/rss-4.0.13.tgz",
|
||||
"integrity": "sha512-ugW4DmGn8kgfl8/qecU3EcKCAuEBrZqY7eYfa6at0sY7HGEwRdzsOafLE437RwDMP2ZuxfKnCNABs99YVhX0kg==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"fast-xml-parser": "^5.2.0",
|
||||
"kleur": "^4.1.5"
|
||||
"fast-xml-parser": "^5.3.0",
|
||||
"picocolors": "^1.1.1"
|
||||
}
|
||||
},
|
||||
"node_modules/@astrojs/sitemap": {
|
||||
@@ -2338,7 +2338,7 @@
|
||||
"version": "0.3.6",
|
||||
"resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz",
|
||||
"integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==",
|
||||
"dev": true,
|
||||
"devOptional": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@jridgewell/gen-mapping": "^0.3.5",
|
||||
@@ -4049,9 +4049,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/astro": {
|
||||
"version": "5.14.6",
|
||||
"resolved": "https://registry.npmjs.org/astro/-/astro-5.14.6.tgz",
|
||||
"integrity": "sha512-MSdjKt2W2a56x868DqDWgbfw4D689/8EGhHG4465h7eivTI237u1aBx4iJvgI6WfgdUE61+coAvMjUkEvOWbpA==",
|
||||
"version": "5.15.3",
|
||||
"resolved": "https://registry.npmjs.org/astro/-/astro-5.15.3.tgz",
|
||||
"integrity": "sha512-wUO/isJrcUoduRoKacKB9jpO6TxTlPV1zw8UqQx39jSNY7z9IxusJAiib3AiNvqK+dCWhqXx+OnExCCwELmcUw==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@astrojs/compiler": "^2.12.2",
|
||||
@@ -4086,7 +4086,6 @@
|
||||
"http-cache-semantics": "^4.2.0",
|
||||
"import-meta-resolve": "^4.2.0",
|
||||
"js-yaml": "^4.1.0",
|
||||
"kleur": "^4.1.5",
|
||||
"magic-string": "^0.30.18",
|
||||
"magicast": "^0.3.5",
|
||||
"mrmime": "^2.0.1",
|
||||
@@ -4094,6 +4093,7 @@
|
||||
"p-limit": "^6.2.0",
|
||||
"p-queue": "^8.1.0",
|
||||
"package-manager-detector": "^1.3.0",
|
||||
"picocolors": "^1.1.1",
|
||||
"picomatch": "^4.0.3",
|
||||
"prompts": "^2.4.2",
|
||||
"rehype": "^13.0.2",
|
||||
@@ -4108,7 +4108,7 @@
|
||||
"unist-util-visit": "^5.0.0",
|
||||
"unstorage": "^1.17.0",
|
||||
"vfile": "^6.0.3",
|
||||
"vite": "^6.3.6",
|
||||
"vite": "^6.4.1",
|
||||
"vitefu": "^1.1.1",
|
||||
"xxhash-wasm": "^1.1.0",
|
||||
"yargs-parser": "^21.1.1",
|
||||
@@ -4977,7 +4977,7 @@
|
||||
"version": "1.1.2",
|
||||
"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
|
||||
"integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
|
||||
"dev": true,
|
||||
"devOptional": true,
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/bulk-replace": {
|
||||
@@ -5068,9 +5068,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/caniuse-lite": {
|
||||
"version": "1.0.30001722",
|
||||
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001722.tgz",
|
||||
"integrity": "sha512-DCQHBBZtiK6JVkAGw7drvAMK0Q0POD/xZvEmDp6baiMMP6QXXk9HpD6mNYBZWhOPG6LvIDb82ITqtWjhDckHCA==",
|
||||
"version": "1.0.30001753",
|
||||
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001753.tgz",
|
||||
"integrity": "sha512-Bj5H35MD/ebaOV4iDLqPEtiliTN29qkGtEHCwawWn4cYm+bPJM2NsaP30vtZcnERClMzp52J4+aw2UNbK4o+zw==",
|
||||
"funding": [
|
||||
{
|
||||
"type": "opencollective",
|
||||
@@ -6368,7 +6368,7 @@
|
||||
"version": "1.0.3",
|
||||
"resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz",
|
||||
"integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==",
|
||||
"dev": true,
|
||||
"devOptional": true,
|
||||
"license": "Apache-2.0",
|
||||
"bin": {
|
||||
"detect-libc": "bin/detect-libc.js"
|
||||
@@ -7487,9 +7487,9 @@
|
||||
"license": "BSD-3-Clause"
|
||||
},
|
||||
"node_modules/fast-xml-parser": {
|
||||
"version": "5.2.5",
|
||||
"resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.2.5.tgz",
|
||||
"integrity": "sha512-pfX9uG9Ki0yekDHx2SiuRIyFdyAr1kMIMitPvb0YBo8SUfKvia7w7FIyd/l6av85pFYRhZscS75MwMnbvY+hcQ==",
|
||||
"version": "5.3.1",
|
||||
"resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.3.1.tgz",
|
||||
"integrity": "sha512-jbNkWiv2Ec1A7wuuxk0br0d0aTMUtQ4IkL+l/i1r9PRf6pLXjDgsBsWwO+UyczmQlnehi4Tbc8/KIvxGQe+I/A==",
|
||||
"funding": [
|
||||
{
|
||||
"type": "github",
|
||||
@@ -8804,7 +8804,7 @@
|
||||
"version": "1.21.7",
|
||||
"resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz",
|
||||
"integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==",
|
||||
"dev": true,
|
||||
"devOptional": true,
|
||||
"license": "MIT",
|
||||
"bin": {
|
||||
"jiti": "bin/jiti.js"
|
||||
@@ -8967,6 +8967,7 @@
|
||||
"version": "4.1.5",
|
||||
"resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz",
|
||||
"integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=6"
|
||||
@@ -9024,7 +9025,7 @@
|
||||
"version": "1.28.2",
|
||||
"resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.28.2.tgz",
|
||||
"integrity": "sha512-ePLRrbt3fgjXI5VFZOLbvkLD5ZRuxGKm+wJ3ujCqBtL3NanDHPo/5zicR5uEKAPiIjBYF99BM4K4okvMznjkVA==",
|
||||
"dev": true,
|
||||
"devOptional": true,
|
||||
"license": "MPL-2.0",
|
||||
"dependencies": {
|
||||
"detect-libc": "^1.0.3"
|
||||
@@ -13039,7 +13040,7 @@
|
||||
"version": "0.5.21",
|
||||
"resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz",
|
||||
"integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
|
||||
"dev": true,
|
||||
"devOptional": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"buffer-from": "^1.0.0",
|
||||
@@ -13050,7 +13051,7 @@
|
||||
"version": "0.6.1",
|
||||
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
|
||||
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
|
||||
"dev": true,
|
||||
"devOptional": true,
|
||||
"license": "BSD-3-Clause",
|
||||
"engines": {
|
||||
"node": ">=0.10.0"
|
||||
@@ -13558,7 +13559,7 @@
|
||||
"version": "5.37.0",
|
||||
"resolved": "https://registry.npmjs.org/terser/-/terser-5.37.0.tgz",
|
||||
"integrity": "sha512-B8wRRkmre4ERucLM/uXx4MOV5cbnOlVAqUst+1+iLKPI0dOgFO28f84ptoQt9HEI537PMzfYa/d+GEPKTRXmYA==",
|
||||
"dev": true,
|
||||
"devOptional": true,
|
||||
"license": "BSD-2-Clause",
|
||||
"dependencies": {
|
||||
"@jridgewell/source-map": "^0.3.3",
|
||||
@@ -13577,7 +13578,7 @@
|
||||
"version": "2.20.3",
|
||||
"resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
|
||||
"integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
|
||||
"dev": true,
|
||||
"devOptional": true,
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/thenify": {
|
||||
@@ -13819,7 +13820,6 @@
|
||||
"version": "5.9.3",
|
||||
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz",
|
||||
"integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==",
|
||||
"dev": true,
|
||||
"license": "Apache-2.0",
|
||||
"bin": {
|
||||
"tsc": "bin/tsc",
|
||||
@@ -14389,9 +14389,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/vite": {
|
||||
"version": "6.4.0",
|
||||
"resolved": "https://registry.npmjs.org/vite/-/vite-6.4.0.tgz",
|
||||
"integrity": "sha512-oLnWs9Hak/LOlKjeSpOwD6JMks8BeICEdYMJBf6P4Lac/pO9tKiv/XhXnAM7nNfSkZahjlCZu9sS50zL8fSnsw==",
|
||||
"version": "6.4.1",
|
||||
"resolved": "https://registry.npmjs.org/vite/-/vite-6.4.1.tgz",
|
||||
"integrity": "sha512-+Oxm7q9hDoLMyJOYfUYBuHQo+dkAloi33apOPP56pzj+vsdJDzr+j1NISE5pyaAuKL4A3UD34qd0lx5+kfKp2g==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"esbuild": "^0.25.0",
|
||||
@@ -14950,7 +14950,7 @@
|
||||
"version": "2.8.0",
|
||||
"resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.0.tgz",
|
||||
"integrity": "sha512-4lLa/EcQCB0cJkyts+FpIRx5G/llPxfP6VQU5KByHEhLxY3IJCH0f0Hy1MHI8sClTvsIb8qwRJ6R/ZdlDJ/leQ==",
|
||||
"dev": true,
|
||||
"devOptional": true,
|
||||
"license": "ISC",
|
||||
"bin": {
|
||||
"yaml": "bin.mjs"
|
||||
|
||||
16
package.json
16
package.json
@@ -24,8 +24,8 @@
|
||||
"dependencies": {
|
||||
"@astrojs/node": "^9.5.0",
|
||||
"@astrojs/prefetch": "^0.4.1",
|
||||
"@astrojs/react": "^4.4.0",
|
||||
"@astrojs/rss": "^4.0.11",
|
||||
"@astrojs/react": "^4.4.1",
|
||||
"@astrojs/rss": "^4.0.13",
|
||||
"@astrojs/sitemap": "^3.6.0",
|
||||
"@astrolib/analytics": "^0.6.1",
|
||||
"@astrolib/seo": "^1.0.0-beta.8",
|
||||
@@ -34,7 +34,7 @@
|
||||
"@tippyjs/react": "^4.2.6",
|
||||
"@types/react": "^19.0.10",
|
||||
"@types/react-dom": "^19.0.4",
|
||||
"astro": "^5.14.6",
|
||||
"astro": "^5.15.3",
|
||||
"astro-embed": "^0.9.0",
|
||||
"astro-icon": "^1.1.5",
|
||||
"compression": "^1.7.4",
|
||||
@@ -56,10 +56,10 @@
|
||||
"unpic": "^3.22.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@astrojs/check": "^0.9.4",
|
||||
"@astrojs/mdx": "^4.3.7",
|
||||
"@astrojs/partytown": "^2.1.3",
|
||||
"@astrojs/tailwind": "^6.0.0",
|
||||
"@astrojs/check": "^0.9.5",
|
||||
"@astrojs/mdx": "^4.3.9",
|
||||
"@astrojs/partytown": "^2.1.4",
|
||||
"@astrojs/tailwind": "^6.0.2",
|
||||
"@eslint/js": "^9.38.0",
|
||||
"@iconify-json/circle-flags": "^1.2.6",
|
||||
"@iconify-json/flat-color-icons": "^1.2.1",
|
||||
@@ -80,9 +80,9 @@
|
||||
"js-yaml": "^4.1.0",
|
||||
"mdast-util-to-string": "^4.0.0",
|
||||
"prettier": "^3.6.2",
|
||||
"rehype-sanitize": "^6.0.0",
|
||||
"prettier-plugin-astro": "^0.14.1",
|
||||
"reading-time": "^1.5.0",
|
||||
"rehype-sanitize": "^6.0.0",
|
||||
"sharp": "0.33.5",
|
||||
"tailwind-merge": "^3.3.1",
|
||||
"tailwindcss": "^3.4.17",
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
Referrer-Policy: strict-origin-when-cross-origin
|
||||
Permissions-Policy: geolocation=(), camera=(), microphone=(), interest-cohort=()
|
||||
Cross-Origin-Opener-Policy: same-origin
|
||||
Cross-Origin-Embedder-Policy: require-corp
|
||||
Cross-Origin-Embedder-Policy: credentialless
|
||||
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
|
||||
# Content-Security-Policy starter (enable after auditing inline scripts)
|
||||
# Content-Security-Policy: default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data: https://cdn.pixabay.com https://raw.githubusercontent.com; font-src 'self' data:; connect-src 'self'; frame-ancestors 'none'; base-uri 'self'; form-action 'self'
|
||||
# Content-Security-Policy: default-src 'self'; script-src 'self' 'wasm-unsafe-eval' 'nonce-astro' https://chat.365devnet.eu; style-src 'self' 'unsafe-inline'; img-src 'self' data: https://cdn.pixabay.com https://raw.githubusercontent.com; font-src 'self' data:; connect-src 'self' https://chat.365devnet.eu wss://chat.365devnet.eu; frame-src https://chat.365devnet.eu; frame-ancestors 'none'; base-uri 'self'; form-action 'self'
|
||||
|
||||
@@ -20,12 +20,12 @@ app.use((req, res, next) => {
|
||||
res.setHeader('X-Content-Type-Options', 'nosniff');
|
||||
res.setHeader('Referrer-Policy', 'strict-origin-when-cross-origin');
|
||||
res.setHeader('Cross-Origin-Opener-Policy', 'same-origin');
|
||||
res.setHeader('Cross-Origin-Embedder-Policy', 'require-corp');
|
||||
res.setHeader('Cross-Origin-Embedder-Policy', 'credentialless');
|
||||
// Gate SSR CSP to avoid breaking inline scripts unless explicitly enabled
|
||||
if (process.env.ENABLE_SSR_CSP === '1') {
|
||||
res.setHeader(
|
||||
'Content-Security-Policy',
|
||||
"default-src 'self'; script-src 'self' 'wasm-unsafe-eval'; style-src 'self' 'unsafe-inline'; img-src 'self' data: https://cdn.pixabay.com https://raw.githubusercontent.com; font-src 'self' data:; connect-src 'self'; frame-ancestors 'none'; base-uri 'self'; form-action 'self'"
|
||||
"default-src 'self'; script-src 'self' 'wasm-unsafe-eval' 'nonce-astro' https://chat.365devnet.eu; style-src 'self' 'unsafe-inline'; img-src 'self' data: https://cdn.pixabay.com https://raw.githubusercontent.com; font-src 'self' data:; connect-src 'self' https://chat.365devnet.eu wss://chat.365devnet.eu; frame-src https://chat.365devnet.eu; frame-ancestors 'none'; base-uri 'self'; form-action 'self'"
|
||||
);
|
||||
}
|
||||
next();
|
||||
|
||||
191
src/components/widgets/BrandMarquee.astro
Normal file
191
src/components/widgets/BrandMarquee.astro
Normal file
@@ -0,0 +1,191 @@
|
||||
---
|
||||
import { Icon } from 'astro-icon/components';
|
||||
|
||||
export interface Brand {
|
||||
name: string;
|
||||
icon?: string;
|
||||
description: string;
|
||||
link?: string;
|
||||
}
|
||||
|
||||
export interface Props {
|
||||
brands?: Brand[];
|
||||
title?: string;
|
||||
subtitle?: string;
|
||||
speed?: 'slow' | 'normal' | 'fast';
|
||||
}
|
||||
|
||||
const {
|
||||
brands = [
|
||||
{
|
||||
name: '365DevNet',
|
||||
icon: 'tabler:code',
|
||||
description: 'Development Solutions',
|
||||
link: '/',
|
||||
},
|
||||
{
|
||||
name: 'Tiber365',
|
||||
icon: 'tabler:bulb',
|
||||
description: 'IT Consultancy',
|
||||
link: '#',
|
||||
},
|
||||
{
|
||||
name: 'Bergsma.it',
|
||||
icon: 'tabler:chart-line',
|
||||
description: 'Business Consultancy',
|
||||
link: '#',
|
||||
},
|
||||
{
|
||||
name: 'SyncEra',
|
||||
icon: 'tabler:device-mobile',
|
||||
description: 'Mobile Applications',
|
||||
link: '#',
|
||||
},
|
||||
],
|
||||
title = 'Our Brands',
|
||||
subtitle = 'Part of the 365DevNet ecosystem',
|
||||
speed = 'normal',
|
||||
} = Astro.props;
|
||||
|
||||
// Duplicate brands for seamless loop
|
||||
const duplicatedBrands = [...brands, ...brands, ...brands];
|
||||
|
||||
const speedClass = {
|
||||
slow: 'animate-marquee-slow',
|
||||
normal: 'animate-marquee',
|
||||
fast: 'animate-marquee-fast',
|
||||
}[speed];
|
||||
---
|
||||
|
||||
<section class="relative py-12 md:py-16 overflow-hidden not-prose">
|
||||
<div class="max-w-7xl mx-auto px-4 sm:px-6">
|
||||
<!-- Section Header -->
|
||||
<div class="text-center mb-8 md:mb-10 intersect-once intersect-quarter motion-safe:md:opacity-0 motion-safe:md:intersect:animate-fade">
|
||||
{subtitle && (
|
||||
<p class="text-sm md:text-base text-primary dark:text-blue-300 font-semibold tracking-wide uppercase mb-2">
|
||||
{subtitle}
|
||||
</p>
|
||||
)}
|
||||
{title && (
|
||||
<h2 class="text-2xl md:text-3xl font-bold text-gray-900 dark:text-white">
|
||||
{title}
|
||||
</h2>
|
||||
)}
|
||||
</div>
|
||||
|
||||
<!-- Marquee Container -->
|
||||
<div class="relative">
|
||||
<!-- Gradient Overlays for fade effect -->
|
||||
<div class="absolute left-0 top-0 bottom-0 w-20 md:w-32 bg-gradient-to-r from-page to-transparent z-10 pointer-events-none"></div>
|
||||
<div class="absolute right-0 top-0 bottom-0 w-20 md:w-32 bg-gradient-to-l from-page to-transparent z-10 pointer-events-none"></div>
|
||||
|
||||
<!-- Scrolling Content -->
|
||||
<div class="marquee-container group">
|
||||
<div class={`marquee-content ${speedClass}`}>
|
||||
{duplicatedBrands.map((brand) => (
|
||||
<a
|
||||
href={brand.link || '#'}
|
||||
class="brand-card backdrop-blur-sm bg-white/15 dark:bg-slate-900/50 border border-gray-200 dark:border-gray-700 rounded-lg p-4 md:p-6 hover:bg-white/30 hover:scale-105 dark:hover:bg-slate-900/70 transition-all duration-300 ease-in-out shadow-sm hover:shadow-lg cursor-pointer block no-underline"
|
||||
aria-label={`Learn more about ${brand.name}`}
|
||||
>
|
||||
<div class="flex items-center gap-3 md:gap-4">
|
||||
{brand.icon && (
|
||||
<div class="flex-shrink-0">
|
||||
<div class="bg-primary/10 dark:bg-blue-500/20 rounded-full p-2 md:p-3">
|
||||
<Icon
|
||||
name={brand.icon}
|
||||
class="w-5 h-5 md:w-6 md:h-6 text-primary dark:text-blue-400"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
)}
|
||||
<div class="flex flex-col min-w-0">
|
||||
<h3 class="text-base md:text-lg font-bold text-gray-900 dark:text-white whitespace-nowrap">
|
||||
{brand.name}
|
||||
</h3>
|
||||
<p class="text-xs md:text-sm text-muted dark:text-gray-400 whitespace-nowrap">
|
||||
{brand.description}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</a>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Hover Instruction (optional) -->
|
||||
<p class="text-center text-xs md:text-sm text-muted dark:text-gray-500 mt-4 intersect-once intersect-quarter motion-safe:md:opacity-0 motion-safe:md:intersect:animate-fade">
|
||||
Hover to pause • Click to learn more
|
||||
</p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<style>
|
||||
.marquee-container {
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.marquee-content {
|
||||
display: inline-flex;
|
||||
gap: 1.5rem;
|
||||
animation-timing-function: linear;
|
||||
animation-iteration-count: infinite;
|
||||
will-change: transform;
|
||||
}
|
||||
|
||||
.brand-card {
|
||||
display: inline-block;
|
||||
min-width: 280px;
|
||||
max-width: 320px;
|
||||
white-space: normal;
|
||||
}
|
||||
|
||||
@media (max-width: 640px) {
|
||||
.brand-card {
|
||||
min-width: 240px;
|
||||
max-width: 280px;
|
||||
}
|
||||
|
||||
.marquee-content {
|
||||
gap: 1rem;
|
||||
}
|
||||
}
|
||||
|
||||
/* Animation speeds */
|
||||
@keyframes marquee {
|
||||
0% {
|
||||
transform: translateX(0);
|
||||
}
|
||||
100% {
|
||||
transform: translateX(-33.333%);
|
||||
}
|
||||
}
|
||||
|
||||
.animate-marquee {
|
||||
animation: marquee 40s linear infinite;
|
||||
}
|
||||
|
||||
.animate-marquee-slow {
|
||||
animation: marquee 60s linear infinite;
|
||||
}
|
||||
|
||||
.animate-marquee-fast {
|
||||
animation: marquee 25s linear infinite;
|
||||
}
|
||||
|
||||
/* Pause animation on hover */
|
||||
.group:hover .marquee-content {
|
||||
animation-play-state: paused;
|
||||
}
|
||||
|
||||
/* Smooth performance */
|
||||
@media (prefers-reduced-motion: reduce) {
|
||||
.marquee-content {
|
||||
animation: none;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -7,6 +7,15 @@ export interface ExplosiveHomepageTranslation {
|
||||
learnMore: string;
|
||||
contactMe: string;
|
||||
};
|
||||
brands?: {
|
||||
title: string;
|
||||
subtitle: string;
|
||||
devnet: string;
|
||||
tiber: string;
|
||||
bergsma: string;
|
||||
syncera: string;
|
||||
journii: string;
|
||||
};
|
||||
services: {
|
||||
tagline: string;
|
||||
title: string;
|
||||
@@ -76,6 +85,15 @@ export const explosiveHomepageTranslations: Record<string, ExplosiveHomepageTran
|
||||
learnMore: 'Get Started Now',
|
||||
contactMe: 'Contact Me',
|
||||
},
|
||||
brands: {
|
||||
title: 'Our Brands',
|
||||
subtitle: 'Part of the 365DevNet ecosystem',
|
||||
devnet: 'Development Solutions',
|
||||
tiber: 'IT Consultancy',
|
||||
bergsma: 'Business Consultancy',
|
||||
syncera: 'Health & Fitness Sync',
|
||||
journii: 'Travel & Journaling',
|
||||
},
|
||||
services: {
|
||||
tagline: 'AUTOMATION POWERHOUSE',
|
||||
title: 'Services That Deliver Measurable Impact',
|
||||
@@ -171,6 +189,15 @@ export const explosiveHomepageTranslations: Record<string, ExplosiveHomepageTran
|
||||
learnMore: 'Begin Nu',
|
||||
contactMe: 'Neem Contact Op',
|
||||
},
|
||||
brands: {
|
||||
title: 'Onze Merken',
|
||||
subtitle: 'Onderdeel van het 365DevNet ecosysteem',
|
||||
devnet: 'Ontwikkeloplossingen',
|
||||
tiber: 'IT Consultancy',
|
||||
bergsma: 'Bedrijfsconsultancy',
|
||||
syncera: 'Gezondheid & Fitness',
|
||||
journii: 'Reizen & Dagboek',
|
||||
},
|
||||
services: {
|
||||
tagline: 'KRACHTCENTRALE VOOR AUTOMATISERING',
|
||||
title: 'Diensten Die Écht Impact Maken',
|
||||
@@ -268,6 +295,15 @@ export const explosiveHomepageTranslations: Record<string, ExplosiveHomepageTran
|
||||
learnMore: 'Jetzt starten',
|
||||
contactMe: 'Kontakt aufnehmen',
|
||||
},
|
||||
brands: {
|
||||
title: 'Unsere Marken',
|
||||
subtitle: 'Teil des 365DevNet-Ökosystems',
|
||||
devnet: 'Entwicklungslösungen',
|
||||
tiber: 'IT-Beratung',
|
||||
bergsma: 'Unternehmensberatung',
|
||||
syncera: 'Gesundheit & Fitness',
|
||||
journii: 'Reisen & Tagebuch',
|
||||
},
|
||||
services: {
|
||||
tagline: 'AUTOMATISIERUNGS-KRAFTWERK',
|
||||
title: 'Services, die wirklich Wirkung zeigen',
|
||||
@@ -359,12 +395,21 @@ export const explosiveHomepageTranslations: Record<string, ExplosiveHomepageTran
|
||||
hero: {
|
||||
title: 'Rendez Votre Entreprise Pérenne',
|
||||
subtitle:
|
||||
'Libérez la puissance de l’automatisation par l’IA • Maîtrise de Microsoft 365 • Intégrations sur mesure, fiables et efficaces',
|
||||
'Libérez la puissance de l\'automatisation par l\'IA • Maîtrise de Microsoft 365 • Intégrations sur mesure, fiables et efficaces',
|
||||
},
|
||||
actions: {
|
||||
learnMore: 'Commencez dès maintenant',
|
||||
contactMe: 'Contactons-nous',
|
||||
},
|
||||
brands: {
|
||||
title: 'Nos Marques',
|
||||
subtitle: 'Faisant partie de l\'écosystème 365DevNet',
|
||||
devnet: 'Solutions de Développement',
|
||||
tiber: 'Conseil en Informatique',
|
||||
bergsma: 'Conseil en Affaires',
|
||||
syncera: 'Santé & Fitness',
|
||||
journii: 'Voyages & Journal',
|
||||
},
|
||||
services: {
|
||||
tagline: 'CENTRALE D’AUTOMATISATION',
|
||||
title: 'Des Services Qui Font Vraiment la Différence',
|
||||
|
||||
@@ -110,6 +110,14 @@ export interface Translation {
|
||||
learnMore: string;
|
||||
contactMe: string;
|
||||
};
|
||||
brands: {
|
||||
title: string;
|
||||
subtitle: string;
|
||||
devnet: string;
|
||||
tiber: string;
|
||||
bergsma: string;
|
||||
syncera: string;
|
||||
};
|
||||
services: {
|
||||
tagline: string;
|
||||
title: string;
|
||||
@@ -237,6 +245,14 @@ export const translations: Record<string, Translation> = {
|
||||
learnMore: 'Explore Solutions',
|
||||
contactMe: 'Request Consultation',
|
||||
},
|
||||
brands: {
|
||||
title: 'Our Brands',
|
||||
subtitle: 'Part of the 365DevNet ecosystem',
|
||||
devnet: 'Development Solutions',
|
||||
tiber: 'IT Consultancy',
|
||||
bergsma: 'Business Consultancy',
|
||||
syncera: 'Mobile Applications',
|
||||
},
|
||||
services: {
|
||||
tagline: 'Automation & Integration Experts',
|
||||
title: 'Drive Business Growth with Strategic IT Automation',
|
||||
@@ -721,6 +737,14 @@ export const translations: Record<string, Translation> = {
|
||||
learnMore: 'Verken oplossingen',
|
||||
contactMe: 'Vraag een consultatie aan',
|
||||
},
|
||||
brands: {
|
||||
title: 'Onze Merken',
|
||||
subtitle: 'Onderdeel van het 365DevNet ecosysteem',
|
||||
devnet: 'Ontwikkeloplossingen',
|
||||
tiber: 'IT Consultancy',
|
||||
bergsma: 'Bedrijfsconsultancy',
|
||||
syncera: 'Mobiele Applicaties',
|
||||
},
|
||||
services: {
|
||||
tagline: 'Automatisering & Integratie Experts',
|
||||
title: 'Stimuleer bedrijfsgroei met strategische IT-automatisering',
|
||||
@@ -1206,6 +1230,14 @@ export const translations: Record<string, Translation> = {
|
||||
learnMore: 'Lösungen erkunden',
|
||||
contactMe: 'Beratung anfragen',
|
||||
},
|
||||
brands: {
|
||||
title: 'Onze Merken',
|
||||
subtitle: 'Onderdeel van het 365DevNet ecosysteem',
|
||||
devnet: 'Ontwikkeloplossingen',
|
||||
tiber: 'IT Consultancy',
|
||||
bergsma: 'Bedrijfsconsultancy',
|
||||
syncera: 'Mobiele Applicaties',
|
||||
},
|
||||
services: {
|
||||
tagline: 'Automatisierungs- & Integrations-Experten',
|
||||
title: 'Fördern Sie Unternehmenswachstum mit strategischer IT-Automatisierung',
|
||||
@@ -1691,6 +1723,14 @@ export const translations: Record<string, Translation> = {
|
||||
learnMore: 'Explorer les solutions',
|
||||
contactMe: 'Demander une consultation',
|
||||
},
|
||||
brands: {
|
||||
title: 'Nos Marques',
|
||||
subtitle: 'Faisant partie de l\'écosystème 365DevNet',
|
||||
devnet: 'Solutions de Développement',
|
||||
tiber: 'Conseil en Informatique',
|
||||
bergsma: 'Conseil en Affaires',
|
||||
syncera: 'Applications Mobiles',
|
||||
},
|
||||
services: {
|
||||
tagline: 'Experts en automatisation et intégration',
|
||||
title: "Stimulez la croissance de votre entreprise grâce à l'automatisation IT stratégique",
|
||||
|
||||
403
src/pages/[lang]/bergsma.astro
Normal file
403
src/pages/[lang]/bergsma.astro
Normal file
@@ -0,0 +1,403 @@
|
||||
---
|
||||
export const prerender = true;
|
||||
import Layout from '~/layouts/PageLayout.astro';
|
||||
import Hero from '~/components/widgets/Hero.astro';
|
||||
import Features from '~/components/widgets/Features.astro';
|
||||
import Content from '~/components/widgets/Content.astro';
|
||||
import Contact from '~/components/widgets/Contact.astro';
|
||||
import { supportedLanguages } from '~/i18n/translations';
|
||||
import BergsmaImage from '~/assets/images/OurCommitment.webp';
|
||||
|
||||
export async function getStaticPaths() {
|
||||
return supportedLanguages.map((lang) => ({
|
||||
params: { lang },
|
||||
}));
|
||||
}
|
||||
|
||||
const { lang } = Astro.params;
|
||||
if (!supportedLanguages.includes(lang)) {
|
||||
return Astro.redirect('/en/');
|
||||
}
|
||||
|
||||
const translations = {
|
||||
en: {
|
||||
title: 'Bergsma.it & Tiber365 | Personal IT Consultancy & Support',
|
||||
description: 'Friendly IT consultancy for individuals, freelancers, and small businesses. From M365 migrations to network setup - no question too easy or too hard.',
|
||||
hero: {
|
||||
title: 'Bergsma.it & Tiber365',
|
||||
subtitle: 'Personal IT Consultancy & Support',
|
||||
tagline: 'Your Trusted IT Partner - No Question Too Easy or Too Hard',
|
||||
},
|
||||
services: {
|
||||
tagline: 'What We Do',
|
||||
title: 'IT Services That Make Sense',
|
||||
subtitle: 'Whether you\'re a freelancer needing M365 setup, a small business migrating to the cloud, or an individual with a tech question - we\'re here to help.',
|
||||
items: [
|
||||
{
|
||||
title: 'Microsoft 365 Expertise',
|
||||
description: 'Complete M365 setup, management, and migrations. From basic email to advanced SharePoint configurations - we make Microsoft 365 work for you.',
|
||||
icon: 'tabler:cloud',
|
||||
},
|
||||
{
|
||||
title: 'UniFi Networking',
|
||||
description: 'Professional network setup and management using UniFi. Reliable, fast WiFi for your home office or small business.',
|
||||
icon: 'tabler:wifi',
|
||||
},
|
||||
{
|
||||
title: 'Automation Solutions',
|
||||
description: 'Save time with custom automation using Power Automate, PowerShell, and APIs. Let technology do the repetitive work for you.',
|
||||
icon: 'tabler:robot',
|
||||
},
|
||||
{
|
||||
title: 'Printer & Peripheral Management',
|
||||
description: 'Get your printers, scanners, and other devices working smoothly. Setup, troubleshooting, and ongoing support.',
|
||||
icon: 'tabler:printer',
|
||||
},
|
||||
{
|
||||
title: 'Cloud Migration',
|
||||
description: 'Smooth transitions to cloud services with no data loss. We handle the technical details so you can focus on your work.',
|
||||
icon: 'tabler:cloud-up',
|
||||
},
|
||||
{
|
||||
title: 'Personal IT Support',
|
||||
description: 'Have a tech question? Need help with a project? From simple fixes to complex challenges - we\'re here to help.',
|
||||
icon: 'tabler:help-circle',
|
||||
},
|
||||
],
|
||||
},
|
||||
about: {
|
||||
tagline: 'Why Choose Us',
|
||||
title: 'IT Support That Speaks Your Language',
|
||||
content: [
|
||||
'Bergsma.it and Tiber365 offer personal IT consultancy services tailored for individuals, freelancers, and small businesses. We believe great IT support shouldn\'t be complicated or intimidating - whether you need help setting up your first Microsoft 365 environment or automating complex business processes.',
|
||||
'Our approach is simple: we listen, we explain, and we deliver solutions that actually work. No confusing jargon, no overcomplicating things. From UniFi network installations to PowerShell automation scripts, we bring professional IT expertise with a personal touch.',
|
||||
'Whether it\'s a "simple" printer setup that\'s driving you crazy or a full M365 migration for your growing business, we\'re ready to help. Every question matters, and every challenge is an opportunity to find the right solution for you.',
|
||||
],
|
||||
},
|
||||
cta: {
|
||||
title: 'Ready to Get Started?',
|
||||
subtitle: 'Let\'s chat about your IT needs. Whether big or small, we\'re here to help.',
|
||||
button: 'Get in Touch',
|
||||
},
|
||||
contact: {
|
||||
title: 'Get in Touch',
|
||||
subtitle: 'Have questions about your IT setup or need help with a project? Drop us a message and we\'ll get back to you quickly.',
|
||||
nameLabel: 'Name',
|
||||
namePlaceholder: 'Your name',
|
||||
emailLabel: 'Email',
|
||||
emailPlaceholder: 'Your email address',
|
||||
messageLabel: 'Message',
|
||||
messagePlaceholder: 'Tell us about your IT needs or questions...',
|
||||
disclaimer: 'By submitting this form, you agree to our privacy policy and allow us to contact you about our services.',
|
||||
description: 'We\'ll respond as soon as possible, usually within 24 hours.',
|
||||
},
|
||||
},
|
||||
nl: {
|
||||
title: 'Bergsma.it & Tiber365 | Persoonlijke IT Consultancy & Ondersteuning',
|
||||
description: 'Toegankelijke IT consultancy voor particulieren, freelancers en kleine bedrijven. Van M365 migraties tot netwerk setup - geen vraag te makkelijk of te moeilijk.',
|
||||
hero: {
|
||||
title: 'Bergsma.it & Tiber365',
|
||||
subtitle: 'Persoonlijke IT Consultancy & Ondersteuning',
|
||||
tagline: 'Uw Vertrouwde IT Partner - Geen Vraag Te Makkelijk of Te Moeilijk',
|
||||
},
|
||||
services: {
|
||||
tagline: 'Wat Wij Doen',
|
||||
title: 'IT Diensten Die Logisch Zijn',
|
||||
subtitle: 'Of je nu een freelancer bent die M365 nodig heeft, een klein bedrijf dat migreert naar de cloud, of een particulier met een technische vraag - wij helpen je graag.',
|
||||
items: [
|
||||
{
|
||||
title: 'Microsoft 365 Expertise',
|
||||
description: 'Complete M365 setup, beheer en migraties. Van basis e-mail tot geavanceerde SharePoint configuraties - wij zorgen dat Microsoft 365 voor jou werkt.',
|
||||
icon: 'tabler:cloud',
|
||||
},
|
||||
{
|
||||
title: 'UniFi Netwerken',
|
||||
description: 'Professionele netwerk setup en beheer met UniFi. Betrouwbare, snelle WiFi voor je thuiskantoor of kleine bedrijf.',
|
||||
icon: 'tabler:wifi',
|
||||
},
|
||||
{
|
||||
title: 'Automatisering Oplossingen',
|
||||
description: 'Bespaar tijd met custom automatisering via Power Automate, PowerShell en APIs. Laat technologie het repetitieve werk voor je doen.',
|
||||
icon: 'tabler:robot',
|
||||
},
|
||||
{
|
||||
title: 'Printer & Randapparatuur Beheer',
|
||||
description: 'Krijg je printers, scanners en andere apparaten soepel werkend. Setup, probleemoplossing en doorlopende ondersteuning.',
|
||||
icon: 'tabler:printer',
|
||||
},
|
||||
{
|
||||
title: 'Cloud Migratie',
|
||||
description: 'Vlotte overgangen naar cloud diensten zonder dataverlies. Wij regelen de technische details zodat jij je op je werk kunt richten.',
|
||||
icon: 'tabler:cloud-up',
|
||||
},
|
||||
{
|
||||
title: 'Persoonlijke IT Ondersteuning',
|
||||
description: 'Heb je een tech vraag? Hulp nodig bij een project? Van simpele fixes tot complexe uitdagingen - wij staan voor je klaar.',
|
||||
icon: 'tabler:help-circle',
|
||||
},
|
||||
],
|
||||
},
|
||||
about: {
|
||||
tagline: 'Waarom Kiezen Voor Ons',
|
||||
title: 'IT Ondersteuning Die Je Begrijpt',
|
||||
content: [
|
||||
'Bergsma.it en Tiber365 bieden persoonlijke IT consultancy diensten op maat voor particulieren, freelancers en kleine bedrijven. Wij geloven dat goede IT ondersteuning niet ingewikkeld of intimiderend hoeft te zijn - of je nu hulp nodig hebt bij je eerste Microsoft 365 omgeving of bij het automatiseren van complexe bedrijfsprocessen.',
|
||||
'Onze aanpak is simpel: we luisteren, we leggen uit, en we leveren oplossingen die echt werken. Geen verwarrend jargon, geen dingen ingewikkelder maken dan nodig. Van UniFi netwerk installaties tot PowerShell automatisering scripts, we brengen professionele IT expertise met een persoonlijke touch.',
|
||||
'Of het nu gaat om een "simpele" printer setup die je gek maakt of een volledige M365 migratie voor je groeiende bedrijf, wij zijn klaar om te helpen. Elke vraag telt, en elke uitdaging is een kans om de juiste oplossing voor jou te vinden.',
|
||||
],
|
||||
},
|
||||
cta: {
|
||||
title: 'Klaar om te Beginnen?',
|
||||
subtitle: 'Laten we praten over je IT behoeften. Of het nu groot of klein is, wij helpen je graag.',
|
||||
button: 'Neem Contact Op',
|
||||
},
|
||||
contact: {
|
||||
title: 'Neem Contact Op',
|
||||
subtitle: 'Vragen over je IT setup of hulp nodig bij een project? Stuur ons een bericht en we reageren snel.',
|
||||
nameLabel: 'Naam',
|
||||
namePlaceholder: 'Je naam',
|
||||
emailLabel: 'E-mail',
|
||||
emailPlaceholder: 'Je e-mailadres',
|
||||
messageLabel: 'Bericht',
|
||||
messagePlaceholder: 'Vertel ons over je IT behoeften of vragen...',
|
||||
disclaimer: 'Door dit formulier in te dienen, ga je akkoord met ons privacybeleid en sta je ons toe contact met je op te nemen over onze diensten.',
|
||||
description: 'We reageren zo snel mogelijk, meestal binnen 24 uur.',
|
||||
},
|
||||
},
|
||||
de: {
|
||||
title: 'Bergsma.it & Tiber365 | Persönliche IT-Beratung & Support',
|
||||
description: 'Freundliche IT-Beratung für Privatpersonen, Freelancer und kleine Unternehmen. Von M365-Migrationen bis Netzwerk-Setup - keine Frage zu einfach oder zu schwer.',
|
||||
hero: {
|
||||
title: 'Bergsma.it & Tiber365',
|
||||
subtitle: 'Persönliche IT-Beratung & Support',
|
||||
tagline: 'Ihr Vertrauenswürdiger IT-Partner - Keine Frage Zu Einfach oder Zu Schwer',
|
||||
},
|
||||
services: {
|
||||
tagline: 'Was Wir Tun',
|
||||
title: 'IT-Dienste Die Sinn Machen',
|
||||
subtitle: 'Ob Sie ein Freelancer sind, der M365 benötigt, ein kleines Unternehmen, das in die Cloud migriert, oder eine Privatperson mit einer technischen Frage - wir helfen gerne.',
|
||||
items: [
|
||||
{
|
||||
title: 'Microsoft 365 Expertise',
|
||||
description: 'Komplettes M365-Setup, Verwaltung und Migrationen. Von einfachen E-Mails bis zu erweiterten SharePoint-Konfigurationen - wir lassen Microsoft 365 für Sie arbeiten.',
|
||||
icon: 'tabler:cloud',
|
||||
},
|
||||
{
|
||||
title: 'UniFi-Netzwerke',
|
||||
description: 'Professionelles Netzwerk-Setup und -Verwaltung mit UniFi. Zuverlässiges, schnelles WLAN für Ihr Homeoffice oder kleines Unternehmen.',
|
||||
icon: 'tabler:wifi',
|
||||
},
|
||||
{
|
||||
title: 'Automatisierungslösungen',
|
||||
description: 'Sparen Sie Zeit mit individueller Automatisierung durch Power Automate, PowerShell und APIs. Lassen Sie die Technologie die sich wiederholende Arbeit für Sie erledigen.',
|
||||
icon: 'tabler:robot',
|
||||
},
|
||||
{
|
||||
title: 'Drucker & Peripheriegeräte-Verwaltung',
|
||||
description: 'Bringen Sie Ihre Drucker, Scanner und andere Geräte reibungslos zum Laufen. Setup, Fehlerbehebung und fortlaufender Support.',
|
||||
icon: 'tabler:printer',
|
||||
},
|
||||
{
|
||||
title: 'Cloud-Migration',
|
||||
description: 'Reibungslose Übergänge zu Cloud-Diensten ohne Datenverlust. Wir kümmern uns um die technischen Details, damit Sie sich auf Ihre Arbeit konzentrieren können.',
|
||||
icon: 'tabler:cloud-up',
|
||||
},
|
||||
{
|
||||
title: 'Persönlicher IT-Support',
|
||||
description: 'Haben Sie eine technische Frage? Brauchen Sie Hilfe bei einem Projekt? Von einfachen Fixes bis zu komplexen Herausforderungen - wir sind für Sie da.',
|
||||
icon: 'tabler:help-circle',
|
||||
},
|
||||
],
|
||||
},
|
||||
about: {
|
||||
tagline: 'Warum Uns Wählen',
|
||||
title: 'IT-Support Der Ihre Sprache Spricht',
|
||||
content: [
|
||||
'Bergsma.it und Tiber365 bieten persönliche IT-Beratungsdienste, die auf Privatpersonen, Freelancer und kleine Unternehmen zugeschnitten sind. Wir glauben, dass großartiger IT-Support nicht kompliziert oder einschüchternd sein sollte - egal ob Sie Hilfe beim Einrichten Ihrer ersten Microsoft 365-Umgebung oder beim Automatisieren komplexer Geschäftsprozesse benötigen.',
|
||||
'Unser Ansatz ist einfach: Wir hören zu, wir erklären und wir liefern Lösungen, die tatsächlich funktionieren. Kein verwirrendes Fachjargon, keine unnötigen Komplikationen. Von UniFi-Netzwerkinstallationen bis zu PowerShell-Automatisierungsskripten bringen wir professionelle IT-Expertise mit persönlicher Note.',
|
||||
'Ob es sich um ein "einfaches" Drucker-Setup handelt, das Sie verrückt macht, oder um eine vollständige M365-Migration für Ihr wachsendes Unternehmen - wir sind bereit zu helfen. Jede Frage zählt, und jede Herausforderung ist eine Gelegenheit, die richtige Lösung für Sie zu finden.',
|
||||
],
|
||||
},
|
||||
cta: {
|
||||
title: 'Bereit Anzufangen?',
|
||||
subtitle: 'Lassen Sie uns über Ihre IT-Bedürfnisse sprechen. Ob groß oder klein, wir sind für Sie da.',
|
||||
button: 'Kontakt',
|
||||
},
|
||||
contact: {
|
||||
title: 'Kontakt Aufnehmen',
|
||||
subtitle: 'Fragen zu Ihrem IT-Setup oder Hilfe bei einem Projekt? Senden Sie uns eine Nachricht und wir melden uns schnell zurück.',
|
||||
nameLabel: 'Name',
|
||||
namePlaceholder: 'Ihr Name',
|
||||
emailLabel: 'E-Mail',
|
||||
emailPlaceholder: 'Ihre E-Mail-Adresse',
|
||||
messageLabel: 'Nachricht',
|
||||
messagePlaceholder: 'Erzählen Sie uns von Ihren IT-Anforderungen oder Fragen...',
|
||||
disclaimer: 'Durch das Absenden dieses Formulars stimmen Sie unserer Datenschutzerklärung zu und erlauben uns, Sie über unsere Dienstleistungen zu kontaktieren.',
|
||||
description: 'Wir antworten so schnell wie möglich, normalerweise innerhalb von 24 Stunden.',
|
||||
},
|
||||
},
|
||||
fr: {
|
||||
title: 'Bergsma.it & Tiber365 | Conseil Informatique Personnalisé & Support',
|
||||
description: 'Conseil informatique convivial pour particuliers, freelances et petites entreprises. Des migrations M365 à la configuration réseau - aucune question trop facile ou trop difficile.',
|
||||
hero: {
|
||||
title: 'Bergsma.it & Tiber365',
|
||||
subtitle: 'Conseil Informatique Personnalisé & Support',
|
||||
tagline: 'Votre Partenaire Informatique de Confiance - Aucune Question Trop Facile ou Trop Difficile',
|
||||
},
|
||||
services: {
|
||||
tagline: 'Ce Que Nous Faisons',
|
||||
title: 'Services Informatiques Qui Ont Du Sens',
|
||||
subtitle: 'Que vous soyez un freelance ayant besoin de M365, une petite entreprise migrant vers le cloud, ou un particulier avec une question technique - nous sommes là pour vous aider.',
|
||||
items: [
|
||||
{
|
||||
title: 'Expertise Microsoft 365',
|
||||
description: 'Configuration, gestion et migrations M365 complètes. Des e-mails de base aux configurations SharePoint avancées - nous faisons fonctionner Microsoft 365 pour vous.',
|
||||
icon: 'tabler:cloud',
|
||||
},
|
||||
{
|
||||
title: 'Réseaux UniFi',
|
||||
description: 'Configuration et gestion professionnelles de réseau avec UniFi. WiFi fiable et rapide pour votre bureau à domicile ou petite entreprise.',
|
||||
icon: 'tabler:wifi',
|
||||
},
|
||||
{
|
||||
title: 'Solutions d\'Automatisation',
|
||||
description: 'Économisez du temps avec l\'automatisation personnalisée via Power Automate, PowerShell et APIs. Laissez la technologie faire le travail répétitif pour vous.',
|
||||
icon: 'tabler:robot',
|
||||
},
|
||||
{
|
||||
title: 'Gestion Imprimantes & Périphériques',
|
||||
description: 'Faites fonctionner vos imprimantes, scanners et autres appareils sans problème. Configuration, dépannage et support continu.',
|
||||
icon: 'tabler:printer',
|
||||
},
|
||||
{
|
||||
title: 'Migration Cloud',
|
||||
description: 'Transitions fluides vers les services cloud sans perte de données. Nous gérons les détails techniques pour que vous puissiez vous concentrer sur votre travail.',
|
||||
icon: 'tabler:cloud-up',
|
||||
},
|
||||
{
|
||||
title: 'Support Informatique Personnel',
|
||||
description: 'Une question technique? Besoin d\'aide pour un projet? Des corrections simples aux défis complexes - nous sommes là pour vous.',
|
||||
icon: 'tabler:help-circle',
|
||||
},
|
||||
],
|
||||
},
|
||||
about: {
|
||||
tagline: 'Pourquoi Nous Choisir',
|
||||
title: 'Support Informatique Qui Parle Votre Langue',
|
||||
content: [
|
||||
'Bergsma.it et Tiber365 offrent des services de conseil informatique personnalisés pour les particuliers, freelances et petites entreprises. Nous croyons qu\'un excellent support informatique ne devrait pas être compliqué ou intimidant - que vous ayez besoin d\'aide pour configurer votre premier environnement Microsoft 365 ou automatiser des processus métier complexes.',
|
||||
'Notre approche est simple : nous écoutons, nous expliquons, et nous fournissons des solutions qui fonctionnent réellement. Pas de jargon confus, pas de complications inutiles. Des installations de réseaux UniFi aux scripts d\'automatisation PowerShell, nous apportons une expertise informatique professionnelle avec une touche personnelle.',
|
||||
'Qu\'il s\'agisse d\'une configuration d\'imprimante "simple" qui vous rend fou ou d\'une migration M365 complète pour votre entreprise en croissance, nous sommes prêts à vous aider. Chaque question compte, et chaque défi est une opportunité de trouver la bonne solution pour vous.',
|
||||
],
|
||||
},
|
||||
cta: {
|
||||
title: 'Prêt à Commencer?',
|
||||
subtitle: 'Discutons de vos besoins informatiques. Qu\'ils soient grands ou petits, nous sommes là pour vous aider.',
|
||||
button: 'Nous Contacter',
|
||||
},
|
||||
contact: {
|
||||
title: 'Nous Contacter',
|
||||
subtitle: 'Des questions sur votre configuration informatique ou besoin d\'aide pour un projet? Envoyez-nous un message et nous vous répondrons rapidement.',
|
||||
nameLabel: 'Nom',
|
||||
namePlaceholder: 'Votre nom',
|
||||
emailLabel: 'E-mail',
|
||||
emailPlaceholder: 'Votre adresse e-mail',
|
||||
messageLabel: 'Message',
|
||||
messagePlaceholder: 'Parlez-nous de vos besoins ou questions informatiques...',
|
||||
disclaimer: 'En soumettant ce formulaire, vous acceptez notre politique de confidentialité et nous autorisez à vous contacter au sujet de nos services.',
|
||||
description: 'Nous répondrons dans les plus brefs délais, généralement dans les 24 heures.',
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
const t = translations[lang] || translations['en'];
|
||||
|
||||
const metadata = {
|
||||
title: t.title,
|
||||
description: t.description,
|
||||
};
|
||||
---
|
||||
|
||||
<Layout metadata={metadata}>
|
||||
<!-- Hero Section -->
|
||||
<Hero
|
||||
title={t.hero.title}
|
||||
subtitle={t.hero.subtitle}
|
||||
tagline={t.hero.tagline}
|
||||
isDark={false}
|
||||
actions={[
|
||||
{
|
||||
variant: 'primary',
|
||||
text: t.cta.button,
|
||||
href: '#contact',
|
||||
icon: 'tabler:message-circle',
|
||||
},
|
||||
{
|
||||
text: lang === 'nl' ? 'Onze Diensten' : lang === 'de' ? 'Services' : lang === 'fr' ? 'Nos Services' : 'Our Services',
|
||||
href: '#services',
|
||||
icon: 'tabler:arrow-down',
|
||||
},
|
||||
]}
|
||||
/>
|
||||
|
||||
<!-- Services Section -->
|
||||
<Features
|
||||
id="services"
|
||||
tagline={t.services.tagline}
|
||||
title={t.services.title}
|
||||
subtitle={t.services.subtitle}
|
||||
items={t.services.items}
|
||||
columns={3}
|
||||
/>
|
||||
|
||||
<!-- About Section -->
|
||||
<Content
|
||||
isReversed
|
||||
tagline={t.about.tagline}
|
||||
title={t.about.title}
|
||||
items={[]}
|
||||
image={{
|
||||
src: BergsmaImage,
|
||||
alt: 'Bergsma.it & Tiber365 Personal IT Support',
|
||||
}}
|
||||
>
|
||||
<Fragment slot="content">
|
||||
<div class="text-lg dark:text-slate-400">
|
||||
{t.about.content.map((paragraph, index, array) => (
|
||||
<p class={index === array.length - 1 ? '' : 'mb-4'}>{paragraph}</p>
|
||||
))}
|
||||
</div>
|
||||
</Fragment>
|
||||
</Content>
|
||||
|
||||
<!-- Contact Form -->
|
||||
<Contact
|
||||
id="contact"
|
||||
title={t.contact.title}
|
||||
subtitle={t.contact.subtitle}
|
||||
inputs={[
|
||||
{
|
||||
type: 'text',
|
||||
name: 'name',
|
||||
label: t.contact.nameLabel,
|
||||
placeholder: t.contact.namePlaceholder,
|
||||
},
|
||||
{
|
||||
type: 'email',
|
||||
name: 'email',
|
||||
label: t.contact.emailLabel,
|
||||
placeholder: t.contact.emailPlaceholder,
|
||||
},
|
||||
]}
|
||||
textarea={{
|
||||
label: t.contact.messageLabel,
|
||||
placeholder: t.contact.messagePlaceholder,
|
||||
rows: 8,
|
||||
}}
|
||||
disclaimer={{
|
||||
label: t.contact.disclaimer,
|
||||
}}
|
||||
description={t.contact.description}
|
||||
/>
|
||||
</Layout>
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
export const prerender = true;
|
||||
import Layout from '~/layouts/PageLayout.astro';
|
||||
import Hero from '~/components/widgets/Hero2.astro';
|
||||
import BrandMarquee from '~/components/widgets/BrandMarquee.astro';
|
||||
import Features from '~/components/widgets/Features.astro';
|
||||
import Content from '~/components/widgets/Content.astro';
|
||||
import CallToAction from '~/components/widgets/CallToAction.astro';
|
||||
@@ -542,6 +543,45 @@ const metadata = {
|
||||
</Hero>
|
||||
</div>
|
||||
|
||||
<!-- Brand Marquee -->
|
||||
<BrandMarquee
|
||||
title={explosive.brands?.title || t.homepage?.brands?.title || 'Our Brands'}
|
||||
subtitle={explosive.brands?.subtitle || t.homepage?.brands?.subtitle || 'Part of the 365DevNet ecosystem'}
|
||||
speed="normal"
|
||||
brands={[
|
||||
{
|
||||
name: '365DevNet',
|
||||
icon: 'tabler:code',
|
||||
description: explosive.brands?.devnet || t.homepage?.brands?.devnet || 'Development Solutions',
|
||||
link: `/${lang}`,
|
||||
},
|
||||
{
|
||||
name: 'Tiber365',
|
||||
icon: 'tabler:bulb',
|
||||
description: explosive.brands?.tiber || t.homepage?.brands?.tiber || 'IT Consultancy',
|
||||
link: `/${lang}/bergsma`,
|
||||
},
|
||||
{
|
||||
name: 'Bergsma.it',
|
||||
icon: 'tabler:chart-line',
|
||||
description: explosive.brands?.bergsma || t.homepage?.brands?.bergsma || 'Business Consultancy',
|
||||
link: `/${lang}/bergsma`,
|
||||
},
|
||||
{
|
||||
name: 'SyncEra',
|
||||
icon: 'tabler:activity',
|
||||
description: explosive.brands?.syncera || t.homepage?.brands?.syncera || 'Health & Fitness Sync',
|
||||
link: `/${lang}/syncera`,
|
||||
},
|
||||
{
|
||||
name: 'Journii',
|
||||
icon: 'tabler:map-pin',
|
||||
description: explosive.brands?.journii || t.homepage?.brands?.journii || 'Travel & Journaling',
|
||||
link: `/${lang}/journii`,
|
||||
},
|
||||
]}
|
||||
/>
|
||||
|
||||
<!-- Services with Color Explosions -->
|
||||
<div id="services" class="content-section section-gradient-1 explosive-entrance">
|
||||
<Features
|
||||
|
||||
463
src/pages/[lang]/syncera.astro
Normal file
463
src/pages/[lang]/syncera.astro
Normal file
@@ -0,0 +1,463 @@
|
||||
---
|
||||
export const prerender = true;
|
||||
import Layout from '~/layouts/PageLayout.astro';
|
||||
import { supportedLanguages } from '~/i18n/translations';
|
||||
|
||||
export async function getStaticPaths() {
|
||||
return supportedLanguages.map((lang) => ({
|
||||
params: { lang },
|
||||
}));
|
||||
}
|
||||
|
||||
const { lang } = Astro.params;
|
||||
if (!supportedLanguages.includes(lang)) {
|
||||
return Astro.redirect('/en/');
|
||||
}
|
||||
|
||||
const translations = {
|
||||
en: {
|
||||
title: 'SyncEra | Unified Health & Fitness Data Syncing',
|
||||
description: 'Sync all your health and fitness data from every app into one place. AI-powered insights and clear dashboards for your complete wellness journey.',
|
||||
subtitle: 'Your Complete Health & Fitness Data Hub',
|
||||
status: 'Under Construction - Coming Soon',
|
||||
description_full: 'SyncEra is the ultimate health and fitness data synchronization app. Unlike other apps that only support limited sources, SyncEra connects to ALL your fitness apps and devices, ensuring no data is left behind. Get AI-powered insights and visualize your complete wellness journey in beautiful, intuitive dashboards.',
|
||||
features: {
|
||||
title: 'Key Features',
|
||||
universal: {
|
||||
title: 'Universal Data Sync',
|
||||
desc: 'Connect to ALL fitness apps and devices - no exceptions. From Apple Health to Garmin, Strava to MyFitnessPal, we support them all.',
|
||||
},
|
||||
ai: {
|
||||
title: 'AI-Powered Insights',
|
||||
desc: 'Get intelligent analysis of your health patterns, personalized recommendations, and predictive insights based on your complete data.',
|
||||
},
|
||||
dashboards: {
|
||||
title: 'Clear Dashboards',
|
||||
desc: 'Visualize your progress with beautiful, easy-to-understand charts and metrics. All your data, perfectly organized.',
|
||||
},
|
||||
consistency: {
|
||||
title: 'Data Consistency',
|
||||
desc: 'Eliminate inconsistencies from multiple sources. SyncEra intelligently merges and deduplicates your health data.',
|
||||
},
|
||||
privacy: {
|
||||
title: 'Privacy First',
|
||||
desc: 'Your health data stays yours. End-to-end encryption and complete control over your information.',
|
||||
},
|
||||
realtime: {
|
||||
title: 'Real-Time Sync',
|
||||
desc: 'Stay updated instantly. Your data syncs automatically in the background across all your connected apps.',
|
||||
},
|
||||
},
|
||||
roadmap: {
|
||||
title: 'Development Roadmap',
|
||||
phase1: {
|
||||
title: 'Phase 1: Foundation',
|
||||
items: [
|
||||
'Core app architecture',
|
||||
'Basic UI/UX design',
|
||||
'Data model development',
|
||||
],
|
||||
},
|
||||
phase2: {
|
||||
title: 'Phase 2: Integration',
|
||||
items: [
|
||||
'Major fitness app integrations',
|
||||
'Data sync engine development',
|
||||
'Dashboard implementation',
|
||||
'AI insights system',
|
||||
],
|
||||
},
|
||||
phase3: {
|
||||
title: 'Phase 3: Polish & Launch',
|
||||
items: [
|
||||
'Advanced AI features',
|
||||
'Complete all integrations',
|
||||
'Beta testing program',
|
||||
'App store launch',
|
||||
],
|
||||
},
|
||||
},
|
||||
tech: {
|
||||
title: 'Built with Modern Technology',
|
||||
desc: 'SyncEra leverages cutting-edge mobile development frameworks, secure cloud infrastructure, and advanced AI to deliver a seamless, powerful experience.',
|
||||
},
|
||||
cta: {
|
||||
title: 'Interested in Early Access?',
|
||||
desc: 'SyncEra is currently in development. Follow our progress and be among the first to know when we launch.',
|
||||
},
|
||||
progress: {
|
||||
completed: '✓ Completed:',
|
||||
inProgress: '🔄 In Progress:',
|
||||
planned: '📋 Planned:',
|
||||
},
|
||||
},
|
||||
nl: {
|
||||
title: 'SyncEra | Geünificeerde Gezondheids- & Fitnessdatasynchronisatie',
|
||||
description: 'Synchroniseer al je gezondheids- en fitnessgegevens van elke app op één plek. AI-aangedreven inzichten en duidelijke dashboards voor je complete wellness-reis.',
|
||||
subtitle: 'Jouw Complete Gezondheids- & Fitnessdata Hub',
|
||||
status: 'In Ontwikkeling - Binnenkort Beschikbaar',
|
||||
description_full: 'SyncEra is de ultieme app voor het synchroniseren van gezondheids- en fitnessdata. In tegenstelling tot andere apps die slechts beperkte bronnen ondersteunen, maakt SyncEra verbinding met ALLE je fitness-apps en apparaten, zodat geen enkel gegeven achterblijft. Krijg AI-aangedreven inzichten en visualiseer je complete wellness-reis in prachtige, intuïtieve dashboards.',
|
||||
features: {
|
||||
title: 'Belangrijkste Functies',
|
||||
universal: {
|
||||
title: 'Universele Data Sync',
|
||||
desc: 'Verbind met ALLE fitness-apps en apparaten - geen uitzonderingen. Van Apple Health tot Garmin, Strava tot MyFitnessPal, we ondersteunen ze allemaal.',
|
||||
},
|
||||
ai: {
|
||||
title: 'AI-Aangedreven Inzichten',
|
||||
desc: 'Krijg intelligente analyse van je gezondheidspatronen, gepersonaliseerde aanbevelingen en voorspellende inzichten op basis van je complete data.',
|
||||
},
|
||||
dashboards: {
|
||||
title: 'Duidelijke Dashboards',
|
||||
desc: 'Visualiseer je vooruitgang met prachtige, gemakkelijk te begrijpen grafieken en statistieken. Al je data, perfect georganiseerd.',
|
||||
},
|
||||
consistency: {
|
||||
title: 'Data Consistentie',
|
||||
desc: 'Elimineer inconsistenties van meerdere bronnen. SyncEra voegt intelligent samen en dedupliceert je gezondheidsdata.',
|
||||
},
|
||||
privacy: {
|
||||
title: 'Privacy Eerst',
|
||||
desc: 'Jouw gezondheidsgegevens blijven van jou. End-to-end encryptie en volledige controle over je informatie.',
|
||||
},
|
||||
realtime: {
|
||||
title: 'Real-Time Sync',
|
||||
desc: 'Blijf direct op de hoogte. Je data synchroniseert automatisch op de achtergrond over al je verbonden apps.',
|
||||
},
|
||||
},
|
||||
roadmap: {
|
||||
title: 'Ontwikkelingsroadmap',
|
||||
phase1: {
|
||||
title: 'Fase 1: Fundament',
|
||||
items: [
|
||||
'Core app architectuur',
|
||||
'Basis UI/UX ontwerp',
|
||||
'Data model ontwikkeling',
|
||||
],
|
||||
},
|
||||
phase2: {
|
||||
title: 'Fase 2: Integratie',
|
||||
items: [
|
||||
'Belangrijke fitness-app integraties',
|
||||
'Data sync engine ontwikkeling',
|
||||
'Dashboard implementatie',
|
||||
'AI inzichten systeem',
|
||||
],
|
||||
},
|
||||
phase3: {
|
||||
title: 'Fase 3: Afwerking & Lancering',
|
||||
items: [
|
||||
'Geavanceerde AI-functies',
|
||||
'Alle integraties voltooien',
|
||||
'Bètatestprogramma',
|
||||
'App store lancering',
|
||||
],
|
||||
},
|
||||
},
|
||||
tech: {
|
||||
title: 'Gebouwd met Moderne Technologie',
|
||||
desc: 'SyncEra maakt gebruik van geavanceerde mobile development frameworks, veilige cloudinfrastructuur en geavanceerde AI voor een naadloze, krachtige ervaring.',
|
||||
},
|
||||
cta: {
|
||||
title: 'Geïnteresseerd in Early Access?',
|
||||
desc: 'SyncEra is momenteel in ontwikkeling. Volg onze vooruitgang en wees een van de eersten die het weet wanneer we lanceren.',
|
||||
},
|
||||
progress: {
|
||||
completed: '✓ Voltooid:',
|
||||
inProgress: '🔄 Bezig:',
|
||||
planned: '📋 Gepland:',
|
||||
},
|
||||
},
|
||||
de: {
|
||||
title: 'SyncEra | Vereinheitlichte Gesundheits- & Fitnessdatensynchronisierung',
|
||||
description: 'Synchronisieren Sie alle Ihre Gesundheits- und Fitnessdaten von jeder App an einem Ort. KI-gesteuerte Einblicke und klare Dashboards für Ihre komplette Wellness-Reise.',
|
||||
subtitle: 'Ihr Kompletter Gesundheits- & Fitnessdata Hub',
|
||||
status: 'In Entwicklung - Bald Verfügbar',
|
||||
description_full: 'SyncEra ist die ultimative App zur Synchronisierung von Gesundheits- und Fitnessdaten. Im Gegensatz zu anderen Apps, die nur begrenzte Quellen unterstützen, verbindet sich SyncEra mit ALLEN Ihren Fitness-Apps und Geräten, sodass keine Daten zurückbleiben. Erhalten Sie KI-gesteuerte Einblicke und visualisieren Sie Ihre komplette Wellness-Reise in schönen, intuitiven Dashboards.',
|
||||
features: {
|
||||
title: 'Hauptfunktionen',
|
||||
universal: {
|
||||
title: 'Universelle Datensynchronisierung',
|
||||
desc: 'Verbinden Sie sich mit ALLEN Fitness-Apps und Geräten - keine Ausnahmen. Von Apple Health bis Garmin, Strava bis MyFitnessPal, wir unterstützen sie alle.',
|
||||
},
|
||||
ai: {
|
||||
title: 'KI-Gesteuerte Einblicke',
|
||||
desc: 'Erhalten Sie intelligente Analysen Ihrer Gesundheitsmuster, personalisierte Empfehlungen und prädiktive Einblicke basierend auf Ihren kompletten Daten.',
|
||||
},
|
||||
dashboards: {
|
||||
title: 'Klare Dashboards',
|
||||
desc: 'Visualisieren Sie Ihren Fortschritt mit schönen, leicht verständlichen Diagrammen und Metriken. Alle Ihre Daten, perfekt organisiert.',
|
||||
},
|
||||
consistency: {
|
||||
title: 'Datenkonsistenz',
|
||||
desc: 'Eliminieren Sie Inkonsistenzen aus mehreren Quellen. SyncEra führt intelligent zusammen und dedupliziert Ihre Gesundheitsdaten.',
|
||||
},
|
||||
privacy: {
|
||||
title: 'Datenschutz Zuerst',
|
||||
desc: 'Ihre Gesundheitsdaten bleiben Ihre. End-to-End-Verschlüsselung und vollständige Kontrolle über Ihre Informationen.',
|
||||
},
|
||||
realtime: {
|
||||
title: 'Echtzeit-Synchronisierung',
|
||||
desc: 'Bleiben Sie sofort auf dem Laufenden. Ihre Daten synchronisieren sich automatisch im Hintergrund über alle Ihre verbundenen Apps.',
|
||||
},
|
||||
},
|
||||
roadmap: {
|
||||
title: 'Entwicklungs-Roadmap',
|
||||
phase1: {
|
||||
title: 'Phase 1: Grundlage',
|
||||
items: [
|
||||
'Kern-App-Architektur',
|
||||
'Basis UI/UX Design',
|
||||
'Datenmodell-Entwicklung',
|
||||
],
|
||||
},
|
||||
phase2: {
|
||||
title: 'Phase 2: Integration',
|
||||
items: [
|
||||
'Wichtige Fitness-App-Integrationen',
|
||||
'Datensynchronisierungs-Engine Entwicklung',
|
||||
'Dashboard-Implementierung',
|
||||
'KI-Insights-System',
|
||||
],
|
||||
},
|
||||
phase3: {
|
||||
title: 'Phase 3: Feinschliff & Launch',
|
||||
items: [
|
||||
'Erweiterte KI-Funktionen',
|
||||
'Alle Integrationen abschließen',
|
||||
'Beta-Testprogramm',
|
||||
'App Store Launch',
|
||||
],
|
||||
},
|
||||
},
|
||||
tech: {
|
||||
title: 'Gebaut mit Moderner Technologie',
|
||||
desc: 'SyncEra nutzt modernste mobile Entwicklungsframeworks, sichere Cloud-Infrastruktur und fortschrittliche KI für ein nahtloses, leistungsstarkes Erlebnis.',
|
||||
},
|
||||
cta: {
|
||||
title: 'Interessiert an Early Access?',
|
||||
desc: 'SyncEra befindet sich derzeit in der Entwicklung. Folgen Sie unserem Fortschritt und seien Sie einer der Ersten, die erfahren, wann wir starten.',
|
||||
},
|
||||
progress: {
|
||||
completed: '✓ Abgeschlossen:',
|
||||
inProgress: '🔄 In Bearbeitung:',
|
||||
planned: '📋 Geplant:',
|
||||
},
|
||||
},
|
||||
fr: {
|
||||
title: 'SyncEra | Synchronisation Unifiée des Données de Santé & Fitness',
|
||||
description: 'Synchronisez toutes vos données de santé et fitness de chaque application en un seul endroit. Analyses alimentées par IA et tableaux de bord clairs pour votre parcours de bien-être complet.',
|
||||
subtitle: 'Votre Hub Complet de Données de Santé & Fitness',
|
||||
status: 'En Développement - Bientôt Disponible',
|
||||
description_full: 'SyncEra est l\'application ultime de synchronisation des données de santé et fitness. Contrairement aux autres applications qui ne supportent que des sources limitées, SyncEra se connecte à TOUTES vos applications et appareils de fitness, assurant qu\'aucune donnée ne soit laissée de côté. Obtenez des analyses alimentées par IA et visualisez votre parcours de bien-être complet dans de magnifiques tableaux de bord intuitifs.',
|
||||
features: {
|
||||
title: 'Fonctionnalités Clés',
|
||||
universal: {
|
||||
title: 'Synchronisation Universelle des Données',
|
||||
desc: 'Connectez-vous à TOUTES les applications et appareils de fitness - sans exceptions. D\'Apple Health à Garmin, Strava à MyFitnessPal, nous les supportons tous.',
|
||||
},
|
||||
ai: {
|
||||
title: 'Analyses Alimentées par IA',
|
||||
desc: 'Obtenez une analyse intelligente de vos habitudes de santé, des recommandations personnalisées et des analyses prédictives basées sur vos données complètes.',
|
||||
},
|
||||
dashboards: {
|
||||
title: 'Tableaux de Bord Clairs',
|
||||
desc: 'Visualisez vos progrès avec de magnifiques graphiques et métriques faciles à comprendre. Toutes vos données, parfaitement organisées.',
|
||||
},
|
||||
consistency: {
|
||||
title: 'Cohérence des Données',
|
||||
desc: 'Éliminez les incohérences de plusieurs sources. SyncEra fusionne intelligemment et déduplique vos données de santé.',
|
||||
},
|
||||
privacy: {
|
||||
title: 'Confidentialité d\'Abord',
|
||||
desc: 'Vos données de santé restent les vôtres. Chiffrement de bout en bout et contrôle complet de vos informations.',
|
||||
},
|
||||
realtime: {
|
||||
title: 'Synchronisation en Temps Réel',
|
||||
desc: 'Restez mis à jour instantanément. Vos données se synchronisent automatiquement en arrière-plan sur toutes vos applications connectées.',
|
||||
},
|
||||
},
|
||||
roadmap: {
|
||||
title: 'Feuille de Route de Développement',
|
||||
phase1: {
|
||||
title: 'Phase 1: Fondation',
|
||||
items: [
|
||||
'Architecture principale de l\'application',
|
||||
'Conception UI/UX de base',
|
||||
'Développement du modèle de données',
|
||||
],
|
||||
},
|
||||
phase2: {
|
||||
title: 'Phase 2: Intégration',
|
||||
items: [
|
||||
'Intégrations d\'applications de fitness majeures',
|
||||
'Développement du moteur de synchronisation des données',
|
||||
'Implémentation du tableau de bord',
|
||||
'Système d\'analyses IA',
|
||||
],
|
||||
},
|
||||
phase3: {
|
||||
title: 'Phase 3: Finition & Lancement',
|
||||
items: [
|
||||
'Fonctionnalités IA avancées',
|
||||
'Compléter toutes les intégrations',
|
||||
'Programme de tests bêta',
|
||||
'Lancement sur l\'App Store',
|
||||
],
|
||||
},
|
||||
},
|
||||
tech: {
|
||||
title: 'Construit avec une Technologie Moderne',
|
||||
desc: 'SyncEra exploite des frameworks de développement mobile de pointe, une infrastructure cloud sécurisée et une IA avancée pour offrir une expérience fluide et puissante.',
|
||||
},
|
||||
cta: {
|
||||
title: 'Intéressé par l\'Accès Anticipé?',
|
||||
desc: 'SyncEra est actuellement en développement. Suivez nos progrès et soyez parmi les premiers à savoir quand nous lancerons.',
|
||||
},
|
||||
progress: {
|
||||
completed: '✓ Terminé:',
|
||||
inProgress: '🔄 En Cours:',
|
||||
planned: '📋 Planifié:',
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
const t = translations[lang] || translations['en'];
|
||||
|
||||
const metadata = {
|
||||
title: t.title,
|
||||
description: t.description,
|
||||
};
|
||||
---
|
||||
|
||||
<Layout metadata={metadata}>
|
||||
<div class="max-w-4xl mx-auto px-4 py-8">
|
||||
<!-- Hero Section -->
|
||||
<div class="text-center mb-12 backdrop-blur-sm bg-gradient-to-br from-green-50/80 to-blue-50/80 dark:from-slate-800/80 dark:to-slate-900/80 rounded-2xl p-8 shadow-lg">
|
||||
<div class="text-6xl mb-4">💪</div>
|
||||
<h1 class="text-4xl md:text-5xl font-bold mb-4 bg-gradient-to-r from-green-600 to-blue-600 bg-clip-text text-transparent">
|
||||
SyncEra
|
||||
</h1>
|
||||
<p class="text-xl text-gray-600 dark:text-slate-300 mb-6 max-w-2xl mx-auto">
|
||||
{t.subtitle}
|
||||
</p>
|
||||
<div class="inline-flex items-center px-4 py-2 bg-orange-100 dark:bg-orange-900/30 text-orange-800 dark:text-orange-200 rounded-full text-sm font-medium">
|
||||
🚧 {t.status}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Description -->
|
||||
<div class="backdrop-blur-sm bg-white/70 dark:bg-slate-900/70 rounded-xl shadow p-8 mb-12">
|
||||
<p class="text-lg text-gray-700 dark:text-slate-200 leading-relaxed">
|
||||
{t.description_full}
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<!-- Features Grid -->
|
||||
<div class="mb-12">
|
||||
<h2 class="text-3xl font-bold text-center mb-8">{t.features.title}</h2>
|
||||
<div class="grid md:grid-cols-2 lg:grid-cols-3 gap-6">
|
||||
<div class="backdrop-blur-sm bg-white/70 dark:bg-slate-900/70 rounded-xl shadow p-6 hover:shadow-lg transition-shadow">
|
||||
<div class="text-2xl mb-3">🔄</div>
|
||||
<h3 class="text-xl font-semibold mb-3">{t.features.universal.title}</h3>
|
||||
<p class="text-gray-600 dark:text-slate-300">{t.features.universal.desc}</p>
|
||||
</div>
|
||||
<div class="backdrop-blur-sm bg-white/70 dark:bg-slate-900/70 rounded-xl shadow p-6 hover:shadow-lg transition-shadow">
|
||||
<div class="text-2xl mb-3">🤖</div>
|
||||
<h3 class="text-xl font-semibold mb-3">{t.features.ai.title}</h3>
|
||||
<p class="text-gray-600 dark:text-slate-300">{t.features.ai.desc}</p>
|
||||
</div>
|
||||
<div class="backdrop-blur-sm bg-white/70 dark:bg-slate-900/70 rounded-xl shadow p-6 hover:shadow-lg transition-shadow">
|
||||
<div class="text-2xl mb-3">📊</div>
|
||||
<h3 class="text-xl font-semibold mb-3">{t.features.dashboards.title}</h3>
|
||||
<p class="text-gray-600 dark:text-slate-300">{t.features.dashboards.desc}</p>
|
||||
</div>
|
||||
<div class="backdrop-blur-sm bg-white/70 dark:bg-slate-900/70 rounded-xl shadow p-6 hover:shadow-lg transition-shadow">
|
||||
<div class="text-2xl mb-3">✅</div>
|
||||
<h3 class="text-xl font-semibold mb-3">{t.features.consistency.title}</h3>
|
||||
<p class="text-gray-600 dark:text-slate-300">{t.features.consistency.desc}</p>
|
||||
</div>
|
||||
<div class="backdrop-blur-sm bg-white/70 dark:bg-slate-900/70 rounded-xl shadow p-6 hover:shadow-lg transition-shadow">
|
||||
<div class="text-2xl mb-3">🔒</div>
|
||||
<h3 class="text-xl font-semibold mb-3">{t.features.privacy.title}</h3>
|
||||
<p class="text-gray-600 dark:text-slate-300">{t.features.privacy.desc}</p>
|
||||
</div>
|
||||
<div class="backdrop-blur-sm bg-white/70 dark:bg-slate-900/70 rounded-xl shadow p-6 hover:shadow-lg transition-shadow">
|
||||
<div class="text-2xl mb-3">⚡</div>
|
||||
<h3 class="text-xl font-semibold mb-3">{t.features.realtime.title}</h3>
|
||||
<p class="text-gray-600 dark:text-slate-300">{t.features.realtime.desc}</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Development Roadmap -->
|
||||
<div class="backdrop-blur-sm bg-white/70 dark:bg-slate-900/70 rounded-xl shadow p-8 mb-12">
|
||||
<h2 class="text-3xl font-bold text-center mb-8">{t.roadmap.title}</h2>
|
||||
<div class="space-y-8">
|
||||
<!-- Phase 1 -->
|
||||
<div class="border-l-4 border-orange-500 pl-6">
|
||||
<h3 class="text-xl font-semibold text-orange-700 dark:text-orange-400 mb-3">
|
||||
{t.progress.inProgress} {t.roadmap.phase1.title}
|
||||
</h3>
|
||||
<ul class="space-y-2">
|
||||
{t.roadmap.phase1.items.map((item) => (
|
||||
<li class="flex items-center text-gray-700 dark:text-slate-200">
|
||||
<span class="text-orange-500 mr-2">🔄</span>
|
||||
{item}
|
||||
</li>
|
||||
))}
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<!-- Phase 2 -->
|
||||
<div class="border-l-4 border-blue-500 pl-6">
|
||||
<h3 class="text-xl font-semibold text-blue-700 dark:text-blue-400 mb-3">
|
||||
{t.progress.planned} {t.roadmap.phase2.title}
|
||||
</h3>
|
||||
<ul class="space-y-2">
|
||||
{t.roadmap.phase2.items.map((item) => (
|
||||
<li class="flex items-center text-gray-700 dark:text-slate-200">
|
||||
<span class="text-blue-500 mr-2">📋</span>
|
||||
{item}
|
||||
</li>
|
||||
))}
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<!-- Phase 3 -->
|
||||
<div class="border-l-4 border-blue-500 pl-6">
|
||||
<h3 class="text-xl font-semibold text-blue-700 dark:text-blue-400 mb-3">
|
||||
{t.progress.planned} {t.roadmap.phase3.title}
|
||||
</h3>
|
||||
<ul class="space-y-2">
|
||||
{t.roadmap.phase3.items.map((item) => (
|
||||
<li class="flex items-center text-gray-700 dark:text-slate-200">
|
||||
<span class="text-blue-500 mr-2">📋</span>
|
||||
{item}
|
||||
</li>
|
||||
))}
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Technology Section -->
|
||||
<div class="backdrop-blur-sm bg-gradient-to-r from-green-50/80 to-blue-50/80 dark:from-slate-800/80 dark:to-slate-900/80 rounded-xl shadow p-8 mb-12">
|
||||
<div class="text-center">
|
||||
<div class="text-4xl mb-4">⚡</div>
|
||||
<h2 class="text-2xl font-bold mb-4">{t.tech.title}</h2>
|
||||
<p class="text-gray-700 dark:text-slate-200 max-w-2xl mx-auto">
|
||||
{t.tech.desc}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Call to Action -->
|
||||
<div class="backdrop-blur-sm bg-gradient-to-r from-green-600/90 to-blue-600/90 rounded-xl shadow-lg p-8 text-center text-white">
|
||||
<h2 class="text-3xl font-bold mb-4">{t.cta.title}</h2>
|
||||
<p class="text-lg mb-6 opacity-90">
|
||||
{t.cta.desc}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</Layout>
|
||||
|
||||
342
src/pages/[lang]/tiber365.astro
Normal file
342
src/pages/[lang]/tiber365.astro
Normal file
@@ -0,0 +1,342 @@
|
||||
---
|
||||
export const prerender = true;
|
||||
import Layout from '~/layouts/PageLayout.astro';
|
||||
import Hero from '~/components/widgets/Hero2.astro';
|
||||
import Features from '~/components/widgets/Features.astro';
|
||||
import Content from '~/components/widgets/Content.astro';
|
||||
import CallToAction from '~/components/widgets/CallToAction.astro';
|
||||
import { supportedLanguages } from '~/i18n/translations';
|
||||
import Tiber365Image from '~/assets/images/OurCommitment.webp';
|
||||
|
||||
export async function getStaticPaths() {
|
||||
return supportedLanguages.map((lang) => ({
|
||||
params: { lang },
|
||||
}));
|
||||
}
|
||||
|
||||
const { lang } = Astro.params;
|
||||
if (!supportedLanguages.includes(lang)) {
|
||||
return Astro.redirect('/en/');
|
||||
}
|
||||
|
||||
const translations = {
|
||||
en: {
|
||||
title: 'tiber365 | IT Consultancy & Strategic Solutions',
|
||||
description: 'Expert IT consultancy services to optimize your technology infrastructure and drive digital transformation.',
|
||||
hero: {
|
||||
title: 'tiber365',
|
||||
subtitle: 'IT Consultancy & Strategic Solutions',
|
||||
tagline: 'Expert Guidance for Your Digital Journey',
|
||||
},
|
||||
services: {
|
||||
tagline: 'Our Expertise',
|
||||
title: 'Comprehensive IT Consultancy Services',
|
||||
subtitle: 'We help organizations make strategic technology decisions and optimize their IT infrastructure.',
|
||||
items: [
|
||||
{
|
||||
title: 'IT Strategy & Planning',
|
||||
description: 'Develop comprehensive IT strategies aligned with your business objectives and growth plans.',
|
||||
icon: 'tabler:target',
|
||||
},
|
||||
{
|
||||
title: 'Infrastructure Assessment',
|
||||
description: 'Evaluate your current IT infrastructure and identify opportunities for optimization and improvement.',
|
||||
icon: 'tabler:chart-dots',
|
||||
},
|
||||
{
|
||||
title: 'Cloud Migration Strategy',
|
||||
description: 'Plan and execute smooth transitions to cloud environments with minimal disruption to operations.',
|
||||
icon: 'tabler:cloud-up',
|
||||
},
|
||||
{
|
||||
title: 'Security & Compliance',
|
||||
description: 'Ensure your systems meet security standards and regulatory compliance requirements.',
|
||||
icon: 'tabler:shield-check',
|
||||
},
|
||||
{
|
||||
title: 'Technology Roadmapping',
|
||||
description: 'Create clear technology roadmaps that align with your business vision and budget.',
|
||||
icon: 'tabler:map',
|
||||
},
|
||||
{
|
||||
title: 'Vendor Management',
|
||||
description: 'Optimize vendor relationships and ensure you get the best value from your technology investments.',
|
||||
icon: 'tabler:users',
|
||||
},
|
||||
],
|
||||
},
|
||||
about: {
|
||||
tagline: 'About tiber365',
|
||||
title: 'Your Trusted IT Advisory Partner',
|
||||
content: [
|
||||
'tiber365 provides strategic IT consultancy services to organizations looking to optimize their technology infrastructure and drive digital transformation. Our experienced consultants work closely with your team to understand your unique challenges and develop tailored solutions.',
|
||||
'We specialize in helping businesses navigate complex technology decisions, from cloud migration strategies to security implementations. Our approach combines deep technical expertise with practical business acumen to deliver solutions that drive real value.',
|
||||
'Whether you need a comprehensive IT strategy, infrastructure optimization, or guidance on specific technology challenges, tiber365 brings the expertise and experience to help you succeed in today\'s digital landscape.',
|
||||
],
|
||||
},
|
||||
cta: {
|
||||
title: 'Ready to Transform Your IT Infrastructure?',
|
||||
subtitle: 'Let\'s discuss how tiber365 can help your organization achieve its technology goals.',
|
||||
button: 'Schedule a Consultation',
|
||||
},
|
||||
},
|
||||
nl: {
|
||||
title: 'tiber365 | IT Consultancy & Strategische Oplossingen',
|
||||
description: 'Expert IT-advies om uw technologie-infrastructuur te optimaliseren en digitale transformatie te stimuleren.',
|
||||
hero: {
|
||||
title: 'tiber365',
|
||||
subtitle: 'IT Consultancy & Strategische Oplossingen',
|
||||
tagline: 'Deskundig Advies voor Uw Digitale Reis',
|
||||
},
|
||||
services: {
|
||||
tagline: 'Onze Expertise',
|
||||
title: 'Uitgebreide IT Consultancy Diensten',
|
||||
subtitle: 'We helpen organisaties strategische technologiebeslissingen te nemen en hun IT-infrastructuur te optimaliseren.',
|
||||
items: [
|
||||
{
|
||||
title: 'IT Strategie & Planning',
|
||||
description: 'Ontwikkel uitgebreide IT-strategieën die aansluiten bij uw bedrijfsdoelstellingen en groeiplannen.',
|
||||
icon: 'tabler:target',
|
||||
},
|
||||
{
|
||||
title: 'Infrastructuur Beoordeling',
|
||||
description: 'Evalueer uw huidige IT-infrastructuur en identificeer kansen voor optimalisatie en verbetering.',
|
||||
icon: 'tabler:chart-dots',
|
||||
},
|
||||
{
|
||||
title: 'Cloud Migratie Strategie',
|
||||
description: 'Plan en voer soepele overgangen naar cloudomgevingen uit met minimale verstoring van de bedrijfsvoering.',
|
||||
icon: 'tabler:cloud-up',
|
||||
},
|
||||
{
|
||||
title: 'Beveiliging & Compliance',
|
||||
description: 'Zorg ervoor dat uw systemen voldoen aan beveiligingsstandaarden en regelgevingseisen.',
|
||||
icon: 'tabler:shield-check',
|
||||
},
|
||||
{
|
||||
title: 'Technologie Roadmapping',
|
||||
description: 'Creëer duidelijke technologie roadmaps die aansluiten bij uw bedrijfsvisie en budget.',
|
||||
icon: 'tabler:map',
|
||||
},
|
||||
{
|
||||
title: 'Vendor Management',
|
||||
description: 'Optimaliseer leveranciersrelaties en zorg ervoor dat u het beste krijgt uit uw technologie-investeringen.',
|
||||
icon: 'tabler:users',
|
||||
},
|
||||
],
|
||||
},
|
||||
about: {
|
||||
tagline: 'Over tiber365',
|
||||
title: 'Uw Vertrouwde IT Adviespartner',
|
||||
content: [
|
||||
'tiber365 biedt strategische IT-adviesdiensten aan organisaties die hun technologie-infrastructuur willen optimaliseren en digitale transformatie willen doorvoeren. Onze ervaren consultants werken nauw samen met uw team om uw unieke uitdagingen te begrijpen en oplossingen op maat te ontwikkelen.',
|
||||
'We zijn gespecialiseerd in het helpen van bedrijven bij het navigeren door complexe technologiebeslissingen, van cloud migratie strategieën tot beveiligingsimplementaties. Onze aanpak combineert diepe technische expertise met praktische zakelijke inzichten om oplossingen te leveren die echte waarde toevoegen.',
|
||||
'Of u nu een uitgebreide IT-strategie, infrastructuuroptimalisatie of begeleiding bij specifieke technologie-uitdagingen nodig heeft, tiber365 brengt de expertise en ervaring om u te helpen slagen in het huidige digitale landschap.',
|
||||
],
|
||||
},
|
||||
cta: {
|
||||
title: 'Klaar om Uw IT-Infrastructuur te Transformeren?',
|
||||
subtitle: 'Laten we bespreken hoe tiber365 uw organisatie kan helpen haar technologiedoelen te bereiken.',
|
||||
button: 'Plan een Consultatie',
|
||||
},
|
||||
},
|
||||
de: {
|
||||
title: 'tiber365 | IT-Beratung & Strategische Lösungen',
|
||||
description: 'Experten-IT-Beratung zur Optimierung Ihrer Technologie-Infrastruktur und zur Förderung der digitalen Transformation.',
|
||||
hero: {
|
||||
title: 'tiber365',
|
||||
subtitle: 'IT-Beratung & Strategische Lösungen',
|
||||
tagline: 'Expertenberatung für Ihre Digitale Reise',
|
||||
},
|
||||
services: {
|
||||
tagline: 'Unsere Expertise',
|
||||
title: 'Umfassende IT-Beratungsdienstleistungen',
|
||||
subtitle: 'Wir helfen Organisationen, strategische Technologieentscheidungen zu treffen und ihre IT-Infrastruktur zu optimieren.',
|
||||
items: [
|
||||
{
|
||||
title: 'IT-Strategie & Planung',
|
||||
description: 'Entwickeln Sie umfassende IT-Strategien, die auf Ihre Geschäftsziele und Wachstumspläne abgestimmt sind.',
|
||||
icon: 'tabler:target',
|
||||
},
|
||||
{
|
||||
title: 'Infrastruktur-Bewertung',
|
||||
description: 'Bewerten Sie Ihre aktuelle IT-Infrastruktur und identifizieren Sie Optimierungs- und Verbesserungsmöglichkeiten.',
|
||||
icon: 'tabler:chart-dots',
|
||||
},
|
||||
{
|
||||
title: 'Cloud-Migrationsstrategie',
|
||||
description: 'Planen und führen Sie reibungslose Übergänge in Cloud-Umgebungen mit minimalen Betriebsstörungen durch.',
|
||||
icon: 'tabler:cloud-up',
|
||||
},
|
||||
{
|
||||
title: 'Sicherheit & Compliance',
|
||||
description: 'Stellen Sie sicher, dass Ihre Systeme Sicherheitsstandards und regulatorische Anforderungen erfüllen.',
|
||||
icon: 'tabler:shield-check',
|
||||
},
|
||||
{
|
||||
title: 'Technologie-Roadmapping',
|
||||
description: 'Erstellen Sie klare Technologie-Roadmaps, die mit Ihrer Geschäftsvision und Ihrem Budget übereinstimmen.',
|
||||
icon: 'tabler:map',
|
||||
},
|
||||
{
|
||||
title: 'Vendor Management',
|
||||
description: 'Optimieren Sie Lieferantenbeziehungen und stellen Sie sicher, dass Sie das Beste aus Ihren Technologieinvestitionen herausholen.',
|
||||
icon: 'tabler:users',
|
||||
},
|
||||
],
|
||||
},
|
||||
about: {
|
||||
tagline: 'Über tiber365',
|
||||
title: 'Ihr Vertrauenswürdiger IT-Beratungspartner',
|
||||
content: [
|
||||
'tiber365 bietet strategische IT-Beratungsdienste für Organisationen, die ihre Technologie-Infrastruktur optimieren und die digitale Transformation vorantreiben möchten. Unsere erfahrenen Berater arbeiten eng mit Ihrem Team zusammen, um Ihre einzigartigen Herausforderungen zu verstehen und maßgeschneiderte Lösungen zu entwickeln.',
|
||||
'Wir sind darauf spezialisiert, Unternehmen bei der Navigation durch komplexe Technologieentscheidungen zu helfen, von Cloud-Migrationsstrategien bis hin zu Sicherheitsimplementierungen. Unser Ansatz kombiniert tiefe technische Expertise mit praktischem Geschäftssinn, um Lösungen zu liefern, die echten Wert schaffen.',
|
||||
'Ob Sie eine umfassende IT-Strategie, Infrastrukturoptimierung oder Beratung zu speziellen Technologieherausforderungen benötigen, tiber365 bringt die Expertise und Erfahrung mit, um Ihnen in der heutigen digitalen Landschaft zum Erfolg zu verhelfen.',
|
||||
],
|
||||
},
|
||||
cta: {
|
||||
title: 'Bereit, Ihre IT-Infrastruktur zu Transformieren?',
|
||||
subtitle: 'Lassen Sie uns besprechen, wie tiber365 Ihrer Organisation helfen kann, ihre Technologieziele zu erreichen.',
|
||||
button: 'Beratungsgespräch Vereinbaren',
|
||||
},
|
||||
},
|
||||
fr: {
|
||||
title: 'tiber365 | Conseil en Informatique & Solutions Stratégiques',
|
||||
description: 'Services de conseil en informatique experts pour optimiser votre infrastructure technologique et favoriser la transformation numérique.',
|
||||
hero: {
|
||||
title: 'tiber365',
|
||||
subtitle: 'Conseil en Informatique & Solutions Stratégiques',
|
||||
tagline: 'Conseils d\'Experts pour Votre Parcours Numérique',
|
||||
},
|
||||
services: {
|
||||
tagline: 'Notre Expertise',
|
||||
title: 'Services de Conseil en Informatique Complets',
|
||||
subtitle: 'Nous aidons les organisations à prendre des décisions technologiques stratégiques et à optimiser leur infrastructure informatique.',
|
||||
items: [
|
||||
{
|
||||
title: 'Stratégie & Planification IT',
|
||||
description: 'Développez des stratégies informatiques complètes alignées sur vos objectifs commerciaux et plans de croissance.',
|
||||
icon: 'tabler:target',
|
||||
},
|
||||
{
|
||||
title: 'Évaluation d\'Infrastructure',
|
||||
description: 'Évaluez votre infrastructure informatique actuelle et identifiez les opportunités d\'optimisation et d\'amélioration.',
|
||||
icon: 'tabler:chart-dots',
|
||||
},
|
||||
{
|
||||
title: 'Stratégie de Migration Cloud',
|
||||
description: 'Planifiez et exécutez des transitions fluides vers des environnements cloud avec un minimum de perturbations.',
|
||||
icon: 'tabler:cloud-up',
|
||||
},
|
||||
{
|
||||
title: 'Sécurité & Conformité',
|
||||
description: 'Assurez-vous que vos systèmes respectent les normes de sécurité et les exigences réglementaires.',
|
||||
icon: 'tabler:shield-check',
|
||||
},
|
||||
{
|
||||
title: 'Feuille de Route Technologique',
|
||||
description: 'Créez des feuilles de route technologiques claires alignées sur votre vision d\'entreprise et votre budget.',
|
||||
icon: 'tabler:map',
|
||||
},
|
||||
{
|
||||
title: 'Gestion des Fournisseurs',
|
||||
description: 'Optimisez les relations avec les fournisseurs et assurez-vous d\'obtenir le meilleur rapport qualité-prix de vos investissements technologiques.',
|
||||
icon: 'tabler:users',
|
||||
},
|
||||
],
|
||||
},
|
||||
about: {
|
||||
tagline: 'À propos de tiber365',
|
||||
title: 'Votre Partenaire de Conseil en Informatique de Confiance',
|
||||
content: [
|
||||
'tiber365 fournit des services de conseil stratégique en informatique aux organisations cherchant à optimiser leur infrastructure technologique et à favoriser la transformation numérique. Nos consultants expérimentés travaillent en étroite collaboration avec votre équipe pour comprendre vos défis uniques et développer des solutions sur mesure.',
|
||||
'Nous sommes spécialisés dans l\'aide aux entreprises pour naviguer dans des décisions technologiques complexes, des stratégies de migration cloud aux implémentations de sécurité. Notre approche combine une expertise technique approfondie avec un sens pratique des affaires pour fournir des solutions qui apportent une réelle valeur ajoutée.',
|
||||
'Que vous ayez besoin d\'une stratégie informatique complète, d\'une optimisation de l\'infrastructure ou de conseils sur des défis technologiques spécifiques, tiber365 apporte l\'expertise et l\'expérience nécessaires pour vous aider à réussir dans le paysage numérique d\'aujourd\'hui.',
|
||||
],
|
||||
},
|
||||
cta: {
|
||||
title: 'Prêt à Transformer Votre Infrastructure Informatique?',
|
||||
subtitle: 'Discutons de la façon dont tiber365 peut aider votre organisation à atteindre ses objectifs technologiques.',
|
||||
button: 'Planifier une Consultation',
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
const t = translations[lang] || translations['en'];
|
||||
|
||||
const metadata = {
|
||||
title: t.title,
|
||||
description: t.description,
|
||||
};
|
||||
---
|
||||
|
||||
<Layout metadata={metadata}>
|
||||
<!-- Hero Section -->
|
||||
<Hero
|
||||
title={t.hero.title}
|
||||
subtitle={t.hero.subtitle}
|
||||
tagline={t.hero.tagline}
|
||||
isDark={false}
|
||||
actions={[
|
||||
{
|
||||
variant: 'primary',
|
||||
text: t.cta.button,
|
||||
href: '#contact',
|
||||
icon: 'tabler:calendar',
|
||||
},
|
||||
{
|
||||
text: 'Our Services',
|
||||
href: '#services',
|
||||
icon: 'tabler:arrow-down',
|
||||
},
|
||||
]}
|
||||
image={{
|
||||
src: Tiber365Image,
|
||||
alt: 'tiber365 IT Consultancy',
|
||||
}}
|
||||
/>
|
||||
|
||||
<!-- Services Section -->
|
||||
<Features
|
||||
id="services"
|
||||
tagline={t.services.tagline}
|
||||
title={t.services.title}
|
||||
subtitle={t.services.subtitle}
|
||||
items={t.services.items}
|
||||
columns={3}
|
||||
/>
|
||||
|
||||
<!-- About Section -->
|
||||
<Content
|
||||
isReversed
|
||||
tagline={t.about.tagline}
|
||||
title={t.about.title}
|
||||
items={[]}
|
||||
image={{
|
||||
src: Tiber365Image,
|
||||
alt: 'tiber365 Consultancy Services',
|
||||
}}
|
||||
>
|
||||
<Fragment slot="content">
|
||||
<div class="text-lg dark:text-slate-400">
|
||||
{t.about.content.map((paragraph, index, array) => (
|
||||
<p class={index === array.length - 1 ? '' : 'mb-4'}>{paragraph}</p>
|
||||
))}
|
||||
</div>
|
||||
</Fragment>
|
||||
</Content>
|
||||
|
||||
<!-- Call to Action -->
|
||||
<CallToAction
|
||||
id="contact"
|
||||
callToAction={{
|
||||
text: t.cta.button,
|
||||
href: `/${lang}#contact`,
|
||||
icon: 'tabler:mail',
|
||||
}}
|
||||
>
|
||||
<Fragment slot="title">{t.cta.title}</Fragment>
|
||||
<Fragment slot="subtitle">{t.cta.subtitle}</Fragment>
|
||||
</CallToAction>
|
||||
</Layout>
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
export const prerender = true;
|
||||
import Layout from '~/layouts/PageLayout.astro';
|
||||
import Hero from '~/components/widgets/Hero2.astro';
|
||||
import BrandMarquee from '~/components/widgets/BrandMarquee.astro';
|
||||
import Features from '~/components/widgets/Features.astro';
|
||||
import Content from '~/components/widgets/Content.astro';
|
||||
import CallToAction from '~/components/widgets/CallToAction.astro';
|
||||
@@ -38,6 +39,45 @@ const metadata = {
|
||||
}}
|
||||
/>
|
||||
|
||||
<!-- Brand Marquee -->
|
||||
<BrandMarquee
|
||||
title={t.homepage?.brands?.title || 'Our Brands'}
|
||||
subtitle={t.homepage?.brands?.subtitle || 'Part of the 365DevNet ecosystem'}
|
||||
speed="normal"
|
||||
brands={[
|
||||
{
|
||||
name: '365DevNet',
|
||||
icon: 'tabler:code',
|
||||
description: t.homepage?.brands?.devnet || 'Development Solutions',
|
||||
link: '/en',
|
||||
},
|
||||
{
|
||||
name: 'Tiber365',
|
||||
icon: 'tabler:bulb',
|
||||
description: t.homepage?.brands?.tiber || 'IT Consultancy',
|
||||
link: '/en/bergsma',
|
||||
},
|
||||
{
|
||||
name: 'Bergsma.it',
|
||||
icon: 'tabler:chart-line',
|
||||
description: t.homepage?.brands?.bergsma || 'Business Consultancy',
|
||||
link: '/en/bergsma',
|
||||
},
|
||||
{
|
||||
name: 'SyncEra',
|
||||
icon: 'tabler:activity',
|
||||
description: t.homepage?.brands?.syncera || 'Health & Fitness Sync',
|
||||
link: '/en/syncera',
|
||||
},
|
||||
{
|
||||
name: 'Journii',
|
||||
icon: 'tabler:map-pin',
|
||||
description: t.homepage?.brands?.journii || 'Travel & Journaling',
|
||||
link: '/en/journii',
|
||||
},
|
||||
]}
|
||||
/>
|
||||
|
||||
<!-- Features Widget -->
|
||||
<Features
|
||||
id="services"
|
||||
|
||||
Reference in New Issue
Block a user