Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
62 commits
Select commit Hold shift + click to select a range
e3504f4
Test: verify branching workflow
codec404 Feb 15, 2026
2dde83c
workflow changes
codec404 Feb 15, 2026
5f242ee
Merge branch 'master' into dev
codec404 Feb 15, 2026
f24f0c5
removed TEST
codec404 Feb 15, 2026
bc62dd5
Merge branch 'master' into dev
codec404 Feb 15, 2026
1fd5419
newer commits only
codec404 Feb 15, 2026
d21f620
Merge branch 'master' into dev
codec404 Feb 15, 2026
d8abe9f
Merge branch 'master' into dev
codec404 Feb 15, 2026
3209db8
Feature/cli
codec404 Feb 15, 2026
d19c8ff
added dist-service
codec404 Feb 16, 2026
f797835
Merge branch 'master' into dev
codec404 Feb 16, 2026
aaa329b
added the api service
codec404 Feb 17, 2026
ecd7012
fixed linters
codec404 Feb 17, 2026
dcd7995
Merge pull request #21 from codec404/feature/api-service
codec404 Feb 17, 2026
40b2fc7
Merge branch 'master' into dev
codec404 Feb 17, 2026
fb16141
added connector t b/w sdk and services
codec404 Feb 17, 2026
b77de24
tested version
codec404 Feb 18, 2026
c9615ae
Merge pull request #23 from codec404/feature/connector
codec404 Feb 18, 2026
c9f7a68
ignoring the protos
codec404 Feb 18, 2026
5b7a76d
ignoring the protos
codec404 Feb 18, 2026
a3adf65
Merge pull request #25 from codec404/fix/hide-proto
codec404 Feb 18, 2026
e66c553
added db migration
codec404 Feb 18, 2026
930e7d2
Merge pull request #26 from codec404/feat/migration
codec404 Feb 18, 2026
e87cc31
added validation service
codec404 Feb 18, 2026
ecef7a1
Merge pull request #27 from codec404/feat/validation-service
codec404 Feb 18, 2026
2820eeb
Merge branch 'master' into dev
codec404 Feb 18, 2026
b62039d
e2e handled
codec404 Feb 18, 2026
c9cf2e1
Merge pull request #28 from codec404/feat/e2e
codec404 Feb 18, 2026
d2c91a8
security fix
codec404 Feb 18, 2026
6a02c7c
Merge pull request #30 from codec404/fix/security
codec404 Feb 18, 2026
5df0f05
Merge branch 'master' into dev
codec404 Feb 18, 2026
3c081f6
cleanup
codec404 Feb 18, 2026
44b0bc1
Merge pull request #31 from codec404/emt/cleanup
codec404 Feb 18, 2026
e4069aa
Merge branch 'master' into dev
codec404 Feb 18, 2026
aa62d69
updated README
codec404 Feb 18, 2026
05b8229
Merge branch 'master' into dev
codec404 Feb 18, 2026
df160f1
reordered example config
codec404 Feb 22, 2026
aa730d9
Merge pull request #35 from codec404/reorder
codec404 Feb 22, 2026
9fc962d
Merge branch 'master' into dev
codec404 Feb 22, 2026
cfe632c
added persistent caching to disk
codec404 Feb 22, 2026
2131213
added persistent caching to disk
codec404 Feb 22, 2026
f5879d8
Merge pull request #37 from codec404/feat/cache-to-disk
codec404 Feb 22, 2026
06015dc
Merge branch 'master' into dev
codec404 Feb 22, 2026
f2c505e
Feat/rollout (#39)
codec404 Mar 12, 2026
b79cace
Merge branch 'master' into dev
codec404 Mar 12, 2026
06554f7
final product (#41)
codec404 Mar 13, 2026
4941c2b
added .env (#43)
codec404 Mar 13, 2026
8274831
deploying on gcp (#44)
codec404 Mar 14, 2026
a21ac44
Merge branch 'master' into dev
codec404 Mar 14, 2026
f620cd0
made some additions (#45)
codec404 Mar 14, 2026
334c0be
fixed make command conflict (#47)
codec404 Mar 14, 2026
c54cf3b
added caddy (#48)
codec404 Mar 14, 2026
1db0a00
Merge branch 'master' into dev
codec404 Mar 14, 2026
e6aea4b
made some fixes in rollouts (#49)
codec404 Mar 19, 2026
d5c5e10
Merge branch 'master' into dev
codec404 Mar 19, 2026
d546b2e
run pending db migrations in deploy (#51)
codec404 Mar 19, 2026
dfb080e
Merge branch 'master' into dev
codec404 Mar 19, 2026
d74868f
added new envs (#53)
codec404 Mar 28, 2026
a3039ad
Base Domain for FE
codec404 Mar 28, 2026
acac785
Merge branch 'master' into dev
codec404 Mar 28, 2026
d57964e
updated README (#56)
codec404 Mar 28, 2026
42bee96
Merge branch 'master' into dev
codec404 Apr 2, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
79 changes: 54 additions & 25 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,38 +24,47 @@ make cli
## Architecture

```
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ CLI (configctl) β”‚
β”‚ Go / gRPC β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
β”‚ :8081
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ API Service β”‚
β”‚ Upload/Rollout β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
β”‚ Kafka
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ β”‚ β”‚
β”Œβ”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”
β”‚ PostgreSQL β”‚ β”‚ Redis β”‚ β”‚Distributionβ”‚
β”‚ (config, β”‚ β”‚ (cache) β”‚ β”‚ Service β”‚
β”‚ rollouts) β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ :8082 β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”˜
β”‚ gRPC stream
β”Œβ”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”
β”‚ Client SDK β”‚
β”‚ (C++ lib) β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
```

### Services
Browser / CLI
β”‚
β”Œβ”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Caddy (TLS) β”‚
β”‚ example.com β†’ web-frontend (React) β”‚
β”‚ *.example.com β†’ web-frontend (org routing) β”‚
β”‚ /api /ws β†’ web-backend :8090 β”‚
β””β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
β”‚ HTTP/WS β”‚ gRPC
β”Œβ”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Web Backend β”‚ β”‚ C++ gRPC Services β”‚
β”‚ (Go :8090) │◄───────►│ api-service :8081 β”‚
β”‚ JWT + OTP β”‚ β”‚ dist-service :8082 β”‚
β”‚ Org mgmt β”‚ β”‚ val-service :8083 β”‚
β””β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
β”‚ β”‚ Kafka + PostgreSQL + Redis
β”Œβ”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”
β”‚ web-postgres β”‚ β”‚ PostgreSQL β”‚
β”‚ (auth DB) β”‚ β”‚ (config DB) β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
```

### Web Layer

| Component | Port | Description |
|-----------|------|-------------|
| **Caddy** | 80/443 | TLS termination, subdomain routing, reverse proxy |
| **Web Backend** | 8090 | Go HTTP/WebSocket gateway β€” auth, org management, proxies to gRPC |
| **Web Frontend** | β€” | React dashboard (served by Caddy from static build) |
| **web-postgres** | β€” | Isolated PostgreSQL for auth/session data (internal only) |

### Core Services

| Service | Port | Description |
|---------|------|-------------|
| **API Service** | 8081 | Config upload, retrieval, deletion, rollout management |
| **Distribution Service** | 8082 | Real-time config push to clients via gRPC streaming |
| **Validation Service** | 8083 | Config syntax/schema/rule validation (JSON & YAML) |

> **Note:** gRPC ports (8081–8083) are internal-only in production (`ports: []` in `docker-compose.prod.yml`). All external traffic goes through the web backend.

### Infrastructure

| Component | Port | Purpose |
Expand Down Expand Up @@ -239,13 +248,33 @@ Headers are in `include/configclient/`. Libraries are in `lib/` after `make sdk`

**Database credentials:** `configuser` / `configpass` / `configservice`

## Running the Web Dashboard

```bash
# Start everything (C++ services + web layer + Caddy)
docker compose up --build -d

# Or bring up only the web layer (assumes C++ services already running)
docker compose up --build -d caddy web-backend web-frontend web-postgres
```

For production use `docker-compose.prod.yml` which removes host exposure of internal gRPC ports:

```bash
docker compose -f docker-compose.yml -f docker-compose.prod.yml up -d
```

See [Web Backend README](../Konfig-Web-Backend/README.md) and [Web Frontend README](../Konfig-Web-Frontend/README.md) for configuration details.

## Documentation

- [CLI Reference](cmd/configctl/README.md) β€” all commands, flags, rollout strategies
- [Client SDK](src/client-sdk/README.md) β€” C++ SDK usage, heartbeat config, disk cache
- [API Service](src/api-service/README.md) β€” gRPC API, upload flow, components
- [Distribution Service](src/distribution-service/README.md) β€” streaming, rollout execution, heartbeat monitor
- [Validation Service](src/validation-service/README.md) β€” schema validation, rules
- [Web Backend](../Konfig-Web-Backend/README.md) β€” HTTP/WS gateway, auth, org management, all API routes
- [Web Frontend](../Konfig-Web-Frontend/README.md) β€” React dashboard, pages, env vars

## License

Expand Down
5 changes: 5 additions & 0 deletions docker-compose.prod.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,14 +21,19 @@ services:
restart: unless-stopped

# ── C++ Core ─────────────────────────────────────────────────────────────
# gRPC services are internal-only; no host port exposure in prod.
# They are reachable inside config-network (web-backend -> api-service:8081 etc.)

api-service:
ports: []
restart: unless-stopped

distribution-service:
ports: []
restart: unless-stopped

validation-service:
ports: []
restart: unless-stopped

# ── Infrastructure ───────────────────────────────────────────────────────
Expand Down
Loading