Nosia.ai Landing Page Implementation Plan
For agentic workers: REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (
- [ ]) syntax for tracking.
Goal: Create a static Jekyll-based GitHub Pages site at nosia.ai serving as a project overview hub for Nosia, linking to all existing resources (documentation, guides, community, installation).
Architecture: Minimalist single-page Jekyll site with dark theme, hosted on GitHub Pages from the dilolabs/nosia-ai repository. The site features 8 content sections (Hero, Description, Features, Quick Start, Documentation, Community, Footer) with responsive design and smooth scroll navigation.
Tech Stack: Jekyll 4.3+, GitHub Pages, HTML5, CSS3 (custom), Markdown, GitHub Actions (optional)
File Structure
The implementation will create the following files in the dilolabs/nosia-ai repository:
dilolabs/nosia-ai/
├── _config.yml # Jekyll configuration
├── _includes/
│ ├── head.html # HTML head with metadata, favicon, styles
│ └── header.html # Site header with logo and navigation
├── _layouts/
│ └── default.html # Base layout
├── assets/
│ ├── css/
│ │ └── style.css # Custom dark theme styles
│ └── images/
│ ├── nosia-logo.png # Already exists
│ ├── favicon-16x16.png # To be generated
│ └── favicon-32x32.png # To be generated
├── _site/ # Generated (gitignored)
├── index.md # Main page content
├── 404.html # Custom 404 page
├── CNAME # Custom domain: nosia.ai
├── Gemfile # Jekyll dependencies
├── Gemfile.lock # Dependency lockfile
├── .gitignore # Git ignore rules
└── .github/
└── workflows/
└── deploy.yml # GitHub Actions workflow
Prerequisites
- GitHub repository
dilolabs/nosia-aiexists (currently local only) - Custom domain
nosia.aiDNS configured (CNAME todilolabs.github.ioor A records to GitHub Pages IPs) - Logo file
nosia-logo.pngavailable in repository - Ruby 3.0+ installed locally for development (optional for GitHub Pages)
- Jekyll CLI installed locally for testing:
gem install jekyll bundler
Implementation Plan
Phase 1: Repository Setup and Configuration
Task 1: Initialize Repository Structure
Files:
- Create:
dilolabs/nosia-ai/.gitignore - Create:
dilolabs/nosia-ai/_config.yml - Create:
dilolabs/nosia-ai/Gemfile -
Create:
dilolabs/nosia-ai/CNAME - Step 1: Create .gitignore
Create .gitignore with Jekyll-specific exclusions:
cat > /home/cbldev/gitd/dilolabs/nosia-ai/.gitignore << 'EOF'
# Jekyll
_site/
.sass-cache/
.jekyll-cache/
.jekyll-metadata
# Ruby
Gemfile.lock
*.gem
.bundle/
# Environment
.env
.env.*
# OS
.DS_Store
Thumbs.db
# IDE
.idea/
.vscode/
*.swp
*.swo
# Logs
*.log
npm-debug.log*
# Node (if added later)
node_modules/
EOF
- Step 2: Verify .gitignore created
Run: cat /home/cbldev/gitd/dilolabs/nosia-ai/.gitignore
Expected: File contains all Jekyll and development exclusions
- Step 3: Create CNAME file for custom domain
echo "nosia.ai" > /home/cbldev/gitd/dilolabs/nosia-ai/CNAME
- Step 4: Verify CNAME file
Run: cat /home/cbldev/gitd/dilolabs/nosia-ai/CNAME
Expected: nosia.ai
- Step 5: Commit repository setup files
cd /home/cbldev/gitd/dilolabs/nosia-ai
git add .gitignore CNAME
git commit -m "setup: add gitignore and CNAME for GitHub Pages
Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>"
Task 2: Configure Jekyll
Files:
- Create:
dilolabs/nosia-ai/_config.yml -
Create:
dilolabs/nosia-ai/Gemfile - Step 1: Create _config.yml
cat > /home/cbldev/gitd/dilolabs/nosia-ai/_config.yml << 'EOF'
# Site settings
title: Nosia
description: >-
Self-hosted AI RAG + MCP Platform. Run AI models on your own data with
complete privacy and control.
url: https://nosia.ai
baseurl: ""
# Build settings
theme: null
plugins:
- jekyll-sitemap
- jekyll-feed
# Exclude from processing
exclude:
- Gemfile
- Gemfile.lock
- node_modules
- vendor/bundle/
- .github/
- .gitignore
- README.md
EOF
- Step 2: Verify _config.yml
Run: cat /home/cbldev/gitd/dilolabs/nosia-ai/_config.yml
Expected: YAML file with site settings, plugins, and exclusions
- Step 3: Create Gemfile
cat > /home/cbldev/gitd/dilolabs/nosia-ai/Gemfile << 'EOF'
source "https://rubygems.org"
gem "jekyll", "~> 4.3"
gem "jekyll-sitemap"
gem "jekyll-feed"
EOF
- Step 4: Verify Gemfile
Run: cat /home/cbldev/gitd/dilolabs/nosia-ai/Gemfile
Expected: Ruby gemfile with jekyll and plugins
- Step 5: Commit Jekyll configuration
cd /home/cbldev/gitd/dilolabs/nosia-ai
git add _config.yml Gemfile
git commit -m "config: add Jekyll configuration files
Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>"
Task 3: Create Directory Structure
Files:
- Create:
dilolabs/nosia-ai/_includes/ - Create:
dilolabs/nosia-ai/_layouts/ - Create:
dilolabs/nosia-ai/assets/css/ - Create:
dilolabs/nosia-ai/assets/images/ -
Create:
dilolabs/nosia-ai/.github/workflows/ - Step 1: Create all directories
cd /home/cbldev/gitd/dilolabs/nosia-ai
mkdir -p _includes _layouts assets/css assets/images .github/workflows
- Step 2: Verify directories exist
Run: ls -la /home/cbldev/gitd/dilolabs/nosia-ai/
Expected: All directories created successfully
- Step 3: Create placeholder .gitkeep files (optional)
for dir in _includes _layouts assets/css assets/images .github/workflows; do
touch /home/cbldev/gitd/dilolabs/nosia-ai/$dir/.gitkeep
rm /home/cbldev/gitd/dilolabs/nosia-ai/$dir/.gitkeep
done
- Step 4: Commit directory structure
cd /home/cbldev/gitd/dilolabs/nosia-ai
git add _includes/ _layouts/ assets/ .github/
git commit -m "setup: create directory structure
Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>"
Phase 2: Create Layout and Includes
Task 4: Create Default Layout
Files:
-
Create:
dilolabs/nosia-ai/_layouts/default.html -
Step 1: Create default.html layout
cat > /home/cbldev/gitd/dilolabs/nosia-ai/_layouts/default.html << 'EOF'
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="Self-hosted AI RAG + MCP Platform. Run AI models on your own data with complete privacy and control.">
<!-- Open Graph / Social -->
<meta property="og:type" content="website">
<meta property="og:url" content="https://nosia.ai">
<meta property="og:title" content="Nosia">
<meta property="og:description" content="Self-hosted AI RAG + MCP Platform. Run AI models on your own data with complete privacy and control.">
<meta property="og:image" content="https://nosia.ai/assets/images/nosia-logo.png">
<!-- Twitter -->
<meta property="twitter:card" content="summary_large_image">
<meta property="twitter:title" content="Nosia">
<meta property="twitter:description" content="Self-hosted AI RAG + MCP Platform. Run AI models on your own data with complete privacy and control.">
<meta property="twitter:image" content="https://nosia.ai/assets/images/nosia-logo.png">
<!-- Favicon -->
<link rel="icon" type="image/png" href="/assets/images/favicon-32x32.png" sizes="32x32">
<link rel="icon" type="image/png" href="/assets/images/favicon-16x16.png" sizes="16x16">
<link rel="apple-touch-icon" href="/assets/images/nosia-logo.png">
<!-- Styles -->
<link rel="stylesheet" href="/assets/css/style.css">
<title>Nosia - Nosia.ai Landing Page Implementation Plan</title>
</head>
<body>
<header class="header">
<div class="container">
<a href="/" class="logo" aria-label="">
<img src="/assets/images/nosia-logo.png" alt="" height="48">
</a>
<nav class="nav" aria-label="">
<a href="#documentation"></a>
<a href="#community"></a>
<a href="https://github.com/nosia-ai/nosia" target="_blank" rel="noopener noreferrer">GitHub</a>
<a href="#" class="lang-toggle" data-lang-toggle aria-label="">English</a>
</nav>
</div>
</header>
<main>
<section class="hero">
<div class="container">
<img src="/assets/images/nosia-logo.png" alt="Nosia" height="80" />
<h1>Plateforme AI RAG + MCP auto-hébergée</h1>
<p class="subtitle">Exécutez des modèles d'IA sur vos propres données avec une confidentialité et un contrôle complets</p>
<a href="#quickstart" class="btn btn-primary">Commencer</a>
</div>
</section>
<section id="description" class="description">
<div class="container">
<p>Nosia est une plateforme open-source qui apporte des capacités d'IA de niveau entreprise à votre propre infrastructure. Avec la génération augmentée par récupération (RAG), l'intégration du protocole MCP (Model Context Protocol), et des APIs compatibles OpenAI, vous pouvez construire des applications d'IA qui fonctionnent avec vos données, à votre manière.</p>
</div>
</section>
<section id="story" class="story highlighted">
<div class="container">
<h2>🌱 Notre histoire</h2>
<div class="story-content">
<p>Nosia, c'est avant tout une <strong>belle histoire humaine</strong>. Celle de quatre passionnés — Cyril, Olivier, Aude et Melvin — unis par des années d'amitié et de collaboration. Une aventure née d'une conviction commune : <strong>la technologie doit servir l'humain, pas l'inverse</strong>.</p>
<p><strong>Tout a commencé en 2024.</strong> Olivier, toujours à l'affût des innovations qui font sens, partage avec Cyril sa découverte du RAG. Une étincelle. <strong>C'est Cyril qui trouve le nom Nosia</strong> — un nom qui porte nos valeurs : souveraineté numérique, éthique, respect des données. Puis Aude, Cyril et Melvin relèvent le défi : allier l'expertise technique à une approche centrée humain, pour créer une IA qui respecte à la fois les personnes et la planète.</p>
<p><strong>Des heures de brainstorming, des tests, des prototypes...</strong> Toujours la même question : comment concilier innovation technologique, souveraineté des données, open source et valeurs européennes ? Comment prouver qu'un autre numérique est possible, plus responsable, plus humain ?</p>
<p><strong>C'est dans cette énergie collective que Nosia a pris vie.</strong> Pas dans le cadre formel d'une entreprise, mais dans l'enthousiasme de quatre personnes convaincues qu'on peut allier performance technique et éthique. Une aventure où chaque détail compte : du choix du nom jusqu'à la dernière ligne de code.</p>
<p><strong>Et cette aventure humaine et responsable</strong> continue. En <strong>juin 2026</strong>, François, qui anime la chaîne YouTube <strong>Kokori Kodo</strong>, a réalisé une première vidéo de présentation — que vous pouvez découvrir dans la section suivante.</p>
</div>
</div>
</section>
<section id="demo" class="demo">
<div class="container">
<h2>Découvrez Nosia en action</h2>
<div class="video-container">
<iframe src="https://www.youtube-nocookie.com/embed/HD5k-LjGvGw?si=eaYP5pCkKq-qHh3A" title="Nosia - Démo de la plateforme AI RAG + MCP auto-hébergée" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen="">
</iframe>
</div>
</div>
</section>
<section id="features" class="features">
<div class="container">
<h2>Fonctionnalités clés</h2>
<p>Découvrez comment Nosia vous donne le contrôle total sur votre IA avec des outils puissants et intuitifs.</p>
<div class="grid">
<div class="card">
<span class="icon">🔒</span>
<h3>Privé & Sécurisé</h3>
<p>Vos données restent sur votre infrastructure</p>
</div>
<div class="card">
<span class="icon">🤖</span>
<h3>API compatible OpenAI</h3>
<p>Remplacement direct des clients OpenAI</p>
</div>
<div class="card">
<span class="icon">📚</span>
<h3>Propulsé par RAG</h3>
<p>Enrichissez les réponses de l'IA avec vos documents</p>
</div>
<div class="card">
<span class="icon">🔌</span>
<h3>Intégration MCP</h3>
<p>Connectez l'IA à des outils et services externes</p>
</div>
<div class="card">
<span class="icon">🤖</span>
<h3>Compétences d'agent (bientôt)</h3>
<p>Étendez le chat avec des compétences personnalisées basées sur LLM et Ruby</p>
</div>
<div class="card">
<span class="icon">🔄</span>
<h3>Streaming en temps réel</h3>
<p>Événements envoyés par le serveur pour des réponses en direct</p>
</div>
</div>
</div>
</section>
<section id="quickstart" class="quickstart">
<div class="container">
<h2>Commencez en quelques minutes</h2>
<p>Une seule commande installe Docker et toutes ses dépendances :</p>
<div class="code-block">
<code>curl -fsSL https://get.nosia.ai | sh</code>
</div>
<p>Pour Windows :</p>
<div class="code-block">
<code>Invoke-WebRequest https://get.nosia.ai/install.ps1 -OutFile install.ps1; .\install.ps1</code>
</div>
</div>
</section>
<section id="documentation" class="documentation">
<div class="container">
<h2>Documentation</h2>
<p>Toute la documentation dont vous avez besoin pour déployer et utiliser Nosia efficacement.</p>
<div class="grid">
<a href="https://blog.nosia.ai/" class="card" target="_blank" rel="noopener">
<span class="icon">📖</span>
<h3>Blog Nosia</h3>
<p>Notre vision, notre mission, nos histoires</p>
</a>
<a href="https://github.com/nosia-ai/nosia/blob/main/docs/ARCHITECTURE.md" class="card" target="_blank" rel="noopener">
<span class="icon">📐</span>
<h3>Documentation sur l'architecture</h3>
<p>Plongée technique approfondie</p>
</a>
<a href="https://github.com/nosia-ai/nosia/blob/main/docs/DEPLOYMENT.md" class="card" target="_blank" rel="noopener">
<span class="icon">🚀</span>
<h3>Guide de déploiement</h3>
<p>Stratégies de déploiement en production</p>
</a>
<a href="https://github.com/nosia-ai/nosia/blob/main/docs/OBSERVABILITY.md" class="card" target="_blank" rel="noopener">
<span class="icon">📝</span>
<h3>Observabilité</h3>
<p>Observabilité complète</p>
</a>
<a href="https://github.com/nosia-ai/nosia/tree/main/docs" class="card" target="_blank" rel="noopener">
<span class="icon">📋</span>
<h3>Index complet de la documentation</h3>
<p>Toute la documentation</p>
</a>
<a href="https://github.com/nosia-ai/nosia/blob/main/docs/DIAGRAMS.md" class="card" target="_blank" rel="noopener">
<span class="icon">📊</span>
<h3>Diagrammes du système</h3>
<p>Représentations visuelles</p>
</a>
</div>
</div>
</section>
<section id="community" class="community">
<div class="container">
<h2>Communauté & Support</h2>
<p>Rejoignez notre communauté croissante et bénéficiez d'un support actif.</p>
<div class="grid">
<a href="https://github.com/nosia-ai/nosia/discussions" class="card" target="_blank" rel="noopener">
<span class="icon">💬</span>
<h3>Discussions GitHub</h3>
<p>Posez des questions et partagez vos idées</p>
</a>
<a href="https://github.com/nosia-ai/nosia/issues" class="card" target="_blank" rel="noopener">
<span class="icon">🐛</span>
<h3>Signaler des problèmes</h3>
<p>Signaler des bugs et demander des fonctionnalités</p>
</a>
<a href="https://github.com/nosia-ai/nosia/blob/main/CONTRIBUTING.md" class="card" target="_blank" rel="noopener">
<span class="icon">📝</span>
<h3>Guide de contribution</h3>
<p>Comment contribuer</p>
</a>
<a href="https://github.com/nosia-ai/nosia/blob/main/CODE_OF_CONDUCT.md" class="card" target="_blank" rel="noopener">
<span class="icon">🤝</span>
<h3>Code de conduite</h3>
<p>Règles de la communauté</p>
</a>
</div>
</div>
</section>
<footer class="footer">
<div class="container">
<p>Copyright © 2024-2026 Dilolabs</p>
<p class="links">Sous licence <a href="https://github.com/nosia-ai/nosia/blob/main/LICENSE" target="_blank" rel="noopener">MIT</a></p>
<div class="links">
<a href="https://nosia.ai" target="_blank" rel="noopener">Site web</a>
<a href="https://github.com/nosia-ai/nosia" target="_blank" rel="noopener">GitHub</a>
<a href="https://hub.docker.com/r/dilolabs/nosia" target="_blank" rel="noopener">Docker Hub</a>
</div>
</div>
</footer>
</main>
<a href="#" class="back-to-top" aria-label="Back to top">^</a>
</body>
</html>
EOF
- Step 2: Verify layout file
Run: cat /home/cbldev/gitd/dilolabs/nosia-ai/_layouts/default.html
Expected: HTML5 document with includes for head and header, plus back-to-top button
- Step 3: Commit layout
cd /home/cbldev/gitd/dilolabs/nosia-ai
git add _layouts/default.html
git commit -m "layout: add default HTML layout
Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>"
Task 5: Create Head Include
Files:
-
Create:
dilolabs/nosia-ai/_includes/head.html -
Step 1: Create head.html
cat > /home/cbldev/gitd/dilolabs/nosia-ai/_includes/head.html << 'EOF'
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="Self-hosted AI RAG + MCP Platform. Run AI models on your own data with complete privacy and control.">
<!-- Open Graph / Social -->
<meta property="og:type" content="website">
<meta property="og:url" content="https://nosia.ai">
<meta property="og:title" content="Nosia">
<meta property="og:description" content="Self-hosted AI RAG + MCP Platform. Run AI models on your own data with complete privacy and control.">
<meta property="og:image" content="https://nosia.ai/assets/images/nosia-logo.png">
<!-- Twitter -->
<meta property="twitter:card" content="summary_large_image">
<meta property="twitter:title" content="Nosia">
<meta property="twitter:description" content="Self-hosted AI RAG + MCP Platform. Run AI models on your own data with complete privacy and control.">
<meta property="twitter:image" content="https://nosia.ai/assets/images/nosia-logo.png">
<!-- Favicon -->
<link rel="icon" type="image/png" href="/assets/images/favicon-32x32.png" sizes="32x32">
<link rel="icon" type="image/png" href="/assets/images/favicon-16x16.png" sizes="16x16">
<link rel="apple-touch-icon" href="/assets/images/nosia-logo.png">
<!-- Styles -->
<link rel="stylesheet" href="/assets/css/style.css">
<title>Nosia - Nosia.ai Landing Page Implementation Plan</title>
EOF
- Step 2: Verify head.html
Run: cat /home/cbldev/gitd/dilolabs/nosia-ai/_includes/head.html
Expected: HTML head with meta tags, Open Graph, Twitter cards, favicons, and CSS link
- Step 3: Commit head include
cd /home/cbldev/gitd/dilolabs/nosia-ai
git add _includes/head.html
git commit -m "include: add head.html with metadata and favicons
Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>"
Task 6: Create Header Include
Files:
-
Create:
dilolabs/nosia-ai/_includes/header.html -
Step 1: Create header.html
cat > /home/cbldev/gitd/dilolabs/nosia-ai/_includes/header.html << 'EOF'
<header class="header">
<div class="container">
<a href="/" class="logo" aria-label="Nosia Home">
<img src="/assets/images/nosia-logo.png" alt="Nosia Logo" height="48">
</a>
<nav class="nav" aria-label="Main navigation">
<a href="#documentation">Documentation</a>
<a href="#community">Community</a>
<a href="https://github.com/nosia-ai/nosia" target="_blank" rel="noopener noreferrer">GitHub<span class="external-icon" aria-hidden="true">┗</span></a>
</nav>
</div>
</header>
EOF
- Step 2: Verify header.html
Run: cat /home/cbldev/gitd/dilolabs/nosia-ai/_includes/header.html
Expected: Header with logo, navigation links, and external icon for GitHub
- Step 3: Commit header include
cd /home/cbldev/gitd/dilolabs/nosia-ai
git add _includes/header.html
git commit -m "include: add header.html with logo and navigation
Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>"
Phase 3: Create Styles
Task 7: Create CSS Stylesheet
Files:
-
Create:
dilolabs/nosia-ai/assets/css/style.css -
Step 1: Create style.css with all styles from design spec
cat > /home/cbldev/gitd/dilolabs/nosia-ai/assets/css/style.css << 'EOF'
/* ===== CSS Variables ===== */
:root {
--color-primary: #22c55e;
--color-primary-dark: #16a34a;
--color-bg: #0f172a;
--color-bg-secondary: #1e293b;
--color-bg-tertiary: #334155;
--color-text: #f1f5f9;
--color-text-secondary: #94a3b8;
--color-accent: #06b6d4;
--color-accent-dark: #0891b2;
--font-sans: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
--font-mono: "SF Mono", "Monaco", "Inconsolata", "Fira Code", monospace;
--spacing-xs: 0.25rem;
--spacing-sm: 0.5rem;
--spacing-md: 1rem;
--spacing-lg: 1.5rem;
--spacing-xl: 2rem;
--spacing-2xl: 3rem;
--spacing-3xl: 4rem;
--radius-sm: 0.25rem;
--radius-md: 0.5rem;
--max-width: 1200px;
}
/* ===== Reset & Base ===== */
*, *::before, *::after {
box-sizing: border-box;
margin: 0;
padding: 0;
}
html {
scroll-behavior: smooth;
}
body {
font-family: var(--font-sans);
line-height: 1.6;
color: var(--color-text);
background-color: var(--color-bg);
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.container {
width: 100%;
max-width: var(--max-width);
margin: 0 auto;
padding: 0 var(--spacing-lg);
}
/* ===== Typography ===== */
h1, h2, h3, h4, h5, h6 {
line-height: 1.2;
font-weight: 700;
}
h1 { font-size: 3rem; }
h2 { font-size: 2.25rem; }
h3 { font-size: 1.5rem; }
h4 { font-size: 1.25rem; font-weight: 600; }
p {
margin-bottom: var(--spacing-md);
color: var(--color-text-secondary);
}
.subtitle {
font-size: 1.25rem;
color: var(--color-text-secondary);
margin-bottom: var(--spacing-xl);
max-width: 700px;
margin-left: auto;
margin-right: auto;
}
/* ===== Layout ===== */
section {
padding: var(--spacing-3xl) 0;
}
.grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
gap: var(--spacing-lg);
}
/* ===== Header ===== */
.header {
position: fixed;
top: 0;
left: 0;
right: 0;
z-index: 1000;
padding: var(--spacing-md) 0;
background-color: var(--color-bg);
border-bottom: 1px solid var(--color-bg-tertiary);
transition: padding 0.2s ease, box-shadow 0.2s ease;
}
.header.scrolled {
padding: var(--spacing-sm) 0;
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
}
.header .container {
display: flex;
justify-content: space-between;
align-items: center;
}
.logo {
display: block;
}
.logo img {
height: 48px;
}
.nav {
display: flex;
gap: var(--spacing-xl);
}
.nav a {
color: var(--color-text-secondary);
text-decoration: none;
transition: color 0.2s ease;
font-weight: 500;
}
.nav a:hover {
color: var(--color-text);
}
.nav a::after {
content: "┗";
font-size: 0.75em;
opacity: 0.7;
margin-left: var(--spacing-xs);
}
/* ===== Hero ===== */
.hero {
padding-top: calc(var(--spacing-3xl) + 80px);
text-align: center;
}
.hero .container {
display: flex;
flex-direction: column;
align-items: center;
}
.hero img {
margin-bottom: var(--spacing-xl);
}
.hero h1 {
margin-bottom: var(--spacing-lg);
background: linear-gradient(90deg, var(--color-primary), var(--color-accent));
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
}
/* ===== Cards ===== */
.card {
background-color: var(--color-bg-secondary);
border: 1px solid var(--color-bg-tertiary);
border-radius: var(--radius-md);
padding: var(--spacing-lg);
text-decoration: none;
color: inherit;
transition: border-color 0.2s ease, transform 0.2s ease, box-shadow 0.2s ease;
display: block;
}
.card:hover {
border-color: var(--color-primary);
transform: translateY(-4px);
box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05);
}
.card .icon {
font-size: 2rem;
display: block;
margin-bottom: var(--spacing-md);
}
.card h3 {
margin-bottom: var(--spacing-sm);
color: var(--color-text);
}
.card p {
color: var(--color-text-secondary);
font-size: 0.875rem;
}
/* ===== Buttons ===== */
.btn {
display: inline-block;
padding: var(--spacing-md) var(--spacing-xl);
border-radius: var(--radius-sm);
text-decoration: none;
font-weight: 600;
transition: all 0.2s ease;
cursor: pointer;
border: none;
}
.btn-primary {
background-color: var(--color-primary);
color: white;
}
.btn-primary:hover {
background-color: var(--color-primary-dark);
}
/* ===== Code Blocks ===== */
.code-block {
background-color: var(--color-bg-secondary);
border: 1px solid var(--color-bg-tertiary);
border-radius: var(--radius-md);
padding: var(--spacing-lg);
overflow-x: auto;
margin-bottom: var(--spacing-md);
}
.code-block code {
font-family: var(--font-mono);
font-size: 0.875rem;
color: var(--color-text);
background: none;
padding: 0;
white-space: pre-wrap;
word-break: break-all;
}
/* ===== Footer ===== */
.footer {
padding: var(--spacing-3xl) 0 var(--spacing-xl);
border-top: 1px solid var(--color-bg-tertiary);
text-align: center;
}
.footer .container {
display: flex;
flex-direction: column;
align-items: center;
gap: var(--spacing-md);
}
.footer p {
color: var(--color-text-secondary);
font-size: 0.875rem;
}
.footer .links {
display: flex;
gap: var(--spacing-lg);
flex-wrap: wrap;
justify-content: center;
}
.footer .links a {
color: var(--color-text-secondary);
text-decoration: none;
}
.footer .links a:hover {
color: var(--color-text);
}
/* ===== Responsive ===== */
@media (max-width: 768px) {
.nav {
display: none;
}
h1 { font-size: 2.25rem; }
h2 { font-size: 1.75rem; }
.hero {
padding-top: calc(var(--spacing-3xl) + 60px);
}
.subtitle {
font-size: 1rem;
}
.nav a::after {
display: none;
}
}
/* ===== External Link Indicator ===== */
a[target="_blank"]::after {
content: "┗";
margin-left: var(--spacing-xs);
font-size: 0.75em;
opacity: 0.7;
}
/* ===== Back to Top Button ===== */
.back-to-top {
position: fixed;
bottom: var(--spacing-lg);
right: var(--spacing-lg);
display: none;
align-items: center;
justify-content: center;
width: 48px;
height: 48px;
background-color: var(--color-bg-secondary);
border: 1px solid var(--color-bg-tertiary);
border-radius: 50%;
color: var(--color-text-secondary);
text-decoration: none;
font-size: 1.5rem;
transition: all 0.2s ease;
z-index: 1000;
}
.back-to-top:hover {
background-color: var(--color-primary);
border-color: var(--color-primary);
color: white;
}
.back-to-top.visible {
display: flex;
}
/* ===== In-page anchor link styling ===== */
[href^="#"] {
color: var(--color-accent);
}
[href^="#"]:hover {
color: var(--color-accent-dark);
}
EOF
- Step 2: Verify style.css exists and has content
Run: wc -l /home/cbldev/gitd/dilolabs/nosia-ai/assets/css/style.css
Expected: File with ~200+ lines of CSS
- Step 3: Commit stylesheet
cd /home/cbldev/gitd/dilolabs/nosia-ai
git add assets/css/style.css
git commit -m "styles: add complete CSS with dark theme and responsive design
Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>"
Phase 4: Create Page Content
Task 8: Create Index Page
Files:
-
Create:
dilolabs/nosia-ai/index.md -
Step 1: Create index.md with all content sections
cat > /home/cbldev/gitd/dilolabs/nosia-ai/index.md << 'EOF'
---
layout: default
title: Home
---
<section class="hero">
<div class="container">
<img src="/assets/images/nosia-logo.png" alt="Nosia" height="80">
<h1>Self-hosted AI RAG + MCP Platform</h1>
<p class="subtitle">Run AI models on your own data with complete privacy and control</p>
<a href="https://get.nosia.ai" class="btn btn-primary">Get Started</a>
</div>
</section>
<section id="description" class="description">
<div class="container">
<p>Nosia is an open-source platform that brings enterprise-grade AI capabilities to your own infrastructure. With Retrieval Augmented Generation (RAG), Model Context Protocol (MCP) integration, and OpenAI-compatible APIs, you can build AI applications that work with your data, your way.</p>
</div>
</section>
<section id="features" class="features">
<div class="container">
<h2>Key Features</h2>
<div class="grid">
<div class="card">
<span class="icon">🔒</span>
<h3>Private & Secure</h3>
<p>Your data stays on your infrastructure</p>
</div>
<div class="card">
<span class="icon">🤖</span>
<h3>OpenAI-Compatible API</h3>
<p>Drop-in replacement for OpenAI clients</p>
</div>
<div class="card">
<span class="icon">📚</span>
<h3>RAG-Powered</h3>
<p>Augment AI responses with your documents</p>
</div>
<div class="card">
<span class="icon">🔌</span>
<h3>MCP Integration</h3>
<p>Connect AI to external tools and services</p>
</div>
<div class="card">
<span class="icon">🤖</span>
<h3>Agent Skills</h3>
<p>Extend chat with custom LLM-driven and Ruby-based skills</p>
</div>
<div class="card">
<span class="icon">🔄</span>
<h3>Real-time Streaming</h3>
<p>Server-sent events for live responses</p>
</div>
</div>
</div>
</section>
<section id="quickstart" class="quickstart">
<div class="container">
<h2>Get Started in Minutes</h2>
<p>One command installs Docker and all dependencies:</p>
<div class="code-block">
<code>curl -fsSL https://get.nosia.ai | sh</code>
</div>
<p>For Windows:</p>
<div class="code-block">
<code>Invoke-WebRequest https://get.nosia.ai/install.ps1 -OutFile install.ps1; .\install.ps1</code>
</div>
</div>
</section>
<section id="documentation" class="documentation">
<div class="container">
<h2>Documentation</h2>
<div class="grid">
<a href="https://guides.nosia.ai/" class="card" target="_blank" rel="noopener">
<span class="icon">📖</span>
<h3>Nosia Guides</h3>
<p>Step-by-step tutorials</p>
</a>
<a href="https://github.com/nosia-ai/nosia/blob/main/docs/ARCHITECTURE.md" class="card" target="_blank" rel="noopener">
<span class="icon">📐</span>
<h3>Architecture Documentation</h3>
<p>Technical deep dive</p>
</a>
<a href="https://github.com/nosia-ai/nosia/blob/main/docs/DEPLOYMENT.md" class="card" target="_blank" rel="noopener">
<span class="icon">🚀</span>
<h3>Deployment Guide</h3>
<p>Production deployment strategies</p>
</a>
<a href="https://github.com/nosia-ai/nosia/blob/main/docs/agent-skills-development.md" class="card" target="_blank" rel="noopener">
<span class="icon">🤖</span>
<h3>Agent Skills Development</h3>
<p>Create custom skills</p>
</a>
<a href="https://github.com/nosia-ai/nosia/tree/main/docs" class="card" target="_blank" rel="noopener">
<span class="icon">📋</span>
<h3>Complete Documentation Index</h3>
<p>All documentation</p>
</a>
<a href="https://github.com/nosia-ai/nosia/blob/main/docs/DIAGRAMS.md" class="card" target="_blank" rel="noopener">
<span class="icon">📊</span>
<h3>System Diagrams</h3>
<p>Visual representations</p>
</a>
</div>
</div>
</section>
<section id="community" class="community">
<div class="container">
<h2>Community & Support</h2>
<div class="grid">
<a href="https://github.com/nosia-ai/nosia/discussions" class="card" target="_blank" rel="noopener">
<span class="icon">💬</span>
<h3>GitHub Discussions</h3>
<p>Ask questions and share ideas</p>
</a>
<a href="https://github.com/nosia-ai/nosia/issues" class="card" target="_blank" rel="noopener">
<span class="icon">🐛</span>
<h3>Report Issues</h3>
<p>Bug reports and feature requests</p>
</a>
<a href="https://github.com/nosia-ai/nosia/blob/main/CONTRIBUTING.md" class="card" target="_blank" rel="noopener">
<span class="icon">📝</span>
<h3>Contributing Guide</h3>
<p>How to contribute</p>
</a>
<a href="https://github.com/nosia-ai/nosia/blob/main/CODE_OF_CONDUCT.md" class="card" target="_blank" rel="noopener">
<span class="icon">🤝</span>
<h3>Code of Conduct</h3>
<p>Community guidelines</p>
</a>
</div>
</div>
</section>
<footer class="footer">
<div class="container">
<p>Copyright © 2024-2026 Cyril Blaecke</p>
<p>Licensed under <a href="https://github.com/nosia-ai/nosia/blob/main/LICENSE" target="_blank" rel="noopener">MIT License</a></p>
<div class="links">
<a href="https://nosia.ai" target="_blank" rel="noopener">Website</a>
<a href="https://github.com/nosia-ai/nosia" target="_blank" rel="noopener">GitHub</a>
<a href="https://hub.docker.com/u/ai" target="_blank" rel="noopener">Docker Hub</a>
</div>
</div>
</footer>
<script>
// Scroll behavior for header
window.addEventListener('scroll', function() {
const header = document.querySelector('.header');
if (window.scrollY > 10) {
header.classList.add('scrolled');
} else {
header.classList.remove('scrolled');
}
});
// Back to top button
window.addEventListener('scroll', function() {
const backToTop = document.querySelector('.back-to-top');
if (window.scrollY > window.innerHeight) {
backToTop.classList.add('visible');
} else {
backToTop.classList.remove('visible');
}
});
// Smooth scroll for anchor links
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
anchor.addEventListener('click', function (e) {
e.preventDefault();
const target = document.querySelector(this.getAttribute('href'));
if (target) {
target.scrollIntoView({
behavior: 'smooth',
block: 'start'
});
}
});
});
</script>
EOF
- Step 2: Verify index.md
Run: wc -l /home/cbldev/gitd/dilolabs/nosia-ai/index.md
Expected: File with ~100+ lines of Markdown
- Step 3: Commit index page
cd /home/cbldev/gitd/dilolabs/nosia-ai
git add index.md
git commit -m "content: add index.md with all page sections and JavaScript
Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>"
Task 9: Create Custom 404 Page
Files:
-
Create:
dilolabs/nosia-ai/404.html -
Step 1: Create 404.html
cat > /home/cbldev/gitd/dilolabs/nosia-ai/404.html << 'EOF'
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="Page not found - Nosia">
<title>404 - Page Not Found | Nosia</title>
<link rel="icon" type="image/png" href="/assets/images/favicon-32x32.png" sizes="32x32">
<link rel="stylesheet" href="/assets/css/style.css">
</head>
<body>
<header class="header">
<div class="container">
<a href="/" class="logo" aria-label="Nosia Home">
<img src="/assets/images/nosia-logo.png" alt="Nosia Logo" height="48">
</a>
</div>
</header>
<main>
<section class="hero" style="padding-top: 120px;">
<div class="container">
<h1>404</h1>
<p class="subtitle">Page Not Found</p>
<p>The page you're looking for doesn't exist or has been moved.</p>
<a href="/" class="btn btn-primary">Go Home</a>
</div>
</section>
</main>
</body>
</html>
EOF
- Step 2: Verify 404.html
Run: cat /home/cbldev/gitd/dilolabs/nosia-ai/404.html
Expected: HTML 404 page with header, error message, and Go Home button
- Step 3: Commit 404 page
cd /home/cbldev/gitd/dilolabs/nosia-ai
git add 404.html
git commit -m "content: add custom 404 error page
Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>"
Phase 5: Generate Favicons
Task 10: Create Favicon Images
Files:
- Create:
dilolabs/nosia-ai/assets/images/favicon-16x16.png -
Create:
dilolabs/nosia-ai/assets/images/favicon-32x32.png - Step 1: Generate favicons from logo
Use ImageMagick (if installed):
# Convert logo to 32x32 favicon
convert /home/cbldev/gitd/dilolabs/nosia-ai/nosia-logo.png \
-resize 32x32 \
-background transparent \
/home/cbldev/gitd/dilolabs/nosia-ai/assets/images/favicon-32x32.png
# Convert logo to 16x16 favicon
convert /home/cbldev/gitd/dilolabs/nosia-ai/nosia-logo.png \
-resize 16x16 \
-background transparent \
/home/cbldev/gitd/dilolabs/nosia-ai/assets/images/favicon-16x16.png
OR use online tool:
- Go to https://favicon.io/favicon-converter/
- Upload nosia-logo.png
- Download 16x16 and 32x32 PNG versions
-
Save to
assets/images/ - Step 2: Verify favicons exist
Run: ls -la /home/cbldev/gitd/dilolabs/nosia-ai/assets/images/
Expected: favicon-16x16.png and favicon-32x32.png present
- Step 3: Commit favicons
cd /home/cbldev/gitd/dilolabs/nosia-ai
git add assets/images/favicon-16x16.png assets/images/favicon-32x32.png
git commit -m "assets: add favicon images
Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>"
Phase 6: Optional GitHub Actions Workflow
Task 11: Create GitHub Actions Deploy Workflow
Files:
-
Create:
dilolabs/nosia-ai/.github/workflows/deploy.yml -
Step 1: Create deploy.yml
cat > /home/cbldev/gitd/dilolabs/nosia-ai/.github/workflows/deploy.yml << 'EOF'
name: Deploy to GitHub Pages
on:
push:
branches: ["main"]
workflow_dispatch:
jobs:
deploy:
runs-on: ubuntu-latest
permissions:
contents: read
pages: write
id-token: write
environment:
name: github-pages
url: https://nosia.ai
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup Ruby
uses: ruby/setup-ruby@v1
with:
ruby-version: '3.2'
bundler-cache: true
- name: Install dependencies
run: |
gem install bundler
bundle install
- name: Build site
run: bundle exec jekyll build --baseurl ""
- name: Setup Pages
uses: actions/configure-pages@v4
- name: Upload artifact
uses: actions/upload-pages-artifact@v3
with:
path: _site/
- name: Deploy to GitHub Pages
uses: actions/deploy-pages@v4
EOF
- Step 2: Verify workflow file
Run: cat /home/cbldev/gitd/dilolabs/nosia-ai/.github/workflows/deploy.yml
Expected: GitHub Actions workflow YAML
- Step 3: Commit workflow
cd /home/cbldev/gitd/dilolabs/nosia-ai
git add .github/workflows/deploy.yml
git commit -m "ci: add GitHub Pages deployment workflow
Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>"
Phase 7: Local Testing
Task 12: Install Jekyll Dependencies
Prerequisite: Ruby 3.0+ installed
- Step 1: Install Bundler
Run: gem install bundler
Expected: Bundler installed successfully
- Step 2: Install Jekyll and plugins
cd /home/cbldev/gitd/dilolabs/nosia-ai
bundle install
Expected: All gems installed
- Step 3: Verify dependencies
Run: bundle exec jekyll --version
Expected: Jekyll version displayed (4.3.x or higher)
Task 13: Test Local Build
- Step 1: Build the site
cd /home/cbldev/gitd/dilolabs/nosia-ai
bundle exec jekyll build --baseurl ""
Expected: Site built successfully, _site directory created
- Step 2: Verify _site directory
Run: ls -la /home/cbldev/gitd/dilolabs/nosia-ai/_site/
Expected: index.html, assets/, etc. present
- Step 3: Start development server
cd /home/cbldev/gitd/dilolabs/nosia-ai
bundle exec jekyll serve --livereload --baseurl ""
Expected: Server running at http://localhost:4000
- Step 4: Test in browser
Open: http://localhost:4000 Verify:
- Page loads without errors
- All sections visible (Hero, Features, Quick Start, Documentation, Community, Footer)
- Logo displays correctly
- Dark theme appears as designed
- Responsive on different screen sizes
- Navigation links work (smooth scroll)
- External links open in new tabs
- Code blocks display correctly
- Cards have hover effects
Task 14: Run Test Checklist
- Test 1: Page loads
- Open http://localhost:4000
- Expected: Page loads without errors
- Test 2: All sections render
- Scroll through page
- Expected: Hero, Description, Features (6), Quick Start, Documentation (6), Community (4), Footer all visible
- Test 3: Logo displays
- Check header and hero
- Expected: nosia-logo.png visible in both locations
- Test 4: Install commands copyable
- Try to select and copy install commands
- Expected: Text is selectable and copyable
- Test 5: Smooth scroll works
- Click “Documentation” in nav
- Expected: Smooth scroll to documentation section
- Test 6: Header collapses on scroll
- Scroll down
- Expected: Header reduces in size
- Test 7: Back to top button
- Scroll down past viewport height
- Expected: Button appears in bottom right
- Click button
- Expected: Smooth scroll to top
- Test 8: Responsive mobile
- Resize browser to < 768px
- Expected: Navigation hidden, single column layout
- Test 9: External links
- Click any external link (GitHub, Documentation, etc.)
- Expected: Opens in new tab
- Test 10: Footer links
- Click footer links
- Expected: All links work correctly
Phase 8: Deploy to GitHub Pages
Task 15: Push to GitHub
- Step 1: Create remote repository (if not exists)
On GitHub.com:
- Create new repository:
dilolabs/nosia-ai - Keep it public
-
Do NOT initialize with README, .gitignore, or license
- Step 2: Add remote and push
cd /home/cbldev/gitd/dilolabs/nosia-ai
git remote add origin git@github.com:dilolabs/nosia-ai.git
git branch -M main
git push -u origin main
Expected: All commits pushed to GitHub
- Step 3: Verify on GitHub
Open: https://github.com/dilolabs/nosia-ai Expected: All files visible in repository
Task 16: Enable GitHub Pages
- Step 1: Configure GitHub Pages
On GitHub.com:
- Go to repository Settings
- Navigate to Pages (left sidebar)
- Under “Source”, select:
Deploy from a branch - Branch:
main - Folder:
/ (root) - Click Save
- Step 2: Configure custom domain
On GitHub.com:
- In Pages settings, enter
nosia.aiunder Custom domain - Click Save
- Wait for DNS verification (may take a few minutes)
- Step 3: Configure DNS
With your DNS provider:
- Add CNAME record:
nosia.ai→dilolabs.github.io - OR add A records:
185.199.108.153185.199.109.153185.199.110.153185.199.111.153
- Step 4: Verify deployment
Open: https://nosia.ai Expected: Site loads successfully (may take 1-2 minutes for first deployment)
Task 17: Post-Deployment Verification
- Step 1: Check HTTPS
- Open: https://nosia.ai
- Expected: Secure connection, no warnings
- Step 2: Verify all links
- Test every link on the page
- Expected: All links work correctly
- Step 3: Check mobile
- Open on mobile device or use browser dev tools
- Expected: Responsive design works correctly
- Step 4: Check SEO
- Use https://socialsharepreview.com/
- Enter: https://nosia.ai
- Expected: Correct title, description, and image preview
- Step 5: Check 404 page
- Open: https://nosia.ai/nonexistent
- Expected: Custom 404 page displays
Final Commit Structure
After all tasks are complete, the repository should have the following commit history:
1daef07 docs: add Nosia.ai landing page design specification
<commit> setup: add gitignore and CNAME for GitHub Pages
<commit> config: add Jekyll configuration files
<commit> setup: create directory structure
<commit> layout: add default HTML layout
<commit> include: add head.html with metadata and favicons
<commit> include: add header.html with logo and navigation
<commit> styles: add complete CSS with dark theme and responsive design
<commit> content: add index.md with all page sections and JavaScript
<commit> content: add custom 404 error page
<commit> assets: add favicon images
<commit> ci: add GitHub Pages deployment workflow
Rollback Plan
If issues occur during deployment:
- Build fails on GitHub Pages:
- Check GitHub Actions logs
- Test locally:
bundle exec jekyll build - Fix any dependency or syntax errors
- Push fixes to main branch
- DNS not resolving:
- Verify CNAME record exists and is correct
- Check TTL (should be low for testing)
- Wait up to 48 hours for propagation
- Use https://dnschecker.org/ to verify
- HTTPS not working:
- GitHub Pages automatically provisions HTTPS
- Wait 10-15 minutes after DNS configuration
- Check GitHub Pages settings for custom domain
- Content errors:
- Fix in local development
- Test with
bundle exec jekyll serve - Push changes to main branch
- GitHub Pages will auto-redeploy
Success Criteria
The implementation is considered complete when:
- Repository
dilolabs/nosia-aiexists on GitHub - GitHub Pages enabled with custom domain
nosia.ai - Site loads at https://nosia.ai without errors
- All 8 content sections are present and correctly styled
- Dark theme is applied consistently
- Responsive design works on mobile, tablet, and desktop
- All links (internal and external) work correctly
- Smooth scroll navigation works
- Header collapses on scroll
- Back to top button appears and works
- Custom 404 page displays for missing pages
- SEO meta tags are present
- Favicon displays correctly
- Page loads in under 2 seconds
Two Execution Options
Plan complete and saved to /home/cbldev/gitd/dilolabs/nosia-ai/docs/superpowers/plans/2026-06-17-nosia-ai-landing-page-implementation.md
Two execution options:
1. Subagent-Driven (recommended) - I dispatch a fresh subagent per task, review between tasks, fast iteration
2. Inline Execution - Execute tasks in this session using executing-plans, batch execution with checkpoints
Which approach?