Launch HN: Cohere (YC S20) – Real-time user support for web apps
Pointing things out over Zoom screenshare is highly time consuming ("click the 4th checkbox on the right", "click the handle and drag"), and trying to figure out what users are doing over a live chat or phone call typically leads to endlessly frustrating back-and-forths.
When COVID forced all of us into remote work, we found ourselves spending a lot of time in screensharing sessions. We were tired of choppy frame rates and blurry text, and realized that we could get around this by sharing the user’s screen in a different way. Rather than video streaming, which is how it’s usually done, we could send over diffs of their webpage’s DOM representation and reapply those in the viewer’s browser – this is similar to how virtual DOM frameworks like React work.
We first used this technique for an earlier project (https://news.ycombinator.com/item?id=23363250) that rendered React apps on the server (a Node equivalent of Phoenix LiveView). This reduces development complexity for web apps by completely eliminating the need for RPC layers (REST, GraphQL) – for instance, you'd be able to write to the database directly from your React component and share state across sessions with a single hook. It works by sending DOM updates from the server (e.g. insert a node, change an attribute) in response to input actions sent from the client (e.g. click a button, type a character).
This approach uses significantly less bandwidth compared to traditional screen sharing solutions, and gives us a semantic understanding of the webpage (e.g. a button is sent over as a <button />, instead of a blob of bytes). As a result, we can selectively filter out sensitive content and allow viewers to scroll and type on the webpage without any perceived latency.
To solve our screen sharing problem, we initially built a Chrome extension that let users browse web pages collaboratively. During YC, we saw that our early adopters were primarily using this tool to walk through their own web apps with their customers, so we decided to refocus the product towards helping companies onboard and support their users.
Because we're focused on the real time use case, we only record the DOM when a session is being viewed. This means that no data is sent to our servers unless Cohere is actively being used. Additionally, we don’t persist or retain any session data.
Thanks for reading our story – we'd love to get your thoughts, feedback, and ideas!
62 comments
[ 5.4 ms ] story [ 138 ms ] threadFor a different approach to remoting, see the recently announced Cloudflare Browser: https://blog.cloudflare.com/browser-beta/
Is there a video of a demo of the product anywhere?
Also is there audio involved as well? How do you communicate when you're in a session with the user?
Most of our users usually are already on a call or chat when they hop in a Cohere session, and we integrate with Intercom and Slack to make this easier. We're definitely thinking of ways to streamline this more!
Pretty amazing demo
1- https://cohere.so/demo
There are also accessibility issues, on both sides of the connection. For example, if the person providing support is blind, image-based screen sharing is completely unusable; they would have to ask the customer to run a screen reader and share audio (or more likely, they just wouldn't be able to get a job providing remote support in the first place, even if they're technically proficient). If the person receiving support is blind, or has some other disability, it may be challenging for them to get the person providing support to give them instructions that work for them.
In principle, this DOM-sharing approach could solve these problems. Implementing a shared cursor in an accessible way could be an interesting challenge though.
1) What's the process to integrate this into an existing application?
2) I'm curious about your choice of branding. Your website & logo looks really clean -- was there anything in particular you guys discussed when deciding on brand colors, design of logo, and overall look & feel of your product?
1) All you need to do is install our NPM module (or add a script tag to your website), and call Cohere.init when your app has launched. If you want to see logged in users identified in the dashboard, you can optionally pass their info in: https://docs.cohere.so/#/?id=optional-identifying-users
2) This isn't the most detailed answer, but we went off of gut feeling for the overall look and did the graphics/interfaces ourselves. The starting point was the initial shade of blue, and we played around quite a bit with variations on that hue. We ended up working with a design firm (Aesthetic S18) for the logo, which we're quite happy with!
[1] - Surfly.com
They have an Intercom like icon at the bottom right of the web app, via which one can share screens. It's used by a few airline companies, etc. to give hands on support to some of their older users I guess.
What is the GDPR compliance paperwork to have this roll OK with GDPR folks ?
Why should I install the NPM module instead of the script ? Is there some performance gain/loss of one install method vs the other ?