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:
@@ -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 →</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 →</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 →</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 →</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 →</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 →</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 →</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 →</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 →</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 →</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 →</a>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<footer>
|
||||
© 2025 Aetoskia Developer Network — Built with ❤️ on Raspberry Pi
|
||||
© 2025 Aetoskia Developer Network
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
||||
</html>
|
||||
Reference in New Issue
Block a user