# Phoenix Sankofa Cloud: Technology Stack ## Overview **Phoenix Sankofa Cloud** is built on a modern, scalable technology stack designed for: * **Dashboards** → fast, reactive, drill-down, cross-filtering * **Drag-n-drop & node graph editing** → workflows, network topologies, app maps * **3D visualizations** → network and architecture in 3D, interactive camera, labels, layers * **"Studio quality" visuals** → film/AAA-game-adjacent look, not BI chart boilerplate * **Future-proof** → typed, testable, driven by existing control plane (Proxmox, Crossplane, Cloudflare, etc.) --- ## Front-End Stack ### Core Framework **Next.js 14+ (React + TypeScript)** - App Router for modern routing - SSR/ISR for performance and SEO - API routes for light backend glue - Excellent DX, file-based routing, easy deployment ### Language **TypeScript** - Strong typing for complex graph interactions - Type safety for 3D scenes and data structures - Better IDE support and developer experience ### Styling & Layout **TailwindCSS + shadcn/ui** - Modern, dark-mode-friendly design system - Dense "studio dashboard" aesthetic - Full control over styling and theming - Component-based UI library **Framer Motion** - Smooth animations and transitions - Panel transitions, node selection, drag-n-drop feedback - Mode transitions (2D <-> 3D) ### State Management **Zustand / Jotai** - Local UI state management - Lightweight and performant **React Query (TanStack Query)** - Server state management - GraphQL client integration - Caching and synchronization --- ## Dashboards & Analytics ### Charts / Dashboards **ECharts** (via React wrappers) - Complex, animated dashboards - High performance - Extensive customization options - Studio-quality visuals **Alternative: visx / Recharts** - More React-native feel - Good for design-system-driven visuals ### Tables & Data Grids **TanStack Table (React Table)** - Advanced, virtualized tables - Custom cell renders (status pills, spark-lines, tags) - Excellent performance for large datasets ### Maps / Geo **Mapbox GL JS** or **deck.gl** - Plotting regions, edge locations, tunnel endpoints - Interactive geographic visualizations --- ## Drag-n-Drop and Visual Editors ### Graph/Node-Based Editing **React Flow** - Excellent for node/edge editors - Built-in zoom/pan, minimap - Custom node/edge renderers - Perfect for L2 "Well-Architected Framework" diagrams - Logical views of architecture ### General Drag-n-Drop **@dnd-kit** or **react-beautiful-dnd** - List/board/kitchen-sink DnD - Building component palettes - Dashboard layout editors ### Canvas 2D **Konva.js / react-konva** - Highly interactive 2D diagrams - Annotations and overlays - High-performance 2D rendering **Pattern:** - L2 / logical diagrams → React Flow / Konva - L3 / detailed visuals → 3D WebGL (see 3D section) --- ## 3D Visualizations ### 3D Engine **three.js** - WebGL engine for 3D graphics - Industry standard for web 3D **react-three-fiber (R3F)** - Declarative three.js in React - Component-based 3D scene management **@react-three/drei** - Camera controls, orbits, gizmos - Text rendering, environment setup - Helper components for common 3D patterns **postprocessing** (R3F plugin) - Bloom effects - SSAO (Screen-Space Ambient Occlusion) - Depth of field - Color grading - Cinematic visual quality ### Graph & Network Visuals in 3D **3D Graph Layout** - **d3-force-3d** or **ngraph.forcelayout3d** - Position nodes in 3D space - Feed positions into R3F meshes (spheres, cubes, capsules) - Connect with lines or tubes **Topologies** - Each **node** = service, region, cluster, VPC, etc. - Each **edge** = peering, VPN, Cloudflare tunnel, dependency - Layers for: * Regions (325 global nodes) * Availability zones / sites * Services running * Health & risk overlays (color, size, pulsing) **Interactions** - Orbital camera (drei's ``) - Click nodes → open side panel with metrics - Hover edges → show latency, bandwidth, status - Use **instanced meshes** for performance with many nodes --- ## Back-End & Data Model ### API Layer **GraphQL** - **Option A**: Hasura on Postgres (auto GraphQL) - **Option B**: Apollo Server / NestJS GraphQL over Postgres/Neo4j - Perfect fit for graph-like data: * regions * clusters * networks * services * dependencies ### Data Store **Relational + Graph Hybrid** **Option A (Pragmatic):** - **PostgreSQL** with: * Topology tables (resources, relations, metrics) * JSONB for flexible metadata * Materialized views for dashboards **Option B (More "Native"):** - **Neo4j** or another graph DB for relationships * Natural for queries like: * "Show all paths from this service to this edge" * "Which nodes share a risk factor?" **Hybrid Approach:** - Start with Postgres - Move hot graph queries to Neo4j later - Best of both worlds ### Real-Time **Real-Time Pipeline** - **Metrics**: Prometheus → push to TSDB (Prometheus / Timescale) - **Events**: Kafka/Redpanda or NATS for events (state changes, incidents) - **UI**: WebSockets / GraphQL Subscriptions to push updates **Examples:** - Node changes color when health crosses threshold - Edge animates when traffic spikes - New region lights up when provisioned via Crossplane --- ## Integration with Infrastructure ### Control-Plane Adapters (Backend Services) Services that: - Call **Proxmox APIs** (cluster, VM, storage) - Call **Cloudflare APIs** (tunnels, Zero Trust configs, DNS) - Query **Crossplane/Kubernetes** (CRDs representing resources) ### Normalize into "Resource Graph" Everything becomes a node in graph DB or Postgres schema: - Region - Site - Cluster - Node - VM/Pod/Service - Tunnel - Policy **UI reads this graph, not raw cloud APIs.** This enables Azure-Graph-like behavior without Azure. --- ## Tooling, DevOps, and Quality ### Dev Environment - **Package Manager**: pnpm / yarn - **Linting**: ESLint - **Formatting**: Prettier - **Component Development**: Storybook (for UI components & visual system) - **Testing**: Vitest / Jest + React Testing Library ### Build & Deploy **Docker Images** for: - Front-end (Next.js) - API (GraphQL servers) - Graph DB / Postgres **Deploy on:** - Kubernetes control cluster (part of architecture) - Traefik or NGINX Ingress behind Cloudflare ### Observability - **Logs**: Loki / ELK - **Metrics**: Prometheus + Grafana - **Traces**: OpenTelemetry / Tempo --- ## Well-Architected Framework Visualizations ### Pillar Views - Security - Reliability - Cost Optimization - Performance Efficiency - Operational Excellence - Sustainability ### Layered Views - **Physical** (Proxmox nodes, racks) - **Network** (subnets, tunnels, regions) - **Application** (services, workloads, dependencies) - **Governance** (policies, SLAs, compliance) ### Implementation Pattern 1. **Model pillars & controls in backend** - GraphQL types: Pillar, Control, Finding, Risk, Recommendation 2. **Bind each resource node** to: - Which pillar(s) it affects - Score/health for each pillar 3. **In UI:** - Use **React Flow** 2D diagrams for pillar-specific overlays - Use **R3F 3D** to show structural/physical layout, colored by pillar health - Provide **"Lens" switch** (Performance lens, Security lens, Cost lens) that: * Changes color mapping & overlays * Toggles visibility of certain node types * Animates transitions with Framer Motion / R3F This delivers **studio-quality, cinematic, but cognitively useful** Well-Architected views. --- ## Recommended Stack Summary (Opinionated) ### Front-End * Next.js (React, TypeScript) * TailwindCSS + shadcn/ui * React Query / Apollo Client * Framer Motion * React Flow + @dnd-kit * react-three-fiber + drei + postprocessing * ECharts / visx for charts * TanStack Table for data grids ### Back-End * GraphQL API (NestJS + Apollo OR Hasura + Postgres) * Postgres (core data) + optional Neo4j for complex graph queries * WebSockets / GraphQL Subscriptions for real-time ### Infra * K8s on existing clusters * Traefik/NGINX ingress behind Cloudflare * Prometheus, Loki, Grafana, OpenTelemetry --- ## Next Steps 1. Design the **actual data model** (tables/graph schema) 2. Sketch the **component structure** of the UI (pages, editors, 3D views) 3. Write **starter Next.js project structure** with key libraries wired together