Focal builds run 2x faster with Avrea


Results
- 2x faster CI than GitHub-hosted runners, on a Turborepo monorepo that was running Vercel Remote Cache
- Built-in Turborepo Remote Cache on Avrea, with no extra configuration to manage
- Run Avrea side-by-side with GitHub for a day and switched over to Avrea on day two
- Migration: one line in the workflow file (runs-on: avrea-ubuntu-latest-4vcpu)
About Focal
Focal.inc is building a collaboration platform for creative and marketing teams. The product gives teams guided, channel-aware workflows for producing creative assets, with placement mockups and validation built into each step.
The engineering team is small and senior, shipping product fast on a Turborepo monorepo running pnpm and Node.js.
Before
Focal's CI ran on GitHub-hosted runners with Vercel Remote Cache wired into Turborepo. That's the standard high-performance setup for a Turborepo team that wants to stay on GitHub Actions: cache hits on unchanged packages, parallel task execution, and a remote store sitting between runs.
The team had already done that optimisation work themselves and they were looking for a way to speed up CI even more.
After
Focal heard about Avrea through a recommendation from a trusted engineer in their network. To battle-test Avrea, Focal duplicated their existing CI workflow and changed one line: runs-on: avrea-ubuntu-latest. The Avrea pipeline ran alongside the GitHub-hosted one for direct comparison.
Avrea ran the same workflow 2x faster than GitHub-hosted runners, with Vercel Remote Cache still active on the GitHub side. Avrea's runner image also exposes a Turborepo Remote Cache endpoint via standard environment variables (TURBO_API, TURBO_TOKEN, TURBO_TEAM), so Focal didn't need to keep a separate cache vendor running.
The same Turborepo workflow ran 2x faster on Avrea — same config, same dependencies, same packages, different runner.
They were able to remove Vercel Remote Cache. Avrea's runner image handles Turborepo caching directly, so that's one external dependency Focal doesn't need to keep configured.


