← Projects
Echo Look Style Feed icon

Echo Look Style Feed

LaunchedDeprecated

Echo Look's social feed — daily looks with auto-tagged products, published into Amazon's social shopping network. The last major feature Echo Look shipped, and the most visited part of the app.

amazonecho lookreact nativeredux-sagaioscomputer visionsocial

Style Feed — internally, Echo Look Community — was the social layer of the Echo Look app: a feed where people shared their daily looks, with the products in each photo automatically tagged, and where that content was also published to the men's and women's fashion feeds of Amazon Spark, Amazon's social shopping network, both in the Shopping app and on desktop.

It took years of planning, months of prototyping, and close collaboration with the Spark team and with Echo Look's native iOS architects. It became the most visited section of the Echo Look app, and the last major feature Echo Look shipped.

The architecture nobody believed in

The feed had to run on a partner team's React Native WebSocket communications library — the only supported way to consume their content graph. Echo Look's native iOS architects were skeptical that a stable, high-performance feed could be built that way, and they had reason to be.

So I prototyped a hybrid, in which React Native owned the WebSocket lifecycle and owned it fault-tolerantly, while the entire feed rendered natively through IGListKit. React Native handled the part that React Native was good at, which was a messy, stateful, reconnecting network protocol modeled as a redux-saga state machine, and React Native stayed out of the render path, because that is where native scrolling performance was not negotiable.

Partner WebSocket servicecontent graph, live updatesReact NativeWebSocket lifecycleredux-saga state machinereconnect, retry, authstateful, messy, off the render pathNativeIGListKit feed renderingVIPER-conformant bindingswhere scroll performance is non-negotiablebridge
Each side does only what it is good at. The prototype of this split is what earned the native architects' trust.

The prototype was how I earned the architects' trust. We also developed a pattern for React Native component bindings that conformed to the VIPER architecture the rest of the native app used, so the feature didn't sit as a foreign body inside the codebase.

Shipping it in three passes

Influencer content first. The initial feed was read-only, and it consisted entirely of content that influencers had posted through the partner team's web posting flow, so that the surface we shipped was as small as we could make it while the customers on it were real customers and the data in it was real data.

Then reactions. Once the feed became the top feature in the app, we added the ability to "smile" on content, and that sounds like a small addition, but it was not a small addition. It meant significantly more complex flows against the WebSocket library, and it meant building an onboarding flow with the Amazon Profile team, because reacting to content requires an identity and an identity has to come from somewhere.

Then posting. Posting was the final piece and it was the largest piece. Posting from the app required calling visual search on every user image, and auto-tagging the products in the correct regions of the photo, and converting our story schema into a schema the social platform could accept, and building a posting flow robust enough to handle over 100 user images inside a single story. It also required a second feed where people could see and interact with only their own posts, and it required complete workflows for reporting content as inappropriate and for deleting content of your own.

Where the content went

Style Feed submissions quickly became some of the most popular content on the entire social platform — in the Shopping app and on the web. That content outlived the feature: it remained available under #founditonamazon and was indexed into the media search service that powered visual recommendations for Alexa's "what should I wear" responses, which became the basis for Style Hub.

The Android launch that didn't happen

On the strength of the iOS result, I started working with the Android architects on a project plan to bring Style Feed to Android, and participated in the hiring loop for two open positions — helping hire and onboard two internal transfers to build it.

The Android launch, and all further enhancements, were cancelled when the team moved from Alexa Devices to Softlines. The iterative approach paid off anyway: the features we did ship needed almost no maintenance through the rest of Echo Look's life.

Style Feed was built on the package structure and standards described in React Native Multi-Root Architecture — it was the feature that architecture existed to make possible.