The challenge
RYOT's creators make 3D content for brands like the NFL, HuffPost and Yahoo. A model that renders fine in desktop Chrome can bring iOS Safari or an Android WebView to its knees, and raw creator files arrive with huge polygon counts and 4K textures. The team needed a tool that handled all of that without a person cleaning up every file by hand.
What we did
A Blender pipeline with nobody in the loop
We built a server-side pipeline that runs Blender headless. It decimates meshes, compresses textures, bakes materials and exports a version tuned for each platform. Blender was never meant to run as a service, so the pipeline also handles hung jobs, memory blowups and queueing on its own.
The right home for each workload
Short, stateless API calls run on AWS Lambda. The heavy processing, which can take minutes and needs retries, runs on Kubernetes. Services talk through event-driven queues instead of chains of synchronous calls, so one slow job can't cascade into failures elsewhere. Each service uses the store that fits it: PostgreSQL, DynamoDB, Neo4J or Redis.
Fast APIs and a team that could move
We wrote the GraphQL microservices in TypeScript and Go, documented each one, and kept synchronous responses under 300ms. A Docker-based dev environment cut onboarding from weeks to days, and test coverage stayed above 70% with Jest, Vitest, K6 and Cypress.
Tech stack
- TypeScript, Go, Node.js, Nest.js, GraphQL
- AWS Lambda, SAM, Kubernetes (EKS)
- PostgreSQL, DynamoDB, Neo4J, Redis
- Blender, Docker, Terraform
- Jest, Vitest, K6, Cypress
