// Guide users through designing application architectures from scratch for SaaS deployment on Omnistrate. Focuses on technology selection, domain-specific architecture patterns, compliance and SLA requirements, and iterative compose spec development. The output is a production-ready compose spec that can be handed off to the FDE skill for Omnistrate-native onboarding.
| name | Omnistrate Solutions Architect |
| description | Guide users through designing application architectures from scratch for SaaS deployment on Omnistrate. Focuses on technology selection, domain-specific architecture patterns, compliance and SLA requirements, and iterative compose spec development. The output is a production-ready compose spec that can be handed off to the FDE skill for Omnistrate-native onboarding. |
Use this skill when:
build: contexts that only runs locallyDo NOT use this skill when:
image: references (no build: contexts) AND images are accessible in registries โ Use FDE skill insteadSA Skill FDE Skill SRE Skill
โโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโ
โ Design app from โ โ โ Transform composeโ โ โ Debug failed โ
โ scratch โ โ to Omnistrate โ โ deployments โ
โ โ โ native โ โ โ
โ โข Tech choices โ โ โข x-omnistrate-* โ โ โข Workflows โ
โ โข Architecture โ โ extensions โ โ โข Logs โ
โ โข Compose spec โ โ โข API params โ โ โข kubectl โ
โ โข Domain needs โ โ โข Service plans โ โ โ
โโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโ
This skill Handoff to FDE If issues arise
Output: A vanilla Docker Compose spec optimized for Omnistrate's capabilities (tenancy, deployment models, scaling) but WITHOUT x-omnistrate-* extensions yet.
As a Solutions Architect, you will:
Ask clarifying questions to understand the user's needs:
Based on requirements, recommend appropriate technology stack.
API/Web Services:
Considerations:
Relational (ACID, structured data):
Document/NoSQL:
Time-Series:
Graph:
Selection criteria:
In-Memory Cache:
Use cases:
Message Queues:
Use cases:
Object Storage:
File Storage:
Use cases:
Design the service architecture based on domain patterns.
Domain: REST APIs, microservices, webhooks
Internet โ API Server โ Database
โ
Cache (optional)
Components:
Tenancy considerations:
Domain: SaaS apps, dashboards, admin panels
Internet โ Load Balancer โ Web Tier (static) โ App Tier (API) โ Database
โ
Cache
Components:
Tenancy considerations:
Domain: ETL, analytics, data warehousing
Data Sources โ Ingestion API โ Message Queue โ Workers โ Database/Data Warehouse
โ
Object Storage
Components:
Tenancy considerations:
Domain: Model serving, inference APIs, ML platforms
Internet โ API Gateway โ Inference Service (GPU) โ Model Storage (S3)
โ
Result Database
Components:
Tenancy considerations:
Domain: Dashboards, metrics, monitoring
Events โ Stream Processor โ Time-Series DB โ Query API โ Visualization
โ
Object Storage (archives)
Components:
Tenancy considerations:
Design for Omnistrate's deployment models from the start.
Architecture:
Design decisions:
Best for: Startups, mid-market, most B2B SaaS
Architecture:
Design decisions:
Best for: Enterprise customers, data sovereignty, regulated industries
Architecture:
Design decisions:
Best for: Government, defense, ultra-secure environments
Architecture:
Design decisions:
Best for: Legacy enterprises, air-gapped environments
Support multiple deployment models in same architecture:
# Same compose spec, different plans
services:
app:
image: myapp:latest
# Works for SaaS, BYOC, On-Premise
Design principles:
Omnistrate supports multiple tenancy models - design for flexibility.
Architecture: Single infrastructure, logical isolation
Customer A โโ
Customer B โโคโ Shared App โ Shared DB (tenant_id partitioning)
Customer C โโ
Pros:
Cons:
Best for: Freemium, small/medium customers, standardized offerings
Compose design:
Architecture: Dedicated infrastructure per tenant
Customer A โ App A โ DB A
Customer B โ App B โ DB B
Customer C โ App C โ DB C
Pros:
Cons:
Best for: Enterprise, regulated industries, high-value customers
Compose design:
Architecture: Shared app tier, isolated data tier
Customer A โโ
Customer B โโคโ Shared App โ DB A, DB B, DB C (dedicated)
Customer C โโ
Pros:
Cons:
Best for: Mixed customer base (SMB + Enterprise)
Compose design:
Design for compliance requirements from the start.
Requirements:
Compose decisions:
Requirements:
Compose decisions:
Requirements:
Compose decisions:
Requirements:
Compose decisions:
Design for target SLA from the start.
Architecture:
Compose design:
Architecture:
Compose design:
Architecture:
Compose design:
Architecture:
Compose design:
Build the Docker Compose spec iteratively - start simple, validate, add complexity.
Goal: Get basic architecture working
version: '3.8'
services:
app:
image: mycompany/api:latest
ports:
- "8080:8080"
environment:
- DATABASE_URL=postgresql://postgres:password@database:5432/app
depends_on:
- database
database:
image: postgres:15
environment:
- POSTGRES_PASSWORD=password
- POSTGRES_DB=app
volumes:
- db_data:/var/lib/postgresql/data
volumes:
db_data:
Validate:
docker-compose up locallyGoal: Add performance and reliability layers
services:
app:
image: mycompany/api:latest
environment:
- DATABASE_URL=postgresql://postgres:password@database:5432/app
- REDIS_URL=redis://cache:6379
depends_on:
- database
- cache
cache:
image: redis:7-alpine
command: redis-server --maxmemory 256mb --maxmemory-policy allkeys-lru
database:
image: postgres:15
environment:
- POSTGRES_PASSWORD=password
- POSTGRES_DB=app
volumes:
- db_data:/var/lib/postgresql/data
Validate:
Goal: Production-grade reliability
services:
app:
image: mycompany/api:latest
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8080/health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
environment:
- DATABASE_URL=postgresql://postgres:password@database:5432/app
- REDIS_URL=redis://cache:6379
depends_on:
database:
condition: service_healthy
cache:
condition: service_started
database:
image: postgres:15
healthcheck:
test: ["CMD-SHELL", "pg_isready -U postgres"]
interval: 10s
timeout: 5s
retries: 5
Validate:
Goal: Microservices architecture
services:
web:
image: nginx:alpine
ports:
- "80:80"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf:ro
depends_on:
- api
api:
image: mycompany/api:latest
environment:
- DATABASE_URL=postgresql://postgres:password@database:5432/app
- REDIS_URL=redis://cache:6379
- WORKER_URL=http://worker:8081
depends_on:
- database
- cache
worker:
image: mycompany/worker:latest
environment:
- DATABASE_URL=postgresql://postgres:password@database:5432/app
- REDIS_URL=redis://cache:6379
depends_on:
- database
- cache
database:
image: postgres:15
volumes:
- db_data:/var/lib/postgresql/data
cache:
image: redis:7-alpine
Validate:
Goal: Prepare for Omnistrate's multi-tenancy
services:
app:
image: mycompany/api:${APP_VERSION:-latest}
environment:
- DATABASE_URL=postgresql://${DB_USER:-postgres}:${DB_PASSWORD}@database:5432/${DB_NAME:-app}
- REDIS_URL=redis://cache:6379
- LOG_LEVEL=${LOG_LEVEL:-info}
- MAX_CONNECTIONS=${MAX_CONNECTIONS:-100}
depends_on:
- database
- cache
database:
image: postgres:${POSTGRES_VERSION:-15}
environment:
- POSTGRES_PASSWORD=${DB_PASSWORD}
- POSTGRES_DB=${DB_NAME:-app}
- POSTGRES_USER=${DB_USER:-postgres}
volumes:
- db_data:/var/lib/postgresql/data
cache:
image: redis:7-alpine
command: redis-server --maxmemory ${CACHE_SIZE:-256mb} --maxmemory-policy allkeys-lru
Validate:
.env file supportGoal: Ensure all services have image references (not build contexts)
Check for build contexts:
services:
app:
build: ./app # โ Won't work on Omnistrate
# OR
build:
context: ./backend
dockerfile: Dockerfile # โ Won't work on Omnistrate
If build contexts exist, you MUST work with customer to convert them:
Build and push images to a registry:
# Option 1: Docker Hub
docker build -t mycompany/api:v1.0.0 ./app
docker push mycompany/api:v1.0.0
# Option 2: GitHub Container Registry
docker build -t ghcr.io/mycompany/api:v1.0.0 ./app
docker push ghcr.io/mycompany/api:v1.0.0
# Option 3: Private registry
docker build -t registry.company.com/api:v1.0.0 ./app
docker push registry.company.com/api:v1.0.0
Replace build context with image reference:
services:
app:
image: mycompany/api:v1.0.0 # โ
Now cloud-deployable
# build: ./app # Remove this
Add registry authentication (if using private registry):
Work with customer to create Omnistrate secrets in Dev and Prod environments, then add to compose:
# Add at top level of compose file
x-omnistrate-image-registry-attributes:
docker.io:
auth:
username: mycompany
password: {{ $secret.DOCKERHUB_PASSWORD }}
ghcr.io:
auth:
username: {{ $secret.GITHUB_USERNAME }}
password: {{ $secret.GITHUB_TOKEN }}
registry.company.com:
auth:
username: {{ $secret.PRIVATE_REGISTRY_USERNAME }}
password: {{ $secret.PRIVATE_REGISTRY_PASSWORD }}
Customer must create secrets in Omnistrate:
DOCKERHUB_PASSWORD, GITHUB_TOKEN, etc.Validate: All services have image: field with registry reference
Goal: Guide Omnistrate resource allocation
services:
app:
image: mycompany/api:v1.0.0 # Must have image reference
deploy:
replicas: ${APP_REPLICAS:-2}
resources:
limits:
cpus: '2'
memory: 4G
reservations:
cpus: '1'
memory: 2G
environment:
- DATABASE_URL=postgresql://postgres:password@database:5432/app
database:
image: postgres:15
deploy:
resources:
limits:
cpus: '4'
memory: 8G
reservations:
cpus: '2'
memory: 4G
volumes:
- db_data:/var/lib/postgresql/data
volumes:
db_data:
driver: local
driver_opts:
type: none
device: /data/postgres
o: bind
Note: These are hints for FDE transformation, not strict Omnistrate syntax yet.
Critical: Omnistrate cannot build images from source. All services must have image: references to pre-built container images.
Check for build contexts:
grep -r "build:" docker-compose.yaml
If any service uses build: instead of image::
Identify all services with build contexts:
services:
api:
build: ./backend # โ Not supported by Omnistrate
worker:
build:
context: ./worker
dockerfile: Dockerfile # โ Not supported
Ask customer where to host images:
Question: "I see these services need container images: [list services with build contexts]. Where would you like to host these images?"
Options to present:
Guide customer to build and push images:
# Example: Docker Hub
docker build -t mycompany/api:v1.0.0 ./backend
docker push mycompany/api:v1.0.0
# Example: GitHub Container Registry
docker build -t ghcr.io/mycompany/worker:v1.0.0 ./worker
docker push ghcr.io/mycompany/worker:v1.0.0
Replace build contexts with image references in compose:
services:
api:
image: mycompany/api:v1.0.0 # โ
Now has registry reference
# build: ./backend # โ Remove build context entirely
worker:
image: ghcr.io/mycompany/worker:v1.0.0 # โ
Registry reference
# build: # โ Remove build section
# context: ./worker
# dockerfile: Dockerfile
Document registry information for FDE handoff:
Create a list for FDE skill:
mycompany/api:v1.0.0 (docker.io), ghcr.io/mycompany/worker:v1.0.0 (ghcr.io)nginx:alpine, postgres:15, redis:7-alpineDo NOT add x-omnistrate-image-registry-attributes - FDE skill will:
x-omnistrate-image-registry-attributes section to the compose fileValidate before moving to next phase:
image: field with valid registry referencebuild: contexts remain in compose fileWhile building the compose spec, consider Omnistrate features (even though you won't add x-omnistrate-* extensions yet).
Compose consideration: Make app tier stateless
services:
app:
# Stateless - no local file storage
# Session in Redis, not in-memory
image: mycompany/api:latest
depends_on:
- cache # For session storage
Compose consideration: Multiple replicas, load balancer ready
services:
app:
deploy:
replicas: 3 # Spread across zones later
Compose consideration: Clear volume paths
services:
database:
volumes:
- db_data:/var/lib/postgresql/data # FDE will add backup config here
Compose consideration: Metrics endpoints, structured logging
services:
app:
environment:
- METRICS_PORT=9090 # Prometheus endpoint
- LOG_FORMAT=json # Structured logs
Compose consideration: Tenant ID in requests
services:
app:
environment:
- TENANT_HEADER=X-Tenant-ID # Header-based routing
Once the compose spec is validated and working, prepare for FDE handoff.
docker-compose upimage: references (no build: contexts remain)Provide to FDE skill:
x-omnistrate-image-registry-attributes - FDE will add if needed)mycompany/api:v1.0.0, ghcr.io/myorg/worker:v1.0.0)Ready for Omnistrate onboarding. Here's the summary:
Architecture: Three-tier web app (NGINX โ API โ PostgreSQL + Redis)
Tenancy: Hybrid (shared API, isolated databases for enterprise)
Deployment models: SaaS (starter/pro), BYOC (enterprise)
Compliance: SOC2, GDPR data residency
SLA: 99.95% (multi-zone)
Container Images:
Custom images (customer pushed):
- API: company/api:v1.0.0 (docker.io registry)
- Worker: company/worker:v1.0.0 (docker.io registry)
Public images (no auth needed):
- NGINX: nginx:alpine
- PostgreSQL: postgres:15
- Redis: redis:7-alpine
Registry Info:
- docker.io used for custom images (FDE will test if authentication needed)
Service plans:
- Starter: 1 API replica, 20GB DB, no backups
- Pro: 3 API replicas, 100GB DB, daily backups, autoscaling
- Enterprise: Custom sizing, BYOC option, multi-region
Compose spec attached with x-omnistrate-image-registry-attributes configured.
Ready for FDE transformation.
Key decisions:
Compose architecture:
services:
api:
image: fastapi-app
inference:
image: pytorch-gpu:latest
# FDE will map to GPU instance types
model-storage:
# S3 bucket (external, not in compose)
Key decisions:
Compose architecture:
services:
query-api:
image: query-engine
workers:
image: spark-workers
metadata-db:
image: postgres
Key decisions:
Compose architecture:
services:
gateway:
image: kong
api-v1:
image: api:v1
api-v2:
image: api:v2
Key decisions:
Compose architecture:
services:
primary:
image: postgres:15
replica:
image: postgres:15
pooler:
image: pgbouncer
1. Discovery โ 2. Tech Selection โ 3. Simple Compose โ 4. Validate
โ
Issues? โ Refine
โ
No issues
โ
5. Add Complexity โ 6. Validate โ 7. Image Registry Setup โ 8. Omnistrate-Aware Adjustments
โ
Issues? โ Refine
โ
No issues
โ
9. Document โ 10. Handoff to FDE
Key principle: Validate at each step before adding complexity.
docker-compose up works)image: references (no build: contexts)See SOLUTIONS_ARCHITECT_REFERENCE.md for: