RAVN

RAVN is a cloud-native, analytics-first hypertrophy platform engineered to solve the static data limitations of standard workout trackers. Built on AWS with a Go backend and an asynchronous SQS worker architecture, it processes workout volume, set intensity, and progression bottlenecks in real time.
Launch Live App (ravn.resonistic.com) →
(Note: To keep cloud costs lean during alpha, the live EC2 origin runs Monday–Friday, 09:00–19:30 UTC via AWS EventBridge).
Tech Stack & Architecture
- Backend & Concurrency: Go (standard library
net/http), Goroutine worker pools, asynchronous SQS long-polling - Frontend: Next.js, TailwindCSS, DaisyUI (thin client layer)
- Data & State: PostgreSQL, Redis (caching & distributed user-state mutex locks)
- AWS Infrastructure: EC2 (
t4g.smallARM64 Graviton), S3, CloudFront CDN, Cognito (OAuth2), SQS, SSM Parameter Store (KMSSecureString+ local AES encryption), AppConfig (feature flags), Route 53, Lambda & EventBridge - DevOps & Packaging: Docker, Docker Compose, multi-arch
docker buildx(linux/amd64&linux/arm64), Amazon ECR, AWS CodeCommit
Engineering Deep-Dive Series
Part 1: Choosing the Tech Stack & High-Level AWS Architecture
Why I chose Go's standard net/http over third-party frameworks, kept Next.js thin, and evaluated EC2 Graviton + Docker Compose against the cost floors of RDS, ElastiCache, ALB, and Fargate.
Part 2: Async Ingestion, Cognito & Asset Optimisation
Implementing OAuth2 with AWS Cognito, decoupling slow third-party API syncs into an asynchronous Go + SQS worker pipeline, managing Redis distributed locks, and serving WebP assets via S3 and CloudFront.
Part 3: Going to Production, Configuration & Security
Cross-compiling multi-architecture (amd64/arm64) containers to ECR with docker buildx, managing secrets via SSM Parameter Store, rolling out feature flags with AWS AppConfig, and locking down origin ingress to CloudFront.
Part 4: Battling Hidden AWS Costs, IP Automation & Lessons Learned
Navigating the IPv6 package mirror wall, eliminating idle Elastic IP charges using EventBridge, Lambda, and dynamic Route 53 DNS updates, plus post-mortem reflections on Protobuf overhead and Terraform.