How the Tawa platform is built, what each service does, and why they are separate.
Tawa is a deployment platform made up of six core services. Each one owns a single responsibility and communicates with the others over internal APIs. No service shares a database with another.
graph TD
Dev["Developer"] -->|tawa deploy| Builder
Builder --> Koko["Koko (registry)"]
Koko --> Janus["Janus (gateway)"]
Janus --> Service["Your Service"]
Janus --> BioID["Bio-ID (identity)"]
Builder --> Wallet["Wallet (gas gate)"]
Builder --> CF["Cloudflare (DNS)"]
The build pipeline. When you run tawa deploy, the builder clones your repo, generates a Dockerfile (if needed), builds and pushes the image, then orchestrates the full deploy: database provisioning, OAuth setup, Helm deploy, Koko registration, DNS configuration.
| Detail | Value |
|---|---|
| URL | builder.tawa.insureco.io |
| Owns | Build records, deploy logs, managed secrets |
| Talks to | Koko, Wallet, Bio-ID, Cloudflare, K8s API |
The service registry, configuration store, and database proxy. Every deployed service is registered in Koko with its upstream URL, routes, health endpoint, and metadata. Janus reads from Koko to know how to route traffic.
| Detail | Value |
|---|---|
| URL | Internal only (cluster DNS) |
| Owns | Service registry, config, feature flags, domain bindings |
| Talks to | MongoDB, Redis (pub/sub to Janus) |
The API gateway. All external API traffic enters through Janus, which handles authentication enforcement, request routing, and gas metering.
| Detail | Value |
|---|---|
| URL | api.tawa.insureco.io |
| Owns | Gas metering events, request logs |
| Talks to | Koko (routes), Bio-ID (token verification), Wallet (gas charges) |
The identity provider. Handles user registration, login, OAuth2 flows, MFA, and session management. Every service gets an OAuth client auto-provisioned on deploy.
| Detail | Value |
|---|---|
| URL | bio.tawa.insureco.io |
| Owns | User identities, OAuth clients, sessions, MFA secrets |
| Talks to | MongoDB (user data), Redis (sessions) |
The token economy. Every org has a wallet with a gas balance. The builder checks the wallet before each deploy (the "deploy gate") to ensure 3 months of hosting reserve.
| Detail | Value |
|---|---|
| URL | iec-wallet.tawa.insureco.io |
| Owns | Wallet balances, gas ledger, token purchases |
| Talks to | MongoDB (ledger) |
The platform console. The developer portal, docs, PlugINS store, and service dashboard. It reads from other services but owns no platform state — if tawa-web goes down, deploys and routing still work.
When you run tawa deploy --prod:
catalog-info.yaml, generates a Dockerfile if neededEvery step is idempotent — deploying again updates, never creates duplicates.
User → Cloudflare → NGINX Ingress → Your Service Pod
Your service gets its own subdomain (my-svc.tawa.insureco.io) and Cloudflare routes directly to the cluster ingress.
Client → api.tawa.insureco.io → Janus → Your Service Pod
(auth, gas metering)
If your catalog-info.yaml defines routes with auth: required, those routes go through Janus for token verification and gas metering.
| Environment | Namespace | URL | Purpose |
|---|---|---|---|
| Sandbox | my-svc-sandbox | my-svc.sandbox.tawa.insureco.io | Development and testing |
| UAT | my-svc-uat | my-svc.uat.tawa.insureco.io | User acceptance testing |
| Production | my-svc-prod | my-svc.tawa.insureco.io | Live traffic |
catalog-info.yaml and your framework. No Dockerfiles, Helm charts, or K8s manifests needed.Last updated: February 28, 2026