feat(seo): add Dutch metadata, social previews, and JSON-LD

- Update all meta tags to Dutch (nl_NL locale)
- Add Open Graph and Twitter Card tags with image alt text
- Add JSON-LD structured data (WebApplication schema)
- Add favicon assets (svg, ico, png, apple-touch-icon)
- Add social preview image (og-image.png, 1200x630)
- Update theme color to #560fd9
This commit is contained in:
Oussama Douhou
2026-01-10 23:35:01 +01:00
parent e0b09bc5c0
commit 897a8281a7
7 changed files with 114 additions and 1 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

BIN
src/frontend/favicon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.8 KiB

BIN
src/frontend/favicon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 MiB

5
src/frontend/favicon.svg Normal file
View File

@@ -0,0 +1,5 @@
<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect width="32" height="32" rx="6" fill="#6366f1"/>
<path d="M8 10L12 14L8 18" stroke="white" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M14 18H24" stroke="white" stroke-width="2.5" stroke-linecap="round"/>
</svg>

After

Width:  |  Height:  |  Size: 351 B

View File

@@ -3,7 +3,56 @@
<head> <head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>AI Stack Deployer - Deploy Personal Assistant - poweredBy FLEXINIT</title> <title>AI Stack Deployer - Persoonlijke AI Assistent Deployen | FLEXINIT</title>
<meta name="description" content="Deploy je persoonlijke AI assistent in seconden. Krijg je eigen instance op jouwnaam.ai.flexinit.nl met automatische HTTPS.">
<!-- Open Graph / Facebook -->
<meta property="og:type" content="website">
<meta property="og:url" content="https://portal.ai.flexinit.nl/">
<meta property="og:title" content="AI Stack Deployer - Jouw Persoonlijke AI Assistent">
<meta property="og:description" content="Deploy je persoonlijke AI assistent in seconden. Krijg je eigen instance met automatische HTTPS, persistente opslag en volledige TUI ondersteuning.">
<meta property="og:image" content="https://portal.ai.flexinit.nl/og-image.png">
<meta property="og:image:width" content="1200">
<meta property="og:image:height" content="630">
<meta property="og:image:alt" content="AI Stack Deployer - Deploy je eigen AI assistent">
<meta property="og:site_name" content="FLEXINIT AI Stack">
<meta property="og:locale" content="nl_NL">
<!-- Twitter Card -->
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:url" content="https://portal.ai.flexinit.nl/">
<meta name="twitter:title" content="AI Stack Deployer - Jouw Persoonlijke AI Assistent">
<meta name="twitter:description" content="Deploy je persoonlijke AI assistent in seconden. Krijg je eigen instance met automatische HTTPS.">
<meta name="twitter:image" content="https://portal.ai.flexinit.nl/og-image.png">
<meta name="twitter:image:alt" content="AI Stack Deployer - Deploy je eigen AI assistent">
<!-- Additional SEO -->
<meta name="robots" content="index, follow">
<meta name="author" content="FLEXINIT">
<meta name="keywords" content="AI, assistent, developer tools, FLEXINIT, AI stack, persoonlijke assistent, programmeren">
<link rel="canonical" href="https://portal.ai.flexinit.nl/">
<!-- Favicon -->
<link rel="icon" type="image/svg+xml" href="/favicon.svg">
<link rel="icon" href="/favicon.ico">
<link rel="apple-touch-icon" href="/apple-touch-icon.png">
<!-- Theme Color -->
<meta name="theme-color" content="#560fd9">
<meta name="msapplication-TileColor" content="#560fd9">
<!-- JSON-LD Structured Data -->
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "WebApplication",
"name": "AI Stack Deployer",
"url": "https://portal.ai.flexinit.nl/",
"applicationCategory": "DeveloperApplication",
"operatingSystem": "Web"
}
</script>
<link rel="stylesheet" href="/style.css"> <link rel="stylesheet" href="/style.css">
</head> </head>
<body> <body>

BIN
src/frontend/og-image.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

59
src/frontend/og-image.svg Normal file
View File

@@ -0,0 +1,59 @@
<svg width="1200" height="630" viewBox="0 0 1200 630" fill="none" xmlns="http://www.w3.org/2000/svg">
<defs>
<linearGradient id="backgroundGradient" x1="0" y1="0" x2="1200" y2="630">
<stop offset="0%" stop-color="#1e1b4b" />
<stop offset="100%" stop-color="#312e81" />
</linearGradient>
<pattern id="grid" width="20" height="20" patternUnits="userSpaceOnUse">
<path d="M 20 0 L 0 0 0 20" fill="none" stroke="rgba(129, 140, 248, 0.1)" stroke-width="1"/>
</pattern>
</defs>
<!-- Background -->
<rect width="1200" height="630" fill="url(#backgroundGradient)" />
<rect width="1200" height="630" fill="url(#grid)" />
<!-- FLEXINIT Branding -->
<text x="60" y="85" font-family="sans-serif" font-size="22" font-weight="bold" fill="rgba(255, 255, 255, 0.7)" letter-spacing="2">
FLEXINIT AI
</text>
<!-- Main Content -->
<g transform="translate(60, 220)">
<!-- Title -->
<text font-family="sans-serif" font-size="72" font-weight="bold" fill="#ffffff">
<tspan x="0" dy="0">AI Stack</tspan>
<tspan x="0" dy="80">Deployer</tspan>
</text>
<!-- Subtitle -->
<text x="0" y="200" font-family="sans-serif" font-size="24" fill="rgba(224, 231, 255, 0.8)">
Deploy your personal AI coding assistant in seconds.
</text>
<!-- URL Input visualization -->
<g transform="translate(0, 280)">
<rect x="0" y="0" width="550" height="60" rx="8" fill="rgba(0,0,0,0.2)" />
<text x="20" y="40" font-family="monospace" font-size="24" fill="#a5b4fc">
yourname<tspan fill="#e0e7ff">.ai.flexinit.nl</tspan>
</text>
<rect x="515" y="15" width="4" height="30" fill="#6366f1">
<animate attributeName="opacity" values="0;1;0" dur="1s" repeatCount="indefinite" />
</rect>
</g>
</g>
<!-- Abstract Graphic -->
<g transform="translate(750, 100)">
<!-- Terminal Icon -->
<path d="M80 0 L320 0 C342.091 0 360 17.909 360 40 L360 320 C360 342.091 342.091 360 320 360 L40 360 C17.909 360 0 342.091 0 320 L0 80"
fill="none" stroke="#6366f1" stroke-width="3" />
<path d="M40 40 L80 80 L40 120" fill="none" stroke="#a5b4fc" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" />
<path d="M100 115 L160 115" fill="none" stroke="#a5b4fc" stroke-width="4" stroke-linecap="round" />
<!-- Stack Elements -->
<rect x="80" y="220" width="280" height="80" rx="10" fill="rgba(99, 102, 241, 0.2)" />
<rect x="100" y="200" width="280" height="80" rx="10" fill="rgba(99, 102, 241, 0.3)" />
<rect x="120" y="180" width="280" height="80" rx="10" fill="rgba(99, 102, 241, 0.4)" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.8 KiB