| AI2 AI Agent | `oop` | Natural language interface backed by Groq |
| Portal | `oop` | Next.js web frontend for the OOP platform |
| Portal | `oop` | Developer portal: web UI and its backend (login, OEG and AI2 proxy, API clients) |
---
@@ -44,6 +45,108 @@ ai2:
If the file is absent, `helm-deploy.sh` will warn and continue — AI2 deploys with an empty key.
PostgreSQL needs no entries: its passwords are generated on first install and kept in the
`postgres-credentials` Secret across upgrades. To pin a value instead, add it to the same file:
```yaml
postgresql:
auth:
postgresPassword:"<postgres-superuser-password>"
```
Read a generated value back with, for example:
```bash
kubectl -n oop get secret postgres-credentials -ojsonpath='{.data.postgres-password}' | base64-d
```
---
## PostgreSQL
A single shared instance (`charts/postgresql`) with one database and role per component. Not a replacement for a managed database or an operator such as CloudNativePG.
Pick the volume size and storage class (`postgresql.persistence`) before the first install: they
come from a StatefulSet claim template, which Kubernetes does not change in place.
Give a component a database: add an entry to `postgresql.databases`, read its password from
`postgres-credentials` → `<user>-password`, and let its pods through the NetworkPolicy by labelling
them `postgres-client: "true"` or adding a selector to `postgresql.networkPolicy.allowFrom`.
---
## Identity (Keycloak)
Keycloak (`charts/keycloak`) runs as a platform service in `oop`, backed by the shared PostgreSQL
(database `keycloak`). Two realms are imported on first start from