Skip to content

Architecture Overview

Uniflow is a fully serverless CDP deployed to your AWS account. Every component auto-scales and runs at near-zero cost when idle.

Client SDK
└─▶ API Gateway (HTTP API)
└─▶ Lambda (validate + enrich)
├─▶ Kinesis Data Stream ──▶ Firehose ──▶ S3 (raw, GZIP)
└─▶ Kinesis Data Stream
└─▶ Lambda (processor)
├─▶ DynamoDB (identity graph + profile upsert)
└─▶ SQS (destination fan-out)
└─▶ Lambda (connector) ──▶ External system
EventBridge Scheduler (hourly)
└─▶ Glue PySpark Job (audience-builder)
└─▶ Athena query over S3 ──▶ DynamoDB (segment membership)
Cognito ──▶ API Gateway ──▶ Lambda (management API)
Next.js static export ──▶ S3 ──▶ CloudFront
  1. Client SDKs send events (track, identify, page, group) to the ingest endpoint
  2. API Gateway HTTP API receives the request with write-key authentication
  3. Ingest Lambda validates the event against Zod schemas, enriches with server-side context (IP, timestamp), and writes to Kinesis
  1. Kinesis Data Stream buffers events with 7-day retention
  2. Firehose delivers raw events to S3 in GZIP-compressed NDJSON format
  3. Processor Lambda consumes from Kinesis, performs identity resolution (linking anonymous → known users), upserts profiles in DynamoDB, and fans out to SQS
  1. SQS queues events per destination with dead-letter queues for reliability
  2. Connector Lambda executes the destination connector (webhook, S3 export, or custom)
  1. EventBridge Scheduler triggers hourly
  2. AWS Glue runs the audience-builder PySpark job, which reads S3 via Spark SQL and writes segment membership to both S3 (Parquet) and DynamoDB
  1. Management API Lambda provides CRUD for sources, destinations, segments, and profiles
  2. Admin UI is a Next.js static export served via CloudFront
ComponentComputeWhy
Ingest APILambdaZero idle cost, auto-scales
Stream processorLambdaShort-lived, stateless
Audience builderAWS Glue (PySpark)Serverless Spark for complex segment queries, no VPC needed
Destination connectorsLambdaEvent-driven, short-lived
Management APILambdaLow-traffic CRUD