Mujeron
Two years on a women's fashion e-commerce for a Chilean team, working remote from Peru. Backend and integrations, with the store's chat cut to a fraction of its load time.

Mujerón is a women's fashion e-commerce. I worked on it for two years for a team in Santiago, from Tacna, on the backend and the integrations, with enough time in the Vue storefront to keep feeling the consequences of my own API decisions.
The chat was not a support widget
On a store like this, the conversation is not an afterthought bolted onto the sale. It is frequently where the sale happens: a customer asks whether something is in stock in her size, and how fast that thread answers determines whether there is an order.
Chat load time was the metric that mattered, and it came down 88%. Two different levers, addressing two different halves of the delay.
MongoDB indexing addressed the server half. A conversation history is a query that only gets slower with success, since every message you add makes the collection you scan larger. Without the right index, the query degrades in exact proportion to how much the product is being used, which is the worst possible shape for a performance problem: it looks fine in development and gets worse precisely as the business grows.
WebSockets addressed the client half. Polling for new messages spends a round trip to ask a question whose answer is almost always no, and pays that cost on every open conversation at once. Pushing over a persistent connection removes the interval entirely, and the perceived speed of the chat stops depending on how unlucky your timing was.
Neither one alone would have produced the number. A fast query still feels slow behind a polling interval, and an instant transport still waits on a slow query.
Integrations were most of the real work
The storefront is the visible part, and the part that took the most care was everything behind it: an Odoo integration so that stock and operations were not maintained twice, Meta so that the messaging channels customers actually use reached the same place, and OpenAI in the conversation layer.
The pattern in all three is the same, and it is the part worth carrying forward. Each of these systems is someone else's, with its own idea of what an order or a customer is, its own failure modes, and its own downtime. The work is not calling the API. It is deciding what your side of the boundary believes when the other side disagrees, and making sure a third party having a bad afternoon does not become your store having one.
What I would want to add here
This page is thinner than the others on purpose, because the code is not mine to publish and I would rather write less than pad it with detail I cannot show. If you want the specifics of the indexing strategy, the Odoo sync, or how the chat behaved under load, ask me directly and I will walk you through it.