Current Architecture State
Current Architecture State
Overview
The Agile Network platform is built as a distributed microservice
architecture hosted on Google Kubernetes Engine (GKE), deployed via
ArgoCD (GitOps), and managed across ~191 repositories in the
favedom-dev GitHub organization.
The architecture spans two generations of services running
concurrently: - Gen 1 (“Peeq”): Java 11 / Spring Boot
2.6.8 — 107 peeq-* repos - Gen 2
(“VelocityZ”): Java 21 / Spring Boot 3.5.4 — non-prefixed
repos
Architecture Diagram
graph TB
subgraph "Frontends"
PM[peeq-mono<br/>Angular 18/Nx/Ionic]
FE[frontends<br/>Angular 14/Nx]
LP[landing-page]
end
subgraph "Identity"
KC[Keycloak<br/>OAuth2/OIDC]
KCT[Keycloak Themes<br/>celeb/fan/handler]
end
subgraph "Core Services (Gen 2)"
CEL[celebrity<br/>Java 21/SB 3.5]
FAN[fan<br/>Java 21/SB 3.5]
CON[content<br/>Java 21/SB 3.2]
BC[broadcast]
MSG[messages]
end
subgraph "Legacy Services (Gen 1)"
PC[peeq-celebrity<br/>Java 11/SB 2.6]
PF[peeq-fan<br/>Java 11/SB 2.6]
PB[peeq-broadcast<br/>Java 11/SB 2.6]
PS[peeq-stripe<br/>Java 11/SB 2.6]
PW[peeq-wallet<br/>Java 11/SB 2.6]
PE[peeq-email<br/>Java 11/SB 2.6]
end
subgraph "BPM Engine"
CAM[CIB Seven/Camunda]
BPM1[broadcast-bpm]
BPM2[shoutout-bpm]
BPM3[meet-greet-bpm]
end
subgraph "Data Layer"
PG[(PostgreSQL<br/>per-service DBs)]
ES[(Elasticsearch)]
RMQ[RabbitMQ]
PGB[PgBouncer]
end
subgraph "External Services"
MUX[Mux<br/>Video Streaming]
STR[Stripe<br/>Payments]
DWL[Dwolla<br/>Disbursements]
TXR[Tixr<br/>Ticketing]
JIT[Jitsi<br/>Video Chat]
ZD[Zendesk<br/>Support]
end
subgraph "Infrastructure"
GKE[GKE Cluster]
ARGO[ArgoCD]
TF[Terraform]
HELM[Helm Charts]
end
subgraph "Data Pipeline"
AIR[Airbyte<br/>ETL]
SS[Superset<br/>Analytics]
DLT[DLT Pipelines]
end
PM --> KC
FE --> KC
PM --> CEL & FAN & CON & BC
FE --> CEL & FAN & CON
CEL --> PG
FAN --> PG
CON --> PG & MUX
BC --> PG & MUX & JIT
PS --> STR
PW --> DWL
PG --> PGB
CAM --> BPM1 & BPM2 & BPM3
ARGO --> GKE
TF --> GKE
Service Generation Comparison
| Aspect | Gen 1 (peeq-*) | Gen 2 (velocityz) |
|---|---|---|
| Java Version | 11 | 21 |
| Spring Boot | 2.6.8 | 3.5.4 |
| Package Group | com.peeq |
com.velocityz |
| Repo Count | 107 repos | ~30 repos |
| Decomposition | Very fine-grained (service + db + bpm + query) | More consolidated |
| CI/CD | Jenkins X (legacy) | GitHub Actions |
| Shared Libs | peeq-shared-lib, peeq-messages |
core-lib, messages |
| Status | Legacy, some still running | Active development |
Frontend Architecture
peeq-mono (Primary Frontend)
- Framework: Angular 18.2.13 with Nx 19.8.9
- Mobile: Ionic 6 with Capacitor 3.6.0 (iOS + Android)
- Styling: Tailwind CSS + DaisyUI
- State: Apollo Client (GraphQL) + custom RxJS Store
- Real-time: Socket.io, Stream Chat, Phenix SDK
- Testing: Jest (unit), Cypress + Playwright (E2E)
- Component prefix:
vzlabs-
frontends (Admin/Celeb/Org Dashboard)
- Framework: Angular 14.x with Nx
- Apps: admin-fe (port 8081), celeb-fe (port 8080), org-dashboard-fe
- Theming: Multi-brand dynamic CSS (5 brand themes)
- Video: @100mslive/hms-video-store, @phenixrts/sdk, video.js
- Testing: Jest (unit)
Database Architecture
Each service domain has its own PostgreSQL database: - Schemas
managed via Flyway migrations in dedicated *-db repos -
Connection pooling via PgBouncer - H2 used for local development and
testing - NFS filesystem backend for content storage (Spring
Content)
Known Database Repos
| DB Repo | Service | Migration Count |
|---|---|---|
| peeq-celebrity-db | Celebrity profiles | 18 versions |
| peeq-fan-db | Fan profiles | TBD |
| peeq-content-db | Content/media | TBD |
| peeq-broadcast-db | Broadcasts | TBD |
| peeq-stripe-db | Payment records | TBD |
| peeq-wallet-db | Wallet/transactions | TBD |
| peeq-shoutout-db | Shoutouts | TBD |
| peeq-message-board-db | Message boards | TBD |
| peeq-inventory-db | Event inventory | TBD |
| peeq-subscription-db | Subscriptions | TBD |
| peeq-tags-db | Tagging system | TBD |
| peeq-stream-db | Streaming data | TBD |
| peeq-sse-db | SSE events | TBD |
| peeq-notification-service-db | Notifications | TBD |
| peeq-onsite-event-db | Onsite events | TBD |
| peeq-group-profile-db | Group profiles | TBD |
| peeq-media-db | Media assets | TBD |
| peeq-encryption-db | Encryption keys | TBD |
| peeq-custom-tixr-db | Tixr integration | TBD |
| peeq-dwolla-db | Dwolla payments | TBD |
| peeq-charity-db | Charity features | TBD |
| peeq-class-catalog-db | Class scheduling | TBD |
| peeq-mux-livestream-db | Mux livestreams | TBD |
| peeq-transaction-db | Transactions | TBD |
| node-tracking-db | Analytics tracking | TBD |
BPM Workflows
Business processes managed by Camunda/CIB Seven:
| BPM Repo | Workflow |
|---|---|
| peeq-broadcast-bpm | Broadcast lifecycle (schedule, go-live, end) |
| peeq-celeb-broadcast-bpm | Celebrity-initiated broadcasts |
| peeq-fan-broadcast-bpm | Fan-facing broadcast interactions |
| peeq-handler-broadcast-bpm | Handler-managed broadcasts |
| peeq-shoutout-bpm | Shoutout request/fulfill/deliver |
| peeq-meet-and-greet-bpm | Meet-and-greet scheduling and execution |
| peeq-mux-livestream-bpm | Mux livestream lifecycle |
| peeq-purchase-request-bpm | Purchase request approval workflow |
| peeq-recording-meet-greet-keepsake-videos-bpm | Post-event video delivery |
| purchase-request-bpm | Purchase request (Gen 2) |
| shoutout-bpm | Shoutout (Gen 2) |
Infrastructure
Deployment
- GKE: Kubernetes cluster on Google Cloud
- ArgoCD: GitOps-based continuous deployment
- Helm: Package management for K8s resources
- Terraform: Infrastructure provisioning (GKE cluster, networking)
CI/CD
- GitHub Actions: Current CI/CD (reusable workflows
in
github-reusable-workflow) - Jenkins X: Legacy CI/CD (some repos still reference)
- GHA Runner: Self-hosted runners
(
gha-runner,gha-runner-images)
Monitoring & Logging
- Kibana: Log visualization (peeq-kibana, peeq-kibana-deploy)
- Elasticsearch: Log aggregation and search
- Trivy: Container vulnerability scanning
Configuration
- ArgoCD deployments:
argocd-deploymentsrepo - ArgoCD previews:
argocd-previewsrepo for PR previews - Helm charts: Centralized in
helm-chartsrepo
Validated Production Deployment (Session 0)
Cross-referenced across 3 sources: ArgoCD prod manifests, Helm chart definitions, and Istio VirtualService routing. All 3 sources agree on the list below.
Production Tenants
4 tenants deployed: agilenetwork, nilgameplan, speedofai, vtnil
BrainTrust and FanFuze NIL appear in preview/dev configs but are NOT deployed to production.
Application Services in Production (35)
| Service | Tenants | Category |
|---|---|---|
| admin-fe | 4/4 | Frontend |
| celeb-fe | 4/4 | Frontend |
| mono-web | 4/4 | Frontend |
| celebrity | 4/4 | Core Identity |
| fan | 4/4 | Core Identity |
| users | 4/4 | Core Identity |
| identityx-26 | 4/4 | Identity/Keycloak |
| identityx-25 | 1/4 (agilenetwork) | Identity/Keycloak (legacy) |
| content | 4/4 | Content & Media |
| media | 4/4 | Content & Media |
| webinar | 4/4 | Content & Streaming |
| stripe | 4/4 | Payments |
| subscriptions | 4/4 | Payments |
| transaction | 4/4 | Payments |
| wallet | 4/4 | Payments |
| purchase-request-bpm | 4/4 | BPM/Payments |
| shoutout | 4/4 | Events & Experiences |
| shoutout-bpm | 4/4 | BPM/Events |
| inventory | 4/4 | Events |
| class-catalog | 3/4 | Events |
| onsite-event | 1/4 (vtnil) | Events |
| 4/4 | Communication | |
| sms | 4/4 | Communication |
| chat | 3/4 | Communication |
| notifications | 4/4 | Communication |
| sse | 4/4 | Communication |
| message-board | 2/4 | Communication |
| search | 1/4 (agilenetwork) | Discovery |
| tags | 4/4 | Discovery |
| tracking | 4/4 | Analytics |
| journey | 3/4 | Analytics |
| group-profile | 4/4 | Organization |
| org-manager | 4/4 | Organization |
| query | 1/4 (vtnil) | Legacy Query |
| investordeck | 1/4 (nilgameplan) | Special Purpose |
Infrastructure Services in Production
| Service | Purpose |
|---|---|
| pgbouncer | PostgreSQL connection pooling |
| rabbitmq | Message queue |
| redis | Caching |
| istio + istio-gateway | Service mesh and ingress |
| cert-manager | TLS certificate management |
| external-dns | DNS record automation |
| nfs-provisioner | Network file storage (Spring Content) |
| castai + castai-pod-node-lifecycle | Kubernetes cost optimization |
| kube-fledged | Image pre-caching |
| kube-prometheus-stack | Monitoring |
| superset | Analytics dashboards (3/4 tenants) |
| site-maintenance | Maintenance page |
| cdn | Content delivery |
| pvcs | Persistent volume claims |
| secrets | Secret management |
NOT Deployed to Production
| Service | Evidence | Implication |
|---|---|---|
| broadcast (all variants) | No ArgoCD prod app | H1 verified — broadcast inactive |
| peeq-dwolla | No ArgoCD prod app | H2 partially supported — Dwolla not deployed |
| peeq-conference / peeq-conference-sse | No ArgoCD prod app | Conference functionality inactive |
| peeq-recommendation-engine | No ArgoCD prod app | Recommendation not in prod |
| node-tracking | No ArgoCD prod app (tracking IS deployed) | Gen 2 tracking replaced it |
| athlete-manager | Helm chart exists, not deployed | Not yet activated |
| reporting | Helm chart exists, not deployed | Superset may have replaced it |
| All Gen 1 peeq-* services | Only Gen 2 names in prod | Gen 2 has replaced Gen 1 in prod (H3 partial) |
New Discoveries (Session 0)
- identityx-25 / identityx-26: Keycloak deployment apps — not in original service catalog. These are the production Keycloak instances.
- 4 tenants, not 5 brands: Only 4 of 6 known brands have production deployments. BrainTrust and FanFuze NIL are dev/preview only.
- query service: Gen 1 CQRS query service still deployed to vtnil tenant only — potential migration artifact.
Archive Candidates
Repos meeting BOTH criteria: (1) no ArgoCD production deployment, AND (2) no git commits after 2025-06-30.
Tier 1: Safe to Archive Immediately (No prod deployment + No activity >18 months)
| Repo | Last Commit | Reason |
|---|---|---|
| peeq-jitsi-meet | 2020-05-28 | Replaced by webinar service |
| peeq-celeb-ui | 2020-07-20 | Replaced by frontends/peeq-mono |
| peeq-shared-jitsi-library | 2020-08-03 | Jitsi integration inactive |
| peeq-celeb-fe-ui | 2020-08-04 | Replaced by frontends/peeq-mono |
| peeq-fan-app | 2020-08-30 | Replaced by peeq-mono Ionic |
| peeq-celebrity-app | 2020-08-31 | Replaced by peeq-mono Ionic |
| peeq-encryption | 2020-09-24 | Encryption service not in prod |
| peeq-keycloak-archive | Pre-2022 | Explicitly archived |
| dlt-pipelines | No commits | Empty repo |
Tier 2: Likely Archivable (No prod deployment + No activity >6 months)
These repos are not deployed to production and haven’t been modified recently. Verify no downstream dependency before archiving.
Gen 1 services with Gen 2 replacements (not in prod): - peeq-celebrity, peeq-fan, peeq-content, peeq-broadcast, peeq-media - peeq-shoutout, peeq-wallet, peeq-transaction, peeq-subscriptions - peeq-email, peeq-sms, peeq-chat, peeq-notification-service - peeq-message-board, peeq-sse, peeq-inventory, peeq-class-catalog - peeq-onsite-event, peeq-group-profile, peeq-tags, peeq-users - peeq-stream, peeq-query, peeq-webinar, peeq-mux-livestream
Gen 1 BPM repos (Gen 2 BPM replacements exist): - peeq-broadcast-bpm, peeq-celeb-broadcast-bpm, peeq-fan-broadcast-bpm - peeq-handler-broadcast-bpm, peeq-shoutout-bpm, peeq-meet-and-greet-bpm - peeq-mux-livestream-bpm, peeq-purchase-request-bpm - peeq-recording-meet-greet-keepsake-videos-bpm
Gen 1 standalone frontends: - peeq-admin-fe, peeq-celeb-fe, peeq-fan-fe, peeq-handler-fe - peeq-library-fe, peeq-fan-ionic, peeq-talent-app
Other inactive: - peeq-conference, peeq-conference-sse, peeq-dwolla - peeq-broadcast-query, peeq-celeb-broadcast - peeq-shared-secret, peeq-etl, peeq-reporting - peeq-sandbox, peeq-integration-test, peeq-load - peeq-logging, peeq-scheduler, peeq-external-task-gateway - peeq-recommendation-engine, peeq-zendesk, peeq-charity - peeq-image-processing, peeq-meetandgreet-for-iOS - peeq-nugets, peeq-meet-greet-operator
POCs and experiments: - coolify-poc, dokploy-poc, firebase-poc, zoom-cli - llm-agent-example, example-java-springboot3
Infrastructure (superseded): - peeq-keycloak, peeq-kibana, peeq-kibana-deploy - peeq-airbyte, terraform-google-jx
Archive Summary
| Tier | Count | Action |
|---|---|---|
| Tier 1 (immediate) | 9 | Archive now — zero risk |
| Tier 2 (likely) | ~100 | Verify no hidden dependencies, then archive |
| Total archivable | ~109 | ~57% of 191 repos (supports H5) |
| Keep active | ~82 | Prod services + infra + DB repos + active tools |
Access Inventory (Session 0)
What data sources are available for analysis, and which require additional access.
| Resource | Status | Tool | Impact on Analysis |
|---|---|---|---|
| GitHub repos (all 191) | Available | gh CLI, local clones |
Full code analysis possible |
| ArgoCD deployments | Available | Local clone of argocd-deployments |
Deployment topology validated |
| Helm charts | Available | Local clone of helm-charts |
Service configurations available |
| Istio routing | Available | VirtualService YAML in repos | Routing topology available |
| Flyway migrations | Available | SQL files in *-db repos |
Schema analysis possible |
| gcloud CLI | Installed | gcloud |
GKE cluster access possible (auth may be needed) |
| kubectl | Installed | kubectl |
K8s resource inspection (context config needed) |
| Production databases | Unknown | No psql CLI installed |
Cannot query table sizes, row counts directly |
| Stripe dashboard | Unknown | No stripe CLI installed |
Cannot verify webhook configs, subscription data |
| Keycloak admin | Unknown | Web UI access needed | Cannot verify realm config, client counts |
| RabbitMQ management | Unknown | Web UI access needed | Cannot verify queue depths, message rates |
| Elasticsearch/Kibana | Unknown | Web UI access needed | Cannot verify index sizes, query patterns |
| Superset | Unknown | Web UI access needed | Cannot verify dashboard usage |
| Mux dashboard | Unknown | Web UI access needed | Cannot verify stream configs |
Impact on Hypotheses
- H2 (Dwolla inactive): Can verify via code analysis (import scanning) — no external access needed
- H6 (No shared DB backdoors): Can verify via code analysis — no DB access needed
- H8 (Data volumes): BLOCKED — cannot verify without DB access or production metrics. Will estimate from Flyway migration counts instead.
- H9 (Compliance constraints): Can partially verify via code analysis (PCI patterns, PII handling) — full verification needs Stripe dashboard access
Recommendation
Request access to production databases (read-only) and Stripe dashboard before Sessions 4-5 (payment domain). For Sessions 1-3, code-level analysis is sufficient.
Key Observations
- Significant duplication: Gen 1 and Gen 2 services exist for same domains (celebrity, fan, content, broadcast)
- Over-decomposed: Gen 1 has separate repos for service, DB, BPM, and query — leads to 4 repos per domain
- Mixed Java versions: Java 11 and Java 21 running concurrently
- Frontend fragmentation: Two separate Angular monorepos at different versions
- ~109 repos archivable: 57% of repos have no production deployment and no recent activity
- Large migration surface: 25+ database repos with Flyway migrations
- 4 production tenants: Not 5 brands — BrainTrust and FanFuze NIL are dev-only
- Gen 1 fully replaced in prod: Only Gen 2 service names appear in ArgoCD production
Last updated: 2026-01-30 — Session 0 validation Review by: 2026-04-30 Staleness risk: High — deployment topology changes with each release