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.small ARM64 Graviton), S3, CloudFront CDN, Cognito (OAuth2), SQS, SSM Parameter Store (KMS SecureString + 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.