<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[SessionStack Blog - Medium]]></title>
        <description><![CDATA[SessionStack Blog - Medium]]></description>
        <link>https://medium.com/sessionstack-blog?source=rss----12d1b859d4e4---4</link>
        <image>
            <url>https://cdn-images-1.medium.com/proxy/1*TGH72Nnw24QL3iV9IOm4VA.png</url>
            <title>SessionStack Blog - Medium</title>
            <link>https://medium.com/sessionstack-blog?source=rss----12d1b859d4e4---4</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Sat, 14 Nov 2026 08:58:39 GMT</lastBuildDate>
        <atom:link href="https://medium.com/feed/sessionstack-blog" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com/" rel="hub"/>
        <item>
            <title><![CDATA[Meet SessionStackAI: the Session Replay Add-on We Knew You Needed]]></title>
            <link>https://medium.com/sessionstack-blog/meet-sessionstackai-the-session-replay-add-on-we-knew-you-needed-a78cbddeeee9?source=rss----12d1b859d4e4---4</link>
            <guid isPermaLink="false">https://medium.com/p/a78cbddeeee9</guid>
            <category><![CDATA[ai-tools]]></category>
            <category><![CDATA[ai-analytics]]></category>
            <category><![CDATA[ai-tools-for-business]]></category>
            <category><![CDATA[artificial-intelligence]]></category>
            <category><![CDATA[ai]]></category>
            <dc:creator><![CDATA[Elena Doynova]]></dc:creator>
            <pubDate>Wed, 12 Jul 2023 15:17:06 GMT</pubDate>
            <atom:updated>2023-07-13T07:54:36.769Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*6AkZpH7tADnrnFGEw4UPhw.png" /></figure><p>What if we said we took our (already amazing) session replay to the next level? It’s AI, you guessed it. But it’s the most natural artificial intelligence analytics add-on you can think of. Here’s how it works!</p><h3>How it all started…</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/630/0*LAxJL3wpCcHKzCPz.png" /></figure><p>So, remember our pixel-perfect session replay? It’s that qualitative analytics tool that helps you walk in the shoes of your users and see where they run and where they stumble. To put it briefly, it’s a deconstructed version of the entire user experience rendered into a pixel-perfect replay. Replays resemble miniature videos you can watch whenever you need to fix a problem or understand the user journey better. Except that sometimes, they’re not exactly miniature…</p><p>Sometimes, users take really long journeys inside your product. We’re talking about hours here. And this is something we’ve been hearing a lot: ‘We don’t really want to invest in session replay because we don’t have time to watch the replays.’ So, when generative AI came around, it was a no-brainer for us how to implement it inside our product.</p><h3>Here comes SessionStackAI!</h3><p><strong>Meet </strong><a href="https://www.sessionstack.com/try-sessionstack-ai/?utm_source=medium&amp;utm_medium=blog&amp;utm_campaign=sessionstackai"><strong>SessionStackAI</strong></a><strong>: the generative AI capability that will condense session replays into short summaries you can read in less than a minute.</strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/630/0*2AyWEdgSjoCY2sNa.png" /></figure><p>Yes, even the hours-long sessions. With SessionStackAI, you can have complete visibility of your users’ experiences in less time. This means you can now focus on actually improving the user experience instead of staring at it. Not that it’s not useful, but hey — we’re living in quite a fast-paced world, right?</p><p>That’s not all, though. SessionStackAI pairs the short summary of the user events in the session recording with recommendations on how to improve the user journey. These insights can give you a headstart on how to tackle usability issues.</p><p>And you know that a better user journey translates to more conversions, sky-high engagement, and less churn, right?</p><h3>How do you use it?</h3><p>SessionStackAI is currently available for all SessionStack customers, those with free accounts included. Simply select a session you want to inspect and click the big trippy button that says <em>Get Summary</em>. That’s it — in just a few seconds, you will have a short summary of the session, a list of the most important user events, and a few quick user experience optimization tips.</p><p>Summarizing a nearly 3-hour-long session</p><p>To make the most of the tool, we suggest you segment your users first so you can pinpoint sessions that contain specific pages or errors you are interested in.</p><p><strong><em>Note</em></strong><em>:</em></p><p><em>As with all our features, we’ve taken the necessary measures to protect user data and ensure the high levels of security and compliance that our customers need and expect. SessionStackAI is an optional feature and we will not use any session data for model training purposes unless you choose to use the feature (that is — until you generate the summary). If you choose to use the feature, all privacy controls that you have implemented, including data masking and data scrubbing, will be respected.</em></p><h3>What’s to come?</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/630/0*nP8Pus3ipvK4gdbz.png" /></figure><p>That was just the beginning — here are a few clues of what’s to come (in no particular order):</p><h3>Summaries of user segments and funnels</h3><p>For this update we’re imagining varying use cases but most importantly, churn prevention. Just imagine if you had the knowledge to understand what churned users do before they churn — the exact steps, pages, and subtle behavioral cues. At scale. Or, if you’re experiencing a period of growth and want to double down on the efforts that bring the most value to your customers, you can analyze the segment of users who log in most often and get a summary of their demographics, their user habits, and preferred use cases. These insights can then be translated into better marketing and sales materials.</p><h3>Tailored summaries: roles and industries</h3><p>We’d love to hear SessionStackAI speak the language of product owners, developers, customer success agents, e-commerce businesses, SaaS owners… You get it. We intend to tailor the generative output to <em>your </em>industry and role. So that when you get insights, they will be more useful and applicable to the struggles <em>you </em>face in your daily workflow.</p><h3>Adding data from different sources</h3><p>SessionStack collects an immense amount of data — both quantitative and qualitative. But in case this is not enough, we will be aiming to integrate our AI functionality with external tools and sources.</p><p>While these updates may take us some time, we are extremely proud of the progress we’ve made so far — and are more than excited for the future!</p><p><strong>Are you ready to try it? </strong><a href="https://app.sessionstack.com/signup?utm_source=medium&amp;utm_medium=blog&amp;utm_campaign=sessionstackai"><strong>Get your hands on SessionStackAI now — it’s free &gt;&gt;</strong></a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=a78cbddeeee9" width="1" height="1" alt=""><hr><p><a href="https://medium.com/sessionstack-blog/meet-sessionstackai-the-session-replay-add-on-we-knew-you-needed-a78cbddeeee9">Meet SessionStackAI: the Session Replay Add-on We Knew You Needed</a> was originally published in <a href="https://medium.com/sessionstack-blog">SessionStack Blog</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[How JavaScript Works: JavaScript Location Object And How Protocols Work]]></title>
            <link>https://medium.com/sessionstack-blog/how-javascript-works-javascript-location-object-and-how-protocols-work-aaa8cac176e7?source=rss----12d1b859d4e4---4</link>
            <guid isPermaLink="false">https://medium.com/p/aaa8cac176e7</guid>
            <category><![CDATA[web-development]]></category>
            <category><![CDATA[how-javascript-works]]></category>
            <category><![CDATA[javascript]]></category>
            <category><![CDATA[html]]></category>
            <category><![CDATA[javascript-tips]]></category>
            <dc:creator><![CDATA[Ukpai Ugochi]]></dc:creator>
            <pubDate>Tue, 09 May 2023 08:09:21 GMT</pubDate>
            <atom:updated>2023-05-09T08:09:21.479Z</atom:updated>
            <content:encoded><![CDATA[<p>This is post # 74 of the series, dedicated to exploring JavaScript and its building components. In the process of identifying and describing the core elements, we also share some rules of thumb we use when building<a href="https://www.sessionstack.com/solutions/developers/?utm_source=medium&amp;utm_medium=blog&amp;utm_content=js-series-chaining"> SessionStack</a>, a JavaScript application that needs to be robust and high-performing to help companies optimize the digital experience of their users.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*3C41TCFv-KOG3att" /></figure><h4>Introduction</h4><p>Since many people utilize JavaScript to create web-based applications, it is important to understand the dynamics of a URL (Uniform Resource Locator) that can also be called a location With <a href="https://developer.mozilla.org/en-US/docs/Glossary/Hypertext">hypertext</a> and <a href="https://developer.mozilla.org/en-US/docs/Glossary/HTTP">HTTP (Hyper Text Transfer Protocol)</a>, a URL (uniform resource loader) allows you to retrieve published resources from the web.</p><p>A URL is an address that points you to a unique page. It points to a unique resource from the web. For instance, you can retrieve images, web pages (HTML), and CSS documents by pointing to a valid URL. However, if you point to an invalid URL or where the resources have been moved, it will return an error.</p><p>URLs consist of a protocol (HTTP). And this is an application layer protocol that allows the transfer of information between devices. Here, the client, which is usually a web browser, sends requests called HTTP requests. Next, it communicates with the web server and fetches the requested resources.</p><p>Let’s explore JavaScript’s location object, its anatomy, and how protocols work — focusing on HTTP.</p><h3><strong>Anatomy of a URL</strong></h3><p>A URL consists of the complete information to create a web address. Think of a URL as a postal address. The postal address is the postal service you’ll want to use. The domain name represents the city or town where you live, the port is like the postal code, and the file path is like your house of residence. The query string parameters are the extra information like your building number.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*j0OAU106RjiHQSeD" /></figure><h3><strong>Types of URL</strong></h3><p>There are two basic types of URLs, absolute and relative URLs. The difference between these URLs is their formation and usage. Let’s explore them.</p><h4><strong>Absolute URL</strong></h4><p>An absolute URL is a full URL. From the URL example above, we can see that we have a full URL, with the protocol, domain name, etc. Implicit domain names //developer.mozilla.org/en-US/docs/Learn are also classified as absolute URLs, since the browser will call that URL with the same protocol as the one used to load the document hosting that URL. Another example of an absolute URL is an implicit domain name /en-US/docs/Learn. This is mostly used within an HTML document.</p><h4><strong>Relative URL</strong></h4><p>A relative URL is not a full URL, since it contains only the path. However, this URL uses the same protocol, subdomain, and domain as the page it’s on since it only contains the URL path. A usage example of this URL is pointing to files in the same directory or loading HTML pages or associated files.</p><h4><strong>Protocol</strong></h4><p>The first part of a URL is the scheme. The scheme describes the protocol used for accessing the information from the web. For web resources, it can be an HTTP with or without <a href="https://www.digicert.com/what-is-an-ssl-certificate">SSL</a>.</p><h4><strong>Domain Name</strong></h4><p>The next part of a URL is the authority. The authority is the domain name that points us to the web server or the represented authority — — from where information is retreived. Most times, the domain name can be a string. Sometimes, an <a href="https://en.wikipedia.org/wiki/IP_address">IP address</a> is used, although much less convenient.</p><h4><strong>Port Number</strong></h4><p>The port number of a web URL is used for identifying a network service or process. The port number is always associated with the URL authority (IP address/domain). Specific port numbers are reserved to identify specific services so that an arriving packet is forwarded easily to a running application. For instance, HTTP uses port 80, and port 443 is reserved for HTTPS.</p><h4><strong>Path</strong></h4><p>The file path is the location of the file on the web server. With this string, the server knows exactly where to fetch the file the client is requesting.</p><h4><strong>Query Parameters</strong></h4><p>The query parameter refers to extra parameters used by the webserver to do extra stuff. These parameters consist of key and value pairs that are separated by an (&amp;) ampersand symbol. For instance, when trying to retrieve an image of a specific ID from a web server, you’ll get something like this.</p><p>?id1=image1&amp;id2=image2</p><h3><strong>JavaScript Location Object</strong></h3><p>The location object is a property of the <a href="https://developer.mozilla.org/en-US/docs/Web/API/Window">window</a> and <a href="https://developer.mozilla.org/en-US/docs/Web/API/Document">document</a> object. The location object consists of properties that allow you to access and manage documents from a web resource. And in this section, we’ll explore the location object, its properties, and methods.</p><h3><strong>Properties</strong></h3><p>JavaScript properties involve the collection of values that are associated with a Javascript object. In this section, we’ll explore the location object’s properties.</p><h4><strong>AncestorOrigins</strong></h4><p>This property location.ancestorOrigin is a read-only property of the location interface that contains, in reverse order, the origins of all ancestor browsing contexts of the document associated with the given location object.</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/23c3cff9aab2515128a21409985b746d/href">https://medium.com/media/23c3cff9aab2515128a21409985b746d/href</a></iframe><p>You can use this property to determine the behavior of the document based on what site or list of sites is framing it.</p><h4><strong>Hash</strong></h4><p>The hash location.hash of a URL returns the ID of the targeted page. When you use this property, it’ll return a hash followed by the ID of the page.</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/c77da5790fadd1eba988c2ed0803f534/href">https://medium.com/media/c77da5790fadd1eba988c2ed0803f534/href</a></iframe><h4><strong>Host</strong></h4><p>The host property location.host returns the host of the URL. If the port number of the URL is non-empty, this property will also return a semicolon : and port number.</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/3d5ade83a63fbf6e0695695f9b33390d/href">https://medium.com/media/3d5ade83a63fbf6e0695695f9b33390d/href</a></iframe><h4><strong>Port</strong></h4><p>With the location.port property, you can print only the port number of the URL. If the URL doesn’t contain an explicit port number, it’ll return an empty string ’’.</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/9d7452c3e61a251bc25336ba90a81941/href">https://medium.com/media/9d7452c3e61a251bc25336ba90a81941/href</a></iframe><h4><strong>Hostname</strong></h4><p>If you want to access the hostname of a URL alone, you can use the hostname location.hostname property. Notice that this wouldn’t return the port number.</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/d492aa1575536a1292503c3004f9063a/href">https://medium.com/media/d492aa1575536a1292503c3004f9063a/href</a></iframe><h4><strong>Href</strong></h4><p>The href property, allows you to view and manage a web URL. With the location.href property, you can access the full URL. You can also alter or change the value of href. For instance, you can use the location.replace() method to redirect href.</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/8d10172f2c63ab367dcf753bceb3d087/href">https://medium.com/media/8d10172f2c63ab367dcf753bceb3d087/href</a></iframe><h4><strong>Origin</strong></h4><p>With the location.origin property, you can print the origin of the represented URL. This read-only property returns a string containing the Unicode serialization of the origin of the URL.</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/96c6617696f03b7462bf0e98a763d757/href">https://medium.com/media/96c6617696f03b7462bf0e98a763d757/href</a></iframe><h4><strong>Pathname</strong></h4><p>The location.pathname property, allows you to access the pathname of your URL. If the pathname is empty, this will return an empty string ””.</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/75d68d0f3c613dc457c9ef71fa6b056e/href">https://medium.com/media/75d68d0f3c613dc457c9ef71fa6b056e/href</a></iframe><h4><strong>Protocol</strong></h4><p>With the protocol property location.protocol, developers can manage the protocol scheme of the URL of interest.</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/5136b9ae392747cacb4b20073f8ff943/href">https://medium.com/media/5136b9ae392747cacb4b20073f8ff943/href</a></iframe><h4><strong>Methods</strong></h4><p>JavaScript objects have a lot of methods, which lets managing and accessing objects straightforward. Here’s a list of JavaScript location methods.</p><h4><strong>Assign</strong></h4><p>The assign method assign(URL), allows the loading and display of the resource, at the specified URL. For example, when a user tries to navigate to a URL, the assign(URL) method is called, to load and display the document.</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/d9fc531ad3fc46bced67f6d6993eeebb/href">https://medium.com/media/d9fc531ad3fc46bced67f6d6993eeebb/href</a></iframe><p>If the assignment isn’t successful, because of a security violation, a <a href="https://developer.mozilla.org/en-US/docs/Web/API/DOMException">DOMException</a> of the SECURITY_ERROR is thrown. This can happen if the origin of the script call is different from the origin of the page.</p><h4><strong>Reload</strong></h4><p>The reload() method reloads the current URL. This method is called when you hit the refresh button of the browser.</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/a3f484ed3ba66fe0d4cb921a14920696/href">https://medium.com/media/a3f484ed3ba66fe0d4cb921a14920696/href</a></iframe><h4><strong>Replace</strong></h4><p>With the replace button replace(), developers can replace the current resource with that provided in the URL. The difference between this method and the assign(URL) method is that after using replace(), the current page won’t be saved in the history session.</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/d2ced876455a346d8bbd307d223d6abd/href">https://medium.com/media/d2ced876455a346d8bbd307d223d6abd/href</a></iframe><h4><strong>toString</strong></h4><p>The toSting() method is a read-only alias to the location.href property. With this method, you can print a string of the complete URL of interest.</p><h3><strong>What is Internet Protocol</strong></h3><p>A protocol is a set of rules or procedures for transmitting data. Internet protocol is a type of protocol that governs how data communication and exchange is done over the Internet. To communicate properly anywhere, the sender and receiver must understand themselves properly. This also applies to communication over the Internet. Therefore, the sender and receiver should communicate with the same protocol over the internet.</p><p>In internet communication, data is broken down into data packets — smaller bits. And the reason for this is for faster data transmission, which won’t be possible when huge data is sent in lumps. Each network protocol specifies how these data packets are organized and sent across the internet. For instance, different networks around the world have different data transfer rates, it is the protocol that manages the rules for the data packet size to be sent across.</p><p>There are different types of internet protocols. The <a href="https://en.wikipedia.org/wiki/Internet_protocol_suite">Internet protocol suite</a> is commonly made up of three layers.</p><h4><strong>Application Layer</strong></h4><p>The application layer provides user services like formatting messages so that the message from the user is in the acceptable format for the receiver. It also facilitates file transfer over the Internet. Protocols classified under the application layer are as follows:</p><ul><li>HTTP (HyperText Transfer Protocol): This protocol is in-charge of hypertext transfer over the world wide web (www).</li><li>File Transfer Protocol (FTP): The file transfer protocol governs the transfer of files between client and server over the network. For instance, this protocol governs the transfer of files like images, and documents, over physical devices like computers. Where one computer serves as the client and the other the server.</li><li>SMTP (Simple Mail Transfer Protocol): The simple mail transfer protocol ensures the smooth transfer of electronic mail (emails). Therefore, when an individual sends or receives an email, they communicate with this protocol.</li><li>HTTPS (HyperText Transfer Protocol Secure): This is an extension of HTTP, it uses the SSL/TLS protocol for authentication and encryption.</li></ul><p>Although they’re other protocols classified under the application layer, like the terminal network (TELNET) and secure shell protocol (SSH), etc. Let’s explore the transport layer.</p><h4><strong>Transport Layer</strong></h4><p>The transport layer ensures that the data transfer is smooth and seamless. For instance, the transport layer implements flow control, which provides a mechanism for the receiver to control the transmission speed. This is to avoid overwhelming the receiving node with data from the transmitting node.</p><ul><li>TCP (Transmission Control Protocol): The transmission control protocol is connection-oriented, allowing data to be shared in both directions. This way, if an error occurs it’ll be propagated to the sender.</li><li>UDP (User Datagram Protocol): The user datagram protocol is connectionless. This method doesn’t allow for error checking, it also reduces the workload of opening a connection and terminating a connection.</li></ul><h4><strong>Internet Layer</strong></h4><p>The internet layer ensures the smooth transmission of network packets to the link layer. It makes this possible, by sending data across different networks via <a href="https://en.wikipedia.org/wiki/Routing">routing</a>.</p><ul><li>Internet Protocol (IP): The internet protocol has two versions:v4 and v6. But v4 is the first version. The internet protocol addresses host interfaces and encapsulates data into datagrams.</li></ul><h4><strong>Data Link Layer</strong></h4><p>A link layer is a group of methods and communication methods in the link that is physically connected a host. For example, the point-to-point (PPP) protocol is used to create a direct connection between two communicating devices.</p><h3><strong>Conclusion</strong></h3><p>In JavaScript, we have libraries to work with all kinds of network protocols. For instance, there’s the <a href="https://nodejs.org/api/http.html#http">HTTP library</a> that allows you to communicate with the HTTP server. JavaScript also allows you to communicate and manage data from the server using <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods">HTTP methods</a>. We also have the WebSocket library, that allows developers to communicate with the web browser using a TCP connection.</p><p>In this article, we have explored JavaScript location objects. We’ve discussed the properties, methods of this object, and how to use them. Next, we explored the Internet protocol suite, the different layers, and the different protocols in each layer.</p><p>Transmitting and transferring data over the internet is a very delicate subject. And this is because, if not properly secured, intruders can eavesdrop on conversations or even steal information. If you want to learn more about cryptography and data security, read this article on <a href="https://blog.sessionstack.com/how-javascript-works-cryptography-how-to-deal-with-man-in-the-middle-mitm-attacks-bf8fc6be546c">cryptography and how to deal with man in the middle attack</a>.</p><p>So if your application transfers data over the internet, you should make sure that proper security measures are taken to make your products provide a better experience for your users.</p><p>But even if you feel like the proper decisions have been made, it’s always necessary to verify that this is indeed true and your users have a great experience with your product.</p><p>For us at <a href="https://www.sessionstack.com/?utm_source=medium&amp;utm_medium=blog&amp;utm_content=js-series-https://www.sessionstack.com/?utm_source=medium&amp;utm_medium=blog&amp;utm_content=js-series-recursion">SessionStack</a>, optimizing every bit of our code has been crucial.</p><p>The reason is that our library gets integrated into web apps and collects data from user sessions, such as user events, DOM changes, network data, exceptions, debug messages, and so on. Capturing this data without causing any performance impact has been a challenge that we’ve successfully solved.</p><p>This data is then processed and allows you to <a href="https://www.sessionstack.com/blog/growth-day-1-product-launch-analytics/?utm_source=medium&amp;utm_medium=blog&amp;utm_content=js-series-chaining">replay user journeys</a> as videos to optimize product workflows, reproduce bugs, or see where users are stuck.</p><p>There is a free trial if you’d like to <a href="https://www.sessionstack.com/solutions/developers/?utm_source=medium&amp;utm_medium=blog&amp;utm_content=js-series-chaining">give SessionStack a try</a>.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/800/0*N01Tjf8PjK9qdDtv" /><figcaption>SessionStack replaying a session</figcaption></figure><p>Interested in more about JavaScript? Check out all <a href="https://blog.sessionstack.com/how-javascript-works/home">“How JavaScript works” publications here</a>.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=aaa8cac176e7" width="1" height="1" alt=""><hr><p><a href="https://medium.com/sessionstack-blog/how-javascript-works-javascript-location-object-and-how-protocols-work-aaa8cac176e7">How JavaScript Works: JavaScript Location Object And How Protocols Work</a> was originally published in <a href="https://medium.com/sessionstack-blog">SessionStack Blog</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[How JavaScript Work: What are Task Runners + Introduction to Gulp]]></title>
            <link>https://medium.com/sessionstack-blog/how-javascript-work-what-are-task-runners-introduction-to-gulp-13a3662338f7?source=rss----12d1b859d4e4---4</link>
            <guid isPermaLink="false">https://medium.com/p/13a3662338f7</guid>
            <category><![CDATA[javascript-tips]]></category>
            <category><![CDATA[task-runners]]></category>
            <category><![CDATA[gulp]]></category>
            <category><![CDATA[how-javascript-works]]></category>
            <category><![CDATA[javascript]]></category>
            <dc:creator><![CDATA[Ukpai Ugochi]]></dc:creator>
            <pubDate>Tue, 09 May 2023 08:05:28 GMT</pubDate>
            <atom:updated>2023-05-09T08:05:45.372Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*sVyUzL-QmOhbUs97" /></figure><p>This is post # 76 of the series, dedicated to exploring JavaScript and its building components. In the process of identifying and describing the core elements, we also share some rules of thumb we use when building<a href="https://www.sessionstack.com/solutions/developers/?utm_source=medium&amp;utm_medium=blog&amp;utm_content=js-series-chaining"> SessionStack</a>, a JavaScript application that needs to be robust and high-performing to help companies optimize the digital experience of their users.</p><h3>Introduction</h3><p>The job of web development involves the combination of many tasks like running a server, optimizing content, Deploying files to the server, minifying scripts and style sheets, and compressing images among others.</p><p>To make the job of web development faster and less difficult, web developers can make use of task runners to automate these tasks.</p><p>In this article, we’ll explore task runners, the advantages of making use of task runners, and then talk about Gulp task running tools. I am also going to use a quick example that you can follow to show how to make use of the Gulp tool.</p><h3>What are Task Runners</h3><p>Developing a web application involves some development tasks and processes such as a server running, caching, and content optimization among others. Most of these tasks require constant repetition, for example, each time you make a change in any of the files present in your project, you might be required to perform these tasks and this is quite time-consuming.</p><p>However, developers can make the execution of web development tasks faster and smoother by making use of Task runners. What are task runners? Task runners are simple tools that help web developers automatically run web development tasks that might require additional effort and time to run.</p><p>By making use of task runners you do not have to repeat web development tasks, they help you run these commands automatically.</p><p>Task runners can be used to do things like compile SCSS codes to CSS codes, and minify CSS codes for production among others.</p><p>Some good examples of task runners that we have are Webpack, Grunt, Rollup, and Gulp (which I am going to talk about in this article).</p><p>Web developers can also make use of npm scripts for task running purposes. NPM has several built-in scripts when it comes to tasks running and it can be used to run quite a large number of built-in tasks for developers. For example, you have the test script in package.json used for running tests in web applications. NPM also has the init script which is used for initializing a package.json file and the list continues.</p><p>In the next section, I am going to cover some of the advantages of using Task runners in your next project. This will help in inspiring you to include a task runner in your future projects or add it to your already existing projects.</p><h3>Advantages of Using Task Runners</h3><p>In this section, we’ll explore the advantages of using task runners in your application. And below are some of them:</p><h4>Automate Web Development Tasks</h4><p>The first advantage of using task runners is that they automate the tasks and processes involved in web development. with Task runners, developers will not have to worry about running commands that will involve tedious processes, as these tools are capable of running them for you.</p><p>For example, in building web application projects, developers might be required to manually compile SASS codes to CSS code, and also minify CSS codes each time there is a change in the code base of the project. But, if you make use of task runners you can prevent these tedious and time-consuming tasks, by using task runners to automatically run specified tasks whenever you make changes to your code base.</p><h4>Ensure a Faster Web Development Process</h4><p>Using task runners to automatically run web development tasks is important to ensure that web development processes do not take up a lot of time and eventually cost lots of money.</p><p>Since you don’t have to run most of the extra demanding tasks of web development, you get additional speed. Also, you get to prevent repeating particular kinds of tasks multiple times. So you can focus on less tedious and less repetitive tasks.</p><h4>Most Task Runners Are Easy to Use and Understand</h4><p>It is quite simple to use most task runners such as Gulp because they use JavaScript — a popular language for web development.</p><p>So, even though you have not used task runners before, you can learn how to use these tools quickly. And also, you can understand existing projects that use them.</p><h4>Minification and Concatenation</h4><p>Although the process of minification and concatenation may sound as a simple task to most developers, a simple mistake from these tasks may lead to breaking things up in your project. And this might result in time wasting and may be loss of money.</p><p>But the use of task runners guarantees to solve a greater part of this problem by automatically running the tasks that will involve the minification and concatenation of project codes.</p><h4>Simple-to-use plugins</h4><p>Some good task runners also have easy-to-use plugins that could be implemented to make task execution faster and easier.</p><p>You may not have to worry about how to use these plugins as most of them are quite user-friendly and can be applied to your web application project with ease.</p><p>So, these are the major advantages of making use of task runners. But we are yet to take a closer look at some of the good examples of task runners that we have, and as I mentioned earlier we have great task-running tools like Gulp, Webpack, Rollup, and even Grunt.</p><p>In the next section, I will cover the Gulp task running tool and show how you can use it in your projects. So let’s begin by learning about Gulp and then wrap things up with a quick demo.</p><h3><strong>What is Gulp</strong></h3><p>Gulp is an open-source JavaScript tool used by developers to automate web development tasks. So in simple words, you can say Gulp is a task runner.</p><p>As a task running tool, Gulp, uses Nodejs as its platform. So to use Gulp you have to download Nodejs on your machine and follow the necessary setup procedures to install it.</p><p>With Gulp, you can do the processes of minifying CSS, HTML, and JavaScript files automatically or convert SCSS files to CSS files automatically by setting up Gulp tasks.</p><p>In the next section, we will look at an example that will explain how Gulp works and how you can use it in your project or implement it in your old projects.</p><h3>How to Use Gulp</h3><p>In the previous section, I explained what the Gulp tool was and what it is used for. Now in this section, we will elaborate with an example that explains the usage of the Gulp tool. We will use Gulp to compile a SASS code to a CSS code.</p><p>Using SASS instead of vanilla CSS allows frontend developers to gain access to many great features such as writing cleaner codes with less CSS etc.</p><p>But most browsers do not have support for SASS codes, so to make use of SASS code, you first have to compile your code into a CSS file so that the browser can read and apply your stylesheet to your web pages.</p><p>In this section, let’s see how Gulp can help us compile our SASS codes into a CSS file and then apply our styles to our web page.</p><p>As I mentioned earlier, you need to have Nodejs in your machine because we will make use of NPM — a node package manager that gets installed together with Nodejs.</p><p>So if you do not have Nodejs in your machine, visit the official Node Js website<a href="https://nodejs.org/en/"> here</a>, and download the latest stable version. After that, open up the Nodejs file and run the necessary setup processes.</p><p>To check if you have properly installed Nodejs in your system, run the command below:</p><pre>node -v</pre><p>The command above will give you the version of Nodejs installed in your machine. But if you don’t have Nodejs on your machine, you will get an error message.</p><p>After installing Nodejs on your machine, install the Gulp CLI.</p><p>Note, this is important for us to actually install Gulp packages and also run Gulp tasks. So to install the Gulp CLI, run the command below:</p><pre>npm install — global gulp-cli</pre><p>You can verify if you installed the gulp-cli properly by running the command below:</p><pre>gulp — version</pre><p>This command will print out the version of gulp-cli installed in your machine, but for the local version of Gulp it will print unknown. And this is because we have not installed that just yet.</p><p>The next step is to actually create a folder for our project and then add some HTML and SASS files.</p><p>So create the project folder with the command below:</p><pre>mkdir Gulp-tutorial</pre><p>I decided to call my project folder Gulp-tutorial, but you can call it anything you like.</p><p>Now, navigate into the project folder with the command below:</p><pre>cd Gulp-tutorial</pre><p>Inside the project’s folder directory, you have to create a package.json file, this file will contain all our project details and all the packages that we are going to install. To create this file run the command below:</p><pre>npm init</pre><p>And you will be prompted with some questions, like the version of the project, the project’s name, the project’s description, etc. You can choose to skip through and leave everything as default by hitting the enter button.</p><p>You now have a package.json file, you can open the project folder in any code editor of your choice, by running:</p><pre>code .</pre><p>You should see the package.json file as the only file present. Now let’s add some HTML and SASS files. So create another file in the root of your project folder, and let’s call it index.html. But you can call it anything that you like.</p><p>This file will contain the HTML for our project, and I link it to the CSS file — for styling using the link tag.</p><p>So add the code below to your index.html file:</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/f0882909ee1e22e57048b70d50d04ac9/href">https://medium.com/media/f0882909ee1e22e57048b70d50d04ac9/href</a></iframe><p>Next, we need to add the styles for our project. Create a folder named Sass and create a file ending with a .scss extension inside it. Now, add the following code to the .scss file:.</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/5174107d849c1bec02fffe10b97be5f3/href">https://medium.com/media/5174107d849c1bec02fffe10b97be5f3/href</a></iframe><p>Go ahead and save the file. Open the application with a browser. You should see that your styling did not work. Thus they were not applied.</p><p>And this is because SASS is not recognized by the browser. So to use SASS codes in your projects, you first have to compile them to CSS codes, and this is where the use of Gulp comes in.</p><p>Now let’s install Gulp as a dev-dependency in our application. In the terminal, navigate to the project folder directory if you are no longer there and run the command below:</p><pre>npm install — save-dev gulp</pre><p>To confirm that you have Gulp installed, run the following command</p><pre>gulp --version</pre><p>This time you should see both the gulp-cli version and the local version of Gulp itself.</p><p>Alternatively, you can go into the package.json file and check under the devDependencies. And you will see the version of Gulp installed.</p><p>For our example, we need the gulp-sass package from npm. And to install this package run the command below:</p><pre>npm install sass gulp-sass — save-dev</pre><p>Note that this tutorial covers codes that are applicable for version 5 of gulp-sass and version 4.0.2 of gulp.</p><p>From version 5 of the gulp-sass package, you need to install a sass compiler to use gulp-sass. So the command above will help you install gulp-sass and a sass compiler.</p><p>The next step you need to take is to create a gulpfile.js file. And this is where all the tasks that we want to run will be added.</p><p>Also, note that you have to use the same name for this file because failure to do so will make it impossible for Gulp to find your gulpfile and this will lead to errors when you execute Gulp commands on the terminal.</p><p>Inside the gulpfile.js file add the following code to import Gulp, add a sass compiler and then add your task.</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/04070b56acc5e64fe638c29054799c79/href">https://medium.com/media/04070b56acc5e64fe638c29054799c79/href</a></iframe><p>In line 1 we required Gulp into our project and passed it into a variable called Gulp. Then in line 2, we required the gulp-sass package that we installed using NPM. Lastly, we imported our sass compiler.</p><p>From lines 5 to 9 we created our task. On line 5 we created a task called sass and on line 6 we asked Gulp to take codes from our sass file which is in the sass folder. Notice that in the code above I made use of * followed by .scss. This simply tells Gulp to watch every file inside the sass folder with a .scss extension. You can also be very specific by removing the * and replace it with the name of the file you want instead, for example, style1.scss.</p><p>Now on line 7 we simply want to log out any error that might occur in the process of executing our command.</p><p>Finally, on line 8 we asked Gulp to compile our sass codes and store them in a .css file inside a CSS folder that we won’t create. But Gulp will help us create them automatically.</p><p>Now save the file and run</p><pre>gulp sass</pre><p>In the Command Line Interface, you should see an output like this:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/447/0*dyPTIk_2a1fkeu60" /></figure><p>If you look at the folder structure in your code editor, you should see a CSS folder with two CSS files: style1.css and style2.css as seen below:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/252/0*SinOcAx62tjL2xS8" /></figure><p>Now, I want you to notice something: if you open the application in the browser again, you should see that all your styles have been applied. Great this is how Gulp and other task runners help us run web development tasks automatically while making our job as web developers easy and fast.</p><h3>Conclusion</h3><p>Web development involves the combination of time-consuming, important tasks that can break down an entire project if executed improperly.</p><p>Task runners as web development tools, were introduced for the sole purpose of making the job of running web development tasks smoother and a little bit less complex.</p><p>Modern web application bundlers such as Webpack can also be configured to run web development tasks automatically using NPM scripts.</p><p>In this article, I talked about what a task runner is, and the different types of task runners. Then I covered what Gulp is, and what it can be used for, and also I elaborated with an example that shows how a web developer can use Gulp in his/her next project — where we made use of the Gulp tool to compile a SASS file to CSS file to style our web page.</p><p>Task runners like Gulp make it much easier for software to have efficient and high-performing code. And since we all like to apply new technologies &amp; upgrade our code so even if we feel we’ve tested everything before release, it’s always necessary to verify that our users have a great experience with our product.</p><p>A solution like<a href="https://www.sessionstack.com/?utm_source=medium&amp;utm_medium=blog&amp;utm_content=js-series-maps"> SessionStack</a> allows us to reply to customer journeys as videos, showing us how our customers actually experience our product. We can quickly determine whether our product is performing according to their expectations or not. In case we see that something is wrong, we can explore all of the technical details from the user’s browser such as the network, debug information, and everything about their environment so that we can easily understand the problem and resolve it. We can <a href="https://www.sessionstack.com/blog/what-is-customer-experience-analytics-improve-product-strategy/?utm_source=medium&amp;utm_medium=blog&amp;utm_content=js-series-maps">co-browse</a> with users, segment them based on their behavior, analyze user journeys, and unlock new growth opportunities for our applications.</p><p>There is a free trial if you’d like to <a href="https://www.sessionstack.com/solutions/developers/?utm_source=medium&amp;utm_medium=blog&amp;utm_content=js-series-chaining">give SessionStack a try</a>.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/800/0*PeqVI5Zgi9H37UeX" /><figcaption>SessionStack replaying a session</figcaption></figure><p>Interested in more about JavaScript? Check out all <a href="https://blog.sessionstack.com/how-javascript-works/home">“How JavaScript works” publications here</a>.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=13a3662338f7" width="1" height="1" alt=""><hr><p><a href="https://medium.com/sessionstack-blog/how-javascript-work-what-are-task-runners-introduction-to-gulp-13a3662338f7">How JavaScript Work: What are Task Runners + Introduction to Gulp</a> was originally published in <a href="https://medium.com/sessionstack-blog">SessionStack Blog</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[SessionStack: Leading the Way in Session Replay]]></title>
            <link>https://medium.com/sessionstack-blog/sessionstack-leading-the-way-in-session-replay-d27dc567cc?source=rss----12d1b859d4e4---4</link>
            <guid isPermaLink="false">https://medium.com/p/d27dc567cc</guid>
            <category><![CDATA[product-analytics]]></category>
            <category><![CDATA[ux-analytics]]></category>
            <category><![CDATA[cobrowsing]]></category>
            <category><![CDATA[session-replay]]></category>
            <category><![CDATA[g2]]></category>
            <dc:creator><![CDATA[Elena Doynova]]></dc:creator>
            <pubDate>Fri, 31 Mar 2023 13:31:10 GMT</pubDate>
            <atom:updated>2023-04-27T12:02:46.510Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*zka4SDvMM94Wv6XbdbSdLw.png" /></figure><p>We are thrilled to announce that SessionStack is now <strong>Leader in the Session Replay category on G2</strong>! This is the best proof of our team’s dedication to providing the best-in-class Session Replay software — and much more.</p><p>Our customers’ feedback played an important role in helping us achieve this milestone. We would like to say <em>thank you</em> to all of you who provided valuable feedback and helped us to become <a href="https://www.g2.com/products/sessionstack/reviews">Leader in the Session Replay category</a>. We believe our approach is second to none, and we take pride in providing our users with a pixel-perfect, user-friendly, and reliable tool to help them understand their users better.</p><p>Our unbeatable Support team also deserves a special mention as they played a crucial role in making the SessionStack discovery journey a breeze for our customers. 👏</p><p>In addition to leading the way in Session Replay, we are also proud owners of the High Performer status in the Co-browsing and Product Analytics categories. This is a clear indication of our commitment to excellence in all segments of the industry:</p><ol><li>Leader in Session Replay</li><li>Leader Small-Business Session Replay</li><li>Leader Europe Session Replay</li><li>Leader Small-Business Europe Session Replay</li><li>High Performer Co-Browsing</li><li>High Performer Product Analytics</li><li>High Performer Mid-Market Session Replay</li><li>High Performer Mid-Market Europe Session Replay</li><li>Users Love Us</li></ol><p>We are thrilled to have you as part of the SessionStack family. Thank you again, and we look forward to continuing to provide you with high-value digital experience analytics! 🔥</p><p><a href="https://www.g2.com/report-quarters/spring-2023/status/BAhbBmkCWH8=--2544b191b1a952d8d83a706de85c41f54c0b71b3">Check out the G2 grid reports here &gt;&gt;</a></p><p>About SessionStack:</p><p><a href="https://www.sessionstack.com/"><em>SessionStack</em></a><em> is a Digital Experience Analytics platform that helps you track user behavior, spot friction points and conversion opportunities, enhance onboarding and support procedures, and visualize user trends to drive growth. You can easily integrate SessionStack with the tools you’re already using to improve your bug fixing, UX analysis, product adoption, and customer support.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=d27dc567cc" width="1" height="1" alt=""><hr><p><a href="https://medium.com/sessionstack-blog/sessionstack-leading-the-way-in-session-replay-d27dc567cc">SessionStack: Leading the Way in Session Replay</a> was originally published in <a href="https://medium.com/sessionstack-blog">SessionStack Blog</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[The latest SessionStack release includes Most Clicked Chart & Funnel Summary & Custom Events]]></title>
            <link>https://medium.com/sessionstack-blog/the-latest-sessionstack-release-includes-most-clicked-chart-funnel-summary-custom-events-881a78614960?source=rss----12d1b859d4e4---4</link>
            <guid isPermaLink="false">https://medium.com/p/881a78614960</guid>
            <category><![CDATA[product-updates]]></category>
            <category><![CDATA[funnel]]></category>
            <category><![CDATA[product-management]]></category>
            <category><![CDATA[user-experience]]></category>
            <category><![CDATA[conversion-optimization]]></category>
            <dc:creator><![CDATA[Mariya Ivanova]]></dc:creator>
            <pubDate>Thu, 09 Feb 2023 14:46:10 GMT</pubDate>
            <atom:updated>2023-02-10T14:45:12.932Z</atom:updated>
            <content:encoded><![CDATA[<p>We are thrilled to announce our first feature delivery for 2023.</p><p>This article will cover:</p><ol><li><a href="#8732">User Trends: Most Clicked Elements</a></li><li><a href="#c770">Funnel Summary</a></li><li><a href="#d6df">Matching Sessions in Funnel Summary — Coming Soon</a></li><li><a href="#3aee">Custom Events</a></li></ol><h3>1. User Trends: Most Clicked Elements</h3><p>Back in October in our<a href="https://blog.sessionstack.com/the-latest-sessionstack-release-includes-user-trends-and-contextual-filters-860ceeff4515"> blog post</a>s, we discussed the <a href="https://blog.sessionstack.com/the-latest-sessionstack-release-includes-a-rage-click-chart-new-session-filters-2ecc7f1715e6">Rage Clicks char</a>t and <a href="https://blog.sessionstack.com/the-latest-sessionstack-release-includes-the-dead-clicks-filter-chart-342fbcbe8f4d">Dead Clicks</a> chart. Now we want to share with you our next new chart called <strong>Most Clicked Elements</strong>.</p><p>You can use it to determine <strong>which elements of your website or product are the most interacted</strong> <strong>with</strong>. Furthermore, the new visual can help you figure out which product features are regularly used. All of this comes at the expense of<strong> zero-effort configuration</strong>.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*9L58Rm0nGolq914mDAkIDw.png" /><figcaption>Most Clicked Elements Chart</figcaption></figure><h3>1.1 How to Read the Data on the Chart</h3><p>Each bar that is shown on the chart includes four main components:</p><ul><li>An HTML element that has been interacted with. If available for the element, its text is presented on the chart, too.</li><li>The CSS selector of the HTML element is always shown.</li><li>The URL address of the page where the element is located. This will be useful if you have two buttons with the same text on them from different pages.</li><li>Clicks and Users: count of the clicks and users who have clicked the element. These statistics can be visualized in both absolute values and percentages. Turn on the percentage option, as shown below, to see what percentage of your segment’s users (or all users if no filtering criteria are used) are performing these clicks.</li></ul><h3>1.2 Creating a User Segment Directly from the Chart</h3><p>A feature of our new Most Clicked Elements chart is the ability to create a user segment quickly and easily. To do this, simply click the unique “Add Filter” icon for any row that you believe merits more examination. You may do this to see which users interacted with a particular element, to view their matching sessions, or to look at the remainder of the User trends for those users.</p><p>Check the image below for more details.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*6y--j3-PKzs41se3FUCSMQ.png" /><figcaption>Add Filter option in Most Clicked Elements Chart</figcaption></figure><h3>2. Funnel Summary</h3><p>Shortly before the end of 2022, we announced our<a href="https://blog.sessionstack.com/the-latest-sessionstack-release-includes-instrumentation-free-conversion-funnels-bada55dc2051"> instrumentation-free conversion funnels</a>. Now, we’ve taken it a step further by delivering a funnel summary.</p><p>Funnel Summary assists you by providing:</p><ul><li>The conversion rate and drop-off rate for each funnel step;</li><li>The exact users’ list — converted and drop-offs. A user is considered converted once they have completed all funnel steps from start to finish.</li><li>Quick access to the users’ sessions in chronological order, from the most recent to the oldest;</li></ul><p>How will<strong> Funnel Summary</strong> help you analyze user flow? The key answer is in the user’s list. Conversion funnels incorporated with users’ session recordings give you answers to both questions:</p><ul><li>How many people haven’t converted? (quantitative data)</li><li>Why have they left the desired user flow? (qualitative data)</li></ul><p>The <strong>Funnel Summary</strong> is located directly beneath the funnel step builder and funnel chart. To focus on the summary, you can collapse both the funnel steps and the chart, as shown below. The funnel steps are listed on the left side in the same order that you configured them in the builder section. The list of converted users and drop-off users for the selected step is displayed on the right side.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*_IKOZbqFD3WGzz-Hxg8ORA.png" /><figcaption>Funnel Summary</figcaption></figure><p>As a <a href="https://www.sessionstack.com/platform/what-is-dxi/">DXI</a> platform, SessionStack provides both quantitative and qualitative data, and conversion funnel analysis supports you in understanding and optimizing user behavior.</p><h3>3. Matching Sessions in Funnel Summary — Coming Soon</h3><p>Currently, all user sessions (matching and non-matching funnel step) are displayed in both user lists — converted and dropped. Soon, you will be able to filter out only the sessions that are relevant to any of the funnel steps. This significantly reduces the time spent finding the relevant user sessions.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*WiSZbcicMTvAsv3C2klnSA.png" /><figcaption>User Sessions — Matching Sessions coming soon</figcaption></figure><h3>4. Custom Events</h3><p>The segment filters <a href="https://blog.sessionstack.com/new-sessionstack-features-the-ability-to-search-users-by-visited-url-and-share-a-session-7d569ea87210">Visited URL</a> and <a href="https://blog.sessionstack.com/new-sessionstack-features-the-ability-to-search-users-by-clicked-element-and-user-management-98e5c3e186b">Clicked Element</a> can be used to identify and analyze the usage of almost any feature in your product. Through our <a href="https://blog.sessionstack.com/the-latest-sessionstack-release-includes-rage-click-search-by-text-for-clicked-element-4f3af3a23ff">Rage Click</a> and <a href="https://blog.sessionstack.com/the-latest-sessionstack-release-includes-the-dead-clicks-filter-chart-342fbcbe8f4d">Dead Click</a> filters you can examine the frustration points for your users while interacting with your platform. And that is all accomplished with a zero-effort configuration. However, there could be some situations in which our built-in supported events are insufficient to perfectly describe your users’ behavior. In such circumstances, you must employ specially created events — custom events.</p><h3>4.1 Custom Event Definition</h3><p>A custom event is one that has a name and a set of properties (parameters) that you define in order to collect information specific to your business. Our custom events are JavaScript based and they have a pretty simple structure: <strong><em>SessionStack.trackEvent(eventName, eventProperties).</em></strong></p><p>The first argument (eventName) is required and describes the name of your event. In contrast, event properties is a JSON object containing all the information you want to pass to SessionStack.</p><h3>4.2 Example of Custom Event</h3><p>Here’s an example of a custom event to help you understand them better.</p><p>Let’s assume you want to filter users on your e-commerce site based on the items in their shopping cart. Upon “Add to cart”, we can add the following custom event:</p><p><strong><em>SessionStack.trackEvent(“Add to Cart”, { itemName_str: “Socks”, price_real: 5.99,color_str: “Blue”,quantity_int: 3, isUserRegistered_bool: true })</em></strong></p><p>In the example above, <strong>“Add to Cart”</strong> is the event name, <strong>itemName_str</strong>, <strong>price_real</strong>, <strong>color_str</strong>, <strong>quantity_int</strong>, and <strong>isUserRegistered_bool</strong> are event properties with their values on the right.</p><h3>4.3 When to Use Custom Event?</h3><p><strong>Custom events</strong> can be used in one of the following cases:</p><ul><li>When you’ve addressed the key events for comprehending user behavior and using the SessionStack-supported events isn’t enough to build the desired ones.</li><li>When you want to segment your users by events that happen in third-party tools such as external chat or external ticketing system.</li></ul><h3>4.4 Custom Events in Segments and Funnels Dashboards.</h3><p>Once we have collected your custom events (at least one user has a session with these events), they will be available in the Segments and Funnel dashboards, as shown in the images below.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*ngxn-g354eZH4yPhQVKvcQ.png" /><figcaption>Custom Events in Segments Dashboard</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*19XtYqDf3o-H9jTmLcb05A.png" /><figcaption>Custom Events in Funnels Dashboard</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Z9bHYwtlRMdgM1MSx4cFqA.png" /><figcaption>The custom event “Add to cart” with properties added as a funnel step</figcaption></figure><p>The filter icon on the right is used to select the properties of the custom event. Look at the image below. Using event properties for your search criteria is optional, but it makes your filtering criteria more sophisticated and granular.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*HZmGQeXLH8_1YtPwErxJIA.png" /><figcaption>Custom event with properties</figcaption></figure><h3>4.5 Custom Events in the Session Player</h3><p>The session player also displays <strong>custom events</strong>. They can be found on the left side of the event timeline. The custom-built events can be easily filtered-out on the left side either by using the option for it or directly using the search bar. Check the next image.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*6i9U02tC1uq_QX6V6BSwsA.png" /><figcaption>Custom events in session player</figcaption></figure><p>We hope you find these feature updates helpful. We’d love to hear your feedback.</p><p>If you still haven’t had the chance to try out SessionStack, get your <a href="https://app.sessionstack.com/signup">free plan here</a>.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=881a78614960" width="1" height="1" alt=""><hr><p><a href="https://medium.com/sessionstack-blog/the-latest-sessionstack-release-includes-most-clicked-chart-funnel-summary-custom-events-881a78614960">The latest SessionStack release includes Most Clicked Chart &amp; Funnel Summary &amp; Custom Events</a> was originally published in <a href="https://medium.com/sessionstack-blog">SessionStack Blog</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[The latest SessionStack release includes instrumentation-free Conversion Funnels]]></title>
            <link>https://medium.com/sessionstack-blog/the-latest-sessionstack-release-includes-instrumentation-free-conversion-funnels-bada55dc2051?source=rss----12d1b859d4e4---4</link>
            <guid isPermaLink="false">https://medium.com/p/bada55dc2051</guid>
            <category><![CDATA[product-management]]></category>
            <category><![CDATA[product-updates]]></category>
            <category><![CDATA[conversion-optimization]]></category>
            <category><![CDATA[funnel-analysis]]></category>
            <category><![CDATA[user-experience]]></category>
            <dc:creator><![CDATA[Mariya Ivanova]]></dc:creator>
            <pubDate>Wed, 21 Dec 2022 12:42:52 GMT</pubDate>
            <atom:updated>2023-01-19T08:00:11.726Z</atom:updated>
            <content:encoded><![CDATA[<p>We are happy to share with you our next big step in the delivery: Funnels</p><p>This article will cover</p><ol><li><a href="#bc73">What is a funnel and why it’s important for conversion rate optimization?</a></li><li><a href="#dc5f">Definition of funnel event steps “In this order”</a></li><li><a href="#662d">Visualizing funnel steps across all sessions or within one user session</a></li><li><a href="#5541">How to configure a Conversion Funnel in SessionStack?</a></li><li><a href="#651c">Wondering which option to use: “Within the same session“ OR “Across all sessions“?</a></li><li><a href="#4428">Funnel chart summary</a></li><li><a href="#9455">Coming soon: a detailed funnel conversion summary. Stay tuned!</a></li></ol><p><strong>Before the beginning, if you still haven’t tried SessionStack, now you can start in minutes </strong><a href="https://www.sessionstack.com/plans/?utm_source=medium&amp;utm_medium=article&amp;utm_campaign=product-updates&amp;utm_content=funnels"><strong>with our new Free plan</strong></a><strong>. Get 1500 free sessions/month and all features.</strong></p><h3>1. What is a funnel and why it’s important for conversion rate optimization?</h3><p>We have a more general definition of a funnel at SessionStack.</p><p>A funnel is a set of ordered expected steps that, in the best-case scenario, your user will follow from beginning to end to achieve a business milestone (conversion). In the <a href="https://www.sessionstack.com/platform/?utm_source=medium&amp;utm_medium=article&amp;utm_campaign=product-updates&amp;utm_content=funnels">SessionStack platform</a> steps in a funnel can be end-user actions (mouse clicks, keyboard interactions, scroll, touch events) or end-user navigations to defined locations (URLs), or a combination of both. All of these events, whether user actions or navigations occur sequentially, and each step that we want to measure is defined in our funnel accordingly.</p><p>It is unavoidable that not all of our users will follow this flow from start to finish. To achieve product growth, we must investigate user behaviors and optimize the deviation from the desired action. This is best done with funnel analysis, as funnels are the best tool to visualize user flows and analyze the conversion rate of each step. Especially combined with <a href="https://www.sessionstack.com/platform/#session-replay">session replay</a>, where you can literally see and understand the user actions of funnel converters or drop-offs.</p><p>However, traditional analytics funnels require instrumentation, where you can only measure a static predefined set of steps you qualify as the best customer journey. This causes a significant analytical handicap especially in more complex digital products, with the constant development of new features.</p><p>Here is where <a href="https://www.sessionstack.com/platform/#funnels">SessionStack Funnels</a> are truly useful. Since our platform relies on the auto-capture of data it can provide instrumentation-free funnels that are easy to set up and work retroactively. So you can have your conversion analysis right away, starting from any point of the user journey, unfolding every hidden step in between.</p><p>You can easily analyze and optimize the conversion process from any login and onboarding, through complex feature adoption, or subscription. From any product page view through the shopping cart steps, till purchase.</p><p><strong>In brief, the instrumentation-free Funnels of SessionStack are providing us with the ability to:</strong></p><ul><li>Visualize any desired flow that we want our users to go through without the need for initial preparation;</li><li>Track how many of our users complete each step and how many drop out;</li><li>Investigate the causes of drop-offs and understand better the behavior of converters by replaying the sessions of both segments and following their trends</li><li>Based on the findings, we can fix the identified issues and then verify our conversion optimization effort by comparing the results of both <a href="https://www.sessionstack.com/platform/#segmentation-trends">segments</a> before and after</li></ul><h3>2. Definition of funnel event steps “In this order”</h3><p>A funnel visualization is a series of an ordered set of events, which means that the event described in step one occurs before the event described in step two. However other events from the user journey may occur in between. In SessionStack the Funnel configuration setting “In this order” follows precisely this example and it’s used to describe only the mandatory steps in a journey in order to achieve the desired business goal (conversion).</p><p>To get a better picture of the setting “In this order”, consider the following scenario.</p><p>A customer is looking for green handbags on an e-commerce website. They are adding a handbag to the cart and then proceed to the checkout page. The first step is to visit a product page, then add an item to the cart, and the third is to navigate to the checkout page. However, before proceeding to the payment, the user may examine several sets of shoes and belts. Using the setting “in this order” we’ll conduct a funnel analysis specifically of the described process. If we see a significant decrease from step one to steps two and three, we can isolate drop-offs, replay their sessions and optimize our purchase flow, so we keep users focused on finishing the order.</p><figure><img alt="SessionStack Instrumentation-free Funnel Chart" src="https://cdn-images-1.medium.com/max/1024/1*7DWMZ0RfV8krWk1E5ciCJQ.png" /><figcaption>SessionStack Funnel Chart</figcaption></figure><h3>3. Visualizing funnel steps across all sessions or within one user session</h3><p>So far, we’ve discussed what the sequential order of events in a funnel means. Now let’s review the definition of session order type in<a href="https://www.sessionstack.com/platform/#funnels"> SessionStack Funnels</a>. There are two options we support:</p><ul><li><strong>“Across all sessions”</strong>: will search for a set of funnel steps that occur across all sessions of a user</li></ul><p>Consider the following scenario. There is a new user to the e-commerce site. They navigate to the desired product (the first step of the funnel) during their first session and in the fourth session, they decide to finalize their purchase (the last step of the funnel). Both events, Visting that particular URL and pressing the button “Purchase“ are part of the funnel configuration. Once the funnel is built, the search for events will be performed for all users across all of their sessions, and our newbie will be listed in this funnel.</p><ul><li>“<strong>Within the Same Session“</strong>: will search for a set of funnel steps that are completed in one user session</li></ul><p>In the preceding example, if we select the “Within the same session” option, our newbie in the e-commerce site will not be listed as converted because all steps were not completed in the same session.</p><h3>4. How to configure a Conversion Funnel in SessionStack?</h3><p>The Funnels dashboard is in the main menu on the left side. There is a new icon as shown below:</p><figure><img alt="SessionStack Funnel Dashboard" src="https://cdn-images-1.medium.com/max/1024/1*sEet8ZAL3dVsxJKi5G8t6w.png" /><figcaption>SessionStack Funnel Dashboard</figcaption></figure><p>Once you are there, press the <strong>“New Funnel”</strong> button and you will go to the funnel creation page where you can configure your steps. The general funnel settings and visualization is shown when you add<strong> at least two steps</strong>. There is a default selection of general settings for your convenience.</p><ul><li>The default selection for Session order type is: “Within the same session”.</li><li>Selected users are: “All users“. Soon we’ll include the ability to select and compare previously saved segments from our primary dashboard (Segments).</li></ul><figure><img alt="Session Type: “Across All Sessions” &amp; “Within the Same Session”" src="https://cdn-images-1.medium.com/max/1024/1*EG-NleIRVDA04aH6hvi_6A.png" /><figcaption>Session Type: “Across All Sessions” &amp; “Within the Same Session”</figcaption></figure><p>As we mentioned above, one of the advantages of SessionStack DXI is that it’s an instrumentation-free platform. You don’t need to predefine events, as it’s widespread with traditional analytical tools. All you have to do is select events from the Search filter list. We currently offer the four events listed below, but we are constantly adding new filters:</p><ul><li><a href="https://blog.sessionstack.com/new-sessionstack-features-the-ability-to-search-users-by-visited-url-and-share-a-session-7d569ea87210">Visited URL</a></li><li><a href="https://blog.sessionstack.com/new-sessionstack-features-the-ability-to-search-users-by-clicked-element-and-user-management-98e5c3e186b">Clicked Element</a> with <a href="https://blog.sessionstack.com/the-latest-sessionstack-release-includes-user-trends-and-contextual-filters-860ceeff4515">contextual filter</a>: Visited URL</li><li><a href="https://blog.sessionstack.com/the-latest-sessionstack-release-includes-rage-click-search-by-text-for-clicked-element-4f3af3a23ff">Rage Click</a> with contextual filter: Visited URL</li><li><a href="https://blog.sessionstack.com/the-latest-sessionstack-release-includes-the-dead-clicks-filter-chart-342fbcbe8f4d">Dead Click</a> with contextual filter: Visited URL</li></ul><p>Each chosen event is a separate step of a funnel. When at least two steps are added, a funnel chart will be visualized. Each new step will be reflected in the funnel chart automatically.</p><figure><img alt="SessionStack Funnel Configuration" src="https://cdn-images-1.medium.com/max/1024/1*o_H3AzakIbSbJ7etxprc0g.png" /><figcaption>SessionStack Funnel Configuration</figcaption></figure><h3>5. Wondering which option to use: “Within the same session“ OR “Across all sessions“?</h3><p>The funnel setup covering a user experience <strong>“Across all sessions”</strong> is better suited to analyzing long-term processes in SaaS products. Usually, it takes much more than one session for a user to be onboarded to a complex product. Adoption of all its features takes even longer. In this case, searching for events across all sessions of a user helps us fully visualize their journey and conduct a meaningful conversion analysis.</p><p>While funnel event search <strong>“Within the same session”</strong> is better suited to analyzing a short-term conversion process, for example in e-commerce sites, aiming for impulsive purchases. In such cases, the business goal is to turn a potential customer into a paying one right away.</p><p><strong>At SessionStack we use both options. It helps us draw better conclusions about how to better help our users both short and long-term.</strong></p><h3>6. Funnel chart summary</h3><p>Currently, we provide general information about converted users (<strong>who have completed a specific step</strong>) and drop-off users (<strong>who have abandoned a specific step</strong>). All of these figures can be examined for each step by hovering the mouse over each bar. The dark blue bar represents successfully passed step users, while the light blue portion of the bar represents dropped-off users.</p><figure><img alt="SessionStack General Summary for Converted Users" src="https://cdn-images-1.medium.com/max/1024/1*BZqhvA8FhdS7x2HOSpkZEA.png" /><figcaption>Funnel Summary for Converted Users</figcaption></figure><figure><img alt="General Summary for the Drop-off Users" src="https://cdn-images-1.medium.com/max/1024/1*yekL9IBM_xYPWRUdDFoCbA.png" /><figcaption>Funnel Summary for the Drop-off Users</figcaption></figure><h3>7. Coming soon: a detailed funnel conversion summary. Stay tuned!</h3><p>A more detailed summary with lists of converted and dropped-off users and their relevant sessions will be presented soon. Thus allowing you to further investigate the causes of drop-offs or conversions, watch relevant sessions of both user groups and discover conversion opportunities in your funnel.</p><p>SessionStack instrumentation-free Funnels significantly enhance our feature set of <a href="https://www.sessionstack.com/solutions/product-management/?utm_source=medium&amp;utm_medium=article&amp;utm_campaign=product-updates&amp;utm_content=funnels"><strong>product management solutions</strong></a>. In our roadmap, we plan to continue their upgrade in order to provide even better capabilities for funnel analysis.</p><p><strong>Interested in SessionStack? Book </strong><a href="https://www.sessionstack.com/personalized-demo/?utm_source=medium&amp;utm_medium=article&amp;utm_campaign=product-updates&amp;utm_content=funnels"><strong>your demo</strong></a><strong> now or get started in minutes </strong><a href="https://www.sessionstack.com/plans/?utm_source=medium&amp;utm_medium=article&amp;utm_campaign=product-updates&amp;utm_content=funnels"><strong>with our new Free plan</strong></a><strong>.</strong></p><p>Happy with SessionStack? Leave a review and <a href="https://www.g2.com/contributor/sessionstack_rewardslink20vs?secure%5Bpage_id%5D=sessionstack_rewardslink20vs&amp;secure%5Brewards%5D=true&amp;secure%5Btoken%5D=3cb48bd34a9b5ef0aba109d8082726950c0b8cce48ca3a02c0e9c6ec8331be18"><strong>get a Gift card!</strong></a></p><p>We hope you find these feature updates helpful. We’d love to hear your feedback in the comments below.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=bada55dc2051" width="1" height="1" alt=""><hr><p><a href="https://medium.com/sessionstack-blog/the-latest-sessionstack-release-includes-instrumentation-free-conversion-funnels-bada55dc2051">The latest SessionStack release includes instrumentation-free Conversion Funnels</a> was originally published in <a href="https://medium.com/sessionstack-blog">SessionStack Blog</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[The latest SessionStack release includes The Dead Clicks filter & chart]]></title>
            <link>https://medium.com/sessionstack-blog/the-latest-sessionstack-release-includes-the-dead-clicks-filter-chart-342fbcbe8f4d?source=rss----12d1b859d4e4---4</link>
            <guid isPermaLink="false">https://medium.com/p/342fbcbe8f4d</guid>
            <category><![CDATA[product-updates]]></category>
            <category><![CDATA[digital-experience]]></category>
            <category><![CDATA[product-management]]></category>
            <category><![CDATA[ux-research]]></category>
            <category><![CDATA[product-analytics]]></category>
            <dc:creator><![CDATA[Mariya Ivanova]]></dc:creator>
            <pubDate>Wed, 26 Oct 2022 14:29:06 GMT</pubDate>
            <atom:updated>2023-01-12T15:30:17.108Z</atom:updated>
            <content:encoded><![CDATA[<p>We are happy to share with you our next frustration signal Dead Click. It, along with our previous frustration signal Rage Click, provides you with a powerful mechanism for searching for user pains and bad UI/UX experiences.</p><p>This article will cover</p><ol><li><a href="#028b">Definition of dead click</a></li><li><a href="#0b04">Using the Dead Click event filter</a></li><li><a href="#b786">How are the dead clicks recreated in our Session player</a></li><li><a href="#9332">Dead Click Chart</a></li></ol><h3>1. Definition of dead click</h3><p>In our <a href="https://blog.sessionstack.com/the-latest-sessionstack-release-includes-rage-click-search-by-text-for-clicked-element-4f3af3a23ff">blog post</a> from September, we discussed what rage clicks are and how to search for them in the SessionStack app. Today, we’d like to go over another source of frustration: the dead click.</p><p>Dead clicks are clicks or taps that have no effect on the page such as</p><ul><li>DOM events;</li><li>URL changes;</li><li>Console Log Events;</li></ul><p>Often such behavior leads to another frustration signal such as a rage click. Therefore it’s essential to look proactively for dead clicks in user sessions of your product as they are an indicator of poor UX.</p><p>Some of the reasons for dead clicks could be:</p><ul><li>A text appears to be a link or clickable but is not;</li><li>An image appears to be expandable, but it is not;</li><li>A button does not work correctly;</li></ul><h3>2. Using the Dead Click event filter</h3><p>To apply the new Dead click event filter in the SessionStack DXI platform navigate to the Segments dashboard in your project and open the filter drop-down menu as shown below:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/800/1*DikCT--agunNLDrBxJ1sTg.png" /><figcaption>Dead Click filter</figcaption></figure><p>Use any of the three options: “<strong>Anything”</strong>, “<strong>Text is”</strong> and<strong> “CSS Selector is”</strong> in accordance with the cases listed below:</p><ul><li>When unsure whether your users have any dead clicks, select the option: “<strong>Anything”</strong>.</li><li>When you know that users have issues while interacting with a particular HTML element and you want to check if there are any dead clicks on it, use the option: “<strong>Text is”</strong>.</li><li>And if the HTML element does not have text on it, use the option: <strong>“CSS Selector is”</strong>.</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/800/1*_0RpuqGTVTaYcOO-eZfY4Q.png" /><figcaption>Dead Click filter with options</figcaption></figure><h3>3. How are the dead clicks recreated in our Session player</h3><p>The SessionStack platform also recreates dead clicks in the session player as part of the session event log. As a second stage, you can segment all users having dead clicks in their sessions using the fast copy option for the CSS selector of the element and paste it into the input field of the event filter Dead click in the Segments dashboard.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/800/1*sOwfQzE-RNlPJHau2nHBSg.png" /><figcaption>Dead Clicks events in Session player</figcaption></figure><p><strong>Are you interested in the Dead Click event filter? </strong><a href="https://www.sessionstack.com/personalized-demo/?utm_source=medium&amp;utm_medium=article&amp;utm_campaign=product-updates&amp;utm_content=dead-clicks-filter-charts"><strong>Contact our team</strong></a><strong> to request the feature.</strong></p><h3>4. Dead Click Chart</h3><p>In our previous <a href="https://blog.sessionstack.com/the-latest-sessionstack-release-includes-a-rage-click-chart-new-session-filters-2ecc7f1715e6">blog update</a>, we introduced the Rage Click chart. Today we want to show you our new <strong>Dead Click</strong> chart. To demonstrate how to use it, consider the following example.</p><p>The “Submit” button as a part of your registration flow, is not working, which significantly affects the acquisition rate of new users. SessionStack can assist you in quickly determining this. All you have to do is log into our app and use the <strong>Dead Click</strong> <strong>— filter &amp; chart</strong> features. The fastest way is to look at the <strong>Dead Click </strong>diagram first. Check which of the major pain points is causing a poor user experience. Add the users with dead clicks on the “Submit” button from the chart to a new segment and inspect the exact list of users with that particular issue. Explore the sessions of the users from there. To avoid watching all users’ sessions from beginning to end, use our “Only matching sessions” option in conjunction with the quick filter Dead Click in the session player.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/800/1*dh3mVxM8fGj_f1vnyAyryA.png" /><figcaption>Step1: Use the “Add filter” option to examine all users with dead clicks on the “Submit”</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/800/1*PdBWfp-DAAS0_9buhKUR1Q.png" /><figcaption>Step 2: Automatically added filters for Dead Click from the chart</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/800/1*RLuvMuXW57kU36shZIgUUw.png" /><figcaption>Step 3: Users list with dead click and matching sessions</figcaption></figure><p>Another method for determining the number of dead clicks on the “Submit” button is to use the chart’s “Add Filter” option and copy the automatically added CSS selector in the segment filters. After that, paste the copied string in the search field as shown below and go through the listed dead clicks. All other clicks (rage &amp; regular) will be filtered out and not shown.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/800/1*HLqha09RRA8u20dmIGFWVQ.png" /><figcaption>Step 1: Copy the CSS selector from the Dead Click event filter</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/800/1*sOwfQzE-RNlPJHau2nHBSg.png" /><figcaption>Step 2: Paste the copied CSS string from step 1 into the search field and filter for dead clicks only</figcaption></figure><p><strong>Interested in SessionStack? Book </strong><a href="https://www.sessionstack.com/personalized-demo/?utm_source=medium&amp;utm_medium=article&amp;utm_campaign=product-updates&amp;utm_content=dead-click-charts"><strong>your demo</strong></a><strong> now or get started in minutes </strong><a href="https://www.sessionstack.com/plans/?utm_source=medium&amp;utm_medium=article&amp;utm_campaign=product-updates&amp;utm_content=dead-click-charts"><strong>with our Free plan</strong></a><strong>.</strong></p><p>Happy with SessionStack? Leave a review and <a href="https://www.g2.com/contributor/sessionstack_rewardslink20vs?secure%5Bpage_id%5D=sessionstack_rewardslink20vs&amp;secure%5Brewards%5D=true&amp;secure%5Btoken%5D=3cb48bd34a9b5ef0aba109d8082726950c0b8cce48ca3a02c0e9c6ec8331be18"><strong>get a Gift card!</strong></a></p><p>We hope you find these feature updates helpful. We’d love to hear your feedback in the comments below.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=342fbcbe8f4d" width="1" height="1" alt=""><hr><p><a href="https://medium.com/sessionstack-blog/the-latest-sessionstack-release-includes-the-dead-clicks-filter-chart-342fbcbe8f4d">The latest SessionStack release includes The Dead Clicks filter &amp; chart</a> was originally published in <a href="https://medium.com/sessionstack-blog">SessionStack Blog</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[The latest SessionStack release includes a Rage Click chart & new Session filters]]></title>
            <link>https://medium.com/sessionstack-blog/the-latest-sessionstack-release-includes-a-rage-click-chart-new-session-filters-2ecc7f1715e6?source=rss----12d1b859d4e4---4</link>
            <guid isPermaLink="false">https://medium.com/p/2ecc7f1715e6</guid>
            <category><![CDATA[digital-experience]]></category>
            <category><![CDATA[product-management]]></category>
            <category><![CDATA[product-releases]]></category>
            <category><![CDATA[product-updates]]></category>
            <category><![CDATA[user-experience]]></category>
            <dc:creator><![CDATA[Mariya Ivanova]]></dc:creator>
            <pubDate>Thu, 06 Oct 2022 14:02:42 GMT</pubDate>
            <atom:updated>2023-01-12T15:32:40.853Z</atom:updated>
            <content:encoded><![CDATA[<p>We are thrilled to share that our User Trends dashboard is moving forward with a new <strong>Rage Click chart</strong> and the Segments dashboard now has two additional session filters: <strong>Active Time</strong> and <strong>Session Length.</strong></p><p>This article will cover</p><ol><li><a href="#0b64">User Trends: Rage Click chart</a></li><li><a href="#53e5">Creating a user segment directly from the chart</a></li><li><a href="#234a">How to get the most out of the Rage Click chart</a></li><li><a href="#5940">How to filter users&#39; active time on long sessions and find users with specific session duration</a></li></ol><h3>1. User Trends: Rage Click chart</h3><p>In our previous <a href="https://blog.sessionstack.com/the-latest-sessionstack-release-includes-rage-click-search-by-text-for-clicked-element-4f3af3a23ffionstack-release-includes-rage-click-search-by-text-for-clicked-element-4f3af3a23ff">blog post</a>, we discussed our event filter <strong>Rage Click </strong>which helps you with finding frustration points for your users. In order to enhance our DXI analysis, we released the <strong>Rage Click</strong> chart. Using both gives you a clearer picture of what and where your users are struggling while using your product.</p><p>The new <strong>graph </strong>in our Segments dashboard helps you:</p><ol><li>First and foremost, determine whether your users perform rage clicks</li><li>Second, if there are rage clicks, which elements are causing the most frustration</li><li>Third, how many users have been affected by this</li><li>Last but not least, which are the pages causing the rage clicks</li></ol><p>By following the three simple steps outlined below, you can get instant value<strong> with a zero-effort configuration</strong>:</p><p>Step 1) Log into the SessionStack app.</p><p>Step 2) Navigate to our primary dashboard — Segments</p><p>Step 3) Check our new chart in User Trends</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/800/1*5h6i2DS2zxBeYbzaGO-cQw.png" /><figcaption>New User Trend: <strong>Rage Click</strong> chart</figcaption></figure><h3>2. Creating a user segment directly from the chart</h3><p>Another useful feature of our new chart <strong>Rage Click</strong> is the ability to quickly and easily create a user segment. To do this, simply click the unique “Add Filter” icon for any row that you believe merits more examination. You may do this to see which users rage clicks on a particular element, to view their matching sessions, or to look at the remainder of the User trends for those users.</p><p>Check the image below for more details.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/800/1*2XAQbTzOtbrNRkXjbQT4dg.png" /><figcaption>Rage Click chart: option <strong>“Add Filter”</strong></figcaption></figure><h3>3. How to get the most out of the Rage Click chart?</h3><p>Consider the following scenario. As a product manager, you want to know where users are having the most trouble and confusion. You don’t have any assumptions about which are the HTML elements causing frustration points such as rage clicks. One way is to use our segment filter <strong>Rage Click </strong>with the option “Anything”. However, the simplest method is to use the chart related to those clicks. Examine the list of elements with rage clicks. Use our option to show the data in percentage, too. This will help you to understand what fraction of all your users or segment ones are affected.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/800/1*vOJskItDny_YZcWHvEVg7w.png" /><figcaption>Rage Click chart: option “Show in %”</figcaption></figure><p>You notice that one of the elements causes a large number of rage clicks, but the number of people affected is small, or the clicks are performed by just one person. Directly from the chart, add this element to a segment.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/800/1*2XAQbTzOtbrNRkXjbQT4dg.png" /><figcaption>Rage Click chart: use the option <strong>“Add Filter”</strong></figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/800/1*f3Ebgqt3ZoizXWuezgUSMQ.png" /><figcaption>Rage Click: filter is added automatically to your segment</figcaption></figure><p>Examine the user(s) with the frustration signals. Examine their matching sessions. To save time from watching too-long sessions, only go through the rage clicks event steps. Or you can watch the entire session to get a complete picture of the user’s behavior — what steps are taken before the rage clicks. Look for errors in our console and network tabs in the session player. It is possible that the button responsible for those clicks is malfunctioning and throwing exceptions in the console.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/800/1*agQJV4GTMaGad4MK-ZE6Jw.png" /><figcaption>Rage click events in our session player</figcaption></figure><p>But what if the rage clicks are actually false positives? People interact with a pagination element, which is regarded as a source of frustration. Remove that specific element from the analysis to avoid false alarms. More on this can be found in our September <a href="https://blog.sessionstack.com/the-latest-sessionstack-release-includes-rage-click-search-by-text-for-clicked-element-4f3af3a23ff">blog post</a>. Once this configuration is in place, the next time a user interacts with the paging, this activity will not trigger a rage click.</p><p><strong>Interested in the Rage Click chart? </strong><a href="https://www.sessionstack.com/personalized-demo/?utm_source=medium&amp;utm_medium=article&amp;utm_campaign=product-updates&amp;utm_content=rage-click-charts"><strong>Contact our team</strong></a><strong> to request the feature.</strong></p><h3>4. How to filter users’ active time on long sessions and find users with specific session duration</h3><p>Have you ever wondered if you can use the session length to determine who are your most active and keen on your product users? Let’s face it: long sessions do not always imply that users are active throughout the session and satisfied with your product. To get this insight, use our new Segment filters: <strong>“Active Time” </strong>and <strong>“Session Length”</strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/800/1*5dC_iahoL8BAtZVyZMDR3A.png" /><figcaption>New Segment filters: <strong>Active Time</strong> &amp; <strong>Session Length</strong></figcaption></figure><p>A user is considered “active” when they perform any of the following types of user action events:</p><ul><li>Mouse events</li><li>Keyboard events</li><li>Touch events</li><li>Scroll</li><li>Navigate (in-tab and cross-tab)</li></ul><p>If the user is interacting with the page with any of the above user action events, the SessionStack DXI platform classifies that part of the session to be <strong>active. Then we add up all active periods during a session to get a single value: active time.</strong></p><p>Let’s assume the typical length of a session for your product is more than 10 min. You want to look at all users who have sessions greater than 10 min and have been active for more than 5 min. To find how many users are meeting these criteria, use our “<strong>Active Time” filter </strong>with the combination of the other new<strong> </strong>one “<strong>Session Length”</strong> as shown below.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/800/1*uleCOUWLWqaaHyvbR-RH7g.png" /><figcaption>Filtering for a session with a specific length and active time</figcaption></figure><p>The filter will list all users who have at least one session with a duration greater than 10 min and with an active time bigger than 5 min. To examine further what these sessions are and what the users have done while being active, open the right-side panel with the list of all sessions and use the “Only matching“ option for checking only the relevant sessions.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/800/1*5XERSiSdUIW_sIawbTOs2g.png" /><figcaption>Matching sessions with a duration bigger than 10 min and active time greater than 5 min</figcaption></figure><p>Each session shown in the list has two separate properties: Length and Active Time. So even when you have no idea what is the typical duration of the user activity, you can adopt the value from the relevant property. Then use this value to search for all users matching the criteria.</p><p><strong>Interested in SessionStack? Book </strong><a href="https://www.sessionstack.com/personalized-demo/?utm_source=medium&amp;utm_medium=article&amp;utm_campaign=product-updates"><strong>your demo</strong></a><strong> now or get started in minutes </strong><a href="https://www.sessionstack.com/plans/?utm_source=medium&amp;utm_medium=article&amp;utm_campaign=product-updates"><strong>with our Free plan</strong></a><strong>.</strong></p><p>Happy with SessionStack? Leave a review and <a href="https://www.g2.com/contributor/sessionstack_rewardslink20vs?secure%5Bpage_id%5D=sessionstack_rewardslink20vs&amp;secure%5Brewards%5D=true&amp;secure%5Btoken%5D=3cb48bd34a9b5ef0aba109d8082726950c0b8cce48ca3a02c0e9c6ec8331be18"><strong>get a Gift card!</strong></a></p><p>We hope you find these feature updates helpful. We’d love to hear your feedback in the comments below.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=2ecc7f1715e6" width="1" height="1" alt=""><hr><p><a href="https://medium.com/sessionstack-blog/the-latest-sessionstack-release-includes-a-rage-click-chart-new-session-filters-2ecc7f1715e6">The latest SessionStack release includes a Rage Click chart &amp; new Session filters</a> was originally published in <a href="https://medium.com/sessionstack-blog">SessionStack Blog</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[How JavaScript Works: Deploying a Nodejs application with Kubernetes]]></title>
            <link>https://medium.com/sessionstack-blog/how-javascript-works-deploying-a-nodejs-application-with-kubernetes-fb6a32ee2a99?source=rss----12d1b859d4e4---4</link>
            <guid isPermaLink="false">https://medium.com/p/fb6a32ee2a99</guid>
            <category><![CDATA[kubernetes]]></category>
            <category><![CDATA[javascript]]></category>
            <category><![CDATA[nodejs]]></category>
            <category><![CDATA[how-javascript-works]]></category>
            <category><![CDATA[software-development]]></category>
            <dc:creator><![CDATA[Victor Jonah]]></dc:creator>
            <pubDate>Wed, 28 Sep 2022 10:18:42 GMT</pubDate>
            <atom:updated>2023-04-11T13:01:43.940Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*u2AXSzMdP7FZbtCn" /></figure><p>This is post # 73 of the series, dedicated to exploring JavaScript and its building components. In the process of identifying and describing the core elements, we also share some rules of thumb we use when building <a href="https://www.sessionstack.com/solutions/developers/">SessionStack</a>, a JavaScript tool for developers to identify, visualize, and reproduce web app bugs through pixel-perfect session replay.</p><h3>Introduction</h3><p>With the recent rise in the adoption of microservice architecture, we have seen more containers being used. With that, these containers might range to hundreds and even thousands of them. It is either mismanaged or impossible to manage that amount of containers. Traditionally, you could use Docker-compose to manage several containers simultaneously but this is not feasible if you have a lot of containers with much traffic and downtime.</p><p>This brings about a container orchestration — Kubernetes. There are a few alternatives to Kubernetes which are AWS EKS, GKE, Docker-compose, etc.</p><p>In this article, we will be looking at how to deploy a Nodejs application to Kubernetes. We will be looking at a brief overview of how Kubernetes works, build a simple web server, choose an image with Dockerfile defined, build the image and push it to a registry. After that is done, we define the Kubernetes Deployment object.</p><h3>Prerequisites</h3><ul><li><a href="https://docs.docker.com/engine/install/">Docker</a> should be installed on your system</li><li>A Docker hub account is required</li><li>Nodejs should be installed on your system</li><li><a href="https://minikube.sigs.k8s.io/docs/start/">Minikube</a> should be installed on your system</li><li>Knowledge of Javascript and Nodejs is required</li><li>Prior knowledge of Kubernetes is a plus but not necessary</li></ul><h3>Kubernetes and a brief overview</h3><p>A clear definition of Kubernetes is that it is a container orchestration tool that helps manage and organize your containerized microservices while scaling them. At scale, we mean horizontal/vertical scaling, auto-healing, load-balancing — high availability, and disaster recovery — rollbacks. The first thing we need to ponder with is our containers. These containers are more or less isolated and need to be properly managed; load balanced, distributed, and connected to the outside world.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*OQApvfCsw6wbKbOU" /></figure><p>Take Kubernetes as a captain on a ship that manages both the ship and the containers on it. It can identify each container on its ship by a label referred to as a “nametag”, thereby querying it using that nametag. On the ship, the container might have to be placed inside a “Pod” which can hold some containers that are related. These Pods are the smallest units in Kubernetes(our ship) and they’re executable i.e they can run the containers in them.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*veoFeSzore8-U8vY" /></figure><p>In Kubernetes, each of these Pods can decide to replicate themselves, the replicated pods can be more or less but they must be running at every point in time. This management can only be done by the Replication Controller. It handles monitoring, manages the Pods lifecycle, has a template for each of the Pods which can help replicate them, and can scale the Pods horizontally and vertically.</p><p>Also, Kubernetes has what is called ‘Service’ which acts as a bridge between the Pods in a Node. With this, Pods can discover other Pods. Let’s take, for example, a file-compressor backend service with 3 replicas; do not forget these backend servers are containerized each and inside a Pod, the frontend doesn’t know which Pod it is but the Service handles the load balancing for that.</p><p>To summarize this so we go into the main reason for this article, these are the important Kubernetes vocabulary:</p><h4>Node</h4><ul><li>It runs the Pods</li><li>Communicates with the master</li><li>Has a kubelet</li></ul><h4>Pods</h4><ul><li>Are within a Node</li><li>Executes the containers in it</li><li>Has 1+ containers in it</li></ul><h4>Services</h4><ul><li>Load balances</li><li>Provides communication and discovery with other Pods</li><li>Identifies Pods using a layer selector</li></ul><h4>Deployment</h4><ul><li>Indicates how many pods should run simultaneously</li><li>Manages Pods in case any dies</li></ul><h3>Building a simple Nodejs server</h3><p>We are on our way to deploying a Nodejs server to Kubernetes, but the first thing we have to do is to build a simple application.</p><p>The first step is to create a project folder, and from the project folder, create a new Nodejs application using this command:</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/ae0105610a0d09b8e1f236fa85821601/href">https://medium.com/media/ae0105610a0d09b8e1f236fa85821601/href</a></iframe><p>In the root directory, create an index.js file, and install the needed nodejs package by running:</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/0d9978140a5da79d0d39ec6d39b75578/href">https://medium.com/media/0d9978140a5da79d0d39ec6d39b75578/href</a></iframe><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/12ee3a2b005a232aca83822967bd8dcd/href">https://medium.com/media/12ee3a2b005a232aca83822967bd8dcd/href</a></iframe><p>Next, in our `index.js` file, we create a simple server that will only return ‘Kubernetes Deployment” as text.</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/d5703142f038ba59847050593df85615/href">https://medium.com/media/d5703142f038ba59847050593df85615/href</a></iframe><p>Update the scripts section of your package.json file should look like this:</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/7c5d27782a5f3d2cda0c023222481b4c/href">https://medium.com/media/7c5d27782a5f3d2cda0c023222481b4c/href</a></iframe><p>Now, by running `npm start` your server should be started and ready to be in a Docker container.</p><h3>Containerized server</h3><p>Since we will be using Docker for this, I assume you have it installed, but if not, please follow these <a href="https://docs.docker.com/engine/installation/">guidelines</a> to install Docker.</p><p>And to dockerize our app, create a Dockerfile in the root directory by running this command:</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/927363802bda7eea5adb23dec9460278/href">https://medium.com/media/927363802bda7eea5adb23dec9460278/href</a></iframe><p>In our Dockerfile, there are a few things we will need to define and the first and most important one is the docker image. Since we are using Node for this application, our image will be based on node:</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/46684fb79723a9ded94290ed2fabaafe/href">https://medium.com/media/46684fb79723a9ded94290ed2fabaafe/href</a></iframe><p>If you noticed, we used the node:18-buster-slim node image in the code above, but this can be any image of your choice. It doesn’t matter here now.</p><p>Next, we define an app directory in our container /usr/src/app, The directory could be anything but it is common to define it inside the /usr directory.</p><p>And, we use a wildcard to copy all files that are .json so it covers the package.json and package-lock.json.</p><p>Furthermore, we install dependencies and copy all files in our local directory into our container. Do not forget to create a .dockerignore file to ignore huge folders like node_modules.</p><p>Lastly, we expose the port 8080 and set the base command.</p><p>Following this, we will build the application. But before building the application, log into your docker hub account and <a href="https://docs.docker.com/docker-hub/repos/#:~:text=To%20push%20an%20image%20to,docs%2Fbase%3Atesting%20).">create a new Docker hub repository</a> called kubernetes_deploy. Then you can build the Docker image by running:</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/7eb1c541c439d405deb6cf0e86c0a46f/href">https://medium.com/media/7eb1c541c439d405deb6cf0e86c0a46f/href</a></iframe><p>Note: use your docker hub account, not mine(vectormike) to build your docker file.</p><p>When this is successful, you can run the image that your application the container works:</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/7756dd216389ca13d9a5a559d10cd2c6/href">https://medium.com/media/7756dd216389ca13d9a5a559d10cd2c6/href</a></iframe><p>Finally, push this image to your docker hub so it is accessible in Kubernetes:</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/a14ff0c27174a747e2a040cfb59c47ff/href">https://medium.com/media/a14ff0c27174a747e2a040cfb59c47ff/href</a></iframe><p>If you are still unfamiliar with the above process, please refer to this <a href="https://medium.com/sessionstack-blog/how-javascript-works-dockerizing-a-node-js-application-228154e9d91a">guide</a> on how to dockerize a Nodejs application.</p><h3>Deployment with Kubernetes</h3><p>For the sake of learning how to deploy to Kubernetes, we will have to use <a href="https://minikube.sigs.k8s.io/docs/start/">minikube</a> for this. Minikube is typically meant for testing and running locally on your system. It helps you create a single node cluster inside a VM on your machine rather than a production-ready master node. It is equally easy to set up using its <a href="https://minikube.sigs.k8s.io/docs/start/">documentation</a>.</p><p>Our first step here is to create a deployment.yaml file in the root directory and define our resource for deployment in the YAML file.</p><p>So, this file will contain the desired Deployment state for our application. So, if the desired state is 2 — — which is two Pods, and one of the Pods dies, it creates a new one automatically to replace it.</p><p>Also, the Service definition in the deployment.yaml file above is to enable communication between each pod and outside the cluster.</p><p>So, in our deployment.yaml file, our Service and Deployment definition will look like this:</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/caf18270792437477711d521b01b6452/href">https://medium.com/media/caf18270792437477711d521b01b6452/href</a></iframe><p>Lastly, we deploy using the command:</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/ce83c510afbf010b62da7e590f7cafc6/href">https://medium.com/media/ce83c510afbf010b62da7e590f7cafc6/href</a></iframe><p>As I stated earlier, our deployment will be in two parts: Services and Deployment.</p><p>The Deployment section states that we want five replicas of the Pod specified in specs.replicas with the first Pod as a template.</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/27e018374845e0b89eff1133c9065913/href">https://medium.com/media/27e018374845e0b89eff1133c9065913/href</a></iframe><p>Inside of those Pods, we have our single container that contains our Nodejs application, and it is going to pull that image from the docker hub and run it — exposing port 8080:</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/b5649191a4e54e12fa023ccf0e31d15d/href">https://medium.com/media/b5649191a4e54e12fa023ccf0e31d15d/href</a></iframe><p>In the Service section, we declare the name of the service and select the app from the `Deployment` section we defined for it to be accessible from the cluster. So in summary, our service is going to target the Pod myapp:</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/a5f7f7060cc5dceecb069ea641b1a8a8/href">https://medium.com/media/a5f7f7060cc5dceecb069ea641b1a8a8/href</a></iframe><p>The ports are where it is a little bit confusing But, we are using a LoadBalancer, and within the cluster, each Pods are accessible using port: 8080 that will then target the port: 80. So for us to access the cluster from outside, we use the nodePort: 30001.</p><p>Let’s access our service using this command:</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/dbe7b138ad037e5a46126d4e52134983/href">https://medium.com/media/dbe7b138ad037e5a46126d4e52134983/href</a></iframe><p>It should display the URL you will have to access from your browser.</p><p>Minikube also provides a GUI to view stats and anything else rather than using the API service or Command line. To do so, run this command:</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/ca7e8569a92aba56b56207af0279c289/href">https://medium.com/media/ca7e8569a92aba56b56207af0279c289/href</a></iframe><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*qCO-BQNLt5c269Xq" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*V7LFjV_PwNE3DTht" /></figure><h3>Conclusion</h3><p>This article taught us how to deploy a simple Nodejs application with Kubernetes. This is pretty basic just to give you an overview of Kubernetes and deployment is configured. In another article, we will look at how to deploy the same Nodejs application which has a database, and more about volumes in Kubernetes.</p><p>You have to be very careful when you use Kubernetes and minikube because the implementation can be tricky.</p><p>So even if you feel like the proper decisions have been made, it’s always necessary to verify that this is indeed true and your users have a great experience with your product.</p><p>A solution like <a href="https://www.sessionstack.com/solutions/developers/">SessionStack</a> allows us to replay customer journeys as videos, showing how our customers experience our product. We can quickly determine whether our product is performing according to their expectations or not. In case we see that something is wrong, we can explore all of the technical details from the user’s browser such as the network, debug information, and everything about their environment so that we can easily understand the problem and resolve it. We can co-browse with users, segment them based on their behavior, analyze user journeys, and unlock new growth opportunities for our applications.</p><p>There is a free trial if you’d like to <a href="https://www.sessionstack.com/solutions/developers/">give SessionStack a try</a>.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/800/0*uF42OSpHe0PwXsGZ" /><figcaption>SessionStack replaying a session</figcaption></figure><p>Interested in more about JavaScript? Check out all <a href="https://blog.sessionstack.com/how-javascript-works/home">“How JavaScript works” publications here</a>.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=fb6a32ee2a99" width="1" height="1" alt=""><hr><p><a href="https://medium.com/sessionstack-blog/how-javascript-works-deploying-a-nodejs-application-with-kubernetes-fb6a32ee2a99">How JavaScript Works: Deploying a Nodejs application with Kubernetes</a> was originally published in <a href="https://medium.com/sessionstack-blog">SessionStack Blog</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[The latest SessionStack release includes: Rage Click & Search by Text for Clicked Element]]></title>
            <link>https://medium.com/sessionstack-blog/the-latest-sessionstack-release-includes-rage-click-search-by-text-for-clicked-element-4f3af3a23ff?source=rss----12d1b859d4e4---4</link>
            <guid isPermaLink="false">https://medium.com/p/4f3af3a23ff</guid>
            <category><![CDATA[product-analytics]]></category>
            <category><![CDATA[digital-experience]]></category>
            <category><![CDATA[product-updates]]></category>
            <category><![CDATA[product-manager]]></category>
            <category><![CDATA[user-segmentation]]></category>
            <dc:creator><![CDATA[Mariya Ivanova]]></dc:creator>
            <pubDate>Wed, 14 Sep 2022 12:07:11 GMT</pubDate>
            <atom:updated>2023-01-12T15:33:19.717Z</atom:updated>
            <content:encoded><![CDATA[<p>Today, we want to draw your attention to our most recent development in the primary Segments dashboard.</p><p>One of our new features is the<strong> “Rage Click”</strong> segment filter. It allows you to search proactively for users and their sessions with friction points. You no longer need to watch all available sessions for a single user to determine if the user had a smooth user journey in your digital product.</p><p>The second feature update is in our Segments dashboard — a new search option for the existing “<strong>Clicked Element” event filter.</strong></p><p><strong>This article will cover:</strong></p><ol><li><a href="#bdb5">The Definition of rage click</a></li><li><a href="#9041">How to use the main event filter — Rage Click</a></li><li><a href="#f1e4">How to search for rage clicks</a></li><li><a href="#d6bf">Custom option for excluding HTML element from rage clicks</a></li><li><a href="#6d0c">Clicked Element with search option by “Text”</a></li></ol><p>With our latest SessionStack release we move a step further in our goal to provide you with enhanced product analytics tools, combining qualitative and quantitative data. Back in August in our<a href="https://blog.sessionstack.com/the-latest-sessionstack-release-includes-user-trends-and-contextual-filters-860ceeff4515"> blog post</a>, we introduced to you our User Trends — a tool for quantitative analysis. Now, we want to deliberate more about our most recent event filter in Segments:<strong> “Rage Click”, </strong>but first let’s clear out what is really a rage click.</p><h3>The Definition of rage click</h3><p><strong><em>A rage click occurs when a user performs multiple quick clicks on the same element in a row. Among the possible explanations are:</em></strong></p><ul><li>The user does not understand which is a clickable element;</li><li>Buttons, links, and icons do not function properly;</li><li>Unable to click because of the invisible overlay above everything;</li></ul><h3>How to use the main event filter — Rage click</h3><p>Our most recent event filter <strong>“Rage Click”</strong> is available with 3 options: Anything, CSS selector, and Text. You can find it in our Segments dashboard, under the search filters menu.</p><p>See the image below.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*WZON6ULj5qXPi2b5Czp9Ag.png" /><figcaption>“Rage Click” in Segments filters</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/800/1*iqpZvTvVOi3lJl_6Z-dJbQ.png" /><figcaption>The event filter <strong>Rage Click </strong>with three options</figcaption></figure><p><strong>Consider the following example of how to use the Rage click segment filter:</strong></p><p>You are aware that there is a problem with email sending, more specifically the button “Send“ does not work always since the most recent release version. If you want to check how many users have been affected by this issue, one of the ways is to use our event filter <strong>“Clicked Element”</strong>. However, such an event search will display all users who have clicked the “Send” button, both successfully and unsuccessfully. To refine your search use our new segment filter <strong>“Rage Click”</strong> with the option “Text is“: “send” as shown above. The option is case-insensitive and works with an exact match (need to define the whole text on the element). The search will show that one user has encountered the problem.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/800/1*i7u88RIVeNdvUTN1dtAv4A.png" /><figcaption>One user with rage clicked on the “Send” button</figcaption></figure><p>To examine which is the exact session of the user with rage clicks press on the “&gt;” icon on the right side of the user line. On the newly opened right-side panel, you will see all sessions of the user listed in chronological order. The ones that meet the search criteria are marked with the label:<strong> “matching“</strong>. In our case, just one session out of three matches the “Rage Click” criterion. This can be viewed in the image below.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/800/1*COQhieBLcFKOC02clLnuwQ.png" /><figcaption>One matching session for<strong> </strong>the<strong> “Rage Click”</strong> filter</figcaption></figure><p>Opening the relevant session and checking the event time steps on the left in the session player will show a quick glance at the exact rage click events. No need to watch the whole session, just select the related events. They are easily recognizable by color and icon. The rage clicks are marked with a special icon and yellowish color as shown below.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/800/1*Fg0zf5bCQalAtbXH4c7ngA.png" /><figcaption>Rage clicks: shown in the event time steps in the session player</figcaption></figure><h3>How to search for rage clicks</h3><p>It might be the case: that you are unaware of any existing issues with your product and simply want to see if there are any frustration points for your customers. This can be examined by the<strong> “Rage Click”</strong> search filter<strong> </strong>with the option<strong> “anything“. </strong>Using this combination will list you all users with rage clicks on any element and page of your product. By going through the matching sessions, you may spot some interesting patterns which can be examined further:</p><ul><li>How frequently does a particular rage click occur?</li><li>How many users are affected?</li></ul><p>This can be achieved by copying the CSS selector for the element that you are interested in and then using the CSS string for the configuration of the filter<strong> “Rage Click”. </strong>The process for obtaining a CSS selector for an element is analogous to that for the “Clicked Element” filter. Learn how to do this by reading this<a href="https://blog.sessionstack.com/new-sessionstack-features-the-ability-to-search-users-by-clicked-element-and-user-management-98e5c3e186b"> blog post</a>.</p><p>After the configuration is applied then you can explore the first two trends: <strong>Users </strong>and <strong>Total</strong> <strong>Sessions</strong> for getting the answer to the questions above.</p><h3>Custom Option for Excluding HTML Element as Rage Click</h3><p>Sometimes the rage click can be misleading. For example, the user is clicking on a pagination element for the previous/next page. In order to exclude such false positive instances, you can specify the CSS selector of the HTML element in your project Settings menu and prevent rage clicks from capturing.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/800/1*z1AyQ383HWE_KdzUxClgGw.png" /><figcaption><strong>Rage Clicks</strong> elements exclusion settings</figcaption></figure><h3>Clicked Element with search option by “Text”</h3><p>In July, we discussed the event filter Clicked Element in our<a href="https://blog.sessionstack.com/new-sessionstack-features-the-ability-to-search-users-by-clicked-element-and-user-management-98e5c3e186b"> blog post</a> — why and how to use it.<strong> </strong>Today we want to share with you a new option for the filter. This is the ability to search for HTML elements using text. The option works with a perfect match.</p><p>In the example below, we want to examine how many users are clicking on the button “Discard” when creating an email.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/800/1*DLDkfBXcWnNLlxCf7La59Q.png" /><figcaption>The “Discard“ button: is part of the email creation page in product X</figcaption></figure><p>Follow the steps outlined below.</p><h3>Step 1:</h3><p>Select the <strong>“Clicked Element</strong>” filter from our Segments dashboard. Choose the <strong>“Text“</strong> option. By selecting this, you can easily define the text on the button or any other HTML element. This will avoid dealing with complex CSS selectors like the one shown in the example. Remember that this is a perfect match. You must define the entire text, not just a portion of it. Don’t be concerned about the capital letters; the new option is not case-sensitive.</p><p>Example for complex CSS selector:</p><p><strong>#checkout-form &gt; div.checkout__user-inputs-wrapper &gt; div.checkout__col.checkout__col — second &gt; div.checkout__step.checkout__step — two &gt; div &gt; div &gt; div.radio-wrapper.shipping-methods__item.snowspeedy_method-b.has-select.select-loaded &gt; div.shipping-methods__select-wrapper &gt; span.</strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/800/1*lXoBvTpDlsnQWl8DmoJ24w.png" /><figcaption>The filter “Clicked Element“ with the option “Text“</figcaption></figure><h3>Step 2:</h3><p>Examine the user list. For sessions and user details, open the right-side panel of any user from the list. To list only the relevant search criteria sessions, use the toggle option “Only matching sessions”.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/800/1*UtA2uXj3tXIuI9lTTzSNBQ.png" /><figcaption>Session List — showing all user’s sessions in descending order</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/800/1*iGqj65QGiG-cP5aFWrc4yA.png" /><figcaption>Session List with “Only matching sessions” enabled</figcaption></figure><p>According to the example above, one user clicked the “Discard” button in two of all sessions. Going through the matching sessions can lead you to some further conclusions about the user behavior and experience in your product.</p><p>We’d like to take this opportunity to reveal our upcoming segment filter. It will aid you in your search for sessions with a specific duration.</p><p><strong>Interested in SessionStack? Book </strong><a href="https://www.sessionstack.com/personalized-demo/?utm_source=medium&amp;utm_medium=article&amp;utm_campaign=product-updates"><strong>your demo</strong></a><strong> now or get started in minutes </strong><a href="https://www.sessionstack.com/plans/?utm_source=medium&amp;utm_medium=article&amp;utm_campaign=product-updates"><strong>with our Free plan</strong></a><strong>.</strong></p><p>Happy with SessionStack? Leave a review and <a href="https://www.g2.com/contributor/sessionstack_rewardslink20vs?secure%5Bpage_id%5D=sessionstack_rewardslink20vs&amp;secure%5Brewards%5D=true&amp;secure%5Btoken%5D=3cb48bd34a9b5ef0aba109d8082726950c0b8cce48ca3a02c0e9c6ec8331be18"><strong>get a Gift card!</strong></a></p><p>We hope you find these feature updates helpful. We’d love to hear your feedback in the comments below.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=4f3af3a23ff" width="1" height="1" alt=""><hr><p><a href="https://medium.com/sessionstack-blog/the-latest-sessionstack-release-includes-rage-click-search-by-text-for-clicked-element-4f3af3a23ff">The latest SessionStack release includes: Rage Click &amp; Search by Text for Clicked Element</a> was originally published in <a href="https://medium.com/sessionstack-blog">SessionStack Blog</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
    </channel>
</rss>