<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Eezze</title>
    <description>The latest articles on DEV Community by Eezze (@eezze).</description>
    <link>https://dev.to/eezze</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F8432%2Ffcd746af-ee55-4724-b691-3c40c1c380fa.png</url>
      <title>DEV Community: Eezze</title>
      <link>https://dev.to/eezze</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/eezze"/>
    <language>en</language>
    <item>
      <title>Deploy with Eezze</title>
      <dc:creator>Rolf Streefkerk</dc:creator>
      <pubDate>Tue, 16 Apr 2024 12:33:17 +0000</pubDate>
      <link>https://dev.to/eezze/deploy-with-eezze-3li9</link>
      <guid>https://dev.to/eezze/deploy-with-eezze-3li9</guid>
      <description>&lt;p&gt;In this showcase of Eezze, we'll cover how we save time with our deployment automations:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;1. The Deployment Headache&lt;/li&gt;
&lt;li&gt;2. Seamless Deployment&lt;/li&gt;
&lt;li&gt;3. Tutorial&lt;/li&gt;
&lt;li&gt;4. Frequently Asked Questions&lt;/li&gt;
&lt;li&gt;5. Beyond the Basics&lt;/li&gt;
&lt;li&gt;6. Conclusion&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  1. The Deployment Headache
&lt;/h3&gt;

&lt;p&gt;In the realm of software development, deploying backend applications often presents a significant challenge. Developers find themselves grappling with the intricate tasks of configuring servers, ensuring dependencies are correctly installed, and maintaining complex deployment scripts. These essential yet time-consuming processes can divert valuable resources away from core development efforts, impeding productivity and slowing down the overall software delivery pipeline.&lt;/p&gt;

&lt;p&gt;At Eezze, we understand these challenges intimately. Our platform leverages industry-standard tooling such as Ansible for configuration management, Terraform for infrastructure provisioning, and Docker containers for consistent application environments. By automating and streamlining the deployment process, Eezze eliminates the hassle, allowing teams to concentrate on building exceptional solutions.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Seamless Deployment
&lt;/h3&gt;

&lt;p&gt;With Eezze, we aim to transform the deployment experience, making it seamless and effortless. In this article, we'll walk you through the process of deploying backend applications using Eezze's platform, demonstrating how our solution automates complex tasks and ensures a smooth, hassle-free workflow.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Tutorial
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Steps:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Set up a Connection in Eezze&lt;/strong&gt;, currently we support &lt;a href="https://releases.ubuntu.com/jammy/" rel="noopener noreferrer"&gt;Ubuntu 22.04&lt;/a&gt; &lt;code&gt;Server&lt;/code&gt; and &lt;a href="https://aws.amazon.com/" rel="noopener noreferrer"&gt;AWS&lt;/a&gt; &lt;code&gt;Cloud&lt;/code&gt; deployments. &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feiy7ofharpfoa8abfaka.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feiy7ofharpfoa8abfaka.png" alt="Eezze Server/Cloud Integrations" width="800" height="435"&gt;&lt;/a&gt;&lt;br&gt;
    For a Ubuntu 22.04 Server, we define the server &lt;code&gt;host&lt;/code&gt; configuration in the &lt;code&gt;Connection Info&lt;/code&gt; tab, and then in the  &lt;code&gt;Authentication&lt;/code&gt; tab we configure the SSH connectivity (PEM Key) and User/Password for SuperUser access.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffr82w3pld959n26y2hj2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffr82w3pld959n26y2hj2.png" alt="Eezze Connection Details" width="800" height="435"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Create your datasources&lt;/strong&gt;, which are basically servers internally (linked to a Connection) or externally hosted servers and services;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8mnpfdnqy7w9b2qyxw2k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8mnpfdnqy7w9b2qyxw2k.png" alt="Eezze Support Datasources" width="800" height="435"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Configure a REST Server&lt;/strong&gt;, for example; the &lt;code&gt;host&lt;/code&gt; has already been filled in, since this is an internal service (it can be customized) Additionally a health check port is auto-configured to ensure keep-alive in Application Load Balancer scenario's functions properly:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzinewk6kpsnm6yaubrik.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzinewk6kpsnm6yaubrik.png" alt="Eezze Rest Datasource" width="800" height="435"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Entity definitions&lt;/strong&gt; for your Database Datasource will be automatically applied as migrations at the docker-compose REST server entrypoint, enabling up-to-date synchronization of your data model with your database(s):&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8z45tqyingyeday05a25.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8z45tqyingyeday05a25.png" alt="Eezze ERD Diagram: Edit" width="800" height="435"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Environment Variables and Vault (protected) variables&lt;/strong&gt; are automatically applied to your containers for run-time use:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqra3xt7zmqzusad253hh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqra3xt7zmqzusad253hh.png" alt="Eezze Vault secured Environment Variables" width="800" height="435"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Add your Services&lt;/strong&gt; in our Service Group &amp;gt; Services editor.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkm7y3hysm19zy6u57wb7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkm7y3hysm19zy6u57wb7.png" alt="Eezze Services overview; Service Groups" width="800" height="435"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Deploy&lt;/strong&gt; to your empty Ubuntu 22.04 Server instance or a Connection with AWS Account credentials configured in the Authentication section in &lt;code&gt;step (1)&lt;/code&gt;.&lt;br&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsoem02r9pavuem9dn3lu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsoem02r9pavuem9dn3lu.png" alt="Eezze Deployment to Ubuntu 22.04 or AWS ECS" width="800" height="59"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;We offer these public, and private cloud/server compatible solutions:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Ubuntu 22.04:&lt;/strong&gt; we use an &lt;a href="https://www.ansible.com/" rel="noopener noreferrer"&gt;Ansible&lt;/a&gt; playbook to install a complete environment that is ready to be used for &lt;a href="https://www.docker.com/" rel="noopener noreferrer"&gt;Docker&lt;/a&gt; container deployment, then build and deploy the containers from a Github repository.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AWS ECS:&lt;/strong&gt; we've build a custom pipeline that interprets your project configuration, applies that our &lt;a href="https://www.terraform.io/" rel="noopener noreferrer"&gt;Terraform&lt;/a&gt; script that can interpret our project configution exactly, and deploy all Docker Containers via &lt;a href="https://aws.amazon.com/codepipeline/" rel="noopener noreferrer"&gt;AWS CodePipeline&lt;/a&gt;/&lt;a href="https://docs.aws.amazon.com/codebuild/" rel="noopener noreferrer"&gt;CodeBuild&lt;/a&gt; to &lt;a href="https://docs.aws.amazon.com/AmazonECS/latest/developerguide/AWS_Fargate.html" rel="noopener noreferrer"&gt;ECS Fargate&lt;/a&gt;. These Containers are load balanced with &lt;a href="https://aws.amazon.com/elasticloadbalancing/application-load-balancer/" rel="noopener noreferrer"&gt;AWS ALB&lt;/a&gt; (Application Load Balancer) which terminates the SSL and enables custom domains to be easily linked using &lt;a href="https://aws.amazon.com/route53/" rel="noopener noreferrer"&gt;AWS Route53&lt;/a&gt; such as; &lt;code&gt;https://api.yourapp.com&lt;/code&gt;. &lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  4. Frequently Asked Questions
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Q: How does your company use Eezze for client projects?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A: Eezze is our proprietary in-house tooling that streamlines the development and deployment of backend solutions. While the Eezze platform itself is not directly accessible to clients, we leverage its capabilities to generate the necessary artifacts for your projects, such as Git repositories, Docker files, Ansible playbooks, and source code.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: What kind of artifacts and deliverables can we expect from your use of Eezze?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A: By utilizing Eezze, we can provide you with a comprehensive set of artifacts tailored to your project requirements. These may include a fully configured Git repository with your application's source code (Typescript), Docker containers for consistent and isolated environments, Ansible playbooks for automated deployments, and any other necessary configuration files or scripts.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: Can you handle deploying our application to our existing infrastructure?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A: Absolutely. In addition to providing the generated artifacts, we can also leverage our Eezze automations to deploy your application directly to your existing infrastructure or environment. Our team can work closely with you to understand your infrastructure requirements and ensure a seamless deployment process, whether it's on-premises or in the cloud.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: Can we customize or modify the generated artifacts from Eezze?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A: Absolutely. While the Eezze platform itself is proprietary, the generated artifacts, such as source code and configuration files, are fully accessible and customizable by your team. The only proprietary code is the Eezze plugin, which is used to enhance the capability of our code automations. We encourage collaboration and can work closely with you to make any necessary modifications or enhancements to the deliverables. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: How do you handle updates and maintenance for the generated artifacts and deployed applications?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A: As part of our ongoing support and maintenance, we can provide regular updates and enhancements to the generated artifacts and deployed applications. This may include bug fixes, security patches, or new features based on your evolving project requirements. Our team will work closely with you to ensure a seamless update and deployment process.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: Can we integrate the generated artifacts and deployed applications with our existing infrastructure and tooling?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A: Yes, the artifacts generated by Eezze and the deployed applications are designed to be compatible and easily integrated with a wide range of infrastructure and tooling. Whether you have existing deployment pipelines, monitoring systems, or other tools in place, we can ensure a smooth integration process, minimizing disruptions to your existing workflows.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Beyond the Basics
&lt;/h3&gt;

&lt;p&gt;Eezze's advanced internal tooling brings significant benefits to customers, particularly in the areas of deployment automation and speed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AWS Deployment Excellence&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Eezze's AWS ECS deployment automation integrates a custom pipeline and Terraform scripting for precise interpretation of project configurations. Key features include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Custom Pipeline &amp;amp; Terraform: Interprets project configurations accurately for Docker Container deployment on ECS Fargate.&lt;/li&gt;
&lt;li&gt;AWS CodePipeline/CodeBuild: Automates deployment workflows for faster time-to-market.&lt;/li&gt;
&lt;li&gt;AWS ALB Load Balancing: Ensures scalability and reliability with SSL termination and custom domain integration using AWS Route53.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This streamlined deployment approach optimizes efficiency, accelerates deployment cycles, and enhances the security and scalability of your applications on AWS ECS.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Global Reach with Ubuntu 22.04&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Eezze's automation extends globally to servers running Ubuntu 22.04, delivering rapid deployment benefits to customers. By automating the setup of all required software for a Docker container platform, Eezze accelerates deployment speed and ensures consistency across customer environments, leading to increased efficiency and reduced time-to-deployment for customer projects.&lt;/p&gt;

&lt;h3&gt;
  
  
  6. Conclusion
&lt;/h3&gt;

&lt;p&gt;Eezze's internal tooling directly benefits customers by:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Accelerating deployment timelines through advanced automation capabilities.&lt;/li&gt;
&lt;li&gt;Ensuring seamless integration with customers' existing infrastructure, minimizing disruptions and maximizing operational efficiency.&lt;/li&gt;
&lt;li&gt;Providing access to cutting-edge deployment solutions, such as AWS integration and global deployment automation, resulting in faster time-to-market and increased competitiveness for customer solutions.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ready to experience the speed and efficiency benefits of Eezze's internal tooling for your deployments? &lt;a href="https://eezze.io" rel="noopener noreferrer"&gt;Request a personalized demo&lt;/a&gt; or quote today and discover how Eezze can transform your deployment experiences and deliver superior results for your projects.&lt;/p&gt;

</description>
      <category>devops</category>
      <category>aws</category>
      <category>lowcode</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Build Real-Time Apps with Eezze</title>
      <dc:creator>Rolf Streefkerk</dc:creator>
      <pubDate>Tue, 02 Apr 2024 03:38:17 +0000</pubDate>
      <link>https://dev.to/eezze/build-real-time-apps-with-eezze-4ao1</link>
      <guid>https://dev.to/eezze/build-real-time-apps-with-eezze-4ao1</guid>
      <description>&lt;h2&gt;
  
  
  Build Real-Time Apps with Eezze
&lt;/h2&gt;

&lt;p&gt;Here's a quick overview of what we'll cover in this showcase of Eezze's Websocket functionality:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Introduction&lt;/li&gt;
&lt;li&gt;
Streamlining Websocket Integration with Eezze's UI-Based Approach

&lt;ul&gt;
&lt;li&gt;The Power of Actions&lt;/li&gt;
&lt;li&gt;Harnessing the 6 Directives&lt;/li&gt;
&lt;li&gt;Building Blocks to Backend&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

Practical Showcase: Eezze in Action

&lt;ul&gt;
&lt;li&gt;1. Dynamic Template Rendering&lt;/li&gt;
&lt;li&gt;2. Stream Logging Data&lt;/li&gt;
&lt;li&gt;Generated Code (For Advanced Understanding)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Unlocking Real-Time Potential&lt;/li&gt;

&lt;li&gt;Conclusion&lt;/li&gt;

&lt;/ul&gt;



&lt;h3&gt;
  
  
  Introduction
&lt;/h3&gt;

&lt;p&gt;Frustrated by the complexities of implementing real-time features in your applications? Eezze offers a streamlined solution, empowering developers to build responsive, data-driven apps without diving deep into websocket protocols and synchronization code.&lt;/p&gt;

&lt;p&gt;Eezze's low-code approach doesn't sacrifice control. Our platform recognizes that events are the lifeblood of any interactive application.  Our UI lets you precisely configure how your app reacts to user interactions, data updates, and connection changes.&lt;/p&gt;

&lt;p&gt;At its core, Eezze provides a set of directives for event handling.  Imagine setting up a collaborative workspace feature with a simple configuration like "on message update, broadcast to channel subscribers."&lt;/p&gt;

&lt;p&gt;In this article, we'll explore Eezze's event-driven workflow and build a real-time backend.  You'll experience how Eezze's UI-based logic accelerates development of features that traditionally require extensive coding.&lt;/p&gt;



&lt;h3&gt;
  
  
  Streamlining Websocket Integration with Eezze's UI-Based Approach
&lt;/h3&gt;

&lt;p&gt;Configure a websocket connection by specifying the server endpoint within a dedicated interface. You'll then define individual websocket event types, configuring custom "Actions" for each of the 6 supported directives.&lt;/p&gt;

&lt;h4&gt;
  
  
  The Power of Actions
&lt;/h4&gt;

&lt;p&gt;Actions form the backbone of service development in Eezze, extending to websockets, REST APIs, and scheduled tasks. These sequential blocks handle data input, processing, and output. Within an Action block, you can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Query databases&lt;/li&gt;
&lt;li&gt;Manipulate files&lt;/li&gt;
&lt;li&gt;Manage email communication&lt;/li&gt;
&lt;li&gt;Generate output using the Twig templating language&lt;/li&gt;
&lt;li&gt;Integrate with third-party services via REST or Websocket APIs&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Harnessing the 6 Directives
&lt;/h4&gt;

&lt;p&gt;Eezze puts control in your hands with these directives for building event-driven websocket backends:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;on&lt;/strong&gt; (event specification): Define the precise trigger for an action within your application (e.g., "on new message").&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;broadcast&lt;/strong&gt; (send to everyone): Distribute data to all connected users when the associated "on" event occurs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;channel&lt;/strong&gt; (send to only those that meet channel criteria): Target communication to specific user groups within your application.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;notify&lt;/strong&gt; (notification to a specific connection or user): Send targeted notifications to individuals.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;onConnect&lt;/strong&gt;: Execute actions when a user establishes a connection.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;onDisconnect&lt;/strong&gt;: Define responses triggered when a user disconnects.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Building Blocks to Backend
&lt;/h4&gt;

&lt;p&gt;Each directive, combined with custom input definitions, Actions, and output configurations, acts as a modular building block.  This allows you to assemble a robust websocket backend tailored to your application's specific needs.&lt;/p&gt;



&lt;h3&gt;
  
  
  Practical Showcase: Eezze in Action
&lt;/h3&gt;

&lt;p&gt;To demonstrate the power of Eezze's websocket integration, let's explore two use cases that we have used websockets for in our upcoming app developed with Eezze:&lt;/p&gt;

&lt;h4&gt;
  
  
  Dynamic Template Rendering
&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;Goal:&lt;/strong&gt; Update a user profile page in real-time whenever the profile data is modified.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Steps:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Create Service Group:&lt;/strong&gt;  Establish a Service Group connected to your Websocket Datasource (Websocket Container Service configuration). 
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2cb2yzdhr35j9b8fxki5.png" alt="Eezze Service Groups" width="800" height="414"&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Configure 'On' Service:&lt;/strong&gt;  Within the group, create a new websocket service using the "On" event type triggered by a "render-profile" event.
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fco20z4x02g88usqlk03o.png" alt="On Websocket" width="800" height="416"&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Define Actions:&lt;/strong&gt;  Set up the following Actions within the service:

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Action 1:&lt;/strong&gt; Retrieve the updated profile data from your database ("Get One" from Profile table, &lt;code&gt;Check On&lt;/code&gt; parameters 'copied' from the Action Chain Input).
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffiraei8f3cdug6q12m8a.png" alt="Eezze Action Get One" width="800" height="398"&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Action 2:&lt;/strong&gt;  Render the profile HTML using a stored Twig template. Provide input mapping from Action 1.
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffi8f2l4e7zwdv59ei0px.png" alt="Service Action Edit screen (Twig)" width="800" height="413"&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Result:&lt;/strong&gt; The "render-profile" event triggers the service, updating the profile page with the latest data.&lt;/p&gt;

&lt;h4&gt;
  
  
  Stream Logging Data
&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;Goal:&lt;/strong&gt;  Send real-time logging updates to a designated channel for monitoring.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Steps:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Configure Channel Service:&lt;/strong&gt; Create a websocket service using the "Channel" directive. Provide an ID to identify the configuration and set up the specific channel name (e.g., &lt;code&gt;pr.${adm.input.projectId}&lt;/code&gt;).
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feugdqgfhhnf9s00z92ep.png" alt="Websocket Channel configuration" width="800" height="412"&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Set Up Broadcast Service:&lt;/strong&gt; Create a second service using the "Broadcast" event linked to the &lt;code&gt;log&lt;/code&gt; event. The Action Chain Input defines &lt;code&gt;projectId&lt;/code&gt; and &lt;code&gt;data&lt;/code&gt; for the logging packet. The only Action emits this data.
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flhl78x8874ain13tfchd.png" alt="Websocket Broadcast configuration" width="800" height="412"&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Result:&lt;/strong&gt; Applications subscribed to the defined channel receive real-time logging updates. Eezze itself uses this functionality.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu34ezsdnc9lpc45lik1p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu34ezsdnc9lpc45lik1p.png" alt="Channel websocket output to Eezze front-end" width="800" height="411"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  Generated Code (For Advanced Understanding)
&lt;/h4&gt;

&lt;p&gt;For those curious about the underlying code that powers Eezze's websocket functionality, let's examine the Channel and Broadcast example in more detail.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Websocket Controller (controller.ws.ts)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Eezze leverages decorators in TypeScript to streamline websocket service configuration:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="nd"&gt;Channel&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;project-logging-channel&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;channel&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="na"&gt;adm&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ADM&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;lc&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;LogicChain&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// Action 1 - Logic item '0'&lt;/span&gt;
    &lt;span class="nx"&gt;lc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;text&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;custom&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s2"&gt;`pr-&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;adm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;input&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;projectId&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;});&lt;/span&gt;

    &lt;span class="c1"&gt;// evaluate the result and then return the result&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;lc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;result&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="nf"&gt;projectLoggingChannel&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;

&lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="nd"&gt;Broadcast&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;event&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;log&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;channel&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="na"&gt;adm&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ADM&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;lc&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;LogicChain&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// Action 1 - Logic item "0"&lt;/span&gt;
    &lt;span class="nx"&gt;lc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;text&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;custom&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s2"&gt;`pr-&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;adm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;input&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;projectId&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;});&lt;/span&gt;

    &lt;span class="c1"&gt;// evaluate the result and then return the result&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;lc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;result&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="nf"&gt;projectLogs&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Broadcast Service Code (action.ts)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The Broadcast Service itself demonstrates Eezze's focus on readability and efficiency:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Send data packet to Channel&lt;/span&gt;
&lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="nd"&gt;Do&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="na"&gt;adm&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ADM&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;lc&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;LogicChain&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// Action 1 - Logic item "0"&lt;/span&gt;
    &lt;span class="nx"&gt;lc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;text&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;custom&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;adm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setResult&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;adm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;input&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;success&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;});&lt;/span&gt;

    &lt;span class="c1"&gt;// evaluate the result and then return the result&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;lc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;result&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="nf"&gt;_exec&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;h3&gt;
  
  
  Unlocking Real-Time Potential
&lt;/h3&gt;

&lt;p&gt;Eezze's UI-based approach isn't limited to the examples we've explored. Here are a few more ideas that can be quickly realized with Eezze.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Application Type&lt;/th&gt;
&lt;th&gt;Key Features&lt;/th&gt;
&lt;th&gt;How Eezze Simplifies Development&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Collaborative Whiteboard&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Live drawing, shapes, annotations, multiple users&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;on&lt;/code&gt; events map directly to user actions, &lt;code&gt;broadcast&lt;/code&gt; updates the view&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Data Visualization Dashboard&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Real-time updating charts, graphs based on data streams&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;on&lt;/code&gt; data arrival triggers processing, updates pushed to clients&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Workflow Automation Monitor&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Visualize progress of complex workflows, track status changes, send notifications&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;on&lt;/code&gt; workflow events trigger updates and notifications, &lt;code&gt;channel&lt;/code&gt; could be used for team-specific views&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Key Point:&lt;/strong&gt;  Eezze enables developers to focus on the core interactions of their application rather than the complexities of managing real-time data flow.&lt;/p&gt;



&lt;h3&gt;
  
  
  Conclusion
&lt;/h3&gt;

&lt;p&gt;Building real-time features has traditionally been a time consuming task, requiring specialized coding expertise that can slow down even the most agile development teams. Eezze transforms this process, enabling you to harness the power of websockets through a simple, event-driven UI.&lt;/p&gt;

&lt;p&gt;With Eezze, you focus on defining how your application should respond to user actions, data changes, and external events. The complexities of websocket management and synchronization are handled for you.&lt;/p&gt;

&lt;p&gt;Ready to see Eezze in action and how it can revolutionize your development workflow? Contact us on &lt;a href="https://eezze.io" rel="noopener noreferrer"&gt;Eezze.io&lt;/a&gt; or find us on &lt;a href="https://www.linkedin.com/company/eezze/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt;&lt;/p&gt;

</description>
      <category>websockets</category>
      <category>lowcode</category>
      <category>typescript</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
