add fixture-invoicing example, sample-room wrap, kind cluster support

- examples/fixture-invoicing/: FastAPI + Vue + Postgres demo (4-entity invoice fixture)
- cfg/sample/: wraps the fixture (managed.repos points at examples/)
- ctrl/kind-{up,down,status}.sh + per-room k8s render in soleprint/ctrl/k8s/
- build.py: relative repo paths, resilient rmtree, optional k8s render hook
- cfg/.gitignore: stop ignoring sample/ and standalone/ template rooms

Manifests render cleanly but kind cluster has not been run end-to-end yet.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-04-29 05:30:52 -03:00
parent b886455431
commit 5f9cac1947
78 changed files with 3022 additions and 198 deletions

View File

@@ -1,15 +1,21 @@
# =============================================================================
# Sample Managed App - Environment Configuration
# sample room — Managed App (Fixture Invoicing)
# =============================================================================
# Copy this to cfg/<your-room>/<app-name>/.env and customize
# This room wraps examples/fixture-invoicing/ — a deliberate fixture, not a real app.
# =============================================================================
# DEPLOYMENT
# =============================================================================
DEPLOYMENT_NAME=sample
NETWORK_NAME=sample_network
# =============================================================================
# PORTS
# PORTS (host-exposed)
# =============================================================================
BACKEND_PORT=8120
FRONTEND_PORT=3120
DB_PORT=5532
# =============================================================================
# DATABASE (Postgres)
# =============================================================================
FRONTEND_PORT=3020
POSTGRES_DB=fixture
POSTGRES_USER=postgres
POSTGRES_PASSWORD=localdev123

View File

@@ -1,19 +0,0 @@
# Sample Mock Frontend
# Simple nginx serving static HTML
#
# For a real app, customize this with your actual services
services:
frontend:
image: nginx:alpine
container_name: ${DEPLOYMENT_NAME}_frontend
volumes:
- ./index.html:/usr/share/nginx/html/index.html:ro
ports:
- "${FRONTEND_PORT}:80"
networks:
- default
networks:
default:
name: ${NETWORK_NAME}

View File

@@ -1,102 +0,0 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Sample - Public Demo</title>
<style>
* {
box-sizing: border-box;
margin: 0;
padding: 0;
}
body {
font-family:
system-ui,
-apple-system,
sans-serif;
background: linear-gradient(135deg, #1e3a5f 0%, #0d1b2a 100%);
color: #e5e5e5;
min-height: 100vh;
display: flex;
align-items: center;
justify-content: center;
}
.container {
text-align: center;
padding: 2rem;
}
h1 {
font-size: 3rem;
margin-bottom: 1rem;
background: linear-gradient(135deg, #3a86ff, #8338ec);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
}
p {
font-size: 1.2rem;
color: #a3a3a3;
margin-bottom: 2rem;
}
.status {
display: inline-block;
padding: 0.5rem 1rem;
background: rgba(58, 134, 255, 0.2);
border: 1px solid #3a86ff;
border-radius: 4px;
color: #3a86ff;
font-size: 0.9rem;
}
.info {
margin-top: 3rem;
padding: 1.5rem;
background: rgba(255, 255, 255, 0.05);
border-radius: 8px;
max-width: 400px;
}
.info h3 {
color: #8338ec;
margin-bottom: 1rem;
}
.info ul {
list-style: none;
text-align: left;
}
.info li {
padding: 0.5rem 0;
border-bottom: 1px solid rgba(255, 255, 255, 0.1);
}
.info li:last-child {
border-bottom: none;
}
a {
color: #3a86ff;
}
</style>
</head>
<body>
<div class="container">
<h1>Sample</h1>
<p>Public demo - open to any Gmail account</p>
<span class="status">Public Demo</span>
<div class="info">
<h3>Soleprint Managed Room</h3>
<ul>
<li>
With sidebar:
<a href="https://sample.spr.mcrn.ar"
>sample.spr.mcrn.ar</a
>
</li>
<li>
Standalone:
<a href="https://sample.mcrn.ar">sample.mcrn.ar</a>
</li>
<li>Login with any Google account</li>
</ul>
</div>
</div>
</body>
</html>