Production-shaped AI platforms you can stand up, exercise and tear down on a laptop.
Not a folder of demos — a small AI engineering firm's public showcase. Every architecture runs end-to-end on local cloud emulators (AWS on LocalStack, Azure on Azurite), a real vector database (Qdrant) and a local Kubernetes cluster — real cloud services, zero spend. The house style is deliberate: decisions over frameworks. Each platform is framed as a case study — problem → constraints → architecture → trade-offs → results — with an Architecture Decision Record trail, tests and one-command deploy.
The reference solutions
Each links to its own case study, architecture with diagrams, and ADR decision records.
| # | Platform | Runtime | What it demonstrates |
|---|
One shape, three clouds, three vector backends
The AWS platforms share one serverless, AWS-native shape and one small shared library
(shared/blueiberis).
The Azure and Qdrant platforms prove the engineering is cloud- and storage-agnostic, not AWS-only.
flowchart LR
subgraph Client
C[curl / SDK]
end
C --> APIGW[API Gateway REST]
APIGW --> L[Lambda]
L --> SFN[Step Functions]
L --> OS[(OpenSearch
hybrid search)]
L --> DDB[(DynamoDB
vectors · state · graph)]
L --> S3[(S3
documents)]
SFN --> L
L --> SQS[(SQS · EventBridge)]
L --> SM[(Secrets Manager)]
L --> CW[(CloudWatch
metrics · logs)]
One retrieval interface, three backends
The shared VectorStore abstraction is implemented over OpenSearch
(hybrid BM25 + kNN), DynamoDB (brute-force cosine) and Qdrant
(dedicated vector DB) — selectable with BLUEIBERIS_VECTOR_BACKEND, no
caller changes. Vector search appears in four guises: hybrid (P1), graph-seeded (P3), a Qdrant
server (P5/P6) and an embedded in-memory DB (P7).
Services exercised
Engineering decisions
Each is argued in full in the platform's docs/adr/. Decisions, not frameworks, are the product.
① The LLM is a deterministic offline mock
Both embeddings and (extractive, grounded) completions are pure Python — no network, no cost,
reproducible in CI. Platforms depend only on an LLMProvider interface
(shared/blueiberis/llm),
so swapping in a hosted model (Anthropic Claude, or Bedrock) is a one-class change
with no caller edits. The architecture, retrieval, orchestration and evaluation are real; only the
model's creative text is simulated.
② Serverless, not containers
The target LocalStack tier includes OpenSearch, Step Functions and Secrets Manager but not
ECS/RDS/Bedrock — so the AWS design is API Gateway → Lambda → Step Functions, a cleaner, more
portable demo. The same code runs against real AWS by dropping AWS_ENDPOINT_URL, and
against real Azure by setting AZURE_STORAGE_CONNECTION_STRING.
Quickstart
Prereqs: Docker, Python 3.10+, and a LocalStack Pro token.
# add LOCALSTACK_AUTH_TOKEN cp .env.example .env && $EDITOR .env make setup # venv + shared library make up # LocalStack + Azurite + Qdrant make deploy # provision + deploy all platforms make demo # end-to-end walkthroughs make test # full test suite (42 tests) make destroy # tear everything down
# needs kind + helm (brew install kind helm) make k8s-deploy # kind up + build + helm install make k8s-demo # AgentWorkflow → approve → remediate make k8s-down ARGS=--cluster # per-platform: make deploy-1 demo-1 … deploy-7 demo-7