Files
soleprint/docs/data/en/concepts.md
2026-04-14 10:32:05 -03:00

2.8 KiB

Concepts

The mental model behind soleprint.


Rooms

A room is an isolated configuration. Each room lives in cfg/<room>/ and contains everything soleprint needs to build and run a specific instance.

cfg/
  standalone/    # Soleprint only, no managed app
  amar/          # Soleprint wrapping the Amar application
  myroom/        # Your room

Rooms are independent. They don't share state. You can run multiple rooms simultaneously on different ports.

Systems

Three systems plug into the soleprint core:

  • Artery — data flow. Connectors to external services. Veins talk to real APIs. Shunts fake them for testing. Pulses compose a vein with a room and depot. Plexus is a full app stack.
  • Atlas — documentation. Books, templates, depots. Documentation that lives next to what it describes and stays actionable.
  • Station — execution. Tools like tester, datagen, modelgen, graphgen. Monitors like databrowse. Desks for task orchestration.

The cfg to gen Flow

cfg/ is hand-authored. gen/ is machine-built. Never edit gen/ directly.

cfg/myroom/  ──┐
               ├──  build.py  ──►  gen/myroom/
soleprint/   ──┘

build.py merges the core framework (soleprint/) with your room config (cfg/myroom/). Room-specific files override or extend core defaults. The output in gen/myroom/ is what actually runs.

Build Flow

Layers

Room initialization uses layers 0 through 6. Each layer adds a capability:

Layer What
0 Config — config.json, branding, terminology
1 Docker — container setup, compose files
2 Managed app — the application soleprint wraps
3 Link — bridge adapters to the managed app's database
4 Scripts — build and run scripts in ctrl/
5 Systems — artery, atlas, station configs
6 Nginx — reverse proxy, sidebar injection

Room Layers

Standalone vs Managed

Standalone — soleprint runs by itself. No managed app. Useful for tooling, documentation, or connector development.

Managed — soleprint wraps an existing application. Nginx sits in front of the app, injecting the sidebar into every HTML response. Link adapters bridge soleprint into the app's database.

The Wrapping Concept

Soleprint never touches your app's source code. The injection works like this:

  1. Nginx receives the app's HTML response
  2. sub_filter injects soleprint's CSS and JS before </head>
  3. The sidebar renders on top of the app's UI
  4. Link adapters connect to the app's database for data browsing and test data generation

The app doesn't know soleprint exists. No SDK. No middleware. No build step changes.

Your app runs exactly as it would without soleprint. The sidebar is a layer on top.