docs: add architecture and veins documentation
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful

- System overview, artery hierarchy, build flow, room config diagrams
- Veins docs: Jira, Slack, Google OAuth
- Shunts docs: MercadoPago mock
- DOT source files with generated SVGs
- HTML viewers with navigation and full-screen mode

Solves:
- Freelance work standardization
- Missing infrastructure replication (shunts)
- Reliable testing environment (BDD -> Gherkin -> Tests)
This commit is contained in:
buenosairesam
2026-01-02 22:09:13 -03:00
parent 05e7ead081
commit 22356fed66
22 changed files with 2887 additions and 0 deletions

View File

@@ -0,0 +1,206 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Soleprint - Architecture</title>
<link rel="stylesheet" href="styles.css" />
</head>
<body>
<header>
<h1>Soleprint</h1>
<p class="subtitle">Cada paso deja huella / Each step leaves a mark</p>
</header>
<main>
<!-- What it solves -->
<section class="findings-section">
<h2>What Soleprint Solves</h2>
<div class="findings-grid">
<article class="finding-card">
<h3>Freelance Work Standardization</h3>
<p>Generalizing and homogenizing freelance work across projects. Instead of setting up different environments, testing approaches, and connector patterns for each client, Soleprint provides a consistent framework. Build once, reuse everywhere.</p>
</article>
<article class="finding-card">
<h3>Missing Infrastructure Replication</h3>
<p>When working with large corps where you can't access their Jira, Slack, payment systems, or internal APIs directly - Soleprint's shunts let you mock those systems locally. Test against fake MercadoPago, fake Jira tickets, fake webhooks without needing real credentials.</p>
</article>
<article class="finding-card">
<h3>Reliable Testing Environment</h3>
<p>Figure out what tests to write by actually running flows in a controlled environment. BDD -> Gherkin -> Tests workflow. Instead of guessing what to test, you explore the actual behavior first, document it, then generate tests from that documentation.</p>
</article>
</div>
</section>
<!-- System Overview -->
<section class="graph-section" id="overview">
<div class="graph-header-row">
<h2>System Overview</h2>
<a href="graph.html?g=01-system-overview" class="view-btn">View Full</a>
</div>
<a href="graph.html?g=01-system-overview" class="graph-preview">
<img src="01-system-overview.svg" alt="System Overview" />
</a>
<div class="graph-details">
<p>The four systems that make up Soleprint.</p>
<h4>Systems</h4>
<ul>
<li><strong>Soleprint</strong>: Core coordinator hub (port 12000)</li>
<li><strong>Artery</strong>: Connectors to external services - "Todo lo vital"</li>
<li><strong>Atlas</strong>: Actionable documentation - "Documentacion accionable"</li>
<li><strong>Station</strong>: Tools and monitors - "Centro de control"</li>
</ul>
</div>
</section>
<!-- Artery Hierarchy -->
<section class="graph-section" id="artery">
<div class="graph-header-row">
<h2>Artery Hierarchy</h2>
<a href="graph.html?g=02-artery-hierarchy" class="view-btn">View Full</a>
</div>
<a href="graph.html?g=02-artery-hierarchy" class="graph-preview">
<img src="02-artery-hierarchy.svg" alt="Artery Hierarchy" />
</a>
<div class="graph-details">
<p>How connectors evolve from simple to complex.</p>
<h4>Connector Types</h4>
<table class="details-table">
<thead>
<tr>
<th>Type</th>
<th>Description</th>
<th>Example</th>
</tr>
</thead>
<tbody>
<tr>
<td>Vein</td>
<td>Stateless API connector</td>
<td>Jira, Slack, Google</td>
</tr>
<tr>
<td>Shunt</td>
<td>Fake connector for testing</td>
<td>MercadoPago mock</td>
</tr>
<tr>
<td>Pulse</td>
<td>Vein + Room + Depot</td>
<td>Jira for AMAR project</td>
</tr>
<tr>
<td>Plexus</td>
<td>Full app (backend + frontend + DB)</td>
<td>WhatsApp with chat UI</td>
</tr>
</tbody>
</table>
</div>
</section>
<!-- Build Flow -->
<section class="graph-section" id="build">
<div class="graph-header-row">
<h2>Build Flow</h2>
<a href="graph.html?g=03-build-flow" class="view-btn">View Full</a>
</div>
<a href="graph.html?g=03-build-flow" class="graph-preview">
<img src="03-build-flow.svg" alt="Build Flow" />
</a>
<div class="graph-details">
<p>How source is built into runnable instances.</p>
<h4>Commands</h4>
<table class="details-table">
<thead>
<tr>
<th>Command</th>
<th>Output</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>python build.py dev</code></td>
<td>gen/standalone/</td>
</tr>
<tr>
<td><code>python build.py dev --cfg amar</code></td>
<td>gen/amar/</td>
</tr>
<tr>
<td><code>python build.py dev --all</code></td>
<td>both</td>
</tr>
</tbody>
</table>
</div>
</section>
<!-- Room Config -->
<section class="graph-section" id="room">
<div class="graph-header-row">
<h2>Room Configuration</h2>
<a href="graph.html?g=04-room-config" class="view-btn">View Full</a>
</div>
<a href="graph.html?g=04-room-config" class="graph-preview">
<img src="04-room-config.svg" alt="Room Configuration" />
</a>
<div class="graph-details">
<p>How rooms are configured in cfg/.</p>
<h4>Room Structure</h4>
<ul>
<li><strong>config.json</strong>: Framework branding, terminology</li>
<li><strong>data/</strong>: veins.json, shunts.json, depots.json</li>
<li><strong>soleprint/</strong>: Docker config for this room</li>
<li><strong>databrowse/, tester/, monitors/, models/</strong>: Room-specific extensions</li>
</ul>
</div>
</section>
<!-- Tech Stack -->
<section class="tech-section">
<h2>Technology Stack</h2>
<div class="tech-grid">
<div class="tech-column">
<h3>Core</h3>
<ul>
<li>Python 3.11+</li>
<li>FastAPI</li>
<li>Jinja2</li>
</ul>
</div>
<div class="tech-column">
<h3>Tools</h3>
<ul>
<li>modelgen</li>
<li>tester (Playwright)</li>
<li>datagen</li>
<li>databrowse</li>
</ul>
</div>
<div class="tech-column">
<h3>Veins</h3>
<ul>
<li>Jira</li>
<li>Slack</li>
<li>Google (OAuth)</li>
</ul>
</div>
<div class="tech-column">
<h3>Infrastructure</h3>
<ul>
<li>Docker</li>
<li>Woodpecker CI</li>
<li>Nginx</li>
</ul>
</div>
</div>
</section>
</main>
<footer>
<p>Soleprint - Development Workflow Platform</p>
<p class="date">Generated: <time datetime="2025-01">January 2025</time></p>
</footer>
</body>
</html>