feat: unify docs portal and MCP servers into one config-driven service

- add config.yml as single source of truth for collected repos/categories
- add collect.py CLI to pull lib/api/wiki site builds and mcp bundles from
  source repos and regenerate nginx.conf + _index/index.html
- port mcp runtime (main.py/core.py/config.py): nginx + health + FastMCP
  servers started from config.yml
- docker: python:3.13-slim + nginx, expose 8000-8006 + 9000 (html portal)
- drone: publish html (6007:9000) and MCP ports 8000-8006
- move mongo-ops docs to wiki/, add auth-server (api) and hexa (lib)
- refresh lib site builds (lib/ prefix) and collect mcp bundles
This commit is contained in:
2026-09-11 15:14:51 +05:30
parent 0e49f02c4c
commit 0c25cbb19f
609 changed files with 175303 additions and 4274 deletions

View File

@@ -16,202 +16,136 @@
--font-main: 'Inter', 'Roboto', sans-serif;
--font-code: 'JetBrains Mono', monospace;
}
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
* { margin:0; padding:0; box-sizing:border-box; }
body {
background: var(--bg);
color: var(--text);
font-family: var(--font-main);
min-height: 100vh;
display: flex;
flex-direction: column;
align-items: center;
justify-content: flex-start;
padding: 3rem 1.5rem;
background:var(--bg); color:var(--text); font-family:var(--font-main);
min-height:100vh; display:flex; flex-direction:column;
align-items:center; justify-content:flex-start; padding:3rem 1.5rem;
}
header {
text-align: center;
margin-bottom: 3rem;
header { text-align:center; margin-bottom:3rem; }
h1 { font-size:2.5rem; color:var(--accent); letter-spacing:0.5px; margin-bottom:0.5rem; }
.subtitle { color:var(--muted); font-size:1rem; }
.badge {
display:inline-block; margin-top:0.8rem; background:#30363d; color:#fff;
padding:3px 8px; border-radius:6px; font-size:0.85rem; font-weight:600;
border:1px solid #484f58;
}
h1 {
font-size: 2.5rem;
color: var(--accent);
letter-spacing: 0.5px;
margin-bottom: 0.5rem;
.section { width:100%; max-width:900px; margin-bottom:2.5rem; }
.section h2 {
font-size:1.2rem; color:var(--muted); text-transform:uppercase;
letter-spacing:1.5px; margin-bottom:1rem; border-bottom:1px solid var(--border);
padding-bottom:0.4rem;
}
p {
color: var(--muted);
font-size: 1rem;
margin-bottom: 0.5rem;
}
.grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
gap: 1.5rem;
width: 100%;
max-width: 900px;
display:grid; grid-template-columns:repeat(auto-fit,minmax(280px,1fr));
gap:1.5rem; width:100%;
}
.card {
background: var(--card);
border: 1px solid var(--border);
border-radius: 12px;
padding: 1.8rem;
text-align: left;
transition: transform 0.15s ease, box-shadow 0.15s ease;
background:var(--card); border:1px solid var(--border); border-radius:12px;
padding:1.8rem; text-align:left;
transition:transform 0.15s ease,box-shadow 0.15s ease;
}
.card:hover {
transform: translateY(-4px);
box-shadow: 0 0 20px rgba(45, 212, 191, 0.2);
border-color: var(--accent);
transform:translateY(-4px); box-shadow:0 0 20px rgba(45,212,191,0.2);
border-color:var(--accent);
}
.card h2 {
color: var(--accent);
font-size: 1.4rem;
margin-bottom: 0.4rem;
}
.card p {
color: var(--muted);
font-size: 0.95rem;
line-height: 1.6;
}
.card h3 { color:var(--accent); font-size:1.4rem; margin-bottom:0.4rem; }
.card p { color:var(--muted); font-size:0.95rem; line-height:1.6; }
.card a {
color: var(--accent);
text-decoration: none;
display: inline-block;
margin-top: 0.8rem;
font-weight: 500;
}
.card a:hover {
color: var(--accent-dim);
text-decoration: underline;
}
footer {
margin-top: 4rem;
text-align: center;
color: var(--muted);
font-size: 0.9rem;
color:var(--accent); text-decoration:none; display:inline-block;
margin-top:0.8rem; font-weight:500;
}
.card a:hover { color:var(--accent-dim); text-decoration:underline; }
footer { margin-top:4rem; text-align:center; color:var(--muted); font-size:0.9rem; }
</style>
</head>
<body>
<header>
<h1>Aetoskia Developer Docs</h1>
<p>Central documentation hub for Aetoskia projects</p>
<span style="
background: #30363d;
color: #fff;
padding: 3px 8px;
border-radius: 6px;
font-size: 0.85rem;
font-weight: 600;
border: 1px solid #484f58;
">
Build: 0.1.8
</span>
<p class="subtitle">Central documentation hub for Aetoskia projects</p>
</header>
<div class="grid">
<div class="card">
<h2>Mongo Ops</h2>
<p>
A modular, async MongoDB operations layer for FastAPI microservices.
Simplifies CRUD, transactions, and model management.
</p>
<a href="/libs/mongo-ops/" target="_blank">View Documentation →</a>
</div>
<div class="card">
<h2>Blog API</h2>
<p>
A modular, async Blog API backend for FastAPI microservices.
Provides streamlined CRUD operations for articles and authors, supports nested author details within article endpoints, and enables simple association management between content and contributors.
</p>
<a href="/apis/blog/" target="_blank">View Documentation →</a>
</div>
<div class="card">
<h2>Media Manager Tutorial</h2>
<p>
Step-by-step guide to the Media Manager architecture, ingestion pipeline,
automation workflows, and integration with Radarr, Sonarr, and your custom
dashboard services.
</p>
<a href="/tutorials/media-manager/" target="_blank">View Tutorial →</a>
</div>
<div class="card">
<h2>Doc Forge</h2>
<p>
Renderer-agnostic Python documentation compiler powering MkDocs and MCP
generation across Aetoskia projects.
</p>
<a href="/libs/doc-forge/" target="_blank">View Documentation →</a>
</div>
<div class="card">
<h2>DAG Pipe</h2>
<p>
Deterministic pipeline framework for executing state transformations through a directed acyclic graph (DAG).
Each node receives an immutable state and emits derived states for downstream processing.
</p>
<a href="/libs/dagpipe/" target="_blank">View Documentation →</a>
</div>
<div class="card">
<h2>Mail Intake</h2>
<p>
High-performance email ingestion and processing framework with pluggable
adapters and automation workflows.
</p>
<a href="/libs/mail-intake/" target="_blank">View Documentation →</a>
</div>
<div class="card">
<h2>Omniread</h2>
<p>
Unified ingestion and normalization layer for structured and unstructured
data sources.
</p>
<a href="/libs/omniread/" target="_blank">View Documentation →</a>
</div>
<div class="card">
<h2>OpenAPI First</h2>
<p>
Design-first API development toolkit enforcing OpenAPI contracts as the
single source of truth.
</p>
<a href="/libs/openapi-first/" target="_blank">View Documentation →</a>
</div>
<div class="card">
<h2>Py JWT</h2>
<p>
Lightweight, explicit JWT utilities for Python services with strong
validation and minimal magic.
</p>
<a href="/libs/py-jwt/" target="_blank">View Documentation →</a>
</div>
<section class="section">
<h2>Libraries</h2>
<div class="grid">
<div class="card">
<h3>OpenAPI First</h3>
<p>Design-first API development toolkit enforcing OpenAPI contracts as the single source of truth.</p>
<a href="/libs/openapi-first/" target="_blank">View Documentation &rarr;</a>
</div>
<div class="card">
<h3>Doc Forge</h3>
<p>Renderer-agnostic Python documentation compiler powering MkDocs and MCP generation across Aetoskia projects.</p>
<a href="/libs/doc-forge/" target="_blank">View Documentation &rarr;</a>
</div>
<div class="card">
<h3>DAG Pipe</h3>
<p>Deterministic pipeline framework for executing state transformations through a directed acyclic graph (DAG).</p>
<a href="/libs/dagpipe/" target="_blank">View Documentation &rarr;</a>
</div>
<div class="card">
<h3>Mail Intake</h3>
<p>High-performance email ingestion and processing framework with pluggable adapters and automation workflows.</p>
<a href="/libs/mail-intake/" target="_blank">View Documentation &rarr;</a>
</div>
<div class="card">
<h3>Omniread</h3>
<p>Unified ingestion and normalization layer for structured and unstructured data sources.</p>
<a href="/libs/omniread/" target="_blank">View Documentation &rarr;</a>
</div>
<div class="card">
<h3>Py JWT</h3>
<p>Lightweight, explicit JWT utilities for Python services with strong validation and minimal magic.</p>
<a href="/libs/py-jwt/" target="_blank">View Documentation &rarr;</a>
</div>
<div class="card">
<h3>Hexa</h3>
<p>Hexagonal architecture framework and toolbox for Python services.</p>
<a href="/libs/hexa/" target="_blank">View Documentation &rarr;</a>
</div>
</div>
</section>
<section class="section">
<h2>APIs</h2>
<div class="grid">
<div class="card">
<h3>Auth Server</h3>
<p>Aetoskia authentication service. OpenAPI-driven, FastAPI backend for auth flows.</p>
<a href="/apis/auth-server/" target="_blank">View Documentation &rarr;</a>
</div>
<div class="card">
<h3>Blog API</h3>
<p>A modular, async Blog API backend for FastAPI microservices. Provides streamlined CRUD operations for articles and authors.</p>
<a href="/apis/blog/" target="_blank">View Documentation &rarr;</a>
</div>
</div>
</section>
<section class="section">
<h2>Wiki</h2>
<div class="grid">
<div class="card">
<h3>Mongo Ops</h3>
<p>A modular, async MongoDB operations layer for FastAPI microservices. Simplifies CRUD, transactions, and model management.</p>
<a href="/wiki/mongo-ops/" target="_blank">View Documentation &rarr;</a>
</div>
</div>
</section>
<section class="section">
<h2>Tutorials</h2>
<div class="grid">
<div class="card">
<h3>Media Manager Tutorial</h3>
<p>Step-by-step guide to the Media Manager architecture, ingestion pipeline, automation workflows, and integrations.</p>
<a href="/tutorials/media-manager/" target="_blank">View Tutorial &rarr;</a>
</div>
</div>
</section>
<footer>
© 2025 Aetoskia Developer Network — Built with ❤️ on Raspberry Pi
&copy; 2025 Aetoskia Developer Network
</footer>
</body>
</html>
</html>