Platform Modernization Analysis

192 Repos. 19 Sessions.
One Clear Path Forward.

A comprehensive architecture analysis of The Agile Network platform — from legacy microservices to a modern, consolidated architecture.

192
Repositories Analyzed
19
Analysis Sessions
28
Backend Services
20
Documents Created
01 — The Journey

19 Sessions Across 4 Phases

A systematic, domain-by-domain analysis of the entire platform — validating hypotheses, documenting architecture, and building a modernization roadmap.

Session 0
Validation & Glossary
Confirmed ~28 backend production services (~40 total ArgoCD apps) from 192 repos. Created domain glossary and archive candidate list.
Sessions 1–3
Frontend, Identity, Content & Streaming
Analyzed Angular monorepos, Keycloak identity hub, Mux video backbone, and Zoom webinar integration.
Sessions 4–5
Payment Processing
Mapped Stripe billing, virtual currency (coins) system, BPM-orchestrated purchase fulfillment, and Dwolla retirement.
Sessions 6–7
Events & Communication
Documented shoutout workflows, inventory product catalog, class/learning credits, and 6 communication services.
Session 8
Infrastructure & DevOps
Full GKE/Istio/Terraform/ArgoCD analysis. Discovered 4th production brand (Speed of AI). Multi-brand config-only architecture confirmed.
Session 9
Cross-Cutting Synthesis
Compiled ~75 RabbitMQ message types, 11 external APIs, complete data model inventory across all domains.
Sessions 10–13
Modernization Proposal
Gap analysis, tech debt inventory, target architecture (full rewrite ruled out), migration strategy, 4 ADRs, engineering kickoff.
02 — Key Discoveries

What We Found

Critical findings that shaped the modernization recommendation.

~110
Repos Archivable (58%)
35
Databases Per Tenant
75+
RabbitMQ Message Types
11
Active External APIs
100%
Feature Parity Across Brands

Config-Only Multi-Brand

All 3 production brands use identical Docker images, Helm charts, and code. Differentiation is purely through environment config. Confirmed through infrastructure analysis.

Clean Service Boundaries

No shared database backdoors across 7 analyzed domains. All inter-service communication uses GraphQL, REST, or RabbitMQ. Validated across all 7 domains.

Modern Tech Stack

Java 21, Spring Boot 3.5.4, Angular 18.2, PostgreSQL 16. Core tech is current — the stack isn't the problem.

Near-Zero Test Coverage

2-3 test files per service across all Gen 2 services. Expected coverage not found. Major regression risk during migration.

CIB Seven EOL

Camunda 7 CE support ended Oct 2025. Two BPM services + Keycloak plugin affected. Replacement is mandatory.

Zonal Infrastructure

GKE clusters and Cloud SQL are zonal (us-central1-a). Zone failure = complete tenant outage. No automatic HA.

03 — Current Architecture

The Platform Today

~28 backend services across 7 domains, serving 3 production brands.

Domain Map

Identity

User Identity

Keycloak 26.x, celebrity, fan, users. Magic Link SPI. All user IDs are Keycloak UUIDs.

Content

Content & Streaming

Content, media, webinar. Mux video backbone, Zoom integration, NFS storage.

Payment

Payment Processing

Stripe, subscriptions, wallet, transaction, purchase-request-bpm. Virtual currency system.

Events

Events & Business Logic

Shoutout (+BPM), inventory (product hub), class-catalog, onsite-event. 36+ migrations.

Comms

Communication

Email (Mandrill), SMS (Twilio), notifications, chat (Stream), message-board, SSE.

Frontend

Frontend Apps

peeq-mono (fan/mobile), frontends (admin/expert). Both Angular 18.2/Nx. CSS framework split.

Infra

Infrastructure

GKE, Istio, ArgoCD, Terraform, Helm. Cluster-per-tenant (4 prod). Mature GitOps.

Platform

Supporting Services

Tags, tracking, search, group-profile, org-manager. Small services, low complexity.

External Integration Landscape

IntegrationDomainTypeMigration Risk
StripePaymentCheckout, Billing Portal, WebhooksHigh
MuxContent, ShoutoutVideo transcoding, Signed URLsHigh
ZoomWebinarREST API, RegistrationsMedium
Stream ChatCommunicationSaaS messaging SDKMedium
TwilioCommunicationSMS deliveryLow
MandrillCommunicationTransactional emailLow
KeycloakAll (28+ services)OAuth2/OIDC identityCritical
Repository Breakdown — 192 repos across 14 categories
192
Total Repos
~110
Archivable
~28
Active Backend Services
107
Gen 1 (peeq-*)
~50
Gen 2 (current)

The full service catalog with all 192 repositories organized by domain is available in the Reference section below.

04 — Tech Debt

32 Items. 3 Priority Tiers.

Categorized by what blocks modernization (P0), complicates it (P1), or can wait (P2).

8
P0 — Blocking
14
P1 — Important
10
P2 — Opportunistic

P0 — Must Fix Before Modernization

Critical

CIB Seven (Camunda 7) EOL

Community support ended Oct 2025. 2 BPM services + Keycloak plugin. No security patches. Replace with Operaton (community Camunda 7 fork) per ADR-013.

Critical

Near-Zero Test Coverage

2-3 test files per service. No safety net for refactoring. Must add integration tests as part of each migration phase.

Critical

Zonal Infrastructure

GKE + Cloud SQL on us-central1-a only. Zone failure = total tenant outage. Upgrade to regional HA.

Critical

Security Non-Enforcement

Trivy + Qwiet scan but don't fail builds. Known vulnerabilities ship to production. Add enforcement gates.

Blocking

Mandrill Library Deprecated

Email service uses unmaintained lutung 0.0.8. Replace with maintained HTTP client or switch provider.

Blocking

Frontend Dead Code (17%)

5 API gateways call non-existent backends (broadcast, conference, stream, dwolla, logging). Remove immediately.

05 — The Decision

Preserve the Architecture, Regenerate the Code

The architecture is sound. The code can be regenerated cleanly by AI agents using the existing codebase as the specification.

✗ Traditional Rewrite Ruled Out

The architecture stays. The code gets regenerated cleanly.

The application layer is architecturally sound: modern stack (Java 21/SB 3.5.4), consistent patterns (core-lib, GraphQL, RabbitMQ), clean service boundaries, config-only multi-brand. A traditional human-team rewrite is not justified. Instead, AI agents read the existing 192 repos as a living specification and generate consolidated, fully-tested services that preserve the same architecture, domain boundaries, and integration contracts — but with clean code, TDD from day one, and zero legacy debt. (See Section 12: MVP Execution Plan.)

~28 → ~18
Service consolidation
35 → 6+
Domain databases per tenant
3 → 1
GKE clusters (shared)
2 → 1
Frontend monorepo

Service Consolidation Map

6 merges reduce ~28 backend services to ~18, grouping by domain-driven boundaries.

Target ServiceSource ServicesRationale
identity-servicecelebrity + fan + usersSame domain, shared Keycloak dependency
content-servicecontent + mediaShared Mux integration, overlapping video
payment-servicestripe + subscriptions + wallet + transactionSame financial domain; wallet/txn too small standalone
shoutout-serviceshoutout + shoutout-bpmBPM absorbed via Operaton migration
notification-serviceemail + sms + notificationsAlready shared DB; natural delivery pipeline
platform-servicestags + tracking + group-profile + org-managerSmall supporting services
06 — Migration Strategy

4 Waves. 6 Phases.

Domain-by-domain strangler fig — each phase independently deployable with rollback.

Wave 1 — Foundation
Start Immediately
Regional GKE + Cloud SQL HA
🛡
CI security enforcement gates
🔍
OpenTelemetry tracing
🧪
Integration test framework
BPM Operaton Migration POC
📧
Notification consolidation POC
Wave 2 — Low-Risk Domains
After Foundation
📧
Notification service consolidation (email+sms+notifications)
💳
Payment service consolidation (stripe+subs+wallet+txn)
Purchase-request BPM replacement (CIB Seven → Operaton)
Wave 3 — Medium-Risk Domains
After Wave 2
👤
Identity service (celebrity+fan+users)
🎬
Content service (content+media) + NFS→GCS
🎤
Shoutout service consolidation
📚
Class-catalog upgrade + Arlo removal
Wave 4 — High-Risk & Frontend
Final Phase
🏗
Platform services consolidation
💻
Frontend: Next.js migration (ADR-002 interim → ADR-008 target)
📱
Mobile: React Native app (ADR-009) — parallel workstream, starts after Next.js foundation
Shared cluster consolidation (3 clusters → 1)
🔑
Keycloak migration (LAST — affects all 28+ services)
07 — Architecture Decisions

24 ADRs Proposed

Evidence-backed decisions with bounded validity and falsifiability criteria.

ADR-001

Service Consolidation

Merge ~28 backend services into ~18 along domain-driven boundaries. Consistent patterns (core-lib, GraphQL) make merges additive code organization.

Evidence: Clean service boundaries, config-only multi-brand, discoverable message contracts, stable core library
ADR-002

Frontend Unification (Interim)

Merge peeq-mono + frontends into single monorepo on Tailwind CSS. Interim step before ADR-008 (Next.js migration). Establishes unified codebase and removes CSS split.

Evidence: CSS restyling needed, not logic rewrite
ADR-003

Java 21 LTS Standardization

Align all services on Java 21 LTS / Spring Boot 3.x. Downgrade content service from Java 24 (non-LTS). Align core-lib versions.

Evidence: 28+ services already on Java 21
ADR-004

Multi-Brand Architecture

Consolidate from cluster-per-tenant to shared GKE cluster with namespace isolation. NetworkPolicies + Istio AuthorizationPolicy.

Evidence: Config-only differentiation verified across all brands
ADR-005

Database Consolidation

Consolidate 35 databases per tenant into 6 domain-aligned Cloud SQL instances using PostgreSQL schemas for logical isolation. Standalone services (webinar, chat, search, etc.) keep their own DBs; 6 domain databases cover the consolidated services.

Evidence: Clean service boundaries, shared notification DB already works, PgBouncer simplification
ADR-006

Compute Platform & Scale-to-Zero

Hybrid Kubernetes + Knative model. Always-on for core services, scale-to-zero for low-traffic services. KEDA for event-driven consumers.

Evidence: KEDA template exists in Helm charts, 10+ services amenable to scale-to-zero
ADR-007

Architecture Simplification

Five-pillar strategy: repo consolidation (192→40), infra right-sizing, observability unification, CI/CD simplification, dead code elimination. Estimated 50-70% cost reduction (L1 — pending billing data).

Evidence: Over-decomposed services, fragmented observability, 105+ archivable repos
ADR-008

Frontend Framework & SSR

Migrate from Angular to Next.js (React) with SSR for fan-facing pages. Sub-second FCP, SEO indexing, code sharing with mobile app.

Evidence: No SSR currently, 3 date libraries, dual CSS frameworks, 17% dead code
ADR-009

Native Mobile App

React Native + Expo for iOS and Android. 40-50% shared code with Next.js web app. Replaces Ionic/Capacitor web-view wrapper.

Evidence: Current Ionic is web-view, Mux/Stream/Stripe all have RN SDKs
ADR-010

Passwordless-First Auth

Passwordless as #1 priority: standalone passwordless-auth-service supporting Magic Link, passkeys, biometrics. Plus single Keycloak, OPA authorization. 80% fewer Keycloak instances.

Evidence: Magic Link is primary login method but trapped in Keycloak SPI; passkeys/WebAuthn blocked
ADR-011

Video Platform Strategy

Replace Mux with self-managed pipeline: GCS storage + CortexOne/FFmpeg transcoding + Cloudflare CDN delivery. Eliminate per-minute Mux pricing.

Evidence: Mux is exclusive video backbone; CortexOne already runs CPU-intensive workloads; broadcast inactive
ADR-012

Email Delivery Strategy

Replace Mandrill + deprecated lutung library with Resend API. Leverage existing CortexOne email service pattern from Rival. Single provider across platforms.

Evidence: lutung library is P0 tech debt; Resend already proven in Rival/CortexOne production
ADR-013

BPM Engine Strategy

Adopt Operaton (community-owned Camunda 7 fork) as strategic BPM platform. Near-zero migration from Camunda 7.17.0. Invest in BPM as platform capability for future process-based features.

Evidence: Camunda 7 CE EOL Oct 2025; Meet & Greet SM retired; strategic intent to expand BPM usage
ADR-014

Observability Strategy

OpenTelemetry + Grafana LGTM stack (Prometheus, Tempo, Loki, Sentry). SLI/SLO framework with 3 service tiers. Replace disabled Elastic APM and EOL Elasticsearch logging.

Evidence: No alerting, APM disabled, no tracing, no SLOs — all verified
ADR-015

Testing Strategy

Tiered testing with Testcontainers + BDD/Gherkin + agentic test generation. P0 priority: payment and purchase-workflow. 80% coverage target.

Evidence: Near-zero test coverage across all services (H7 falsified)
ADR-016

CI/CD Security Gates

Enforce security gates: gitleaks, dependency audit, Trivy, Qwiet with fail-fast blocking. Binary Authorization with cosign. Single reusable GitHub Actions workflow.

Evidence: Trivy and Qwiet run but don't block builds
ADR-017

Financial Ledger

Double-entry bookkeeping in payment-service. Debit/credit ledger replacing single-table JSON log. Account types: wallet, revenue, escrow, settlement, refund.

Evidence: Single-table JSON payment log, no audit trail
ADR-018

API Strategy

GraphQL schema stitching via lightweight API gateway. Consolidate 24+ endpoints into single /api/graphql. Schema evolution with 90-day deprecation sunset.

Evidence: 24+ separate GraphQL gateways, ~17% dead frontend API calls
ADR-019

Knowledge Graph ✓

Neo4j Knowledge Graph + Vector Store replaces Elasticsearch. Graph-based recommendations, RAG Q&A, semantic search with IBM Granite embeddings. Implementation complete.

Delivered: 65 files, ~10,500 lines — migration, ingestion, recommendations, RAG, analytics
ADR-020

Network Security

Defense-in-depth: Cloud Armor WAF, Istio mTLS STRICT, NetworkPolicies (default-deny), GCS signed URLs. Prerequisite for shared cluster.

Evidence: No NetworkPolicies, CORS allows all origins, public GCS buckets
ADR-021

Messaging Architecture

Hybrid RabbitMQ + Kafka: Short-term enhance RabbitMQ reliability, medium-term add Kafka for Knowledge Graph event streaming and replay capability.

Strategy: 75+ RabbitMQ contracts preserved, Kafka for event sourcing
ADR-022

Data Pipeline

Hybrid batch + streaming: Airbyte CDC + Kafka Snowpipe + Neo4j export → Snowflake. Real-time dashboards, graph analytics, dbt transformations.

Impact: 104 → 32 Airbyte connections (69% reduction), streaming latency in seconds
ADR-023

File Storage

Migrate NFS PVCs to GCS with signed URLs and Cloud CDN. Standardize on GCS as single file storage backend. Enables multi-region.

Evidence: 4 NFS PVCs tied to GKE cluster, blocks multi-region
ADR-024

Feature Flags

Unleash (self-hosted) for feature flags. Tenant-aware evaluation. Migration kill switches, gradual rollouts, A/B testing capability.

Evidence: No feature flags, tenant config requires Helm deployment
08 — Assumptions Scorecard

14 Assumptions Tested

4 verified, 5 validated, 2 disproven, 3 need more data.

Broadcast not in production
Verified
Dwolla inactive
Verified
Gen 1 fully replaced by Gen 2
Validated
Frontend unification feasible
Validated
>50% repos archivable
Validated
No shared DB backdoors
Validated
>60% test coverage
Disproven
Data volumes manageable
Needs More Data
No compliance blockers
Needs More Data
APIs backward-compatible
Needs More Data
Multi-brand is config-only
Verified
RabbitMQ contracts discoverable
Verified
core-lib stable foundation
Validated
Gen 3 rewrite justified
Disproven
09 — Native Mobile App

React Native + Expo

A truly native mobile experience — replacing the Ionic web-view wrapper with native UI components.

View Full PRD v1.1 →

React Native
Framework (ADR-009)
Fan-First
MVP Target
5 Brands
Architected For
TestFlight
Deploy Target

Decisions Made

ADR-009

React Native + Expo

Shared monorepo with future Next.js web. 40-50% code reuse via shared TypeScript packages (types, GraphQL, auth, business logic).

Confirmed

Turborepo + pnpm Monorepo

Shared packages: types, graphql (Apollo Client), auth (Descope), business-logic. Consumed by mobile now, web later.

ADR-010

Descope Passwordless Auth

Native @descope/react-native-sdk with Magic Link, Passkeys, and Biometric authentication. Zero-infrastructure managed auth.

Confirmed

EAS Build + EAS Update

Cloud builds for iOS + Android. OTA JavaScript updates without App Store review. TestFlight + Play Internal for beta.

Decisions To Be Made

Resolved

Reader Rule Strategy

Using Apple's Reader Rule (3.1.3a) like Netflix/Spotify — subscriptions via web (Stripe), avoiding 30% IAP cut. Confirm eligibility in Sprint 0.

Blocker

GraphQL Aggregation Layer

24+ separate endpoints need a BFF or Apollo Federation gateway for mobile. Without this, cold-start latency on cellular is unacceptable.

Spike Needed

Payment Architecture

Current system uses virtual coins + wallet + BPM orchestration. Mobile needs to either implement full coin flow, bypass coins, or use web-view for purchases.

PoC Needed

UI Component Library

Tamagui vs React Native Paper. Must support 5-brand theming with config-driven color/typography tokens. Needs PoC to validate.

MVP Feature Scope

FeaturePriorityStatus
Descope auth + Magic LinkP0Needs PoC
Expert browsing + profilesP0Ready
Content viewing + Mux videoP0Ready
Subscriptions (Reader Rule)P0Design Needed
Push notificationsP0Ready
Deep linkingP0Needs PoC
Multi-brand themingP1Architect Now

4-Phase Timeline (14 Sprints)

S0
Sprint 0 — Prerequisites
Reader Rule eligibility, BFF PoC, Descope Magic Link PoC, web subscription flow design
P1
Phase 1 — Foundation + Auth (Sprints 1-4)
Monorepo setup, Expo config, Descope SDK, navigation, CI/CD pipeline
P2
Phase 2 — Content + Discovery (Sprints 5-8)
Expert browsing, content feed, Mux video player, search, analytics
P3
Phase 3 — Payments + Push (Sprints 9-11)
Subscription management, IAP/Stripe integration, push notifications
P4
Phase 4 — Polish + Deploy (Sprints 12-14)
Accessibility audit, performance optimization, TestFlight/Play Internal release

Key Risks

Caution

Reader Rule Approval

Must confirm Apple accepts Reader Rule eligibility in Sprint 0. RevenueCat fallback prepared if rejected.

Blocker

GraphQL Aggregation

Mobile cannot hit 24+ endpoints directly. BFF or Federation gateway required for acceptable latency.

Caution

Magic Link Deep Linking

Universal Links / App Links untested with 5 brand URL schemes. Needs PoC in Sprint 0.

10 — Behind the Scenes

How This Analysis Was Done

The meta-story of AI-assisted architecture analysis — methodology, pivots, and course corrections.

The Approach

AI-Assisted Architecture Analysis

A human architect partnered with Claude Code to analyze 192 repositories across 19 sessions.

🔍

Evidence-First

Every claim traced to source code, config files, or infrastructure artifacts. No assumptions without verification.

🧪

Hypothesis-Driven

14 hypotheses formulated and tested. Each assigned an assurance level (L0–L2) with falsifiability criteria.

🔄

Iterative Discovery

Findings from each session reshaped priorities for the next. The analysis plan evolved as evidence accumulated.

19
Analysis Sessions
192
Repos Analyzed
24
ADRs Produced
20
Knowledge Base Docs
Act 1

Discovery — Surprises in the Codebase

The first sessions revealed things nobody expected.

Session 3
Dwolla Integration Inactive
Traced payment endpoints to Dwolla SDK calls — but found zero active webhooks and no transaction history in 18+ months. The wallet system was wired up but never turned on.
Session 5
lutung Deprecated
Email delivery relied on lutung (Mandrill Java SDK), deprecated since 2016. Every transactional email was running through an unmaintained library with no migration path.
Session 7
75 RabbitMQ Contracts Found
What looked like simple pub/sub turned out to be 75 distinct message contracts across 7 domains — the real integration backbone of the platform.
Session 9
Near-Zero Test Coverage
Expected to find reasonable coverage in Gen 2 services. Found 2–3 test files per service. The entire platform had virtually no automated safety net.
Act 2

The Pivot — Rewrite Ruled Out

The biggest course correction came from testing our own assumptions.

Hypothesis H14 — Falsified (then Reframed)

Traditional rewrite is not justified — but agentic regeneration is.

We entered the analysis assuming a human-team rewrite might be necessary. After 9 sessions of evidence gathering, the data said otherwise: the application layer is architecturally sound. The debt lives in infrastructure, BPM, and testing. But the agentic coding paradigm shift (Section 12) reframed the question: AI agents can regenerate the same architecture with clean code, full TDD coverage, and consolidated services — preserving every domain boundary and integration contract.

What We Expected

Monolithic Tangle

Assumed shared databases, tight coupling between services, outdated frameworks. Expected to recommend a ground-up rebuild.

What We Found

Clean Service Boundaries

No shared database backdoors. Modern stack (Java 21, Spring Boot 3.5). Config-only multi-brand. The code was better than the infrastructure around it.

Act 3

Deepening — ADR Evolution

Architecture decisions weren't one-shot — they evolved as evidence accumulated.

📝

ADR-002 through ADR-008

The first seven decisions built incrementally: each new session's findings refined or challenged earlier choices. ADR-005 (Database Consolidation) was rewritten twice as we discovered the true scope of 35 databases per tenant.

🔄

ADR-010 Restructured

Passwordless-First Auth started as a simple Keycloak-to-X migration. Session 14 revealed 5 custom Keycloak themes per user type, forcing a complete rethink of the auth transition strategy.

ADR-011 Video Platform

Initially assumed Mux could handle everything. Discovery of Jitsi for interactive sessions and live-commerce requirements added a second video tier to the strategy.

ADR-012 Email Delivery

The lutung discovery in Session 5 directly spawned this ADR. What started as a footnote became a standalone decision requiring its own migration path.

ADR-013 BPM Engine

Initial analysis recommended Spring SM, but two inputs flipped the decision: Meet & Greet SM was retired (no in-house precedent), and strategic intent to expand BPM usage made the engine an investment, not overhead. Operaton recommended.

📋

ADR-014 through ADR-024

Eleven more ADRs covering observability, testing, CI/CD security, financial ledger, API strategy, search, network security, messaging, data pipeline, file storage, and feature flags — completing the full architectural decision set.

Course Corrections

What Changed Along the Way

Honest analysis means changing direction when the evidence demands it.

View All Course Corrections — 5 major iterations
Iteration 1

Scope Expansion

Started with 28 active services. By Session 4, realized we needed to catalog all 192 repos to understand true dependencies and identify what could be archived.

Iteration 2

BPM Priority Shift

CIB Seven EOL was initially a medium-priority item. After discovering 2 BPM services + Keycloak plugin dependency, it moved to Wave 1 blocker status.

Iteration 3

Database Strategy Overhaul

Original plan: consolidate to fewer databases. After finding 35 databases per tenant with Flyway migrations, shifted to shared-schema multi-tenancy requiring careful data isolation.

Iteration 4

Frontend Framework Lock-In

Kept Angular as default until Session 12 evidence showed React + Next.js enabled SSR, React Native code sharing, and better ecosystem alignment. ADR-008 formalized the switch.

Iteration 5

Mobile Added Late

Native mobile wasn't in the original analysis scope. Stakeholder input after Session 14 added it as a requirement, spawning ADR-009 and reshaping the frontend strategy.

Each iteration strengthened the final recommendations by forcing re-examination of earlier assumptions.

The Partnership

Human Judgment + AI Analysis

What each side contributed to this analysis.

🤖

Claude Code

Codebase traversal across 192 repos. Pattern recognition in service boundaries, dependency mapping, config analysis. Consistent application of hypothesis framework across all 14 hypotheses across 19 sessions. Draft generation for all 20 knowledge base documents.

🧑

Human Architect

Domain context and stakeholder priorities. Strategic direction on what to investigate next. Business judgment on trade-offs (cost vs. risk vs. speed). Final validation of every recommendation and decision.

Insight

AI accelerated the analysis. Humans directed it.

The combination covered more ground than either could alone. Claude processed 192 repos systematically; the architect knew which findings mattered and which were noise. Every ADR was machine-drafted and human-approved.

11 — Infrastructure as Code

Nexgen Multi-Tenant IaC Platform

Cost-optimized GKE infrastructure for Helix, NIL GamePlan, and The Agile Network.

Platform Overview

Multi-tenant Kubernetes platform with aggressive cost optimization for development.

GKE Standard

Zonal cluster with Spot VMs. Avoids $74/month Autopilot fee. 60-91% compute savings.

🔒

Cloudflare Tunnel

Zero-trust ingress with no public IPs. Free tier. Routes to *.agentic-innovations.com.

📦

In-Cluster Databases

PostgreSQL and Redis run in-cluster. No managed service costs. PVC for persistence.

~$45
Monthly Cost
8
Terraform Modules
3
Tenant Namespaces
10
Bootstrap Scripts

Cost Breakdown (Dev Environment)

~70% savings vs managed services. Optimized for disposable dev workloads.

ComponentMonthly CostNotes
GKE Control PlaneFREEStandard mode (not Autopilot $74/mo)
Spot VMs (e2-small)~$5-101-2 nodes, 60-91% savings vs on-demand
Cloud NAT~$32Gateway hourly + data processing
GCS / Secrets / Registry~$3State bucket, secrets, container images
TOTAL~$40-50vs $150+ with Cloud SQL + Memorystore
Cost Strategy

Cloud NAT is the largest cost. Spot VMs are mandatory.

For even lower costs, consider NAT-less egress patterns or sharing NAT gateway across projects.

Terraform Modules (8)

Modular infrastructure with clear separation of concerns.

gke

GKE Cluster

Standard mode, Spot VMs, Workload Identity

vpc

VPC Network

Cloud NAT, firewall rules, private subnets

iam

IAM

Service accounts, Workload Identity bindings

tenant

Tenant

Namespace, quotas, NetworkPolicy, RBAC

cloudflare

Cloudflare

Tunnel config, DNS records, routes

secrets

Secrets

Secret Manager, External Secrets Operator

gcs

Storage

Terraform state, backups, assets

artifact-registry

Registry

Container images with cleanup policies

Multi-Tenant Architecture

Namespace isolation with NetworkPolicies and ResourceQuotas.

Tenant

Helix Platform

helix.agentic-innovations.com
AI agent orchestration platform

Tenant

NIL GamePlan

nilgameplan.agentic-innovations.com
NIL compliance and management

Tenant

The Agile Network

agile.agentic-innovations.com
Fan-athlete connection platform

Isolation Features

Kubernetes Resources

  • Dedicated namespace per tenant
  • NetworkPolicies (default-deny)
  • ResourceQuotas for limits
  • LimitRanges for defaults

GCP Integration

  • Workload Identity per tenant
  • Scoped service accounts
  • Tenant-prefixed secrets
  • Separate logical databases

GitOps Deployment

ArgoCD with ApplicationSets for multi-tenant management.

🔄

ArgoCD Features

  • Continuous deployment from Git
  • ApplicationSet for all tenants
  • Automated sync with self-heal
  • Rollback via Git revert
🚀

Knative Serving

  • Scale-to-zero for cost savings
  • Automatic scaling on demand
  • Traffic splitting for canary
  • Revision management

Bootstrap Sequence (10 Scripts)

00-enable-apis.sh 01-create-state-bucket.sh 02-terraform-apply.sh 03-install-knative.sh 04-install-argocd.sh 05-create-namespaces.sh 06-deploy-postgres.sh 07-deploy-redis.sh 08-deploy-cloudflared.sh 09-validate.sh

Security & Dev Environment

Security Features

Private Nodes

No public IPs on cluster nodes

Cloudflare Tunnel

Zero-trust ingress

Workload Identity

No service account keys

NetworkPolicies

Namespace isolation

Dev Environment Trade-offs

  • Spot VM preemption — Acceptable for dev workloads
  • Single zone — Zone outage = platform outage
  • In-cluster DB — Data is reproducible/disposable
  • No automated backups — Manual backup if needed
  • No SLA — Development only, not production

Production would use regional clusters, managed databases, and automated backups.

References: Issue #68 | PR #69 | Pattern: Rival gke-only infrastructure

12 — Go / No-Go

Conditional Go

Proceed with Wave 1 immediately. Resolve two blockers before Wave 2.

Recommendation

Conditional GO for Wave 1

Strong evidence base (4 verified, 5 validated findings). Target architecture validated. Migration strategy phased with rollback at every step. Two blockers remain but don't prevent foundation work.

Recommended Next Actions

Immediately

Archive ~110 Repos

63 repos untouched since before 2025, plus ~47 Gen 1 services with confirmed replacements. Script available from service catalog.

This Week

Remove Frontend Dead Code

Delete 5 dead API gateways (broadcast, conference, stream, dwolla, logging). Low effort, high clarity improvement.

Sprint 0

Execute 6 Foundation Stories

Regional GKE, CI security, OpenTelemetry, test framework, BPM Operaton migration POC, notification consolidation POC.

Before Wave 2

Resolve Remaining Blockers

Data volumes: Obtain production database row counts.
Compliance: Confirm Stripe PCI scope via dashboard.

Engineering Review

Present 4 ADRs to Team

Service consolidation, frontend unification, Java standardization, and multi-brand architecture decisions need team approval.

First Migration

Notification Pipeline First

Lowest risk: shared DB already, no external ID coupling, fixes deprecated Mandrill library. Reduces 3 services to 1.

13 — MVP Execution Plan

3 Approaches. 1 Clear Winner.

Evaluated for agentic AI coding — where the hardest option for humans becomes the most natural for the agent.

Three Paths to the NexGen Backend

Each approach delivers the same target: 18 consolidated services, 6 domain databases, unified API layer.

B
In-Place Consolidation
Merge existing Gen 2 services in their current repos, then move into nexgen. Preserves running code but carries tech debt and zero test coverage.
Schema quality
Code quality
Agent-friendliness
Test coverage
Risk (lower=better)
C
Hybrid Strangler Fig
Build schema fresh, deploy a proxy gateway, then migrate endpoints one at a time with CDC sync. Each step reversible but infrastructure-heavy.
Schema quality
Code quality
Agent-friendliness
Test coverage
Risk (lower=better)
12.1 — The Paradigm Shift

Agentic Coding Changes the Calculus

Traditional effort assessments assume human engineering teams. With AI-driven development, what's "hard" and what's "easy" inverts.

Easy for AI Agents

Read 192 repos and synthesize into 18 services
Re-implement 24 GraphQL endpoints from source
Reconstruct 75 RabbitMQ contracts from code
Synthesize 280+ Flyway migrations into clean schema
Port 11 API integrations by reading existing code
Enforce TDD with exhaustive test coverage
Maintain perfect pattern consistency across all services

Still Requires Human + Cloud Access

GKE cluster provisioning & Terraform apply
Cloud SQL regional HA setup
CDC pipeline runtime configuration
Live Istio traffic routing changes
External API sandbox credentials
Production data migration validation
DNS, TLS, and load balancer cutover
Key Insight

The "hardest" option for humans is the most natural for agents.

Option A (Clean Build) is pure code generation — reading source code and writing new implementations. That's exactly what agentic AI does best. Option C's infrastructure-heavy CDC pipelines and live traffic management are the hardest category for agents. Writing code is cheap; managing infrastructure is not.

12.2 — Side-by-Side Comparison

Scored for Agentic Execution

Ratings reflect an AI agent performing the implementation with a human architect reviewing and approving.

Dimension A: Clean Build B: In-Place C: Hybrid
Schema quality Best — designed fresh Good — mechanical move Best — designed fresh
Code quality Best — no legacy debt Worst — carries tech debt Good — port selectively
Feature parity risk Low — agent reads ALL code None — same code Low — legacy fallback
Agentic effort Medium — agent excels here Medium — messy refactoring High — infrastructure-heavy
Test coverage Best — TDD from scratch Worst — must retrofit Good — TDD for new
Agent-friendliness Highest — pure code gen Medium — messy legacy Lowest — infra-heavy
Human review burden Medium — review new code High — review messy merges High — infra + sync logic
Reversibility Hard (once cutover) Easy (undo merges) Easy (revert routes)
Time to first value Medium — agent works fast Shortest Longest — infra bottleneck
12.3 — Execution Sequence

Option A — Agent Workflow

Six agent-driven steps, then five human-driven steps. The agent handles all code generation; the human handles infrastructure and cutover.

1
Schema
Read 280+ Flyway migrations. Synthesize 6 consolidated domain databases.
2
Scaffold
Generate Spring Boot project. 18 services, shared core-lib, unified patterns.
3
Tests First
Write BDD scenarios from legacy behavior. Generate failing tests (TDD red phase).
4
Implement
Port business logic service-by-service. Read legacy, write clean equivalent.
5
APIs
Port 24 GraphQL endpoints + 75 RabbitMQ contracts from existing code.
6
Integrations
Port Stripe, Mux, Zoom, Stream Chat, Twilio, Mandrill integrations.
↓ Human review & approval gate ↓
7
Review
Architect reviews all generated code, tests, and schema.
8
Provision
GKE cluster, Cloud SQL, networking, IAM via Terraform.
9
Credentials
Configure Stripe sandbox, Mux, Zoom, and other API keys.
10
Data Migration
Run migration scripts against staging copy of production DB. Validate.
11
Cutover
Deploy alongside legacy. Shadow traffic. Switch Istio routes.
Why Option B Gets Worse

Its main advantage — "preserving working code" — assumes code is expensive to write. With agentic coding, writing code is cheap. What's expensive is dealing with messy code: implicit coupling, undocumented behavior, Gen 1 patterns mixed with Gen 2, and retrofitting tests onto zero-coverage legacy.

Why Option C Gets Worse

Its main advantage — incremental risk mitigation — relies on CDC pipelines, Istio routing, and dual-write sync. These are all infrastructure tasks, the hardest category for agentic coding. The agent ends up context-switching between "build new code" and "maintain sync infrastructure" constantly.

13 — Knowledge Base

20 Documents + 24 ADRs

The complete analysis output — living documents committed to the nexgen repo.

DocumentSessionCategory
domain-model/glossary.md0Foundation
architecture/current-state.md0Foundation
architecture/service-catalog.md0Foundation
frontend/frontend-architecture.md1Domain
architecture/user-identity.md2Domain
architecture/content-streaming.md3Domain
architecture/payment-processing.md4-5Domain
architecture/events-business-logic.md6Domain
architecture/communication-infrastructure.md7Domain
architecture/infrastructure-devops.md8Domain
architecture/integration-patterns.md9Synthesis
architecture/data-models.md9Synthesis
modernization/migration-decisions.md0-12Synthesis
modernization/gap-analysis.md10Modernization
modernization/tech-debt-inventory.md10Modernization
modernization/target-architecture.md11Modernization
modernization/migration-strategy.md12Modernization
modernization/engineering-kickoff.md13Modernization
decisions/ADR-001 through ADR-00412Decision
decisions/ADR-005: Database Consolidation15Decision
decisions/ADR-006: Compute Platform & Scale-to-Zero15Decision
decisions/ADR-007: Architecture Simplification15Decision
decisions/ADR-008: Frontend Framework & SSR15Decision
decisions/ADR-009: Native Mobile App15Decision
decisions/ADR-010: Passwordless-First Auth15Decision
decisions/ADR-011: Video Platform Strategy16Decision
decisions/ADR-012: Email Delivery Strategy16Decision
decisions/ADR-013: BPM Engine Strategy18Decision
decisions/ADR-014: Observability Strategy19Decision
decisions/ADR-015: Testing Strategy19Decision
decisions/ADR-016: CI/CD Security Gates19Decision
decisions/ADR-017: Financial Ledger19Decision
decisions/ADR-018: API Strategy19Decision
decisions/ADR-019: Search Strategy19Decision
decisions/ADR-020: Network Security19Decision
decisions/ADR-021: Messaging Architecture19Decision
decisions/ADR-022: Data Pipeline19Decision
decisions/ADR-023: File Storage19Decision
decisions/ADR-024: Feature Flags19Decision
Reference

Service Catalog

Complete inventory of all 192 repositories in the favedom-dev organization.

Full Repository Catalog

192 Repos — 20 Reference Sections

Gen 2 repos in bold. Last Commit dates color-coded: 2026 2025 2024 ≤2023

Core Domain Services 116 repos

Celebrity/Expert Management

RepoGenTypeStackDescriptionLast Commit
celebrity2SVCJava 21 / SB 3.5.4Celebrity service (current)2025-08-26
peeq-celebrity1SVCJava 11 / SB 2.6.8Celebrity service (legacy)2025-02-14
peeq-celebrity-db1DBFlyway/PostgreSQLCelebrity DB migrations (18 versions)2024-02-23
peeq-celebrity-app1SVCTBDCelebrity app variant2020-08-31
athlete-manager2SVCTBDAthlete management service2025-08-05

Fan Management

RepoGenTypeStackDescriptionLast Commit
fan2SVCJava 21 / SB 3.5.4Fan service (current)2025-08-26
peeq-fan1SVCJava 11 / SB 2.6.8Fan service (legacy)2025-02-14
peeq-fan-db1DBFlyway/PostgreSQLFan DB migrations2023-07-10
peeq-fan-app1SVCTBDFan app variant2020-08-30

Content & Media

RepoGenTypeStackDescriptionLast Commit
content2SVCJava 21 / SB 3.2.6Content management (uploads, photo processing, Mux)2026-01-26
peeq-content1SVCJava 11 / SB 2.6.8Content service (legacy)2025-02-14
peeq-content-db1DBFlyway/PostgreSQLContent DB migrations2024-01-17
media2SVCTBDMedia service2025-10-16
peeq-media1SVCTBDMedia service (legacy)2025-02-14
peeq-media-db1DBFlyway/PostgreSQLMedia DB migrations2024-08-22
peeq-image-processing1SVCTBDImage processing2021-12-08
aivideostudio2SVCTBDAI video studio2026-01-28

Broadcasting & Streaming

RepoGenTypeStackDescriptionLast Commit
broadcast2SVCTBDBroadcast service (current)2024-06-25
peeq-broadcast1SVCJava 11 / SB 2.6.8Broadcast service (legacy)2025-02-14
peeq-broadcast-db1DBFlyway/PostgreSQLBroadcast DB migrations2022-09-23
peeq-broadcast-query1SVCTBDBroadcast query (CQRS read model)2021-01-18
peeq-broadcast-bpm1BPMCamundaBroadcast lifecycle process2025-02-14
peeq-celeb-broadcast1SVCTBDCelebrity broadcast service2020-11-11
peeq-celeb-broadcast-bpm1BPMCamundaCelebrity broadcast process2021-01-18
peeq-fan-broadcast-bpm1BPMCamundaFan broadcast process2021-01-18
peeq-handler-broadcast-bpm1BPMCamundaHandler broadcast process2021-04-06
peeq-mux-livestream1SVCTBDMux livestream integration2023-06-27
peeq-mux-livestream-bpm1BPMCamundaMux livestream process2023-04-12
peeq-mux-livestream-db1DBFlyway/PostgreSQLMux livestream DB2023-06-26
mux-sync2SVCTBDMux synchronization2025-05-02
peeq-stream1SVCTBDStreaming service2025-02-14
peeq-stream-db1DBFlyway/PostgreSQLStream DB2022-09-23
peeq-conference1SVCTBDConference/webinar service2025-02-14
peeq-conference-sse1SVCTBDConference SSE events2025-02-14
peeq-webinar1SVCTBDWebinar service2024-08-12
webinar2SVCTBDWebinar service (current)2026-01-29
peeq-jitsi-meet1SVCTBDJitsi video integration2020-05-28
peeq-shared-jitsi-library1LIBTBDShared Jitsi library2020-08-03

Shoutouts

RepoGenTypeStackDescriptionLast Commit
shoutout2SVCTBDShoutout service (current)2025-08-26
peeq-shoutout1SVCTBDShoutout service (legacy)2025-02-14
peeq-shoutout-db1DBFlyway/PostgreSQLShoutout DB2023-06-06
peeq-shoutout-bpm1BPMCamundaShoutout fulfillment process2025-02-14
shoutout-bpm2BPMTBDShoutout process (current)2025-08-26

Payments & Financial

RepoGenTypeStackDescriptionLast Commit
stripe2SVCTBDStripe integration (current)2026-01-12
peeq-stripe1SVCJava 11 / SB 2.6.8Stripe integration (legacy)2025-02-14
peeq-stripe-db1DBFlyway/PostgreSQLStripe DB2024-07-17
peeq-dwolla1SVCTBDDwolla ACH payments2023-01-27
peeq-dwolla-db1DBFlyway/PostgreSQLDwolla DB2022-09-22
wallet2SVCTBDWallet service (current)2025-08-26
peeq-wallet1SVCTBDWallet service (legacy)2025-02-14
peeq-wallet-db1DBFlyway/PostgreSQLWallet DB2022-09-22
transaction2SVCTBDTransaction service (current)2025-08-26
peeq-transaction1SVCTBDTransaction service (legacy)2025-02-14
peeq-transaction-db1DBFlyway/PostgreSQLTransaction DB2022-09-23
subscriptions2SVCTBDSubscription management (current)2026-01-14
peeq-subscriptions1SVCTBDSubscription management (legacy)2025-02-14
peeq-subscriptions-db1DBFlyway/PostgreSQLSubscriptions DB2024-03-06
peeq-purchase-request-bpm1BPMCamundaPurchase request approval2025-02-14
purchase-request-bpm2BPMTBDPurchase request (current)2025-12-31

Events & Inventory

RepoGenTypeStackDescriptionLast Commit
inventory2SVCTBDInventory service (current)2025-12-31
peeq-inventory1SVCTBDInventory service (legacy)2025-02-14
peeq-inventory-db1DBFlyway/PostgreSQLInventory DB2024-04-24
onsite-event2SVCTBDOnsite event service (current)2025-08-26
peeq-onsite-event1SVCTBDOnsite event service (legacy)2025-02-14
peeq-onsite-event-db1DBFlyway/PostgreSQLOnsite event DB2023-08-11
peeq-custom-tixr1SVCTBDTixr ticketing integration2021-09-08
peeq-custom-tixr-db1DBFlyway/PostgreSQLTixr DB2021-09-07
peeq-class-catalog1SVCTBDClass catalog scheduling2024-08-20
peeq-class-catalog-db1DBFlyway/PostgreSQLClass catalog DB2024-02-22
class-catalog2SVCTBDClass catalog (current)2026-01-28
peeq-meet-and-greet-bpm1BPMCamundaMeet-and-greet scheduling2025-02-14
peeq-meet-greet-operator1SVCTBDMeet-and-greet operations2022-09-19
peeq-meetandgreet-for-iOS1FEiOSMeet-and-greet iOS app2021-03-03
peeq-recording-meet-greet-keepsake-videos-bpm1BPMCamundaPost-event video delivery2025-02-14

Communication & Messaging

RepoGenTypeStackDescriptionLast Commit
messages2SVCTBDMessaging service (current)2025-12-19
peeq-messages1LIBJavaShared message definitions2024-08-29
peeq-message-board1SVCTBDMessage board service2025-02-14
peeq-message-board-db1DBFlyway/PostgreSQLMessage board DB2022-09-23
message-board2SVCTBDMessage board (current)2025-08-26
email2SVCTBDEmail service (current)2025-12-17
peeq-email1SVCTBDEmail service (legacy)2025-02-14
sms2SVCTBDSMS service (current)2025-12-31
peeq-sms1SVCTBDSMS service (legacy)2025-02-14
notifications2SVCTBDNotification service (current)2025-12-19
peeq-notification-service1SVCTBDNotification service (legacy)2025-02-14
peeq-notification-service-db1DBFlyway/PostgreSQLNotification DB2023-01-10
chat2SVCTBDChat service (current)2025-08-26
peeq-chat1SVCTBDChat service (legacy)2024-08-08
peeq-sse1SVCTBDServer-Sent Events service2025-02-14
peeq-sse-db1DBFlyway/PostgreSQLSSE DB2022-09-23
sse2SVCTBDSSE service (current)2025-08-26
peeq-websocket1SVCTBDWebSocket service2022-02-19

Organization & Profiles

RepoGenTypeStackDescriptionLast Commit
org-manager2SVCTBDOrganization management2025-11-21
group-profile2SVCTBDGroup profile service (current)2025-09-05
peeq-group-profile1SVCTBDGroup profile service (legacy)2025-02-14
peeq-group-profile-db1DBFlyway/PostgreSQLGroup profile DB2024-08-16

Tags & Search

RepoGenTypeStackDescriptionLast Commit
tags2SVCTBDTags service (current)2025-08-29
peeq-tags1SVCTBDTags service (legacy)2025-02-14
peeq-tags-db1DBFlyway/PostgreSQLTags DB2022-09-23
search2SVCTBDSearch service2025-08-26
peeq-recommendation-engine1SVCTBDRecommendation engine2021-12-09

Security & Encryption

RepoGenTypeStackDescriptionLast Commit
peeq-encryption1SVCTBDEncryption service2020-09-24
peeq-encryption-db1DBFlyway/PostgreSQLEncryption keys DB2021-09-07
peeq-shared-secret1SVCTBDShared secrets management2021-02-23

Other Domain Services

RepoGenTypeStackDescriptionLast Commit
peeq-charity1SVCTBDCharity/donation features2021-09-08
peeq-charity-db1DBFlyway/PostgreSQLCharity DB2021-09-07
peeq-users1SVCTBDUser management2025-02-19
users2SVCTBDUser management (current)2025-08-26
tracking2SVCTBDTracking/analytics2025-09-16
node-tracking2SVCTBDNode-based tracking2025-04-29
node-tracking-db2DBTBDNode tracking DB2025-04-28
peeq-query1SVCTBDGeneral query service2025-02-14
reporting2SVCTBDReporting service2025-08-26
peeq-reporting1SVCTBDReporting (legacy)2022-05-05
journey2SVCTBDUser journey tracking2025-10-16
peeq-zendesk1SVCTBDZendesk support integration2021-08-25
Frontend Applications 14 repos
RepoGenTypeStackDescriptionLast Commit
peeq-mono1/2FEAngular 18 / Nx 19.8 / Ionic 6Primary frontend monorepo (web + mobile)2026-01-29
frontends2FEAngular 14 / NxAdmin, celeb, org-dashboard frontends2026-01-29
peeq-admin-fe1FETBDAdmin frontend (legacy standalone)2024-10-16
peeq-celeb-fe1FETBDCelebrity frontend (legacy)2024-10-16
peeq-celeb-fe-ui1FETBDCelebrity frontend UI components2020-08-04
peeq-celeb-ui1FETBDCelebrity UI variant2020-07-20
peeq-fan-fe1FETBDFan frontend (legacy)2023-01-27
peeq-fan-ionic1FEIonicFan mobile app2022-05-16
peeq-handler-fe1FETBDHandler/agent frontend2024-02-27
peeq-library-fe1FETBDLibrary/shared UI2024-10-16
peeq-celebrity-app1FETBDCelebrity native app2020-08-31
peeq-fan-app1FETBDFan native app2020-08-30
peeq-talent-app1FETBDTalent app2022-07-15
landing-page2FETBDMarketing landing page2025-06-06
Shared Libraries 8 repos
RepoGenTypeStackDescriptionLast Commit
core-lib2LIBJavaCore shared library (velocityz)2025-12-05
peeq-shared-lib1LIBJavaShared library (legacy)2022-09-23
peeq-messages1LIBJavaMessage definitions (legacy)2024-08-29
peeq-nugets1LIB.NETNuGet packages2021-03-11
peeq-logging1LIBTBDLogging library2022-03-31
graphql-spqr2LIBJavaGraphQL schema-first library2024-08-11
graphql-spqr-spring-boot-starter2LIBJavaGraphQL Spring Boot starter2024-01-07
graphql-migration2LIBTBDGraphQL migration utilities2025-08-07
Identity & Authentication 7 repos
RepoGenTypeStackDescriptionLast Commit
keycloak2INFRAKeycloakKeycloak server config2025-08-26
peeq-keycloak1INFRAKeycloakKeycloak config (legacy)2024-07-16
peeq-keycloak-archive1INFRAKeycloakArchived Keycloak config2022-10-05
celeb-keycloak-theme2FEKeycloak ThemeCelebrity login theme2025-11-24
fan-keycloak-theme2FEKeycloak ThemeFan login theme2025-07-10
peeq-handler-keycloak-theme1FEKeycloak ThemeHandler login theme2023-04-25
cibseven-keycloak2INFRACIB SevenCIB Seven Keycloak integration2025-07-11
Infrastructure & DevOps 19 repos
RepoGenTypeStackDescriptionLast Commit
terraform-environmentInfraINFRATerraformEnvironment provisioning2026-01-14
terraform-google-jxInfraINFRATerraformGKE + Jenkins X setup2022-07-08
terraform-modulesInfraINFRATerraformReusable Terraform modules2026-01-14
helm-chartsInfraINFRAHelmKubernetes Helm charts2026-01-19
argocdInfraINFRAArgoCDArgoCD server config2026-01-08
argocd-deploymentsInfraINFRAArgoCDDeployment manifests2026-01-29
argocd-previewsInfraINFRAArgoCDPR preview environments2026-01-29
argocd-reportsInfraINFRAArgoCDDeployment reports2025-08-05
gha-runnerInfraINFRAGitHub ActionsSelf-hosted runner config2025-01-27
gha-runner-imagesInfraINFRADockerRunner image definitions2025-06-26
github-reusable-workflowInfraINFRAGitHub ActionsReusable CI/CD workflows2026-01-16
pgbouncerInfraINFRAPgBouncerConnection pooler config2025-06-25
rabbitmq-queue-monitorInfraINFRATBDRabbitMQ monitoring2025-06-24
peeq-kibana1INFRAKibanaLog visualization2021-11-25
peeq-kibana-deploy1INFRAKibanaKibana deployment2022-02-09
trivy-scansInfraINFRATrivyContainer security scanning2026-01-30
renovate-configInfraINFRARenovateDependency update config2025-01-03
site-maintenanceInfraINFRATBDMaintenance page2025-06-24
devops-utlitiesInfraINFRATBDDevOps utility scripts2025-08-26
Data Pipeline & Analytics 4 repos
RepoGenTypeStackDescriptionLast Commit
peeq-airbyte1INFRAAirbyteETL data integration2022-05-04
dlt-pipelines2SVCPython/DLTData loading pipelines
superset-imports2INFRASupersetAnalytics dashboard imports2025-10-13
peeq-etl1SVCTBDETL processes (legacy)2022-03-25
BPM Engine 2 repos
RepoGenTypeStackDescriptionLast Commit
peeq-external-task-gateway1SVCTBDCamunda external task gateway2022-10-26
peeq-scheduler1SVCTBDTask scheduler2021-07-29
Testing & Quality 5 repos
RepoGenTypeStackDescriptionLast Commit
peeq-integration-test1TestTBDIntegration test suite2020-11-05
peeq-load1TestTBDLoad/performance testing2022-03-05
peeq-sandbox1TestTBDDevelopment sandbox2022-06-13
playwright2TestPlaywrightE2E test automation2026-01-29
test-spring-boot-app2TestJava/SBTest reference app2025-06-30
Documentation & Other 6 repos
RepoGenTypeStackDescriptionLast Commit
documentation2DocTBDPlatform documentation2025-10-07
peeq-documentation1DocTBDDocumentation (legacy)2022-01-29
nexgen3SVCEmptyNext-gen services (future)2026-01-30
memory-bank2ToolTBDMemory bank for AI sessions
claude-plugins2ToolTBDClaude AI plugins2026-01-06
investordeck2DocTBDInvestor presentation2025-08-07
POCs & Experiments 6 repos
RepoGenTypeStackDescriptionLast Commit
coolify-pocPOCINFRACoolifySelf-hosting platform evaluation2025-10-08
dokploy-pocPOCINFRADokployDeployment platform evaluation2025-10-24
firebase-pocPOCINFRAFirebaseFirebase evaluation2025-07-07
llm-agent-examplePOCToolTBDLLM agent prototype2025-04-01
example-java-springboot3POCSVCJava/SB 3Spring Boot 3 reference2025-08-05
zoom-cliPOCToolTBDZoom CLI integration2025-03-27
External/Partner Projects 5 repos
RepoGenTypeStackDescriptionLast Commit
clearlyagile2FETBDClearlyAgile brand site2025-08-12
clearlyagile-strapi2SVCStrapiClearlyAgile CMS2025-08-12
clearlyagile-v02FETBDClearlyAgile v02025-08-13
nilgp-partnerportal2FETBDNIL Game Plan partner portal2025-12-22
pvz-connect-be2SVCTBDPVZ Connect backend2023-08-17
Summary Statistics
CategoryCount
Total repos cataloged192
Gen 1 (peeq-*) services107
Gen 2 (non-peeq) services~50
Database repos25
BPM repos11
Frontend repos14
Infrastructure repos19
Libraries8
POCs/Experiments6
Migration Strategy 4 Waves • 6 Phases

Domain-by-domain strangler fig migration. Each phase is independently deployable and rollback-safe.

Key Principles

PrincipleDetail
Zero-downtimeAll migrations use Istio traffic shifting
Rollback always availableGen 2 services remain deployed until consolidated service is validated
One domain at a timeReduce blast radius
External IDs preservedStripe, Mux, Zoom, Stream Chat IDs carried forward
Backward-compatible APIGraphQL schemas evolve additively; both old and new serve traffic simultaneously

Wave Overview

WavePhaseScopeRisk
Wave 1Phase 0: InfrastructureRegional GKE, Cloud SQL HA, NetworkPolicies, CI security, OTel, test frameworkLow
Phase 0.5: BPM ReplacementReplace CIB Seven with Operaton (community Camunda 7 fork) for purchase + shoutout workflowsMedium
Wave 2Phase 1: PaymentMerge wallet + transaction + stripe + subscriptions → payment-service (4 DBs → 1)Medium
Phase 2: CommunicationMerge email + sms + notifications → notification-service (shared DB already)Low
Wave 3Phase 3: IdentityMerge celebrity + fan + users → identity-service (3 DBs → 1)Medium
Phase 4: ContentMerge content + media → content-service + NFS→GCS migrationMedium
Phase 5: EventsMerge shoutout + shoutout-bpm; upgrade class-catalog; merge journeyMedium
Wave 4Phase 6: Platform + Frontend + KeycloakPlatform services consolidation, frontend monorepo unification, Keycloak migration (LAST)High

Rollback Triggers (Automatic)

ConditionThreshold
Error rate>1% for >5 minutes post-migration
Payment failure rate>0.1% for >2 minutes
P99 latency>2x baseline for >10 minutes
Financial data inconsistencyAny detected

Data Migration Per Domain

DomainTablesExternal IDsStrategyRisk
Payment15Stripe (customer, product, subscription)Schema merge + validate balancesHigh
Notification~14Mandrill, Twilio SIDs (logs only)Already shared DB — no data migrationLow
Identity~12None (Keycloak UUIDs only)Schema mergeMedium
Content~20Mux (asset, playback), NFS pathsSchema merge + NFS→GCSHigh
Shoutout~6Mux (asset, playback)Schema mergeMedium
Class-Catalog~15+NoneIn-place upgrade + remove ArloMedium
Platform~8NoneSchema mergeLow
Inventory~12Stripe product IDsIn-place upgradeLow
Target Architecture ~28 → ~18 Services

H14 Falsified: Incremental upgrade with targeted consolidation, not a full rewrite.

H14 Evidence Assessment

FactorEvidenceFavors
Tech stack currencyJava 21, Spring Boot 3.5.4, Angular 18.2 — all currentUpgrade
Pattern consistencyAll services use core-lib, GraphQL, RabbitMQ, Keycloak (H13 L1)Upgrade
Service boundariesDatabase-per-service, no shared DB backdoors (H6 L1)Upgrade
Multi-brand archConfig-only differentiation (H11 L2)Upgrade
BPM engine EOLCIB Seven must be replaced regardlessNeutral
Test coverageNear-zero (H7 falsified) — rewrite wouldn’t have tests eitherNeutral
Infrastructure debtZonal clusters, no alerting — infra changes, not app rewritesUpgrade
Frontend splitCSS mismatch — restyling, not logic rewrite (H4 L1)Upgrade
External integrations11 active APIs — all must be preserved regardlessNeutral

Service Consolidation Map

Target ServiceSource ServicesRationale
identity-servicecelebrity, fan, usersSame domain, shared Keycloak
content-servicecontent, mediaShared Mux, overlapping video
payment-servicestripe, subscriptions, wallet, transactionSame financial domain
purchase-workflowpurchase-request-bpm (Operaton)CIB Seven replacement
shoutout-serviceshoutout, shoutout-bpmAbsorb BPM into service
class-catalog-serviceclass-catalog, journeySame learning domain
notification-serviceemail, sms, notificationsShared DB, delivery pipeline
platform-servicestags, tracking, group-profile, org-managerSmall supporting services

Services Kept Separate

ServiceReason
inventoryCross-cutting hub — called by 5 domains
webinarZoom lifecycle management
chatThin Stream Chat SaaS wrapper
message-boardRedis SSE fanout, distinct pattern
ssePlatform-wide real-time infrastructure
searchElasticsearch integration
onsite-eventDistinct domain
keycloakIdentity provider — migrated last

Target Tech Stack

LayerCurrent (Gen 2)Target
Java21 (except content: 24)Java 21 LTS (standardize)
Spring Boot3.5.43.x latest (maintain current)
FrontendAngular 18.2 (2 repos)Next.js (React) (Tailwind CSS, SSR) — via ADR-002 interim then ADR-008
BPM EngineCIB Seven 2.0Operaton (community Camunda 7 fork)
GKEZonal, cluster-per-tenantRegional, shared cluster
ObservabilityPrometheus + Grafana+ OpenTelemetry + alerting + SLOs
SecurityManual scanningCI-enforced Trivy + Qwiet
Tech Debt Inventory 32 Items • 8 P0 • 14 P1 • 10 P2

Prioritized technical debt across 7 categories. P0 = blocks migration, P1 = complicates migration, P2 = improve when convenient.

P0 — Must Fix (8 items)

ItemCategoryEffortImpact
CIB Seven EOLBPM EngineM2 BPM services + Keycloak plugin unsupported
Deprecated Mandrill libraryDependenciesSlutung 0.0.8 unmaintained, security risk
Zonal GKE clustersInfrastructureLNo HA — zone failure = full outage
Zonal Cloud SQLInfrastructureMNo automatic failover for databases
Near-zero test coverageTestingXL2–3 test files per service across all services
No CI security enforcementSecuritySTrivy/Qwiet run but don’t block deploys
No alerting configurationObservabilityMPrometheus deployed but no PrometheusRules
Content service on Java 24StandardizationSNon-LTS version, inconsistent with other services

P1 — Should Fix (14 items)

ItemCategoryEffortImpact
Cluster-per-tenant cost scalingInfrastructureXL4 identical clusters × all services
Frontend CSS framework splitFrontendXLTailwind vs Bootstrap blocks unification
No distributed tracingObservabilityMOpenTelemetry not adopted
No SLOs/error budgetsObservabilityMNo reliability targets defined
APM disabledObservabilitySElastic APM agent not collecting
No NetworkPoliciesSecurityMAll pods can communicate freely
~110 repos to archiveCodebaseSDead repos create confusion
12+ dead services with reposCodebaseSGen 1 overlap with Gen 2
core-lib version driftDependenciesS0.0.67–0.0.69 across services
messages lib version driftDependenciesS0.0.48–0.0.73 wider range
NFS storage couplingInfrastructureL4×50Gi PVCs per tenant tied to GKE zone
Elasticsearch 7.xDependenciesMEOL version, needs upgrade to 8.x or Elastic Cloud
3 date libraries in frontendsFrontendSdate-fns + moment + luxon 1 (pick one)
Apollo version mismatchFrontendSapollo-angular 11 vs 7

Over-Decomposed Services (Consolidation Candidates)

ServiceTablesEndpointsConsolidate Into
wallet35payment-service
transaction17payment-service
onsite-event2~5Keep (distinct domain)
sse2Inbound MQ onlyKeep (platform infra)
chat2~5Keep (Stream SaaS wrapper)
message-board4~8Keep (Redis SSE pattern)
Gap Analysis & Constraints 11 APIs • 5 SaaS Candidates

Immovable constraints, observability gaps, security gaps, and buy-vs-build analysis.

External API Constraints (Must Preserve)

External ServicePlatform ServicesWhat Must Be PreservedRisk
Stripestripe, subscriptions, purchase-bpmCustomer IDs, product IDs, webhook URLsHigh
Muxcontent, media, shoutoutAsset IDs, playback IDs, webhook URLsHigh
ZoomwebinarMeeting IDs, registrant IDs, credentialsMedium
Stream ChatchatChannel IDs, API keys, user tokensMedium
Twiliosms, Keycloak SPIAccount SID, phone numbersLow
MandrillemailAPI key, templates, sender domainsLow
Airbyte/SnowflakeanalyticsCDC connections (20 DBs), warehouse schemasMedium

Observability Gaps

CapabilityCurrent StateTarget
AlertingNo PrometheusRules configuredCritical alert rules for all services
Distributed tracingNot adoptedOpenTelemetry auto-instrumentation
APMElastic APM agent disabledActive APM collection
SLOs / Error budgetsNot definedSLIs/SLOs per service
Log aggregationElasticsearch + Kibana (Gen 1 pipeline)Cloud Logging or Elastic Cloud 8.x

Buy vs Build Analysis

CapabilityCurrentRecommendationRationale
Email deliveryMandrill (lutung library)Replace with Resend API (ADR-012)lutung is dead; Resend proven in CortexOne; simpler SDK
SMS deliveryTwilio (SaaS)KeepAlready SaaS, working well
BPM engineCIB Seven 2.0Migrate to OperatonNear-zero migration from Camunda 7; invest in BPM as platform capability
Logging pipelinepeeq-logging (Gen 1 Node.js)Replace with Cloud LoggingNative GCP integration, no maintenance
ChatStream Chat (SaaS)KeepThin wrapper, no benefit to building
Migration Decisions Register 27 Verdicts • 14 Hypotheses

Progressive register of domain-level migration verdicts and hypothesis assurance levels.

Domain Verdicts

DomainVerdictComplexityKey Constraint
FrontendConsolidateXLCSS framework mismatch (Tailwind vs Bootstrap)
User IdentityUpgradeLMagic Link SPI + CIB Seven EOL
Content & StreamingConsolidateLMux integration spans content + media
Payment (Billing)UpgradeLCIB Seven BPM + Stripe sync
Payment (Wallet)UpgradeSSimple coin ledger
Payment (Transaction)UpgradeSSingle-table payment log
DwollaRetireSInactive since Jan 2023
Events (Shoutout)ConsolidateMCIB Seven BPM orchestrates fulfillment
Events (Inventory)UpgradeMCross-cutting product catalog hub
Events (Class-Catalog)UpgradeMDeprecated Arlo LMS references
Comms (Email+SMS+Notif)ConsolidateMMandrill library unmaintained; shared DB
Comms (Chat)UpgradeSThin Stream Chat wrapper
Comms (SSE)UpgradeSPlatform-wide real-time infrastructure
Infrastructure (GKE)UpgradeLZonal → regional HA
CI/CDUpgradeSAdd security enforcement to existing workflows
Helm ChartsUpgradeSCommon chart v0.0.179 is stable
TerraformUpgradeMAdd regional HA, NetworkPolicies
ObservabilityUpgradeMGaps in alerting, tracing, APM

+ 9 more Retire verdicts for Gen 1 dead services (meet-and-greet, custom-tixr, peeq-conference-sse, peeq-websocket, peeq-sse, peeq-logging, peeq-shared-secret, etc.)

Hypotheses Tracker

#HypothesisAssuranceStatus
H1Broadcast not in productionL2 VerifiedConfirmed — archive repos
H2Dwolla inactiveL2 VerifiedConfirmed — archive repos
H3Gen 1 fully replaced by Gen 2L1 ValidatedOnly infra Gen 1 remains
H4Frontend unification feasibleL1 ValidatedCSS restyling, not logic rewrite
H5>50% repos archivableL1 Validated~110 of 192 (57%)
H6No shared DB backdoorsL1 ValidatedClean boundaries confirmed
H7>60% test coverageL0 Falsified2–3 test files per service
H8Data volumes manageableL0 PartialDB tier known, row counts needed
H9No compliance blockersL0 PartialLikely SAQ-A, need Stripe confirmation
H10APIs backward-compatibleL0 PartialGraphQL additive pattern supports it
H11Multi-brand is config-onlyL2 VerifiedAll domains + infrastructure confirmed
H12RabbitMQ contracts discoverableL2 Verified~75 message types fully mapped
H13core-lib stable foundationL1 ValidatedConsistent across all services
H14Gen 3 rewrite justifiedL1 Falsified (Reframed)Traditional rewrite rejected; agentic clean-build preserves architecture
Engineering Kickoff Conditional GO • Sprint 0 • 15 Stories

Go/No-Go recommendation, Sprint 0 scope, prioritized backlog, and team skills assessment.

Go/No-Go: CONDITIONAL GO

FactorEvidenceConfidence
Architecture is soundH14 falsified — preserve architecture, regenerate codeL1
Service boundaries cleanH6 — no shared DB backdoorsL1
Multi-brand is config-onlyH11 — verified across all domainsL2
Contracts discoverableH12 — 75+ message types mappedL2
Shared libraries stableH13 — core-lib proven foundationL1
Dead code identified~110 repos archivable, 12+ dead servicesL1
Migration strategy phasedEvery phase has rollback planL1

Sprint 0 Scope (6 Items)

#StoryPriorityEffort
1Upgrade GKE to regionalP0L
2Enforce CI security scanningP0S
3Deploy OpenTelemetry auto-instrumentationP0M
4Set up integration test frameworkP0M
5POC: Operaton migration for purchase workflowP1M
6POC: Notification service consolidationP1M

Skills Assessment

SkillCurrent StateGap
Java 21 / Spring Boot 3.5All Gen 2 servicesNo gap
Angular 18 / NxBoth frontend reposNo gap
Spring GraphQLAll services use thisNo gap
RabbitMQ / core-libAll services use thisNo gap
Terraform / AtlantisMature IaC workflowNo gap
Operaton (Camunda 7 fork)Using CIB Seven (Camunda 7.17)Near-zero migration
OpenTelemetryNot adoptedTraining needed
NetworkPoliciesNot deployedTraining needed
Tailwind CSS (frontends team)Bootstrap currentlyTraining needed
Integration testingVery low coveragePractice needed

Blockers (Resolve Before Wave 2)

BlockerActionOwner
H8: Production data volumes unknownObtain row counts for all 35 databasesPlatform / DBA
H9: PCI scope unconfirmedAccess Stripe dashboard, confirm SAQ levelEngineering lead
Integration Patterns 75+ Messages • 24+ GraphQL Gateways

Cross-cutting synthesis of all inter-service communication: GraphQL, REST webhooks, and RabbitMQ.

Communication Patterns

PatternUsageCount
GraphQLSynchronous service-to-service queries/mutations24+ gateways
RESTExternal webhooks (Stripe, Mux, Zoom) + file uploads4 webhook endpoints
RabbitMQAsync events via core-lib MessageSender/Handler~75 message types

RabbitMQ Statistics

MetricCount
Total message types discovered~75
Publishing services20+
Consuming services15+
Services with both pub + sub12
Dead message types3+ (Dwolla, encryption)

External API Inventory (Active)

APIServicePurposeKeys per Tenant
StripestripePayment processing, webhooks2 (payment key + webhook secret)
Muxcontent, mediaVideo upload, transcode, playback2 (token ID + secret)
TwilioKeycloak SPI, smsSMS delivery2 (SID + auth token)
MandrillemailTransactional email1 (API key)
ZoomwebinarMeeting creation, registration2 (key + secret)
Stream ChatchatReal-time messaging2 (key + secret)
GCSmedia, celebrityBlob storage, signed URLsWorkload Identity

Total: 3 production tenants × 11 active integrations = ~33 key sets to manage/migrate.

Key Integration Risks

RiskImpactMitigation
Keycloak migrationAll 28+ services affected simultaneouslyMigrate last, coordinated maintenance window
Inventory service couplingCalled by 5 domainsKeep stable, upgrade in place
BPM engine in-flight stateRunning process instancesDrain active instances before replacement
External webhook URLsStripe, Mux (×2), ZoomUpdate dashboards during migration
Notification pipelinePrimary fan-out mechanismMigrate as single unit, test all channels
Architecture Decision Records 24 ADRs

24 proposed architectural decisions pending engineering team review. Click any row to see full detail.

ADRDecisionStatusKey EvidenceOverall Assurance
ADR-001 Service Consolidation: ~28 → ~18 services along domain boundaries Proposed H13 L1 (consistent patterns), H6 L1 (clean boundaries), H12 L2 (contracts discoverable) L1 (capped by H8)
ADR-002 Frontend Unification (Interim): Merge into single monorepo on Tailwind CSS, before Next.js migration (ADR-008) Proposed H4 L1 (feasible via restyling), both repos Angular 18 (L2), ~17% dead code L1
ADR-003 Java Standardization: All services on Java 21 LTS, aligned core-lib versions Proposed 28+ services already on Java 21 (L2), content service Java 24 is anomaly (L2) L1
ADR-004 Multi-Brand: Shared GKE cluster with namespace-per-tenant isolation Proposed H11 L2 (config-only differentiation), same Docker images (L2) L1 (capped by H8)

ADR-001 Consolidation Map

TargetSource ServicesRationale
identity-servicecelebrity, fan, usersSame domain, shared Keycloak
content-servicecontent, mediaShared Mux, overlapping video
payment-servicestripe, subscriptions, wallet, transactionSame financial domain
notification-serviceemail, sms, notificationsShared DB, delivery pipeline
shoutout-serviceshoutout, shoutout-bpmAbsorb BPM into service
class-catalog-serviceclass-catalog, journeySame learning domain
platform-servicestags, tracking, group-profile, org-managerSmall supporting services

ADR-004 Isolation Mechanisms

LayerCurrentTarget
ComputeSeparate clustersNamespace + ResourceQuota
NetworkPhysical isolationNetworkPolicies (default-deny)
Service meshSeparate IstioShared Istio + AuthorizationPolicy
DatabaseSeparate Cloud SQLShared Cloud SQL + separate schemas
MessagingSeparate RabbitMQShared RabbitMQ + vhosts
SecretsCluster-scopedNamespace-scoped (AVP)
Domain Glossary 5 Categories

Canonical terminology for The Agile Network platform.

User Roles

Canonical TermCode Names / AliasesDescription
Expertcelebrity, celeb, talent, athleteProfessional athletes, coaches who create content and host experiences
Fanfan, subscriber, consumerUsers who subscribe, attend events, purchase content
Handlerhandler, agent, managerAgents who manage expert profiles and scheduling
AdminadminPlatform administrators
Organizationorg, org-managerEntities sponsoring or managing groups of experts

Platform Concepts

TermDescription
BroadcastOne-to-many live video event powered by Mux
ShoutoutPersonalized video message from expert to fan (Cameo-style)
WebinarMulti-participant interactive video session via Zoom
ContentVideos, articles, resources, educational materials
ClassScheduled educational/training sessions with CEU/PDU tracking
SubscriptionRecurring billing relationship (fan subscribes to expert channel)
WalletIn-app virtual currency (“Peeq” coins) for purchases
InventoryCross-cutting product catalog and capacity management

Brand Portfolio

BrandSlugStatusMarket
The Agile NetworkagilenetworkProductionSports fan-to-athlete engagement
NIL Game PlannilgameplanProductionNIL for college athletes
VT NILvtnilProductionVirginia Tech NIL
Speed of AIspeedofaiProductionAI/tech vertical
BrainTrustbraintrustPreviewBusiness/professional networking
FanFuze NILfanfuzenilPreviewFan engagement + NIL deals

Technology Generations

GenPackage PrefixJavaSpring BootCI/CDStatus
Gen 1com.peeq / peeq-*112.6.8Jenkins XLegacy — being retired
Gen 2com.velocityz / non-prefixed213.5.4GitHub ActionsCurrent production
Risk Analysis

What Happens If We Do Nothing?

The cost of inaction is not zero. Every month of delay compounds technical risk.

Security

CIB Seven: No Patches

Community support ended Oct 2025. Every month without migration increases exposure to unpatched CVEs across 2 BPM services and the Keycloak plugin.

Dependencies

lutung: Dead Library in Production

Every transactional email runs through an unmaintained library (deprecated 2016). No security updates, no bug fixes, no migration path until replaced.

Availability

Zonal GKE: Single Point of Failure

Current zonal clusters mean a single zone outage takes down all production traffic for that tenant. Regional migration eliminates this risk.

Cost

3 Clusters × 35 DBs: Compounding Spend

Running separate infrastructure per tenant with 35 databases each means cloud costs scale linearly with every new brand. Consolidation breaks this pattern.

Consolidated Risk Register

RiskCategoryLikelihoodImpactScoreMitigation
CIB Seven unpatched CVESecurityHighHigh9ADR-013: Migrate to Operaton
lutung library exploitSecurityMediumHigh6ADR-012: Replace with Resend API
Zonal GKE outageAvailabilityMediumCritical8Wave 1: Regional GKE migration
Keycloak migration cascadeMigrationMediumHigh6Migrate last, coordinated maintenance window
BPM in-flight state lossMigrationLowHigh4Drain active instances before replacement
External webhook URL breakageIntegrationMediumMedium4Update Stripe/Mux/Zoom dashboards during migration
Data volume unknowns (H8)PlanningHighMedium6Obtain row counts before Wave 2
PCI scope uncertainty (H9)ComplianceMediumMedium4Confirm SAQ level via Stripe dashboard
Apple IAP integration gapMobileHighMedium6ADR-009: Resolve before mobile app store submission

Scoring: Likelihood (1-3) × Impact (1-3). Scores 7-9 = Critical, 4-6 = Medium, 1-3 = Low.

Ready for Sprint 0

The path is clear.
Let's modernize.

192 repos analyzed. 14 assumptions tested. 24 ADRs proposed.
One recommendation: Upgrade, simplify, and modernize.

28→18
Services
35→6
Domain Databases*
3→1
Clusters
50-70%
Est. Cost Reduction*
Angular→Next.js
Frontend + SSR
React Native
Native Mobile
5→1
Keycloak Instances
192→40
Active Repos

* Cost reduction estimate is L1 (pending billing data audit). Domain databases refers to consolidated service databases; standalone services retain their own DBs.

ADR-001

Title