-
Notifications
You must be signed in to change notification settings - Fork 57
feat(post): chromecast standalone project #481
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -95,6 +95,7 @@ GEM | |
| PLATFORMS | ||
| aarch64-linux | ||
| arm64-darwin-21 | ||
| arm64-darwin-24 | ||
| universal-darwin-22 | ||
| x86_64-linux | ||
|
|
||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,82 @@ | ||
| --- | ||
| layout: post | ||
| title: "Rebuilding Chromecast: From a Monolithic \"Nightmare\" to a High-Performance Standalone App" | ||
| description: Chromecast used to be a nightmare for our clients and our teams, here is the story of how we made it one of our most interesting and modern project while dramaticaly improving performance. | ||
| author: [a_gaudard] | ||
| tags: [chromecast, TV, web, javascript, frontend, player, video, performance] | ||
| color: rgb(251,87,66) | ||
| language: en | ||
| thumbnail: "/images/posts/2026-01-04-new-chromecast-project/thumbnail.png" | ||
| --- | ||
|
|
||
| Chromecast can be a notoriously difficult platform to develop for. Over the years, the hardware has evolved significantly; while recent models are powerful, early versions are easily overloaded and struggle with modern web overhead. | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This first paragraph is used on the homepage of the blog (= in the list of posts). And I think it lacks "something" to give reader an idea of what the post will bring. Maybe merge the next paragraph with this one? Or: there is a metadata tag that can be used to specify which text to use on the home page, if you don't want to screw formating up. |
||
|
|
||
| At Bedrock, we faced a specific architectural challenge: our Chromecast project was living as a single route within our massive main web repository. While this "monolith" approach worked initially, our rapid growth eventually turned it into a bottleneck. | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. "massive main web repository" -> could that be a link to the blogpost about maintaining that 10 years old project? I think there is one such post.
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Great idea ! The only one I found is this one : https://tech.bedrockstreaming.com/2021/09/06/web-best-practices.html I think it is close enough to add it as a link |
||
|
|
||
| ## 📉 The Trouble with the Monolith | ||
|
|
||
| As the project scaled, we hit a wall with two primary issues: | ||
|
|
||
| **User Dissatisfaction:** Performance wasn't meeting our standards. One of our major clients has massive Chromecast traffic, and the laggy experience was becoming a significant pain point. | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Why was performance bad? One sentence is enough. |
||
|
|
||
| **Developer Dread:** The team grew to worry whenever a Chromecast ticket appeared in the sprint. Because it was tied to the main web project, it meant dealing with long, complex and painful developer experience. | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. One could argue painful DevXP must be a pain for "web" devs too. Why was this specific to chromecast devs? Maybe the chromecast parts where too tangled in the web repo? |
||
|
|
||
| ## 🛠 The Challenge: Breaking Free | ||
|
|
||
| We couldn't change the hardware our users owned, so we had to change how our software interacted with it. We identified two core areas for improvement: | ||
|
|
||
| 1. **Bloated Dependencies:** Because the Chromecast app was part of the main website, it was loading tons of irrelevant Javascript. We were essentially forcing a low-power device to carry the weight of a full desktop site. | ||
|
|
||
| 2. **Deployment Velocity:** Our build and deployment processes were tethered to the main web project. We needed a workflow that allowed us to move fast without being slowed down by the main site's release cycle. | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. On these two points, there is a "why" explained 👍. I'd love to the the same thing on the two points earlier where I commented :-) Or maybe this "brekaing free" section should be merged with the "The Trouble with the Monolith" section? Afterall, the two points in each section seem quite similar?
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. You're right ! |
||
|
|
||
| ## 🚀 The Solution: Chromecast Standalone | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Purely from a "form" perspective, I think a schema or image somewhere around here (= 1/3 of the post) would help make it more "breathable" 🙏 |
||
|
|
||
| Following Bedrock’s **Request for Comment (RFC)** process, our Tech Lead conducted a deep dive into our options. The verdict? **It was time to move to a dedicated, standalone repository**. | ||
|
|
||
| This wasn't just a change of address; it was a total refresh: | ||
|
|
||
| - **Modern Tech Stack:** We adopted updated tools better suited for the platform. | ||
| - Typescript | ||
| - BiomeJS | ||
| - Vite | ||
|
Art-G marked this conversation as resolved.
|
||
| - Vitest | ||
|
|
||
| - **Transformed Developer Experience:** By moving to a standalone project, we completely overhauled how we work. We built custom simulation tools to replicate the Chromecast environment locally, drastically increasing feature velocity. | ||
|
|
||
| - **The POC:** To prove our theory, we built a Proof of Concept. It was a very simplified version of what would become the Chromecast Standalone, however we could do so much with so little that we were all convinced. | ||
|
Art-G marked this conversation as resolved.
|
||
|
|
||
| - **Project Architecture:** We choose the monorepo architecture for our Chromecast project to enforce best practices, improve code organization, and enable potential code reuse across projects. | ||
| - `apps/`: Contains the Chromecast receiver. It’s designed to be extensible, allowing us to add other targets (like Apple AirPlay) in the future while sharing the same core logic. | ||
| - `libs/`: The "source of truth" for reusable utilities. To prevent spaghetti code, these are strictly unidirectional: libs can import other libs, but they can never import from an app. | ||
| - `tools/`: Dedicated to the developer experience (DX). This houses non-production code like CLIs, documentation, and Storybook, keeping the main application bundles clean and light. | ||
| - `package.json` at root level: Centralizes all dev-dependencies and testing environments, ensuring consistency across the entire workspace. | ||
|
|
||
| ## 📊 The Results: Impact by the Numbers | ||
|
|
||
| The results didn't just meet our expectations—they shattered them. By decoupling the project, we saw a significant and measurable increase in both stability and speed. | ||
|
|
||
| ### Core Performance Metrics | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. There is one 3rd level title here, but it's the only one. Use such a title if there is another 3rd level title later, but not if it's the only one? |
||
|
|
||
| - **Video Join Time:** Reduced from **~5.8s** to **~2.8s** 🚀 (A massive **52% improvement**!) | ||
|
|
||
| - **IDLE / Pairing Page Load:** Dropped from **~7s** down to **~4s** ⚡ | ||
|
|
||
| - **Stability:** We have witnessed significantly fewer critical performance variations, leading to a much more consistent user experience. | ||
|
|
||
| **Note:** We are still in the process of migrating our entire user base, but the data from the new implementation is already showing all the benefits. | ||
|
|
||
|  | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I would write down something saying UserXP is much much better. Also: in the problems at the beginning of the post, in addition to UserXP, there is DevXP => I'd love the see if DevXP is better now in this "results" section 🙏
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Regarding DevXP: does this (smaller? more focused) repo help with AI-assisted development, for example? Has the duration of on-boarding of new colleagues been greatly reduced? Maybe cycle-time for new features has been reduced?
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. A metric you could show (if it's interesting) could be duration for builds. Maybe build time is now much shorter? |
||
|
|
||
| ## 💡 Lessons Learned | ||
|
|
||
| Decoupling a core feature from a monolith is a major undertaking, but this project highlighted several key principles for success: | ||
|
|
||
| - **Validate via POC:** Building a Proof of Concept was crucial. It provided the data needed to prove that a standalone architecture would solve our performance issues before we committed to a full rewrite. | ||
|
|
||
| - **Platform-Specific Needs:** Low-power devices like the Chromecast don't just benefit from lean code—they require it. Tailoring the environment specifically for the hardware is often more effective than trying to optimize a shared codebase. | ||
|
|
||
| - **Autonomy Drives Velocity:** Removing the dependency on the main web project's build and deployment cycles did more than just speed up our workflow; it removed the "developer dread" by giving the team full ownership of their release process. This is valid for our chromecast team as well as our web team. Indeed their validation, homologation and release process don't need to include the Chromecast. | ||
|
|
||
| - **Data-Driven Buy-In:** Highlighting clear KPIs, like the 50% reduction in video join time, made it easy to demonstrate the ROI to stakeholders and justify the time spent on refactoring. | ||
|
|
||
| By focusing on these areas, we successfully transitioned from a technical bottleneck to a modern, high-performance application that our team is proud to maintain. | ||
Uh oh!
There was an error while loading. Please reload this page.