<?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>Forem: Appsmith</title>
    <description>The latest articles on Forem by Appsmith (@appsmith).</description>
    <link>https://forem.com/appsmith</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%2F2071%2F83a969f0-9b4e-40e1-86a0-895c24e136bf.png</url>
      <title>Forem: Appsmith</title>
      <link>https://forem.com/appsmith</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/appsmith"/>
    <language>en</language>
    <item>
      <title>OpenAI Assistants with Structured Outputs</title>
      <dc:creator>Joseph Petty</dc:creator>
      <pubDate>Fri, 03 Jan 2025 14:13:20 +0000</pubDate>
      <link>https://forem.com/appsmith/openai-assistants-with-structured-outputs-3h2l</link>
      <guid>https://forem.com/appsmith/openai-assistants-with-structured-outputs-3h2l</guid>
      <description>&lt;p&gt;OpenAI recently added support to their API for structured outputs, which allow you to define the response format using JSON Schema. Prior to this, the JSON response mode was able to reply with JSON, but there was no way to enforce a specific structure, define enum values, and specify required or optional fields. But with Structured Outputs, you can define every detail about the response, to ensure the data is ready to be passed on to your database or workflow. &lt;/p&gt;

&lt;p&gt;In this guide, I'll be using OpenAI's Structured Outputs to analyze customer reviews for a hotel chain. The reviews only contain the rating (1-5), and the review text. The Structured Output feature will be used to add new datapoints for sentiment (positive, neutral, negative), offensiveContent (true/false), and tags (cleanliness, service, staff, etc). &lt;/p&gt;

&lt;p&gt;&lt;em&gt;This guide will cover:&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Creating an OpenAI API key and saving it to an Appsmith datasource&lt;/li&gt;
&lt;li&gt;Using the Chat /completions API&lt;/li&gt;
&lt;li&gt;Building a UI to select and send reviews to the assistant&lt;/li&gt;
&lt;li&gt;Defining a JSON Schema for the response&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=Lbt_eIdzHf8" rel="noopener noreferrer"&gt;YOUTUBE: OpenAI Assistants with Structured Outputs&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://community.appsmith.com/content/guide/openai-assistants-structured-outputs" rel="noopener noreferrer"&gt;Written tutorial&lt;/a&gt;&lt;/p&gt;

</description>
      <category>llm</category>
      <category>openai</category>
      <category>ai</category>
      <category>appsmith</category>
    </item>
    <item>
      <title>Automating GDPR Data Deletion Requests with Appsmith Workflows and Human-In-The-Loop Approvals</title>
      <dc:creator>Akhil Varma</dc:creator>
      <pubDate>Fri, 25 Oct 2024 14:43:41 +0000</pubDate>
      <link>https://forem.com/appsmith/automating-gdpr-data-deletion-requests-with-appsmith-workflows-and-human-in-the-loop-approvals-4d3i</link>
      <guid>https://forem.com/appsmith/automating-gdpr-data-deletion-requests-with-appsmith-workflows-and-human-in-the-loop-approvals-4d3i</guid>
      <description>&lt;p&gt;Handling General Data Protection Regulation (GDPR) data deletion requests can be challenging, especially when user data spans across multiple systems. Low-code workflow automation offers a solution to this complex problem. At Appsmith, we store user data in several places: an internal MongoDB, a Segment warehouse (Postgres), Mixpanel for analytics, and Mailmodo for email campaigns.&lt;/p&gt;

&lt;p&gt;To ensure compliance with GDPR and streamline this process, we implemented an automated workflow using Appsmith, a low-code workflow automation solution. This solution integrates a Human-in-the-Loop (HITL) approval step to ensure oversight before deletion.&lt;/p&gt;

&lt;p&gt;Before diving into the solution, it's crucial to understand what GDPR compliance entails and why it's important.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is GDPR compliance and why does it matter?
&lt;/h2&gt;

&lt;p&gt;The GDPR is a data protection law that came into effect in the European Union in 2018. It gives individuals greater control over their personal data and imposes strict rules on those hosting and processing this data, anywhere in the world.&lt;/p&gt;

&lt;p&gt;GDPR compliance is crucial for several reasons:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Legal requirement: companies handling EU citizens' data must comply or face severe penalties.&lt;/li&gt;
&lt;li&gt;Consumer trust: demonstrating strong data protection practices enhances customer confidence.&lt;/li&gt;
&lt;li&gt;Reputation management: non-compliance can lead to negative publicity and loss of business.&lt;/li&gt;
&lt;li&gt;Global standard: GDPR has influenced data protection laws worldwide, making compliance a global best practice.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  GDPR's "right to be forgotten" can present significant challenges for businesses
&lt;/h2&gt;

&lt;p&gt;One key aspect of GDPR is the "right to be forgotten." This provision allows individuals to request the deletion of their personal data, presenting a significant challenge for businesses.&lt;/p&gt;

&lt;p&gt;Companies dealing with this rule face many challenges, especially when they have to manage data spread across different systems while following strict rules. This creates a complicated situation for businesses to handle.&lt;/p&gt;

&lt;p&gt;Here are a few challenges businesses may face in complying with GDPR data deletion requests:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Data spread across platforms&lt;/strong&gt;: User data is often stored in multiple systems owned by different teams (tech, product, marketing), making it difficult to ensure complete deletion across all locations.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Penalties for non-compliance&lt;/strong&gt;: GDPR violations can lead to fines of up to 4% of global revenue or €20 million, along with reputational damage and legal risks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Efficient request handling&lt;/strong&gt;: Delays or errors in processing deletion requests can result in customer dissatisfaction and legal disputes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Internal data security&lt;/strong&gt;: Sensitive data in internal databases poses a challenge when using external tools, as whitelisting external IPs can introduce security risks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Controlled automation&lt;/strong&gt;: Businesses need automated processes with oversight, ensuring compliance while protecting internal systems.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Audit trail requirement&lt;/strong&gt;: Maintaining a detailed log of deletion actions is essential for compliance, making automation crucial for error-free record-keeping.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A self-hosted low-code workflow automation solution like Appsmith helps automate and manage data deletion requests, allowing you to securely and efficiently address these challenges while maintaining full control over your processes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Automate GDPR data deletion requests using Appsmith's low-code workflow automation incorporating HITL approval
&lt;/h2&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%2Fhpskb01gkakloznj8czz.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%2Fhpskb01gkakloznj8czz.png" alt="Image description" width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We developed a low-code workflow that automates the data deletion process while incorporating a human-in-the-loop (HITL) approval step. HITL refers to a process where human judgment is integrated into an automated system, allowing for oversight and decision-making at critical points.&lt;/p&gt;

&lt;p&gt;This approach ensures that a human reviewer can verify and approve data deletion requests before execution, adding an extra layer of security and compliance to the automated workflow.&lt;/p&gt;

&lt;p&gt;Here's an example of how to implement the data deletion process using Appsmith's low-code workflow automation along with other tools, including &lt;a href="https://front.com/" rel="noopener noreferrer"&gt;Front&lt;/a&gt;, &lt;a href="https://www.mongodb.com/" rel="noopener noreferrer"&gt;MongoDB&lt;/a&gt;, Segment (Postgres), &lt;a href="http://mixpanel.com/" rel="noopener noreferrer"&gt;Mixpanel&lt;/a&gt;, and &lt;a href="http://mailmodo.com/" rel="noopener noreferrer"&gt;Mailmodo&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1: Initiating the data deletion request
&lt;/h3&gt;

&lt;p&gt;Users can raise a ticket through any channel—email, chat, or other support mediums. &lt;strong&gt;Front&lt;/strong&gt;, our aggregation tool, captures these requests. Once a ticket is created in Front, it automatically triggers the low-code workflow. &lt;strong&gt;Appsmith AI&lt;/strong&gt; then analyzes the ticket content to determine whether it contains a data deletion request.&lt;/p&gt;

&lt;p&gt;If Appsmith AI identifies a deletion request, it promptly notifies the user, acknowledging receipt. This immediate confirmation reassures the customer that their request is being processed.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 2: Human-in-the-loop approval
&lt;/h3&gt;

&lt;p&gt;After identification, the low-code workflow doesn't immediately proceed with data deletion. Instead, it routes the request for HITL approval, where one of our senior customer support managers reviews it for accuracy and legitimacy. The workflow only moves forward after approval, ensuring careful oversight while leveraging automation's efficiency.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 3: Data deletion across systems
&lt;/h3&gt;

&lt;p&gt;Once approved, the low-code workflow automatically deletes the user's data from all relevant systems:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Internal MongoDB&lt;/strong&gt;: Removes personal details, interaction logs, and audit log information.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Segment Warehouse (Postgres)&lt;/strong&gt;: Deletes and suppresses user data to prevent future collection.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mixpanel&lt;/strong&gt;: Fully removes the user profile, erasing all engagement and analytics data.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mailmodo&lt;/strong&gt;: Archives the user's contact to prevent future use in marketing campaigns.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Appsmith automatically retries if minor issues occur, such as temporary connection failures, ensuring the deletion process completes without manual intervention.&lt;/p&gt;

&lt;p&gt;Since some user data resides in our internal infrastructure, Appsmith's self-hosted capability allows us to securely access this data without exposing our systems to external SaaS tools via IP whitelisting. This gives us complete control over sensitive internal operations.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 4: Logging and auditing
&lt;/h3&gt;

&lt;p&gt;The workflow maintains an automatic log of every action throughout the process, including timestamps, systems involved, and any errors encountered. This audit trail is critical for GDPR compliance, providing transparency and allowing us to demonstrate proper handling of data deletion requests.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 5: Notifying the user
&lt;/h3&gt;

&lt;p&gt;Once the data deletion process is complete, the user receives an automatic notification confirming successful deletion. This final communication, combined with the initial acknowledgment, ensures clear communication throughout the customer journey.&lt;/p&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%2F8lkx76gsorlz71bd82kc.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%2F8lkx76gsorlz71bd82kc.png" alt="Image description" width="800" height="864"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;By leveraging low-code workflow automation with Appsmith, including AI and HITL approval, companies can streamline data deletion requests, ensuring GDPR compliance while maintaining full control over sensitive internal systems. Automated notifications and audit logs provide a transparent and secure process for both customers and regulatory needs.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why choose Appsmith workflows?
&lt;/h2&gt;

&lt;p&gt;Appsmith is an open-source, low-code platform that enables developers to build custom applications and automate workflows quickly and efficiently.&lt;/p&gt;

&lt;p&gt;The key advantage of using low-code workflow automation with Appsmith is the flexibility and control provided by its self-hosting capability. In our case, some of the user data resides in internal databases, and we didn't want to expose these systems by whitelisting IP addresses for SaaS tools.&lt;/p&gt;

&lt;p&gt;Appsmith's low-code approach allowed us to automate the process securely, without compromising the integrity of our infrastructure.&lt;/p&gt;

&lt;h2&gt;
  
  
  Get started with low-code workflow automation for GDPR data deletion requests
&lt;/h2&gt;

&lt;p&gt;As businesses continue to seek ways to optimize their operations, Appsmith's low-code workflow automation stands out as a flexible, scalable, and cost-effective solution for optimizing business operations, particularly in complex compliance scenarios like GDPR data deletion. Getting started is straightforward—explore Workflows in our &lt;a href="https://workflows.app.appsmith.com/" rel="noopener noreferrer"&gt;cloud sandbox&lt;/a&gt; or &lt;a href="https://www.appsmith.com/workflows-beta-signup" rel="noopener noreferrer"&gt;sign up&lt;/a&gt; for the beta to self-host.&lt;/p&gt;

</description>
      <category>lowcode</category>
      <category>automation</category>
      <category>compliance</category>
    </item>
    <item>
      <title>Streamline Procurement Approvals with Low-Code Workflow Automation</title>
      <dc:creator>Akhil Varma</dc:creator>
      <pubDate>Mon, 30 Sep 2024 09:44:43 +0000</pubDate>
      <link>https://forem.com/appsmith/streamline-procurement-approvals-with-low-code-workflow-automation-3ohf</link>
      <guid>https://forem.com/appsmith/streamline-procurement-approvals-with-low-code-workflow-automation-3ohf</guid>
      <description>&lt;p&gt;Businesses must consider numerous factors to grow effectively over time. Streamlining critical processes like procurement approvals can significantly enhance operational effectiveness.&lt;/p&gt;

&lt;p&gt;This article explores how low-code automation, specifically using Appsmith Workflows, can help developers transform the procurement approval process, making it faster, more transparent, and less error-prone for businesses.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why automate processes with low-code?
&lt;/h2&gt;

&lt;p&gt;Low-code automation tools have gained traction in recent years, offering businesses a way to optimize their operations without the complex development burden.&lt;/p&gt;

&lt;p&gt;These tools reduce development time, lower the long-term cost of ownership, and simplify the implementation of business logic compared to writing boilerplate code. They offer several key advantages:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Rapid development: Low-code tools enable quick building and deployment of automated workflows in a fraction of the time compared to building from scratch.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Flexibility: Every business is unique, and your automation should reflect that. Low-code platforms can be easily customized to fit specific business needs and processes, especially when they allow for adding custom code.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Integration capabilities: Your tools need to communicate with each other. Low-code developer-centered solutions come with built-in integrations for existing systems or through REST/GraphQL APIs.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Reduced technical debt: With less custom code to maintain, the long-term cost of ownership is lower.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Low-code automation offers a way to quickly implement solutions that would otherwise require significant time and resources to build from scratch. &lt;/p&gt;

&lt;p&gt;While traditional development might involve months of work and a team of skilled developers to automate processes, low-code platforms can dramatically reduce this timeline and complexity.&lt;/p&gt;

&lt;h2&gt;
  
  
  The procurement predicament: when manual becomes a maze
&lt;/h2&gt;

&lt;p&gt;In many organizations, getting approval for a purchase can feel like navigating a labyrinth blindfolded, as it often involves complex multi-level processes with numerous stakeholders.&lt;/p&gt;

&lt;p&gt;A typical procurement request might go through multiple stages of review and approval—from initial submission to endorsements by managers, department heads, and senior executives before receiving final approval. &lt;/p&gt;

&lt;p&gt;Managing these stages manually or using disparate systems leads to inefficiencies, delays, and communication breakdowns.&lt;/p&gt;

&lt;p&gt;Some common issues include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Lack of visibility into the current status of requests&lt;/li&gt;
&lt;li&gt;Delays caused by manual routing and communication&lt;/li&gt;
&lt;li&gt;Over-reliance on emails for notifications and updates&lt;/li&gt;
&lt;li&gt;Difficulty tracking approvals, leading to bottlenecks&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These challenges not only slow down the procurement process but can also lead to missed opportunities, increased costs, and frustrated employees. A centralized, automated solution is needed to address these challenges effectively.&lt;/p&gt;

&lt;h2&gt;
  
  
  Automate procurement approvals with low-code automation using Appsmith workflows
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.appsmith.com%2F_next%2Fimage%3Furl%3Dhttps%253A%252F%252Fimages.ctfassets.net%252Flpvian6u6i39%252F7BVQ2qrgARWJ0HpVDmCsrY%252F30ad101ed9186ae8699a28117d440e31%252Fprocurement_approvals_using_Appsmith.png%26w%3D3840%26q%3D75" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.appsmith.com%2F_next%2Fimage%3Furl%3Dhttps%253A%252F%252Fimages.ctfassets.net%252Flpvian6u6i39%252F7BVQ2qrgARWJ0HpVDmCsrY%252F30ad101ed9186ae8699a28117d440e31%252Fprocurement_approvals_using_Appsmith.png%26w%3D3840%26q%3D75" alt="procurement approvals using Appsmith.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.appsmith.com" rel="noopener noreferrer"&gt;Appsmith&lt;/a&gt; is an open-source low-code platform designed for building internal tools and automating business processes. It offers a powerful solution for creating custom applications and workflows without extensive coding.&lt;/p&gt;

&lt;p&gt;We recently introduced the feature &lt;a href="https://www.appsmith.com/blog/announcing-workflows" rel="noopener noreferrer"&gt;workflows&lt;/a&gt;, which provides an efficient way to manage and automate the entire procurement approval process in your business. Here's how Appsmith workflows addresses key pain points in the procurement process:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Centralized workflow management:&lt;/strong&gt; Appsmith allows all stages of the procurement process—from submission to final approval—to be managed by one workflow. The workflow automatically routes requests based on predefined rules such as approval amounts, department hierarchies, and user roles, ensuring the right stakeholders are notified at each stage. This centralization eliminates the need for manual handoffs and reduces the chance of requests getting lost in the system.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Automated notifications and status tracking:&lt;/strong&gt; Instead of relying on manual emails, the workflow sends automatic notifications when a status changes, whether it's a submission awaiting review or an endorsement pending approval. Stakeholders are promptly notified based on predefined triggers, reducing communication delays. This ensures that all parties involved are always aware of the current status of a request, improving transparency and reducing follow-up inquiries.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dynamic forms and configurations:&lt;/strong&gt; The workflow adapts to user needs, allowing input of relevant data—such as service types and supplier details—through searchable and filterable dropdown menus. This streamlines form submissions, minimizes errors, and speeds up the overall process. 
Forms can be easily updated to reflect changes in the procurement process without extensive recoding. Appsmith allows building a UI that captures request information and inputs necessary data for subsequent steps.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Smart routing logic:&lt;/strong&gt; Based on factors like request amounts and department structures, the workflow automatically determines the correct approval path. This logic ensures compliance while minimizing manual intervention and decision-making delays. It also allows for easy implementation of complex approval hierarchies that might be difficult to manage manually.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Flexible options for procurement teams:&lt;/strong&gt; In cases where the procurement team initiates the request, the workflow allows them to input necessary data upfront and skip steps that don't apply, ensuring the process remains efficient. This flexibility accommodates various scenarios and user roles within the procurement process, making the system adaptable to different organizational structures.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.appsmith.com%2F_next%2Fimage%3Furl%3Dhttps%253A%252F%252Fimages.ctfassets.net%252Flpvian6u6i39%252FZtChv056pZsP339vpGXgy%252Fe095103f836f3cf568e630d5e83b97fd%252Fprocurement_approvals_using_Appsmith_workflows.png%26w%3D3840%26q%3D75" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.appsmith.com%2F_next%2Fimage%3Furl%3Dhttps%253A%252F%252Fimages.ctfassets.net%252Flpvian6u6i39%252FZtChv056pZsP339vpGXgy%252Fe095103f836f3cf568e630d5e83b97fd%252Fprocurement_approvals_using_Appsmith_workflows.png%26w%3D3840%26q%3D75" alt="procurement approvals using Appsmith workflows.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here's an example illustrating the key automated steps of procurement approvals using Appsmith workflows:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Dynamic form submission for initiating requests&lt;/li&gt;
&lt;li&gt;Smart routing logic based on predefined rules (e.g., approval amounts, department hierarchies)&lt;/li&gt;
&lt;li&gt;Multiple approval levels with automated routing&lt;/li&gt;
&lt;li&gt;Automated notifications at each stage of the process&lt;/li&gt;
&lt;li&gt;Real-time status updates in the system&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This automated workflow centralizes the entire process, reduces manual interventions, and ensures transparency throughout the procurement approval cycle.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;&lt;a href="https://www.appsmith.com/blog/automate-customer-feedback-analysis?utm_source=procurement-blog&amp;amp;utm_medium=blog&amp;amp;utm_campaign=workflows-use-cases" rel="noopener noreferrer"&gt;Discover how with Appsmith workflows and AI you can automate feedback analysis, ensuring a more responsive and proactive approach to customer needs. &lt;/a&gt;&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How can your tech team benefit from Appsmith low-code automation for procurement approvals?
&lt;/h2&gt;

&lt;p&gt;Appsmith workflows offers a developer-focused platform that can significantly improve your tech team's ability to automate complex business processes. Among the key benefits are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Rapid development:&lt;/strong&gt; Combines code-based and node-based systems for faster workflow creation, allowing developers to focus on logic and functionality rather than tedious configurations.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Flexibility and customization:&lt;/strong&gt; Incorporates complex logic through JavaScript, allowing your team to tailor the procurement approval process to your organization's specific needs and requirements.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Seamless integrations:&lt;/strong&gt; Easily connects with existing databases, making it simpler for your tech team to integrate with existing databases, ERPs, or other internal tools.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Human-in-the-Loop capabilities:&lt;/strong&gt; Allows your team to build workflows that seamlessly incorporate human decision-making when necessary, ensuring compliance and maintaining control over critical approvals.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Using Appsmith workflows, your tech team can streamline the development of procurement approval systems, saving time and resources while allowing your developers to focus on strategic initiatives—all while delivering robust, scalable, and customized automation solutions for your organization.&lt;/p&gt;

&lt;h2&gt;
  
  
  Low-code automation vs. manual processes
&lt;/h2&gt;

&lt;p&gt;While smaller businesses often find it easier to manage procurement approvals manually, this approach doesn't scale well as the company grows. Even for small businesses, developers should anticipate how manual processes can become problematic over time.&lt;/p&gt;

&lt;p&gt;Implementing low-code automation early on provides a quick and easier path to ensure these processes can scale effectively as the business expands. Here are the benefits of low-code automation compared to manual processes:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Aspect&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Manual process&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Low-code automation&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Speed&lt;/td&gt;
&lt;td&gt;Slow, time-consuming&lt;/td&gt;
&lt;td&gt;Significantly faster processing times&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Accuracy&lt;/td&gt;
&lt;td&gt;Prone to human errors&lt;/td&gt;
&lt;td&gt;Minimized errors due to reduced manual data entry&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Consistency&lt;/td&gt;
&lt;td&gt;Varies based on individual handling&lt;/td&gt;
&lt;td&gt;Consistent approval paths for all requests&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Visibility&lt;/td&gt;
&lt;td&gt;Limited, often unclear status&lt;/td&gt;
&lt;td&gt;Real-time access to request status&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Scalability&lt;/td&gt;
&lt;td&gt;Difficult to scale efficiently&lt;/td&gt;
&lt;td&gt;Easily handles increased volume without proportional resource increase&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cost-Efficiency&lt;/td&gt;
&lt;td&gt;Higher long-term costs&lt;/td&gt;
&lt;td&gt;Initial investment, but long-term savings in time and resources&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The shift from manual to automated processes can be transformative, freeing up resources to focus on strategic initiatives rather than administrative tasks.&lt;/p&gt;

&lt;h2&gt;
  
  
  Get started streamlining procurement approvals
&lt;/h2&gt;

&lt;p&gt;As businesses continue to seek ways to optimize their operations, low-code automation stands out as a flexible, scalable, and cost-effective solution for optimizing business operations. &lt;/p&gt;

&lt;p&gt;Get started to speed up the development process and reduce the long-term maintenance burden.&lt;/p&gt;




&lt;h2&gt;
  
  
  Automate complex, human in the loop processes
&lt;/h2&gt;

&lt;p&gt;Try Appsmith’s new workflow features in public beta. Build secure automated processes with streamlined integrations and code-first controls.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://workflows.app.appsmith.com/user/login" rel="noopener noreferrer"&gt;Sign up to cloud sandbox&lt;/a&gt; or to the &lt;a href="https://www.appsmith.com/workflows-beta-signup?utm_source=procurement-blog&amp;amp;utm_medium=blog&amp;amp;utm_campaign=workflows-use-cases#registration-section-workflows-beta-signup" rel="noopener noreferrer"&gt;self-hosted edition&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>appsmith</category>
      <category>lowcode</category>
      <category>automation</category>
    </item>
    <item>
      <title>Automating Customer Feedback Analysis with Appsmith, Fathom, Slack, and AI</title>
      <dc:creator>Akhil Varma</dc:creator>
      <pubDate>Tue, 03 Sep 2024 08:28:43 +0000</pubDate>
      <link>https://forem.com/appsmith/automating-customer-feedback-analysis-with-appsmith-fathom-slack-and-ai-5e3p</link>
      <guid>https://forem.com/appsmith/automating-customer-feedback-analysis-with-appsmith-fathom-slack-and-ai-5e3p</guid>
      <description>&lt;p&gt;Analyzing customer feedback is vital for product improvement and business growth. It provides insights into user needs, pain points, and preferences, enabling businesses to make informed decisions. However, gathering and processing feedback from various sources like surveys, social media, and customer calls can take time and effort to scale effectively.&lt;/p&gt;

&lt;p&gt;At Appsmith, we faced the same challenge. To address this, we've developed an innovative AI-driven workflow to streamline how we process and analyze customer insights. This article will explore our approach to automating customer feedback analysis, which helps our product team make data-driven decisions quickly and efficiently.&lt;/p&gt;

&lt;h2&gt;
  
  
  The challenge of efficiently extracting valuable customer insights from numerous sources
&lt;/h2&gt;

&lt;p&gt;As a rapidly growing company, Appsmith's customer-facing teams engage in numerous weekly video calls with clients. These interactions are goldmines of information, offering deep insights into customer needs, pain points, and desires. However, the sheer volume of these calls presented a significant challenge: how could our product teams efficiently extract and act upon these valuable insights without spending countless hours reviewing call transcripts?&lt;/p&gt;

&lt;p&gt;This challenge is not unique to Appsmith. Many companies need help with effectively analyzing and implementing customer feedback at scale. Traditional methods of manually reviewing call transcripts or survey responses are time-consuming and often lead to delays in product improvements, which can be costly in a competitive market.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1gk5dnyxhg3v7v1b7wf9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1gk5dnyxhg3v7v1b7wf9.png" alt="customer-feedback-sources" width="800" height="255"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  AI-powered workflows to automate customer feedback analysis
&lt;/h2&gt;

&lt;p&gt;Appsmith is a low-code platform that allows developers to quickly build custom internal tools and applications. It offers many features, including creating complex workflows and integrating &lt;a href="https://www.appsmith.com/ai" rel="noopener noreferrer"&gt;AI capabilities&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;One of Appsmith's key features is its Workflows functionality. Workflows in Appsmith help automate critical business processes based on predefined rules and enable Human-in-the-Loop (HITL) interactions.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzl886xb6qt6myof3aogz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzl886xb6qt6myof3aogz.png" alt="appsmith-workflows" width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That is why we built a solution that is not only AI-powered but also leverages Appsmith workflows to streamline our customer feedback analysis process. This application analyzes call transcripts and automatically generates actionable insights, simplifying the process for our product teams. This AI-driven approach saves time and ensures that valuable insight is noticed, significantly improving our ability to respond to customer needs.&lt;/p&gt;

&lt;p&gt;Here's a detailed look at how it works:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Automated transcript analysis:&lt;/strong&gt; The workflow begins using Appsmith AI to analyze transcripts generated by Fathom, our call recording tool. The AI identifies key actions and pain points customers express during these calls.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Intelligent feature mapping:&lt;/strong&gt; Once the AI identifies action points from the transcript, it maps them to specific features mentioned during the call. This crucial step ensures the feedback is directly relevant to our product roadmap and ongoing development efforts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Team assignment:&lt;/strong&gt; The system then automatically associates the identified features with the relevant teams within Appsmith. This intelligent assignment ensures that insights are directed to the right experts who can act on the feedback.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Automated Slack notifications:&lt;/strong&gt; A concise summary of the insights is generated and sent as a Slack message to the respective teams, ensuring everyone stays in the loop without being overwhelmed by unnecessary details.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Seamless integration:&lt;/strong&gt; One of the key strengths of this workflow is its integration within the Appsmith ecosystem. The entire process is done through native Appsmith integrations, meaning our teams don't have to switch between multiple platforms or learn new tools.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This AI-driven workflow leverages Appsmith's robust integration capabilities. These allow us to connect seamlessly with tools like &lt;a href="https://fathom.video/" rel="noopener noreferrer"&gt;Fathom&lt;/a&gt; for transcript generation and &lt;a href="https://slack.com/" rel="noopener noreferrer"&gt;Slack&lt;/a&gt; for communication. &lt;/p&gt;

&lt;h3&gt;
  
  
  Automating customer feedback analysis compared to manual analysis
&lt;/h3&gt;

&lt;p&gt;In the long run, automating customer feedback analysis through an AI-powered workflow is the best way to understand your customers' needs better and act on them. An AI-powered workflow offers several advantages over traditional manual methods:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Aspect&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;AI-powered workflow&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Manual analysis&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Time efficiency&lt;/td&gt;
&lt;td&gt;Processes large volumes of data quickly, freeing up valuable time for product and customer-facing teams to focus on strategic tasks.&lt;/td&gt;
&lt;td&gt;Time-consuming, requiring extensive hours to review and analyze feedback data.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Accuracy&lt;/td&gt;
&lt;td&gt;Reduces human error and bias, providing consistent and objective insights.&lt;/td&gt;
&lt;td&gt;Susceptible to human error and subjective interpretations.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Scalability&lt;/td&gt;
&lt;td&gt;Handles increased data loads effortlessly as the company grows.&lt;/td&gt;
&lt;td&gt;Struggles to keep up with growing data volume, requiring more resources.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Response time&lt;/td&gt;
&lt;td&gt;Delivers insights promptly, enabling quicker reactions to customer needs.&lt;/td&gt;
&lt;td&gt;Lengthy analysis periods which can lead to delayed responses.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Data-driven decisions&lt;/td&gt;
&lt;td&gt;Generates continuous streams of actionable insights for informed decision-making.&lt;/td&gt;
&lt;td&gt;May miss key insights due to data overload and manual filtering constraints.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Implementing this AI-driven workflow can uncover persistent customer recurring pain points that manual reviews might miss. Furthermore, identify emerging trends in customer requests that aren't yet part of your roadmap. This early detection allows your product team to reprioritize and accelerate the development of these requests, ensuring a more responsive and proactive approach to customer needs.&lt;/p&gt;

&lt;h2&gt;
  
  
  Get started with Appsmith and enable your product team to focus on delivering features that meet your customer's needs
&lt;/h2&gt;

&lt;p&gt;This AI-driven workflow perfectly exemplifies how automation and AI can simplify complex, time-consuming tasks. By automatically generating and delivering customer insights, our product teams can focus on what truly matters: building features that solve real customer problems.&lt;/p&gt;

&lt;p&gt;You can experience the benefits of Appsmith Workflows firsthand. Get started with your AI-driven customer feedback analysis by following these steps:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sign up to Appsmith Business Edition and access the &lt;a href="https://www.appsmith.com/workflows-beta-signup" rel="noopener noreferrer"&gt;Appsmith workflows beta&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Use &lt;a href="https://chatgpt.com/g/g-1xRyQ8iAK-appsmith-workflows" rel="noopener noreferrer"&gt;our custom ChatGPT&lt;/a&gt; to help you set up and optimize your workflows.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you have any questions, don’t hesitate to contact us at &lt;a href="//mailto:akhil@appsmith.com"&gt;akhil@appsmith.com&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>appsmith</category>
      <category>ai</category>
    </item>
    <item>
      <title>Enterprises Are Embracing Low-Code 2024, and Fullstack Developers Have an Advantage</title>
      <dc:creator>Joseph Petty</dc:creator>
      <pubDate>Mon, 13 May 2024 15:18:07 +0000</pubDate>
      <link>https://forem.com/appsmith/enterprises-are-embracing-low-code-2024-and-fullstack-developers-have-an-advantage-fm4</link>
      <guid>https://forem.com/appsmith/enterprises-are-embracing-low-code-2024-and-fullstack-developers-have-an-advantage-fm4</guid>
      <description>&lt;h2&gt;
  
  
  Low-Code: New Name, Same Game?
&lt;/h2&gt;

&lt;p&gt;The term low-code is fairly new, but the idea has been around for decades:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Improved efficiency through abstraction&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Previous marketing trends used terms like visual programming language (VPL), rapid application development (RAD), GUI builders, etc. But most of these older platforms required installed software, both for the builder and client (end user), like MicroSoft Access, Borland Delphi, and FileMaker Pro.&lt;/p&gt;

&lt;p&gt;Then, in the 2000's, platforms like MS SharePoint, Zoho Creator and Mendix started to offer web based builders and clients. This shift increased accessibility and enabled more use cases, allowing businesses to build their own customer facing portals, and dashboards that the team could access from anywhere. Everything was perfect, and the devs had nothing to complain about! That is, until they started thinking about self-hosting, A/B testing, continuous delivery, multiple environments, SSO, version control... and why they ever gave up the fullstack approach.&lt;/p&gt;

&lt;p&gt;But in recent years, platforms like Appsmith have begun addressing these concerns with a more comprehensive solution. With features like version control with Git, auto-user provisioning with SCIM, and Granular Access Control, Appsmith brings that improved efficiency to the entire platform and software development life-cycle, instead of just in the &lt;em&gt;app-building&lt;/em&gt; process.&lt;/p&gt;

&lt;p&gt;THIS is the key factor that enables enterprises to adopt modern low-code solutions, because it means they can operate and maintain them at scale. Low-code is no longer just a tool for building MVPs and side-projects; it's ready for prime-time with the largest enterprises in the world.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's Driving the Change?
&lt;/h2&gt;

&lt;p&gt;The fact that low-code tools are finally ready to support enterprise use cases is only part of it. The real pressure that's driving the shift to low-code is more financial in nature. In 2023 alone, 191,000 workers were laid off in just the US. Amazon, Alphabet, Microsoft and Meta lead the reductions, each with over 10k workers let go. Businesses have to do more with less, and that means less people &lt;em&gt;and less software expenses&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;There has always been financial pressure for enterprises to choose the most cost-effective solution, but until recently, web-based low-code solutions lacked the necessary enterprise features, security compliance, SLAs, and other requirements. Now, enterprises have a viable alternative that saves time and money, while maintaining security, stability and performance.&lt;/p&gt;

&lt;h2&gt;
  
  
  Easier access = more use cases, but not more devs
&lt;/h2&gt;

&lt;p&gt;Appsmith and other low-code tools enable teams to quickly build apps for any internal process. This means that smaller use cases can be addressed that never would have justified the investment of a fullstack application. Now any team within the company can spin up their own app for HR, Customer Support, PayRoll, etc, instead of only one team trying to serve every department and having to prioritize a backlog of requests.&lt;/p&gt;

&lt;p&gt;More use cases means more devs are needed. And while Appsmith makes it easy for anyone to build their first app, what enterprises really need is experienced developers to properly design and build enterprise-grade apps.&lt;/p&gt;

&lt;h2&gt;
  
  
  Low-Code for Fullstack and Backend Developers
&lt;/h2&gt;

&lt;p&gt;Appsmith is low-code where it makes sense, and full-code when you need it. The UI is drag-n-drop, and requires no frontend experience. But when it comes to connecting to datasources, this is a developer's tool. There's no abstraction getting between you and the data. The API builder is similar to Postman, and the query builder lets you write SQL and interact directly with the database. You can also write JavaScript anywhere to add logic to dynamically control the UI and create workflows. And with custom widgets, you can use any library or framework to build other UI components in addition to our 45+ prebuilt widgets.&lt;/p&gt;

&lt;p&gt;This approach means the platform is familiar to fullstack or backend developers, but sometimes harder for non-developers or no-code devs to pick up.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Fullstack Developer's Advantage
&lt;/h2&gt;

&lt;p&gt;Appsmith can &lt;a href="https://www.appsmith.com/integration"&gt;connect&lt;/a&gt; to just about any API or database, and that's one of the areas our customers tend to need help. It's not about learning Appsmith, but about having expertise in OAuth2, JavaScript, SQL, &lt;a href="https://docs.appsmith.com/getting-started/setup"&gt;self-hosting&lt;/a&gt;, and experience working with stakeholders to gather requirement and properly design the backend.&lt;/p&gt;

&lt;p&gt;Anyone can use low-code tools to throw together a basic CRUD app, but it takes an experience developer to build, deploy and manage an enterprise-grade solution with performant queries, granular permissions and other best practices in mind.&lt;/p&gt;

&lt;h2&gt;
  
  
  The New Fullstack
&lt;/h2&gt;

&lt;p&gt;With so many enterprises shifting to low-code, now is the perfect time for fullstack developers to start adding low-code skills to their toolkit, and resumes! Appsmith is open-source and can be self-hosted for free, making it the perfect choice for the frontend in a modern fullstack. Throw in an open-source backend like Supabase, Baserow, or Postgres, and you've got a modern, easy to deploy and maintain fullstack. Enterprise customers are making the switch to low-code, and they need your fullstack experience. It's time for traditional fullstack developers to embrace low-code and the new fullstack!&lt;/p&gt;

&lt;h2&gt;
  
  
  Freelancing and Building an Online Presence
&lt;/h2&gt;

&lt;p&gt;Whether working in a full-time developer role for one company, or as a solo freelancer, all fullstack devs can benefit from adding low-code tools to their stack. But fullstack freelancers in particular will gain even more of an advantage.&lt;/p&gt;

&lt;p&gt;Low-code tools are generally much easier to use, and most users can build a simple CRUD app with no problem. But for those more advanced use cases, fullstack experience goes a long way. When it comes time to build a &lt;a href="https://youtu.be/yfPn4XwJ7pc"&gt;custom widget&lt;/a&gt;, transform data for a chart, or integrate with an OAuth2 API, traditional devs will excel where no-code devs and non-developers would struggle.&lt;/p&gt;

&lt;p&gt;If you're interested freelancing with low-code tools, one of the most important things you can do is to start building an online presence in the low-code space. This means asking and answering questions on forums, starting a blog and posting tutorials, and building an online portfolio. Get yourself out there in the community and make a name for yourself as someone who understands the product and wants to help others. This could apply to a specific tool like Appsmith or Supabase, or in a certain domain of tech, like JavaScript or Postgres forums. &lt;/p&gt;

&lt;p&gt;It takes time to build, but a solid online presence can drive tons of leads to your UpWork or Fiverr profile, personal website, or wherever else you want to direct them. Additionally, your tutorial or community profile on a forum can be included in proposals, as a way to build confidence in potential clients and show them that you are invested in building quality solutions with that particular product.&lt;/p&gt;

&lt;h2&gt;
  
  
  Advertising on the Appsmith Community Portal
&lt;/h2&gt;

&lt;p&gt;Appsmith is a BYOD (Bring your own datasource) platform, so building an Appsmith app often involves other skills like SQL, JavaScript, API integrations, etc. Therefore, we've designed our community directory to allow anyone to advertise these services, in addition to Appsmith development. In other words, you don't have to be an Appsmith expert to make a profile and use the community portal to find work! There are tags for other skills you can add to your profile, like JavaScript, SQL, Google Sheets, etc. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Here's how you can get started:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Create a profile on the &lt;a href="https://community.appsmith.com/directory"&gt;community portal&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  Ensure your profile is 100% complete&lt;/li&gt;
&lt;li&gt;  Include a link or email for the &lt;strong&gt;Contact Me&lt;/strong&gt; button&lt;/li&gt;
&lt;li&gt;  Request to have your account verified (ask Appsmith staff on &lt;a href="https://discord.com/invite/rBTTVJp"&gt;Discord&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Low-code tools have advanced from being installed programs that are locked to a desktop, to web-based, self-hostable platforms with enterprise features like SSO, multiple environments, version control with git, and role based access control. And now the advantages of low-code are finally accessible to large enterprises that were previously blocked by security and regulatory compliance. This shift is creating increased demand for low-code developers, and fullstack developers have a clear advantage.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://community.appsmith.com/content/blog/getting-started-low-code-freelancer-5-tips-kickstart-your-career-2024"&gt;Finding Work As A Low-Code Freelancer&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Building a Mermaid.js Gantt Chart in a FileMaker Web Viewer</title>
      <dc:creator>Joseph Petty</dc:creator>
      <pubDate>Mon, 08 Apr 2024 17:54:02 +0000</pubDate>
      <link>https://forem.com/appsmith/building-a-mermaidjs-gantt-chart-in-a-filemaker-web-viewer-on6</link>
      <guid>https://forem.com/appsmith/building-a-mermaidjs-gantt-chart-in-a-filemaker-web-viewer-on6</guid>
      <description>&lt;p&gt;I’ve used a lot of low-code tools over the years, and one thing I’ve always enjoyed is pushing the limits of each platform and building things that aren’t supported out of the box. The first tool I really dove into was Claris FileMaker Pro. At the time (2010ish), I had no programming experience, so I really had no idea what to do with a web viewer in FileMaker (iframes in Appsmith), other than display a site from some external url. It didn’t seem all that useful to me. &lt;/p&gt;

&lt;p&gt;Fast forward to today- I’ve spent the last few years pushing the limits of Appsmith, using iframes and &lt;a href="https://www.youtube.com/watch?v=2YXveLr6ANk"&gt;custom widget&lt;/a&gt; with &lt;a href="https://docs.appsmith.com/core-concepts/writing-code/ext-libraries"&gt;external libraries&lt;/a&gt; to create all sorts of new UI components and features. I now understand how powerful an iframe can be in a low-code tool. It’s an escape hatch for when you hit platform limits. It’s like punching a hole in the ceiling, making the sky the limit. &lt;/p&gt;

&lt;p&gt;I’ve been out of FileMaker development for years, but recently I started thinking about all the cool stuff I could have done back then if I had known a little more about JavaScript and using libraries in an iframe. So I’ve decided to revisit my first ‘go-to’ platform, and rebuild some of the &lt;a href="https://community.appsmith.com/user/3/templates"&gt;recent experiments&lt;/a&gt; I’ve been doing in Appsmith. &lt;/p&gt;

&lt;p&gt;Today, I’ll be working with the Mermaid JS library to generate flow charts from records stored in FileMaker. This post was inspired by an Appsmith community &lt;a href="https://community.appsmith.com/template/mermaid-workflows-and-graphs"&gt;template&lt;/a&gt; from Paul Chambless. Thanks Paul! &lt;/p&gt;

&lt;h2&gt;
  
  
  Mermaid.JS Intro
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://mermaid.js.org/"&gt;Mermaid JS&lt;/a&gt; is a powerful JavaScript library that allows developers to create complex diagrams and visualizations using simple text and code syntax. It’s a lot like markdown, but for charts instead of plain text. &lt;/p&gt;

&lt;p&gt;For instance, just a few lines of text can be used to create a pie chart:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pie title NETFLIX
         "Time spent looking for movie" : 90
         "Time spent watching it" : 10

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

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj7e3nparu4l7qyqf6n2b.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj7e3nparu4l7qyqf6n2b.png" alt="Image description" width="686" height="433"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This works by placing the Mermaid code inside a div, and giving it the class of mermaid. The Mermaid library parses the doc and replaces all the mermaid divs with the rendered chart or graph, based on the text content of the div. Here's a full HTML doc, showing how to import the library.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;html&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;head&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;title&amp;gt;&lt;/span&gt;Mermaid Graph&lt;span class="nt"&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"https://cdn.jsdelivr.net/npm/mermaid/dist/mermaid.min.js"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;script&amp;gt;&lt;/span&gt;
        &lt;span class="nx"&gt;mermaid&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;initialize&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;startOnLoad&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;body&amp;gt;&lt;/span&gt;
&lt;span class="c"&gt;&amp;lt;!-- Mermaid diagram container --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"mermaid"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
sequenceDiagram
    participant Research
    participant Design
    participant Development
    participant Testing
    participant Deployment
    Research-&amp;gt;&amp;gt;Design: Completed
    Design-&amp;gt;&amp;gt;Development: In Progress
    Development-&amp;gt;&amp;gt;Testing: Pending
    Testing-&amp;gt;&amp;gt;Deployment: Pending
&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;…which renders as&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Funy03qhlukx94acq56a9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Funy03qhlukx94acq56a9.png" alt="Image description" width="800" height="276"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Using Mermaid in FileMaker
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Create a template for the web viewer
&lt;/h3&gt;

&lt;p&gt;First, create a template for the web viewer and insert a MERMAID_CODE placeholder for where the Mermaid code would go.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;html&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;head&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;title&amp;gt;&lt;/span&gt;Mermaid Graph&lt;span class="nt"&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"https://cdn.jsdelivr.net/npm/mermaid/dist/mermaid.min.js"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;script&amp;gt;&lt;/span&gt;
        &lt;span class="nx"&gt;mermaid&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;initialize&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;startOnLoad&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;body&amp;gt;&lt;/span&gt;
&lt;span class="c"&gt;&amp;lt;!-- Mermaid diagram container --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"mermaid"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
MERMAID_CODE
&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then save this to a field in a new table. For mine, I used &lt;code&gt;webviewer::html&lt;/code&gt;. &lt;/p&gt;

&lt;h3&gt;
  
  
  Set up web viewer
&lt;/h3&gt;

&lt;p&gt;Next, add a code field to the same table, and add it to a layout, along with a web viewer. &lt;/p&gt;

&lt;p&gt;Set the web viwer contents to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Substitute ( html ; “MERMAID_CODE” ; code )

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

&lt;/div&gt;



&lt;h3&gt;
  
  
  Load in a Mermaid Example
&lt;/h3&gt;

&lt;p&gt;Now just paste any example from the Mermaid docs into the code field, and you should have a working chart or graph. This is hard-coded though. We want to insert data from FileMaker! That’s going to require some calculations and/or scripting. But before we shift gears, there’s one more thing we can do while we’re here. &lt;/p&gt;

&lt;p&gt;You may want to add some custom styling, or even use other JavaScript libraries in the same web viewer. To make this easier, I suggest adding two more fields for css and javascript. Then update the template and the web viewer accordingly.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;html&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;head&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;title&amp;gt;&lt;/span&gt;Mermaid Graph&lt;span class="nt"&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"https://cdn.jsdelivr.net/npm/mermaid/dist/mermaid.min.js"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;script&amp;gt;&lt;/span&gt;
        &lt;span class="nx"&gt;mermaid&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;initialize&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;startOnLoad&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;style&amp;gt;CSS_CODE&amp;lt;/style&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;script&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;JS_CODE&lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;body&amp;gt;&lt;/span&gt;
&lt;span class="c"&gt;&amp;lt;!-- Mermaid diagram container --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"mermaid"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
MERMAID_CODE
&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And this for the calculation in the web viewer:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Substitute ( html ; 

  ["JS_CODE" ; js ];  

  ["CSS_CODE" ; css ] ;

  ["MERMAID_CODE" ; mermaid ]

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

&lt;/div&gt;



&lt;p&gt;You may also want to add a Tab Control with Panels to edit each field. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5uaxqeykthi6bpckmfzi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5uaxqeykthi6bpckmfzi.png" alt="Image description" width="800" height="493"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Generating Text for Mermaid Charts
&lt;/h2&gt;

&lt;p&gt;Ok, now that the basics are working, on to the fun part! Generating Mermaid charts dynamically from FileMaker data.&lt;/p&gt;

&lt;p&gt;I have a Tasks table with the following data:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3cdmw1mpdwdq12aux96a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3cdmw1mpdwdq12aux96a.png" alt="Image description" width="800" height="252"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And I need to turn it into this format for a Gantt chart:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;gantt
title A Gantt Diagram
dateFormat  YYYY-MM-DD
Project Task 1: Task 1, 2024-04-04, 2024-04-07
Project Task 2: Task 2, 2024-04-06, 2024-04-09
Project Task 3: Task 3, 2024-04-08, 2024-04-11
Project Task 4: Task 4, 2024-04-10, 2024-04-13
Project Task 5: Task 5, 2024-04-12, 2024-04-15
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Years ago I would have approached this with a script, but now we have the WHILE function in FileMaker. No looping scripts needed! &lt;/p&gt;

&lt;p&gt;First, I used ExecuteSQL to get the data as comma separated values. But one of my column names is an &lt;a href="https://community.appsmith.com/content/blog/sql-reserved-words"&gt;SQL reserved word&lt;/a&gt;, so I had to use escape quotes. Then I used SUBSTITUTE to break each row into a new list item to iterate through. From there, a used a WHILE loop to build each task entry, then return the final list, along with the extra header info needed for this chart type.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Let([
    ganttHeader = "gantt" &amp;amp; ¶ &amp;amp;
    "title A Gantt Diagram"  &amp;amp; ¶ &amp;amp;
    "dateFormat  YYYY-MM-DD";

    data = ExecuteSQL("SELECT name, start, \"end\", id FROM Tasks"; ""; "¶");
    rows = Substitute(data; "¶"; ¶);
    maxIndex = ValueCount(rows)
];
    ganttHeader &amp;amp; ¶ &amp;amp; 
    While([
        index = 1;
        ganttBody = ""
    ];
        index &amp;lt;= maxIndex;
        [
            row = GetValue(rows; index);
            fields = Substitute(row; ","; ¶);
            taskName = GetValue(fields; 1);
            startDate = GetValue(fields; 2);
            endDate = GetValue(fields; 3);
            id = GetValue(fields; 4);

            // Construct the Gantt chart entry for this task
            ganttEntry = taskName &amp;amp; ": " &amp;amp; id &amp;amp; ", " &amp;amp; startDate &amp;amp; ", " &amp;amp; endDate;

            // Append this task's entry to the ganttBody
            ganttBody = ganttBody &amp;amp; ganttEntry &amp;amp; ¶;
            index = index + 1
        ];
Substitute(ganttBody; "¶"; ¶)    )
)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Using this in a calculation field with the &lt;em&gt;‘do not store result’&lt;/em&gt; option will enable realtime charts based on your data! &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwepnpfpawe4hz440lsyl.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwepnpfpawe4hz440lsyl.gif" alt="Image description" width="1342" height="883"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;This was a fun, first-try at using a web viewer in FileMaker for something besides displaying an external website. There are a ton of other use cases and JavaScript libraries that could be used to extend FileMaker Pro, Appsmith, or any other low-code platform that supports iframes or custom widgets. &lt;/p&gt;

&lt;p&gt;I hope this helps other get started with 'punching holes in the ceiling' of platform limitations! Got an idea for a new integration? Drop a comment below. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Related Post&lt;/strong&gt;: &lt;a href="https://community.appsmith.com/content/blog/filemaker-api-connector-free-and-open-source-starter-solution-integrating-filemaker"&gt;https://community.appsmith.com/content/blog/filemaker-api-connector-free-and-open-source-starter-solution-integrating-filemaker&lt;/a&gt;&lt;/p&gt;

</description>
      <category>filemaker</category>
      <category>javascript</category>
      <category>lowcode</category>
      <category>sql</category>
    </item>
    <item>
      <title>FileMaker API Connector: A Free and Open-Source Starter Solution for Integrating FileMaker with Any API Or Database</title>
      <dc:creator>Joseph Petty</dc:creator>
      <pubDate>Tue, 02 Apr 2024 22:00:00 +0000</pubDate>
      <link>https://forem.com/appsmith/filemaker-api-connector-a-free-and-open-source-starter-solution-for-integrating-filemaker-with-any-api-or-database-1j27</link>
      <guid>https://forem.com/appsmith/filemaker-api-connector-a-free-and-open-source-starter-solution-for-integrating-filemaker-with-any-api-or-database-1j27</guid>
      <description>&lt;p&gt;Hey, I'm Joseph, an engineer at Appsmith, and a long-time FileMaker Pro consultant and developer. I freelanced in FileMaker Pro for years, integrating APIs like Shopify, BigCommerce, eBay and other services, using the insert from URL script step, curl requests, and roughly a terabyte of &lt;code&gt;\"escaped quotes\"&lt;/code&gt; 😖&lt;/p&gt;

&lt;p&gt;FileMaker is a powerful low-code platform that can build some pretty amazing apps, but the developer experience isn’t always as… let’s just say — modern. And while curl requests still have their uses, these days, I’d much rather use a Postman-like interface for making API calls. &lt;strong&gt;So I built one!&lt;/strong&gt; And I wanted to share it with the FileMaker community.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feu5j732r2o00bnzq45cv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feu5j732r2o00bnzq45cv.png" alt="Image description" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://community.appsmith.com/template/filemaker-api-connector"&gt;This app&lt;/a&gt;, built on Appsmith, provides a starting point for connecting your FileMaker data to almost any API or Database using one of Appsmith’s many &lt;a href="https://www.appsmith.com/integration?utm_source=reddit&amp;amp;utm_medium=filemaker-reddit&amp;amp;utm_content=appsmith_apps&amp;amp;utm_campaign=devrel&amp;amp;utm_term=integration"&gt;integrations&lt;/a&gt;, and a Postman-like API builder.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs81masgmo9pjvp35b61o.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs81masgmo9pjvp35b61o.png" alt="Image description" width="800" height="645"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frhlm1jakpdyeath789ey.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frhlm1jakpdyeath789ey.png" alt="Image description" width="800" height="548"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting started
&lt;/h2&gt;

&lt;p&gt;The app handles the FileMaker login flow and query building, using a UI to select fields and enter search terms without coding—just like a Find Request in FileMaker. It generates the actual JSON query object for you and runs the API request, returning any matching records.&lt;/p&gt;

&lt;p&gt;To get started, click the &lt;a href="https://app.appsmith.com/app/filemaker-api-connector/fmp-to-api-6304e44ab189ad45f609d8bb?utm_source=reddit&amp;amp;utm_medium=filemaker-reddit&amp;amp;utm_content=appsmith_apps&amp;amp;utm_campaign=devrel&amp;amp;utm_term=filemaker-appsmith-app"&gt;Fork App&lt;/a&gt; button in the top right to copy the app to your Appsmith account. Then, follow the instructions in the app to connect to your FileMaker server.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftb1ozu0vift3twdh7p0k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftb1ozu0vift3twdh7p0k.png" alt="Image description" width="800" height="549"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  FileMaker API Connection Settings
&lt;/h2&gt;

&lt;p&gt;Click the &lt;strong&gt;Test Connection&lt;/strong&gt; button to verify if the API is working, and then close the setup window.&lt;/p&gt;

&lt;p&gt;Enter the layout name you want to query, and the app will pull in the table name, field names, and total record count. This populates the Select widgets in the query builder so you can easily build complex &lt;code&gt;AND&lt;/code&gt;/&lt;code&gt;OR&lt;/code&gt; queries with multiple conditions.&lt;/p&gt;

&lt;p&gt;Click &lt;strong&gt;FIND&lt;/strong&gt; to run the query and the table should populate with the first 100 records from your FileMaker database. This query builder uses Appsmith's &lt;a href="https://docs.appsmith.com/reference/widgets/json-form?utm_source=reddit&amp;amp;utm_medium=filemaker-reddit&amp;amp;utm_content=appsmith_apps&amp;amp;utm_campaign=devrel&amp;amp;utm_term=docs"&gt;JSON Form widget&lt;/a&gt;, which dynamically generates a form from a JSON object.&lt;/p&gt;

&lt;p&gt;Next, try entering a few search terms using the query builder, and set a &lt;strong&gt;Query Type&lt;/strong&gt;: &lt;code&gt;AND&lt;/code&gt; or &lt;code&gt;OR&lt;/code&gt;. See how the query-body preview updates and the JSON structure changes? Awesome! Now let's check out the API requests.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcvadef84k03y3pdvr990.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcvadef84k03y3pdvr990.png" alt="Image description" width="800" height="482"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  FileMaker API Query Type
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;GET&lt;/code&gt; or &lt;code&gt;POST&lt;/code&gt;?&lt;/p&gt;

&lt;p&gt;The FileMaker API uses a &lt;code&gt;GET&lt;/code&gt; method to retrieve records from a layout if no specific filter is used. However, to perform a find request, a &lt;code&gt;POST&lt;/code&gt; method is used to send the query conditions in the POST body.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The search works the same as FileMaker's native find requests, using the same operators for wildcards &lt;code&gt;*&lt;/code&gt;, exact matches &lt;code&gt;==&lt;/code&gt;, and others.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;code&gt;AND&lt;/code&gt; &lt;strong&gt;requests group the conditions as multiple properties of the same object:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "query": [
    {
      "address_state": "FL",
      "first_name": "J*"
    }
  ]
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;OR&lt;/code&gt; &lt;strong&gt;requests separate each condition into a separate object:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "query": [
    {
      "address_state": "FL"
    },
    {
      "first_name": "J*"
    }
  ]
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Pagination
&lt;/h2&gt;

&lt;p&gt;Feel free to skip to the next section if your table has &amp;lt;=100 records. Still here? Ok, well it sounds like you might need to paginate your data. &lt;strong&gt;But do you?&lt;/strong&gt; 🤨&lt;/p&gt;

&lt;p&gt;If possible, try to request only the records needed client-side and limit the results to less than 100 records, the limit per request for the FileMaker API. If you really need more than 100 records pulled, check out this &lt;a href="https://docs.appsmith.com/core-concepts/data-access-and-binding/displaying-data-read/display-data-tables#pagination"&gt;guide&lt;/a&gt; on pagination.&lt;/p&gt;

&lt;h2&gt;
  
  
  Low-code: Integrate with another database or API
&lt;/h2&gt;

&lt;p&gt;There's a lot you can do without coding in Appsmith, but you can do even more with JavaScript, like controlling widgets’ behaviors and appearances, transforming data, or chaining together multiple actions. This app was built using a few JavaScript nuggets to make the query builder, but it can easily be extended to send data to another API or database without additional coding.&lt;/p&gt;

&lt;p&gt;Just add a new column to the table widget and set the type to Button. Then add a new API or database query to send data from the current row to another system.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo4242yebu7jp0dw9yftl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo4242yebu7jp0dw9yftl.png" alt="Image description" width="800" height="582"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Building the query body with JavaScript
&lt;/h2&gt;

&lt;p&gt;The JSONForm widget supports Array and Object type fields, and allows the user to add additional objects—sets of fields and values—to an array. In this case, you are adding new query objects with inputs for the &lt;code&gt;field_name&lt;/code&gt; and &lt;code&gt;search_term&lt;/code&gt;. The data can be accessed inside the JSONForm widget by referencing &lt;code&gt;JSONForm1.formData&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "query": [
    {
      "field_name": "address_state",
      "search_term": "FL"
    },
    {
      "field_name": "first_name",
      "search_term": "J*"
    }
  ],
  "query_type": "AND"
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then, this data is transformed using a &lt;code&gt;map()&lt;/code&gt; function, or &lt;code&gt;forEach()&lt;/code&gt; function, depending on the &lt;strong&gt;query_type&lt;/strong&gt;—&lt;code&gt;AND&lt;/code&gt; or &lt;code&gt;OR&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;if (!JSONForm1.formData?.query) {
  return ''
}
let queryBody = {
  query: [{}]
};
let conditions = JSONForm1.formData.query;
let queryType = JSONForm1.formData.query_type;
if (queryType == 'OR') {
  let body = conditions.map(c =&amp;gt; ({[c.field_name]: c.search_term}));
  queryBody['query'] = body;
} else {
  conditions.forEach(c =&amp;gt; queryBody['query'][0][c.field_name] = c.search_term)
};
return queryBody
}

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

&lt;/div&gt;



&lt;h2&gt;
  
  
  Server credentials and security
&lt;/h2&gt;

&lt;p&gt;For easy setup and demo, this public Appsmith app was built using a client-side form to input the FileMaker API credentials as an app user. Appsmith also offer a secure datasource feature that saves the credentials on your Appsmith server as an admin, without exposing them to the user. Check out our &lt;a href="https://docs.appsmith.com/core-concepts/connecting-to-data-sources/authentication#create-authenticated-api"&gt;Authenticated API&lt;/a&gt; docs for more info.&lt;/p&gt;

&lt;h2&gt;
  
  
  What’s next?
&lt;/h2&gt;

&lt;p&gt;I started this app as a fun experiment to learn the FileMaker API and query structure, but it quickly evolved into the perfect starting point to connect FileMaker to any API or database. Hope this helps you get started on your own integrations!&lt;/p&gt;

&lt;p&gt;I would love to hear back from you on your experience using the app, or if you would like to collaborate on adding additional features. I may even open-source this app as its own project if others are interested in contributing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Update: April 2024
&lt;/h2&gt;

&lt;p&gt;I got my start with FileMaker Pro in 2010 while working at a national laboratory that used it for data collection. The database needed some updates so I taught myself, and I ended up becoming the main dev for any FMP work at the lab. That lead to some side work, and more work, and then in 2016 I left the lab to start my own company and freelance full time. &lt;/p&gt;

&lt;p&gt;After a few years of FMP, I switched to Google AppSheet for about 4 years, then found Appsmith in 2020 and made it my main tool for freelance work. I joined the Appsmith team about 1.5 years later as a senior developer advocate, and now I lead our freelancer program. It's been an amazing journey, and I couldn't have done it without the communities around each one of the platforms I used along the way. So now I want to help other low-code freelancers in their journeys by building our developer community with freelancers in mind. &lt;/p&gt;

&lt;p&gt;If you're a freelancer in Appsmith, AppSheet, or FileMaker Pro, or any other low-code platform, I'd love to hear from you. And if you want to start freelancing but don't know where to start, feel free to reach out on Discord (joseph_appsmith). &lt;/p&gt;

</description>
      <category>filemaker</category>
      <category>api</category>
      <category>appsmith</category>
      <category>developer</category>
    </item>
    <item>
      <title>Variables in Javascript: A Comprehensive Guide to Var, Let, and Const</title>
      <dc:creator>Ron Northcutt</dc:creator>
      <pubDate>Mon, 22 Jan 2024 08:00:00 +0000</pubDate>
      <link>https://forem.com/appsmith/variables-in-javascript-a-comprehensive-guide-to-var-let-and-const-4n86</link>
      <guid>https://forem.com/appsmith/variables-in-javascript-a-comprehensive-guide-to-var-let-and-const-4n86</guid>
      <description>&lt;p&gt;In software, a variable is a symbolic name that represents a &lt;em&gt;value&lt;/em&gt; or a &lt;em&gt;reference to a value&lt;/em&gt;. It's a way to store information that can be reused and manipulated throughout your program. You can think of a variable like a label or even a sign pointer - it represents the data (which can potentially change) but is not the actual data itself. &lt;/p&gt;

&lt;p&gt;I am often reminded of that great scene in the Bruce Lee movie, "Enter the Dragon", where he tells his student that "it is like a finger pointing the way to the moon - don't concentrate on the finger, or you will miss all of that heavenly glory." The variable is important, but what it represents is actually what you care about.&lt;br&gt;
&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/4O9o4CKTGzQ?start=74"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Ok, maybe that's a little bit of a stretch, but you get the idea. Variables are essential building blocks in JavaScript programming, allowing developers to store and manipulate data. There are 3 main ways to declare a variable, and your choice can have significant implications on your code's behavior and maintainability. Many developers just choose one and use it for everything, but that's just lazy and can sometimes cause problems.&lt;/p&gt;

&lt;p&gt;Let's explore these three methods of variable declaration in JavaScript: &lt;code&gt;var&lt;/code&gt;, &lt;code&gt;let&lt;/code&gt;, and &lt;code&gt;const&lt;/code&gt;, diving into when and why to use each, along with their respective advantages and drawbacks.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. &lt;code&gt;var&lt;/code&gt;: Function-Scoped Variables
&lt;/h2&gt;

&lt;p&gt;In JavaScript, &lt;code&gt;var&lt;/code&gt; is a keyword used to declare a variable. It has some specific behaviors that set it apart from other variable declaration keywords like &lt;code&gt;let&lt;/code&gt; and &lt;code&gt;const&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Here's what you need to know about &lt;code&gt;var&lt;/code&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Function Scope&lt;/strong&gt;: Variables declared with &lt;code&gt;var&lt;/code&gt; are function-scoped, meaning they are accessible within the function where they were declared (or globally if declared outside any function).&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Hoisting&lt;/strong&gt;: Unlike &lt;code&gt;let&lt;/code&gt; and &lt;code&gt;const&lt;/code&gt;, variables declared with &lt;code&gt;var&lt;/code&gt; are "hoisted" to the top of their containing function or global scope. This means that they are technically available from the beginning of that scope, but their value will be &lt;code&gt;undefined&lt;/code&gt; until the code where they are assigned is executed.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Reassignment&lt;/strong&gt;: You can reassign new values to a variable declared with &lt;code&gt;var&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Redeclaration&lt;/strong&gt;: In non-strict mode, you can redeclare a variable using &lt;code&gt;var&lt;/code&gt; in the same scope without getting an error, which is not allowed with &lt;code&gt;let&lt;/code&gt; and &lt;code&gt;const&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;No Block Scope&lt;/strong&gt;: &lt;code&gt;var&lt;/code&gt; does not respect block scope (such as inside an &lt;code&gt;if&lt;/code&gt; statement or a loop), which can sometimes lead to unexpected behavior. If you declare a variable with &lt;code&gt;var&lt;/code&gt; inside a block, it's actually available to the entire surrounding function or global scope.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Because of these peculiarities, and with the introduction of &lt;code&gt;let&lt;/code&gt; and &lt;code&gt;const&lt;/code&gt; in ES6 (ECMAScript 2015), the use of &lt;code&gt;var&lt;/code&gt; has become less common in modern JavaScript, and it's often recommended to use &lt;code&gt;let&lt;/code&gt; or &lt;code&gt;const&lt;/code&gt; instead for clearer scoping rules and better maintainability.&lt;/p&gt;

&lt;h3&gt;
  
  
  When to Use
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  You need a variable with function-level scope.&lt;/li&gt;
&lt;li&gt;  You are working with older code that doesn't support ES6.&lt;/li&gt;
&lt;li&gt;  Typically, you should avoid &lt;code&gt;var&lt;/code&gt;, but it can be handy in some cases.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Pros
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Function Scope:&lt;/strong&gt; Variables are accessible within the entire function where they're declared.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Hoisting:&lt;/strong&gt; Variables are moved to the top of their scope and initialized with &lt;code&gt;undefined&lt;/code&gt;, allowing them to be referenced before declaration.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Cons
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Lack of Block Scope:&lt;/strong&gt; Variables can be accessed outside the block they were declared in, leading to potential bugs.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Hoisting Quirks:&lt;/strong&gt; Can cause confusion as variables are available before their declaration.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Example
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;    &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;varExample&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// undefined, because of hoisting&lt;/span&gt;
      &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Output: 10&lt;/span&gt;

      &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Same variable, even though it's in a different block&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;

      &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Output: 20, because var does not have block scope&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  2. &lt;code&gt;let&lt;/code&gt;: Block-Scoped Variables
&lt;/h2&gt;

&lt;p&gt;So, if we had &lt;code&gt;var&lt;/code&gt;, why did we need something else? The reason why the &lt;code&gt;let&lt;/code&gt; keyword was introduced to javascript was because &lt;em&gt;function&lt;/em&gt; scope is confusing and this led to a number of bugs and errors. &lt;code&gt;let&lt;/code&gt; was was introduced in ES6 (ECMAScript 2015) as an alternative to var, with some key differences in behavior:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Block Scope&lt;/strong&gt;: Unlike var, variables declared with let are block-scoped, meaning they are only accessible within the block in which they were declared (e.g., inside an if statement or a loop).&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;No Hoisting&lt;/strong&gt;: Although let declarations are hoisted, the variables are not initialized until the code execution reaches the declaration. Attempting to access the variable before its declaration will result in a ReferenceError.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Reassignment&lt;/strong&gt;: Like var, you can reassign new values to a variable declared with let.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;No Redeclaration&lt;/strong&gt;: In strict mode, you cannot redeclare a variable using let in the same scope.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  When to Use
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  You need a variable with block-level scope.&lt;/li&gt;
&lt;li&gt;  You expect to reassign the variable within its scope.&lt;/li&gt;
&lt;li&gt;  Probably should be your default method for creating variables.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Pros
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Block Scope:&lt;/strong&gt; Variables are only accessible within the block where they're declared, reducing potential errors.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;No Hoisting Issues:&lt;/strong&gt; Variables are not initialized until the code execution reaches the declaration.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Cons
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;More Limited Scope:&lt;/strong&gt; Might require more careful planning of where the variable is declared.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Example
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;    &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;letExample&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// ReferenceError, because it doesn't exist yet (no hoisting)&lt;/span&gt;
        &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

        &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Different variable because it's in a different block&lt;/span&gt;
            &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;y&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;I see how it works&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="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Output: 10, because we are in the block for the original variable&lt;/span&gt;
        &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;y&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// ReferenceError, because y is block-scoped&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  3. &lt;code&gt;const&lt;/code&gt;: Block-Scoped Immutable References
&lt;/h2&gt;

&lt;p&gt;The &lt;code&gt;const&lt;/code&gt; keyword, which, like &lt;code&gt;let&lt;/code&gt;, was introduced in ES6 (ECMAScript 2015). It has similarities to &lt;code&gt;let&lt;/code&gt;, but with some unique characteristics:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Block Scope&lt;/strong&gt;: Just like &lt;code&gt;let&lt;/code&gt;, variables declared with &lt;code&gt;const&lt;/code&gt; are block-scoped.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;No Hoisting&lt;/strong&gt;: Similar to &lt;code&gt;let&lt;/code&gt;, &lt;code&gt;const&lt;/code&gt; declarations are hoisted, but accessing them before their declaration in the code results in a ReferenceError.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;No Reassignment&lt;/strong&gt;: Unlike &lt;code&gt;var&lt;/code&gt; and &lt;code&gt;let&lt;/code&gt;, once a variable is assigned with &lt;code&gt;const&lt;/code&gt;, it cannot be reassigned. Attempting to do so will result in a TypeError.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;No Redeclaration&lt;/strong&gt;: You cannot redeclare a variable using &lt;code&gt;const&lt;/code&gt; in the same scope.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Must Be Initialized&lt;/strong&gt;: A &lt;code&gt;const&lt;/code&gt; declaration must be initialized with a value at the time it's declared.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  When to Use
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  You want to declare a variable that should not be reassigned.&lt;/li&gt;
&lt;li&gt;  You need block-level scoping.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Pros
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Immutable Reference:&lt;/strong&gt; Prevents reassignment, making the code more predictable.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Block Scope:&lt;/strong&gt; Like &lt;code&gt;let&lt;/code&gt;, variables are only accessible within the block where they're declared.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Cons
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Not Fully Immutable:&lt;/strong&gt; Only the reference is constant, not the object itself. If the variable is an object, its properties can still be altered.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Example
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;    &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;constExample&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;PI&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// ReferenceError, because it doesn't exist yet (no hoisting)&lt;/span&gt;
            &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;PI&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;3.14159&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
            &lt;span class="nx"&gt;PI&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Error: Assignment to constant variable&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;PI&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// ReferenceError, because PI is block-scoped&lt;/span&gt;

        &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;obj&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
        &lt;span class="nx"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// This is fine because object properties can be changed&lt;/span&gt;
        &lt;span class="nx"&gt;obj&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt; &lt;span class="c1"&gt;// TypeError, reassignment not allowed&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;In modern JavaScript development, understanding the appropriate use of &lt;code&gt;var&lt;/code&gt;, &lt;code&gt;let&lt;/code&gt;, and &lt;code&gt;const&lt;/code&gt; is crucial. While you can safely plan to use &lt;code&gt;let&lt;/code&gt; most of the time, it is important to understand how block scope works so you know when it makes sense.  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Use &lt;code&gt;var&lt;/code&gt; for function-level scope, mainly when dealing with &lt;strong&gt;older code&lt;/strong&gt; or specific scoping needs.&lt;/li&gt;
&lt;li&gt;  Utilize &lt;code&gt;let&lt;/code&gt; when block-level scope is required, and you &lt;strong&gt;expect the value to change within the block&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;  Opt for &lt;code&gt;const&lt;/code&gt; when you want to ensure that the reference to a &lt;strong&gt;value stays constant within a block scope&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;By carefully choosing the right declaration method, developers can write code that is not only more readable but also more resilient and less prone to errors and unexpected behavior. It is usually better to hit scope-related errors earlier (more strict) than later (less strict).&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>variables</category>
      <category>beginners</category>
      <category>programming</category>
    </item>
    <item>
      <title>Understanding 'Single' vs "Double" Quotation Marks in PostgreSQL</title>
      <dc:creator>Joseph Petty</dc:creator>
      <pubDate>Fri, 19 Jan 2024 08:00:00 +0000</pubDate>
      <link>https://forem.com/appsmith/understanding-single-vs-double-quotation-marks-in-postgresql-dk0</link>
      <guid>https://forem.com/appsmith/understanding-single-vs-double-quotation-marks-in-postgresql-dk0</guid>
      <description>&lt;h2&gt;
  
  
  &lt;strong&gt;Single Quotes: Representing Textual Values&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;In PostgreSQL, single quotation marks are used to indicate textual values, often referred to as string literals. These string literals are essential for expressing information like names, descriptions, or any other form of textual data within SQL statements.&lt;/p&gt;

&lt;h3&gt;
  
  
  Using Single Quotes for String Values
&lt;/h3&gt;

&lt;p&gt;When inserting data into a database, the string should be encased in single quotes. For instance, if you're adding a new entry to a &lt;strong&gt;products&lt;/strong&gt; table, and you want to specify the product name as "Sparkling Water," you would use single quotes as follows:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;INSERT&lt;/span&gt; &lt;span class="k"&gt;INTO&lt;/span&gt; &lt;span class="n"&gt;products&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;product_name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;price&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;VALUES&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'Sparkling Water'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;99&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

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

&lt;/div&gt;



&lt;p&gt;By enclosing the product name in single quotes, you're indicating that "Sparkling Water" is a string literal, allowing PostgreSQL to interpret and store it correctly. Notice how there are no quotes on the price, because the data is a number, not a string. &lt;/p&gt;

&lt;h3&gt;
  
  
  Escaping Single Quotes
&lt;/h3&gt;

&lt;p&gt;Suppose you need to include an actual single quote within your string. In that case, you can't directly use a single quote, as it would prematurely terminate the string. To handle this situation, you use two consecutive single quotes to represent a single quote character within the string. For example, if you want to insert the string "It's a sunny day," you would do it like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;INSERT&lt;/span&gt; &lt;span class="k"&gt;INTO&lt;/span&gt; &lt;span class="n"&gt;weather_reports&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;report&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;VALUES&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'It&lt;/span&gt;&lt;span class="se"&gt;''&lt;/span&gt;&lt;span class="s1"&gt;s a sunny day'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;By using two consecutive single quotes (&lt;strong&gt;''&lt;/strong&gt;), you're escaping the single quote character and ensuring it's treated as part of the string value.&lt;/p&gt;

&lt;h2&gt;
  
  
  Double Quotes: Identifying Delimited Identifiers
&lt;/h2&gt;

&lt;p&gt;Unlike single quotes, which deal with string values, double quotes are utilized to mark delimited identifiers. These identifiers are names of database objects such as tables, columns, or even roles. The use of double quotes helps distinguish these identifiers and allows for special characters or case sensitivity.&lt;/p&gt;

&lt;h3&gt;
  
  
  Quoting for Delimited Identifiers
&lt;/h3&gt;

&lt;p&gt;Suppose you're creating a table named &lt;strong&gt;Employee Records&lt;/strong&gt;. Since this name contains a space, which is not a standard character for identifiers, you would use double quotes to define it as a delimited identifier:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="k"&gt;TABLE&lt;/span&gt; &lt;span class="nv"&gt;"Employee Records"&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;employee_id&lt;/span&gt; &lt;span class="nb"&gt;serial&lt;/span&gt; &lt;span class="k"&gt;PRIMARY&lt;/span&gt; &lt;span class="k"&gt;KEY&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;employee_name&lt;/span&gt; &lt;span class="nb"&gt;text&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;

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

&lt;/div&gt;



&lt;p&gt;By enclosing the table name in double quotes, you're indicating that it's a delimited identifier, allowing PostgreSQL to treat the space as part of the name. &lt;/p&gt;

&lt;h3&gt;
  
  
  Case Sensitivity with Double Quotes
&lt;/h3&gt;

&lt;p&gt;Double quotes introduce case sensitivity to identifiers. For instance, if you create a column named "TotalSales" with double quotes, you must always reference it with the same case and double quotes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="nv"&gt;"TotalSales"&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;sales_data&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Without the double quotes, PostgreSQL would interpret the column name in a case-insensitive manner.&lt;/p&gt;

&lt;h2&gt;
  
  
  Additional Examples
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Creating a New Table
&lt;/h3&gt;

&lt;p&gt;Imagine you're creating a new table to store customer reviews. Let's call it "Product Reviews." To ensure the table name is recognized as a single identifier and that the casing is preserved, you can use double quotes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="k"&gt;TABLE&lt;/span&gt; &lt;span class="nv"&gt;"Product Reviews"&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;review_id&lt;/span&gt; &lt;span class="nb"&gt;serial&lt;/span&gt; &lt;span class="k"&gt;PRIMARY&lt;/span&gt; &lt;span class="k"&gt;KEY&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;product_id&lt;/span&gt; &lt;span class="nb"&gt;integer&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;review_text&lt;/span&gt; &lt;span class="nb"&gt;text&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;

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

&lt;/div&gt;



&lt;p&gt;In this scenario, the double quotes are utilized to create a delimited identifier for the table name "Product Reviews," allowing the use of spaces and upper casing within the name.&lt;/p&gt;

&lt;h3&gt;
  
  
  Querying Data with Delimited Identifiers
&lt;/h3&gt;

&lt;p&gt;Suppose you want to retrieve reviews from the "Product Reviews" table where the product name is "Sparkling Water". Since the table name contains capitalization and spaces, you would need to use double quotes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;review_text&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="nv"&gt;"Product Reviews"&lt;/span&gt;
&lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;product_name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'Sparkling Water'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

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

&lt;/div&gt;



&lt;p&gt;Here, the double quotes ensure that PostgreSQL correctly interprets the capitalized table name "Product Reviews.", and the single quotes are used to encase the string used as a search term in the WHERE clause. &lt;/p&gt;

&lt;h3&gt;
  
  
  Using Single Quotes for String Values
&lt;/h3&gt;

&lt;p&gt;Let's insert a new review into the "Product Reviews" table. The review text is "Great product, highly recommended!":&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;INSERT&lt;/span&gt; &lt;span class="k"&gt;INTO&lt;/span&gt; &lt;span class="nv"&gt;"Product Reviews"&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;product_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;review_text&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;VALUES&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1001&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'Great product, highly recommended!'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

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

&lt;/div&gt;



&lt;p&gt;In this case, the single quotes are used to enclose the review text, indicating that it's a string value to be inserted into the table.&lt;/p&gt;

&lt;h3&gt;
  
  
  Escaping Single Quotes in String Values
&lt;/h3&gt;

&lt;p&gt;Suppose you receive a review with an apostrophe within the text. For example, "It's the best choice." To insert this review accurately, you need to escape the apostrophe using two consecutive single quotes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;INSERT&lt;/span&gt; &lt;span class="k"&gt;INTO&lt;/span&gt; &lt;span class="nv"&gt;"Product Reviews"&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;product_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;review_text&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;VALUES&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1002&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'It&lt;/span&gt;&lt;span class="se"&gt;''&lt;/span&gt;&lt;span class="s1"&gt;s the best choice.'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

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

&lt;/div&gt;



&lt;p&gt;By doubling the single quotes (''), you're correctly inserting the review without prematurely ending the string.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Understanding the use of single and double quotation marks in PostgreSQL is critical for effective database manipulation. Single quotes represent textual values, while double quotes denote delimited identifiers, such as table and column names.&lt;/p&gt;

</description>
      <category>sql</category>
      <category>postgres</category>
      <category>programming</category>
      <category>database</category>
    </item>
    <item>
      <title>Five Free Open-Source Database Managers for MySQL, PostgreSQL, and More</title>
      <dc:creator>Dessi</dc:creator>
      <pubDate>Thu, 18 Jan 2024 14:53:12 +0000</pubDate>
      <link>https://forem.com/appsmith/five-free-open-source-database-managers-for-mysql-postgresql-and-more-3j92</link>
      <guid>https://forem.com/appsmith/five-free-open-source-database-managers-for-mysql-postgresql-and-more-3j92</guid>
      <description>&lt;p&gt;Database managers provide a user-friendly interface for interacting with your data as an alternative to managing and querying your databases from the command line. This article lists some of the most popular general-purpose database managers that are open source or free to use.&lt;/p&gt;

&lt;p&gt;The database managers listed in this article support most popular databases including MySQL/MariaDB, PostgreSQL, Microsoft SQL Server, Snowflake, Redis, MongoDB, SQLite, Google BigQuery, and Firebase.&lt;/p&gt;

&lt;h2&gt;
  
  
  Database management software use cases and advantages
&lt;/h2&gt;

&lt;p&gt;The most common use cases for database managers are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Importing and exporting data between databases&lt;/li&gt;
&lt;li&gt;Importing and exporting data to and from files (often for backup purposes)&lt;/li&gt;
&lt;li&gt;Manually editing and correcting data&lt;/li&gt;
&lt;li&gt;Comparing databases and verifying backups&lt;/li&gt;
&lt;li&gt;Managing permissions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Database managers are designed to make databases more convenient to administer and query. They save time by providing shortcuts to otherwise complex tasks and reduce errors by providing forms for inputting data, making it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Much easier for non-technical users who are not familiar with SQL syntax&lt;/li&gt;
&lt;li&gt;Much easier for technical users who don't want to have to write and debug SQL syntax&lt;/li&gt;
&lt;li&gt;Faster and more secure when connecting to databases with credentials management&lt;/li&gt;
&lt;li&gt;Easier to get an overview of a database's contents, users, and permissions&lt;/li&gt;
&lt;li&gt;Easier to see useful information like query execution time and the size of query responses, helping you optimize your queries&lt;/li&gt;
&lt;li&gt;Easier to debug your complex queries and spot problems with them before you run them with syntax highlighting and linting&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It's worth noting that, while general-purpose database managers are better for most users than working on the command line, they’re not always the best tool for non-technical users working with important data — more on that later.&lt;/p&gt;

&lt;h3&gt;
  
  
  Managed databases are not database managers
&lt;/h3&gt;

&lt;p&gt;It's easy to get &lt;em&gt;"database managers"&lt;/em&gt; and &lt;em&gt;"managed databases"&lt;/em&gt; confused, for obvious reasons. Managed databases are a different product to database managers entirely: they are a service that hosts and maintains your database servers for you, so that you only have to worry about the data inside them. Managed databases are a great way to outsource some of your infrastructure overhead if you don't want to host database servers yourself. Examples include &lt;a href="https://www.mongodb.com/atlas/database" rel="noopener noreferrer"&gt;MongoDB Atlas&lt;/a&gt;, &lt;a href="https://aws.amazon.com/rds/" rel="noopener noreferrer"&gt;Amazon RDS&lt;/a&gt;, &lt;a href="https://azure.microsoft.com/en-gb/products/azure-sql/database" rel="noopener noreferrer"&gt;Azure SQL Database&lt;/a&gt;, and &lt;a href="https://cloud.google.com/products/databases" rel="noopener noreferrer"&gt;Google Cloud Databases&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Regardless of whether you are self-hosting or using a managed database, you can use the database managers on this list to connect to it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Comparing five popular free open-source database managers
&lt;/h2&gt;

&lt;p&gt;Below, we compare five free-to-use, open-source database managers, including the pros, cons, and what databases they support.&lt;/p&gt;

&lt;h3&gt;
  
  
  OmniDB: Firebird, MySQL/MariaDB, Oracle, PostgreSQL, SQLite, and Microsoft SQL Server
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.appsmith.com%2F_next%2Fimage%3Furl%3Dhttps%253A%252F%252Fimages.ctfassets.net%252Flpvian6u6i39%252F5p9cVvsgYe6C6rCqEXsMMc%252F1c59a94f2fdf459862779e7cabf58046%252Fimage__17_.png%26w%3D3840%26q%3D75Y" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.appsmith.com%2F_next%2Fimage%3Furl%3Dhttps%253A%252F%252Fimages.ctfassets.net%252Flpvian6u6i39%252F5p9cVvsgYe6C6rCqEXsMMc%252F1c59a94f2fdf459862779e7cabf58046%252Fimage__17_.png%26w%3D3840%26q%3D75Y" alt="a screenshot of the OmniDB interface"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/OmniDB/OmniDB" rel="noopener noreferrer"&gt;OmniDB&lt;/a&gt; is a collaborative open-source database manager that’s available as a hosted version or as a stand-alone app. The application is built keeping simplicity in mind, making it one of the most user-friendly database managers.&lt;/p&gt;

&lt;p&gt;OmniDB supports multiple tabs, so you can connect to multiple databases in one session and write clean code. Its smart SQL editor offers code linting and auto-complete.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Use cases:&lt;/strong&gt; OmniDB is perfect for collaborating with a team or for remotely managing databases.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Support for multiple databases like MariaDB, MySQL, Oracle, PostgreSQL&lt;/li&gt;
&lt;li&gt;Support for SSH terminal&lt;/li&gt;
&lt;li&gt;Monitoring dashboard: it provides a graphical interface to monitor all your configured units using Python scripting and other configuration files&lt;/li&gt;
&lt;li&gt;Auto-complete&lt;/li&gt;
&lt;li&gt;Dark theme support&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;No support for NoSQL databases&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;HeidiSQL:&lt;/strong&gt; MySQL/MariaDB, Microsoft SQL Server, PostgreSQL, SQLite, InterBase, and Firebird
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.appsmith.com%2F_next%2Fimage%3Furl%3Dhttps%253A%252F%252Fimages.ctfassets.net%252Flpvian6u6i39%252F73u5gh0arMxvGyEo7qDPUw%252F7ea3e44a9262affcab6349d68e0f5623%252Fimage__18_.png%26w%3D3840%26q%3D75" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.appsmith.com%2F_next%2Fimage%3Furl%3Dhttps%253A%252F%252Fimages.ctfassets.net%252Flpvian6u6i39%252F73u5gh0arMxvGyEo7qDPUw%252F7ea3e44a9262affcab6349d68e0f5623%252Fimage__18_.png%26w%3D3840%26q%3D75" alt="A screenshot of the HeidiSQL interface"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.heidisql.com/" rel="noopener noreferrer"&gt;HeidiSQL&lt;/a&gt; is extremely user-friendly. It is also one of the most capable database managers and enables you to create tables, create logs, and manage users on MySQL, Microsoft SQL Server, PostgreSQL, and SQLite databases and other database technologies.&lt;/p&gt;

&lt;p&gt;You can export your data into formats like CSV, Excel, HTML, SQL, LaTeX, wikitext, and PHP arrays. You can also edit multiple tables together by using the bulk edit option. Additionally, it includes monitoring tools that let you kill processes that may have hung or are impacting your database servers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Use cases:&lt;/strong&gt; This is the best database manager for the Windows operating system and is popular with developers.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Supports multiple database technologies including SQLite&lt;/li&gt;
&lt;li&gt;Exports data in multiple formats&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;HeidiSQL's UI is minimal, which may not be to everyone's tastes&lt;/li&gt;
&lt;li&gt;No support for NoSQL databases&lt;/li&gt;
&lt;li&gt;Windows only&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Studio 3T:&lt;/strong&gt; MongoDB
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.appsmith.com%2F_next%2Fimage%3Furl%3Dhttps%253A%252F%252Fimages.ctfassets.net%252Flpvian6u6i39%252F3shsadU4QSgZE7usNW4p4M%252Fbc42508ddf793827676091fc2a602f30%252Fimage__19_.png%26w%3D3840%26q%3D75" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.appsmith.com%2F_next%2Fimage%3Furl%3Dhttps%253A%252F%252Fimages.ctfassets.net%252Flpvian6u6i39%252F3shsadU4QSgZE7usNW4p4M%252Fbc42508ddf793827676091fc2a602f30%252Fimage__19_.png%26w%3D3840%26q%3D75" alt="A screenshot showing the query features of Studio 3T"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://studio3t.com/" rel="noopener noreferrer"&gt;Studio 3T&lt;/a&gt;, formerly known as RoboMongo and Robo 3T, is an open-source GUI client for MongoDB. The application is available for Linux, Mac, and Windows.&lt;/p&gt;

&lt;p&gt;Studio 3T is one of the most popular projects on GitHub, which means there's an experienced community to help you out. Since it uses the default MongoDB shell, it is very light on resource usage, so running complex queries is less impactful on server performance.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Use cases:&lt;/strong&gt; Few database managers are dedicated to MongoDB, so choices are limited if you want something tailored to this database platform — this is the best of them.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Auto completion&lt;/li&gt;
&lt;li&gt;MongoDB shell&lt;/li&gt;
&lt;li&gt;One of the fastest database managers&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;The UI becomes cluttered sometimes&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Navicat:&lt;/strong&gt; MySQL/MariaDB, Redis, PostgreSQL, SQL Server, Oracle, SQLite, and MongoDB
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.appsmith.com%2F_next%2Fimage%3Furl%3Dhttps%253A%252F%252Fimages.ctfassets.net%252Flpvian6u6i39%252F7y87S3AJAnlyP9kzQbH4h2%252Fb0f3b71291334bf3c8f7999f7b770387%252Fimage__20_.png%26w%3D3840%26q%3D75" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.appsmith.com%2F_next%2Fimage%3Furl%3Dhttps%253A%252F%252Fimages.ctfassets.net%252Flpvian6u6i39%252F7y87S3AJAnlyP9kzQbH4h2%252Fb0f3b71291334bf3c8f7999f7b770387%252Fimage__20_.png%26w%3D3840%26q%3D75" alt="A screenshot of the Navicat website"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://navicat.com/" rel="noopener noreferrer"&gt;Navicat&lt;/a&gt; is another powerful database management and design application that supports multiple drivers and databases. It comes as a standalone application for Mac, Windows, and Linux and allows you to manage many different databases including MySQL, Redis, SQL Server, SQLite, Oracle and PostgreSQL.&lt;/p&gt;

&lt;p&gt;This application comes with a lot of extra functionality like exporting data to Excel, stored procedures, scheduling, and data transfer. One of the most interesting features is data transfer, as it allows you to transfer tables from one database to another even if they’re not on the same server.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Use cases:&lt;/strong&gt; Navicat is perfect for developers who work on different operating systems or with different database technologies and want a consistent set of tools.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Support for multiple databases and drivers&lt;/li&gt;
&lt;li&gt;Data transfer functionality&lt;/li&gt;
&lt;li&gt;Available on all platforms&lt;/li&gt;
&lt;li&gt;Redis support!&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;It’s not open source&lt;/strong&gt;, but it is incredibly popular and free licenses are available for open-source projects&lt;/li&gt;
&lt;li&gt;We’ve included it here because it’s one of the few database managers with Redis support and because we think it’s worth highlighting that it &lt;em&gt;isn’t&lt;/em&gt; open source, as it’s not always clear to readers evaluating their options&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;phpMyAdmin:&lt;/strong&gt; MySQL, MariaDB
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.appsmith.com%2F_next%2Fimage%3Furl%3Dhttps%253A%252F%252Fimages.ctfassets.net%252Flpvian6u6i39%252F7aZvx6DwWQVVmW6sGVteqf%252Fb638ecebcc31f0c4fb09359d5a7f48ff%252Fimage__21_.png%26w%3D3840%26q%3D75" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.appsmith.com%2F_next%2Fimage%3Furl%3Dhttps%253A%252F%252Fimages.ctfassets.net%252Flpvian6u6i39%252F7aZvx6DwWQVVmW6sGVteqf%252Fb638ecebcc31f0c4fb09359d5a7f48ff%252Fimage__21_.png%26w%3D3840%26q%3D75" alt="A screenshot of the phpMyAdmin interface"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.phpmyadmin.net/" rel="noopener noreferrer"&gt;phpMyAdmin&lt;/a&gt; is the stalwart of free open-source database managers. It’s been around forever, and it’s just plain good at what it does — providing a graphical interface for fully managing every aspect of MySQL databases. It’s built using PHP and runs in the browser.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Use cases:&lt;/strong&gt; phpMyAdmin is widely used by web hosting companies to provide interfaces to their managed databases and developers who want a simple tool for managing their MySQL/MariaDB databases.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Fully manage every aspect of MySQL from users and permissions to databases and tables&lt;/li&gt;
&lt;li&gt;Runs in a browser for remote management and remote query execution&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Can be annoying to set up, especially on a server serving multiple PHP applications with different requirements&lt;/li&gt;
&lt;li&gt;The interface is a bit utilitarian&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  What about the rest?
&lt;/h3&gt;

&lt;p&gt;This isn’t meant to be an exhaustive list. There are many other &lt;a href="https://en.wikipedia.org/wiki/Comparison_of_database_tools" rel="noopener noreferrer"&gt;database management software packages&lt;/a&gt; out there, including &lt;a href="https://www.mysql.com/products/workbench/" rel="noopener noreferrer"&gt;MySQL Workbench&lt;/a&gt;, &lt;a href="https://dbeaver.io/" rel="noopener noreferrer"&gt;DBeaver&lt;/a&gt;, and &lt;a href="https://www.pgadmin.org/" rel="noopener noreferrer"&gt;pgAdmin&lt;/a&gt;. We’ve chosen these database tools because they cover the most common database systems and use cases, but if you find they aren’t meeting your needs, be sure to explore further or consider building your own database user interface — it’s easier than you think.&lt;/p&gt;

&lt;h2&gt;
  
  
  Don’t put your data at risk: when you definitely should NOT use a database manager
&lt;/h2&gt;

&lt;p&gt;For most users, database managers are far more convenient than manually writing queries. However, they are designed for technical team members to maintain and interact with database systems, &lt;em&gt;not&lt;/em&gt; for end users to perform data entry:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Database managers require an understanding of how databases work under the hood&lt;/li&gt;
&lt;li&gt;They have no guardrails and limited data validation, which means they let you make mistakes&lt;/li&gt;
&lt;li&gt;They have general-purpose interfaces that are not optimized for specific tasks&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Granting users access to vital data using database managers can easily lead to them accidentally deleting or corrupting data, and if they don't notice they've done so, business can be interrupted and the whole database can be rendered valueless. Think about how easy it would be for a tired (or careless) user to do the following with a database manager:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Accidentally drop a table&lt;/li&gt;
&lt;li&gt;Accidentally delete a row ID and break relationships&lt;/li&gt;
&lt;li&gt;Access data they shouldn't see (risking a &lt;a href="https://gdpr-info.eu/" rel="noopener noreferrer"&gt;GDPR&lt;/a&gt; violation)&lt;/li&gt;
&lt;li&gt;Accidentally disclose their database credentials to a phishing attack&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Any one of these happening, just once, would be catastrophic to your business.&lt;/strong&gt; Manually managing each user's database permissions is not enough to protect against this, as if you're granting access to many users with different levels of access it's still far too easy to make a mistake. You should not be granting users direct database access for the purposes of managing your e-commerce system, CRM, or internal records, or for other common data management tasks.&lt;/p&gt;

&lt;p&gt;App platforms are the tool you use to build your own interfaces for your data. You can build interfaces that enable safe and fast data entry and, in many cases, add automation to further speed up your business processes.&lt;/p&gt;

&lt;h2&gt;
  
  
  App platforms let users interact with your vital data, without the risks
&lt;/h2&gt;

&lt;p&gt;Modern, data-driven businesses cannot risk having their data corrupted or lost due to simple operational mistakes. App platforms like &lt;a href="https://docs.appsmith.com/" rel="noopener noreferrer"&gt;Appsmith&lt;/a&gt; allow you to build fully bespoke interfaces to every database mentioned in this article, other platforms like Shopify, Airtable, Snowflake, and Google Sheets, as well as &lt;a href="https://docs.appsmith.com/connect-data/reference/rest-api" rel="noopener noreferrer"&gt;REST&lt;/a&gt; and &lt;a href="https://docs.appsmith.com/connect-data/reference/graphql" rel="noopener noreferrer"&gt;GraphQL&lt;/a&gt; APIs by using &lt;a href="https://www.appsmith.com/integration" rel="noopener noreferrer"&gt;integrations&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Appsmith solves the security and data reliability issues associated with database managers (whether they are free, open source, or proprietary) by:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Keeping database credentials secure — users authenticate with your app, not your database&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://owasp.org/Top10/A01_2021-Broken_Access_Control/" rel="noopener noreferrer"&gt;Enforcing access&lt;/a&gt; and showing your users only the data they should be allowed to see&lt;/li&gt;
&lt;li&gt;Optimizing workflows with interfaces tailored to a specific purpose with fields presented in a layout that makes sense to the user and buttons to automate common tasks&lt;/li&gt;
&lt;li&gt;Implementing data validation and user guardrails to help prevent accidents from damaging data&lt;/li&gt;
&lt;li&gt;Allowing you to present data from multiple sources in the same place, making for reliable transfer of data between systems&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can also build data &lt;a href="https://www.appsmith.com/blog/how-to-display-data-visually-from-a-database-in-under-5-minutes" rel="noopener noreferrer"&gt;visualizations and dashboards&lt;/a&gt; alongside your data entry interfaces, making Appsmith the perfect tool for handling all of the internal tools for your organization — a single app to integrate all of your business data and processes. All you need to do is connect your database — we even automate the process of building your first data entry forms for you.&lt;/p&gt;

&lt;p&gt;You can start building now on our &lt;a href="https://app.appsmith.com/user/signup" rel="noopener noreferrer"&gt;free, cloud-hosted version&lt;/a&gt;, or &lt;a href="https://docs.appsmith.com/getting-started/setup/installation-guides/docker" rel="noopener noreferrer"&gt;deploy Appsmith to your own infrastructure using Docker&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>database</category>
      <category>opensource</category>
    </item>
    <item>
      <title>15+ Best Customer Service Software Platforms for 2024 and How to Integrate Them</title>
      <dc:creator>Dessi</dc:creator>
      <pubDate>Mon, 18 Dec 2023 19:03:43 +0000</pubDate>
      <link>https://forem.com/appsmith/15-best-customer-service-software-platforms-for-2024-and-how-to-integrate-them-2d0b</link>
      <guid>https://forem.com/appsmith/15-best-customer-service-software-platforms-for-2024-and-how-to-integrate-them-2d0b</guid>
      <description>&lt;p&gt;The success of your business depends on the satisfaction of your customers, which is sustained by the quality of service you provide. You must be able to support your customers across a growing variety of interactions — from sales channels, to email and helpdesk, realtime chat, and messaging, as well as in person. One customer service tool is often not enough to cover all of the touch points for an enterprise and its patrons.&lt;/p&gt;

&lt;p&gt;This article explains the most important enterprise use cases for customer support platforms and lists the best customer service software tools available for 2024. It includes contact center, helpdesk, project management, and chatbot tools that your customer service staff can use to enhance your customer experience, and it shows how you can best leverage these tools to provide a single customer view so that all of your customer data is readily available in one place.&lt;/p&gt;

&lt;h2&gt;
  
  
  Reviewing the top customer service software platforms used by successful support teams
&lt;/h2&gt;

&lt;p&gt;Your customers need to be able to contact your business and receive a timely response. They may wish to ask a question about your product before making a purchase, follow up on an order, or solve a problem with a previous purchase. Addressing customers’ issues quickly and accurately is paramount if you want their continued business and to maintain the good reputation of your company.&lt;/p&gt;

&lt;p&gt;Doing this manually is a non-starter. Even in the pre-digital age, there was always a system in place to streamline managing customer interactions: &lt;a href="https://en.wikipedia.org/wiki/Rolodex"&gt;rolodexes&lt;/a&gt;, printed invoice and customer feedback templates, &lt;a href="https://en.wikipedia.org/wiki/Carbon_copy"&gt;carbon copies&lt;/a&gt;, &lt;a href="https://en.wikipedia.org/wiki/Tickler_file"&gt;tickler files&lt;/a&gt;, etc. Fax, telephone, and pen-and-paper mechanisms were always being iterated on and improved, just like their digital successors.&lt;/p&gt;

&lt;p&gt;Below we review the best customer service software for a variety of enterprise use cases and look at what they can do to improve your customer support experience.&lt;/p&gt;

&lt;h2&gt;
  
  
  Contact center software comparison
&lt;/h2&gt;

&lt;p&gt;Contact center software centralizes your communications with your customers. This category of support tool provides features including &lt;strong&gt;multichannel communication&lt;/strong&gt; that lets you consolidate your interactions across voice/phone, email, chat, and social media into one location, &lt;strong&gt;call and chat routing&lt;/strong&gt; so your agents receive enquiries based on their availability and specialty, and &lt;strong&gt;communication logging&lt;/strong&gt; so you can inspect ****interactions and continually improve your processes.&lt;/p&gt;

&lt;p&gt;Ideally, contact center software will also provide or integrate with &lt;strong&gt;customer relationship management (CRM)&lt;/strong&gt; software for storing logs, maintaining customer details, and scheduling follow-ups. Increasingly, contact center platforms are also including &lt;strong&gt;AI assistants&lt;/strong&gt; that can respond to customers looking for basic information, allowing your support team to focus on the customers who need the most help.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--q5bsNHE_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.appsmith.com/_next/image%3Furl%3Dhttps%253A%252F%252Fimages.ctfassets.net%252Flpvian6u6i39%252F5KSo5YWHdSphh4PCQGW5Dh%252F75ec08cbb50faff6fbc495d9f19deac3%252Fimage__23_.png%26w%3D3840%26q%3D75" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--q5bsNHE_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.appsmith.com/_next/image%3Furl%3Dhttps%253A%252F%252Fimages.ctfassets.net%252Flpvian6u6i39%252F5KSo5YWHdSphh4PCQGW5Dh%252F75ec08cbb50faff6fbc495d9f19deac3%252Fimage__23_.png%26w%3D3840%26q%3D75" alt="contact center comparison" width="800" height="120"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Contact center software&lt;/th&gt;
&lt;th&gt;Pricing from&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.talkdesk.com/"&gt;Talkdesk&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;$75 per user per month&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.intercom.com/"&gt;Intercom&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;$39 per user per month, 14-day free trial&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.genesys.com/"&gt;Genesys&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;$75 per month, 14-day free trial&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.five9.com/"&gt;Five9&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;$149 per month&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Top Talkdesk features
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Advanced routing: &lt;a href="https://www.talkdesk.com/cloud-contact-center/omnichannel-engagement/orchestration-routing/"&gt;Automate call distribution&lt;/a&gt; and add interactive voice prompts to improve efficiency&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Integration with business and customer support tools:&lt;/strong&gt; Connect with Zendesk, Salesforce, and other popular support tools&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Monitoring and reporting:&lt;/strong&gt; Monitor calls in real time and view analytics&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Top Intercom features
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Helpdesk:&lt;/strong&gt; Provide your customers with a combined contact center, helpdesk, and knowledge base&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI chatbot:&lt;/strong&gt; AI support agents can help your customers by learning from your support content&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Proactive support:&lt;/strong&gt; &lt;a href="https://www.intercom.com/customer-support-software/proactive-support"&gt;Pre-empt common customer questions&lt;/a&gt; with automated messages and onboarding to reduce agent workloads&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Top Genesys features
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Skills-based intelligent routing:&lt;/strong&gt; Automatically categorize and route support queries to the agents with the most appropriate skills to resolve them&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI automation:&lt;/strong&gt; Provides AI-driven tools including chatbots, predictive engagement, and &lt;a href="https://www.genesys.com/en-sg/definitions/what-is-a-voicebot"&gt;voicebots&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Customer journey management:&lt;/strong&gt; &lt;a href="https://www.genesys.com/en-gb/capabilities/customer-journey-management"&gt;Track your customers through the support process&lt;/a&gt; and collect analytics to ensure success&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Top Five9 features
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Agent call scripts:&lt;/strong&gt; Ensure consistent messaging with &lt;a href="https://www.five9.com/products/features/agent-scripting"&gt;scripts tailored to each call&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Do not call (DNC) compliance:&lt;/strong&gt; Comply with regulations for your inbound and outbound communications&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Call quality monitoring:&lt;/strong&gt; Monitor and guide your agents during calls to make sure your customers are getting the best possible experience&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Ticketing and helpdesk support tools comparison
&lt;/h2&gt;

&lt;p&gt;Ticketing and helpdesk software receives, stores, and organizes incoming service requests (referred to individually as &lt;em&gt;tickets&lt;/em&gt;) and allows support teams to respond through a variety of communication channels. Customer support platforms in the helpdesk category should provide functions for &lt;strong&gt;ticket management&lt;/strong&gt; so agents can see the status of enquiries and make sure everything is taken care of, &lt;strong&gt;workflow automation&lt;/strong&gt; to reduce the number of repetitive tasks, and &lt;strong&gt;reporting and analytics&lt;/strong&gt; so that you can measure the time it takes to respond and whether there are issues that are going unresolved.&lt;/p&gt;

&lt;p&gt;Many ticketing and helpdesk platforms are also expanding to provide &lt;strong&gt;knowledge base and self-service portals&lt;/strong&gt;. These allow you to publish documentation, so that customers who want to seek their own answers are able to, and publish responses to enquiries so that they are publicly visible to others who have the same question. Both of these tools can drastically reduce load on your support staff if implemented properly.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--SJfxZNJP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.appsmith.com/_next/image%3Furl%3Dhttps%253A%252F%252Fimages.ctfassets.net%252Flpvian6u6i39%252F6jnbBYz4v27vTbEtZ1hujw%252F1d889ce3f1196be6f059a2e65f1b3b19%252Fimage__24_.png%26w%3D3840%26q%3D75" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--SJfxZNJP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.appsmith.com/_next/image%3Furl%3Dhttps%253A%252F%252Fimages.ctfassets.net%252Flpvian6u6i39%252F6jnbBYz4v27vTbEtZ1hujw%252F1d889ce3f1196be6f059a2e65f1b3b19%252Fimage__24_.png%26w%3D3840%26q%3D75" alt="Ticketing and helpdesk support tools" width="800" height="120"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Ticketing/helpdesk software&lt;/th&gt;
&lt;th&gt;Pricing from&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.zendesk.com/"&gt;Zendesk&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;$19 per agent per month, 14-day free trial&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.freshworks.com/freshdesk/"&gt;Freshworks&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;$18 per agent per month, 21-day free trial&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.atlassian.com/software/jira/service-management"&gt;Jira Service Management&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;$21 per agent per month, 7-day free trial&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.hubspot.com/products/service?hubs_content=www.hubspot.com%2F&amp;amp;hubs_content-cta=nav-software-service"&gt;HubSpot Service Hub&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;$450 for up to 5 agents per month, 14-day free trial&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.zoho.com/desk/"&gt;Zoho Desk&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;$20 per agent per month, 15-day free trial&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Top Zendesk features
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Messaging and live chat:&lt;/strong&gt; Allow your customers and support team to &lt;a href="https://www.zendesk.com/service/messaging"&gt;chat in real time&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Voice:&lt;/strong&gt; Offer your customers phone support via internet or telephone&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Community forums:&lt;/strong&gt; Facilitate self-service and allow your customers to help each other&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Top Freshdesk features
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Ticket automation:&lt;/strong&gt; Automatically assign tasks based on agent skills and workload, and use &lt;a href="https://support.freshdesk.com/en/support/solutions/articles/37616-creating-scenarios"&gt;scenarios&lt;/a&gt; to perform multiple actions with a single click&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Customer self-service:&lt;/strong&gt; Provide a knowledge base and self-service portal to customers who want to seek their own answers independently&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Customization:&lt;/strong&gt; Build fully customized, cloud-hosted customer portals tailored to your brand and requirements&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Top Jira Service Management features
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;IT service management (ITSM) capabilities:&lt;/strong&gt; Tailored to IT service management, connecting IT, development, and business teams to &lt;a href="https://www.atlassian.com/software/jira/service-management/technology-telecommunications"&gt;aid collaboration&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;DevOps integration:&lt;/strong&gt; &lt;a href="https://developer.atlassian.com/cloud/jira/service-desk/rest/intro/#about"&gt;Integrate&lt;/a&gt; with development workflows for rapid issue resolution&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Templates:&lt;/strong&gt; Get started quickly with pre-built templates for request types, workflows, and other components for a complete service experience&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Top HubSpot features
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;CRM:&lt;/strong&gt; Integrate customer data from marketing, sales, customer service, and other sources all into one dashboard&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Website builder:&lt;/strong&gt; Quickly create simple business pages with a drag-and-drop website builder&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Meeting scheduling:&lt;/strong&gt; Add links to a &lt;a href="https://www.hubspot.com/products/sales/schedule-meeting"&gt;meeting scheduler&lt;/a&gt; on your emails and websites that syncs to your calendar&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Top Zoho Desk features
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Service-level agreements (SLAs):&lt;/strong&gt; Define your &lt;a href="https://www.zoho.com/desk/escalations.html"&gt;commitment to your customers&lt;/a&gt; and set different response times for different criteria&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sentiment analysis:&lt;/strong&gt; AI scans support threads to determine whether customers are satisfied (or not), allowing you to far more efficiently track customer success&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Advanced response editor:&lt;/strong&gt; Respond quickly to your customers using pre-written snippets and keyboard shortcuts&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Project management platform comparison
&lt;/h2&gt;

&lt;p&gt;Project management platforms are used internally to plan and track the implementation of projects — for example, to track training, process optimization, or knowledge base development. Project management tools should provide &lt;strong&gt;task and subtask tracking&lt;/strong&gt;, &lt;strong&gt;organization and categorization&lt;/strong&gt;, &lt;strong&gt;scheduling&lt;/strong&gt;, and &lt;strong&gt;resource management&lt;/strong&gt; so that your team can keep all of the information related to a project in one place. They should facilitate collaboration and, like the other tools, provide &lt;strong&gt;analytics and reporting&lt;/strong&gt; so that you can make sure your team is hitting the right KPIs.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Vlz9Ukk0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.appsmith.com/_next/image%3Furl%3Dhttps%253A%252F%252Fimages.ctfassets.net%252Flpvian6u6i39%252F60nb5xS7nWIwWEA4M7zf35%252F32c77eb76c5b6c081ff613e7751a062a%252Fimage__25_.png%26w%3D3840%26q%3D75" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Vlz9Ukk0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.appsmith.com/_next/image%3Furl%3Dhttps%253A%252F%252Fimages.ctfassets.net%252Flpvian6u6i39%252F60nb5xS7nWIwWEA4M7zf35%252F32c77eb76c5b6c081ff613e7751a062a%252Fimage__25_.png%26w%3D3840%26q%3D75" alt="project management platform comparison" width="800" height="120"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Project management platform&lt;/th&gt;
&lt;th&gt;Pricing from&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.asana.com/"&gt;Asana&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Free&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://trello.com/"&gt;Trello&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Free&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://monday.com/work-management"&gt;Monday.com&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Free&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://basecamp.com/"&gt;Basecamp&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;$15 per user per month, 30-day free trial&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Top Asana features
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Project views:&lt;/strong&gt; &lt;a href="https://asana.com/features/project-management/project-views"&gt;Organize your work&lt;/a&gt; by list, calendar/timeline, Gantt chart, or Kanban board&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Custom fields:&lt;/strong&gt; Sort, filter, and report on custom data entry fields&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;API integrations:&lt;/strong&gt; Connect other platforms to Asana to interact with data in it&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Top Trello features
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Butler automation:&lt;/strong&gt; &lt;a href="https://trello.com/butler-automation"&gt;Automate&lt;/a&gt; tasks and workflows&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Power-ups:&lt;/strong&gt; Connect Trello to other services like Google Sheets, Microsoft Teams, Slack, and more&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Templates:&lt;/strong&gt; Start with a blueprint based on the successful workflows of others&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Top Monday.com features
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Modular building blocks:&lt;/strong&gt; No/low-code &lt;a href="https://monday.com/appdeveloper/components"&gt;components for easy customization&lt;/a&gt; of your project management system&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Powerful automation:&lt;/strong&gt; Flexible automation options to improve productivity&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Widgets:&lt;/strong&gt; User interface components that make project status more visible, including tables, overviews, and board updates&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Top Basecamp features
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Card table:&lt;/strong&gt; A unique variation on the Kanban board that is ideal for tracking workflows and monitoring task progression&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://basecamp.com/hill-charts"&gt;Hill charts&lt;/a&gt;:&lt;/strong&gt; An unambiguous representation of project status that avoids unclear percentage-based measures&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lineup:&lt;/strong&gt; Shows all project statuses on a single timeline for an overview of all work in progress&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Chatbot and conversational AI software comparison
&lt;/h2&gt;

&lt;p&gt;Chatbots have been around for a while and had a poor reputation for providing canned responses that weren’t always helpful. This has changed with the arrival of conversational AI platforms that respond in natural language.&lt;/p&gt;

&lt;p&gt;Traditional chatbots can &lt;strong&gt;follow predefined rules and scripts&lt;/strong&gt; to respond to enquiries, allowing them to guide users and provide broad information. Conversational AI does much more than this, &lt;strong&gt;intelligently interpreting&lt;/strong&gt; your customers’ questions using natural language processing (NLP), &lt;strong&gt;pulling information from your own documentation&lt;/strong&gt; to construct the right answer, and implementing machine learning (ML) so that it can &lt;strong&gt;evolve its responses based on new information&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Chatbots and conversational AI let you scale your customer support processes. Often they can handle a large proportion of incoming enquiries, allowing your agents to focus on the most important, high-value customers and tasks.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--IWVkkngl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.appsmith.com/_next/image%3Furl%3Dhttps%253A%252F%252Fimages.ctfassets.net%252Flpvian6u6i39%252F5MWnFls1684iP1qUXdxb9W%252F59397ff3691efdd895d3b27c4519c239%252Fimage__26_.png%26w%3D3840%26q%3D75" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--IWVkkngl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.appsmith.com/_next/image%3Furl%3Dhttps%253A%252F%252Fimages.ctfassets.net%252Flpvian6u6i39%252F5MWnFls1684iP1qUXdxb9W%252F59397ff3691efdd895d3b27c4519c239%252Fimage__26_.png%26w%3D3840%26q%3D75" alt="Chatfuel, Manychat, Tars, and Botsify chatbot software comparison" width="800" height="120"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Chatbot software&lt;/th&gt;
&lt;th&gt;Pricing from&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://chatfuel.com/"&gt;Chatfuel&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;$14.39 for 500 conversations, free trial for first bot&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://manychat.com/"&gt;Manychat&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Free&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://hellotars.com/"&gt;Tars&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Price on enquiry&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://botsify.com/"&gt;Botsify&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;$49 for 2 chatbots, 14-day free trial&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Top Chatfuel features
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Multi-agent responses:&lt;/strong&gt; Multiple AI agent bots can work via a single WhatsApp number, improving response times&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Abandoned cart recovery:&lt;/strong&gt; Send personalized messages to customers to encourage them to &lt;a href="https://chatfuel.com/blog/7-chatbot-plugins-to-solve-common-ecommerce-store-problems"&gt;complete abandoned purchases&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ChatGPT integration:&lt;/strong&gt; Sell products directly on WhatsApp using ChatGPT bots that can understand customers and complete transactions&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Top Manychat features
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Instagram, Facebook, WhatsApp and SMS automation:&lt;/strong&gt; Cross-platform chatbot that can automatically respond to customer queries&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI assistant:&lt;/strong&gt; Use AI to help build your automations&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Templates:&lt;/strong&gt; Ready-to-go &lt;a href="https://manychat.com/blog/new-manychat-templates-for-chatbots/"&gt;conversation templates&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Top Tars features
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Internal business use cases:&lt;/strong&gt; &lt;a href="https://hellotars.com/chatbot-templates"&gt;Provide self-service HR, payroll, and other administrative functions&lt;/a&gt; to your staff&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Automation consulting:&lt;/strong&gt; Tars will work with you to design solutions that optimize your workflows&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Enterprise-grade security:&lt;/strong&gt; Tars implements security best practices including zero trust and the principle of least privilege, and is compliant with regulations such as SOC 2, HIPAA, and GDPR&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Top Botsify features
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Drag-and-drop chatbot builder:&lt;/strong&gt; Botsify allows anyone to &lt;a href="https://botsify.com/blog/chatbot-builder/"&gt;easily program&lt;/a&gt; a chatbot&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Third-party integrations:&lt;/strong&gt; Connect to Slack, Shopify, Google Sheets, and other services&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Agent fallback:&lt;/strong&gt; Let a human take over if the chatbot fails to resolve the issue or a personal touch is required&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Factors to evaluate when choosing a customer support tool
&lt;/h2&gt;

&lt;p&gt;These platforms are often specialized, so one tool is unlikely to do everything you need it to. Therefore, you need to consider the possible side effects of adopting a new tool into your larger workflows. If the tool works well, you will come to rely on it in the long term, moving your data into it and building your processes around it. You must look at the history and reputation of the vendor and make sure that they provide a path to moving your data out of their service — otherwise it will be difficult to migrate to another tool in the future if the quality suffers, the price rises, or its functionality falls behind its competitors.&lt;/p&gt;

&lt;p&gt;If your workflows are highly bespoke and rely on custom implementation, take care to avoid &lt;a href="https://en.wikipedia.org/wiki/Technical_debt"&gt;technical debt&lt;/a&gt;. Relying on workarounds and quick fixes to keep your customer support infrastructure up and running could result in costly ongoing maintenance (or an abrupt halt to your customer service if things fall apart).&lt;/p&gt;

&lt;p&gt;You must also think about your future needs: there may be something that a tool doesn't do that you don't need now, but if you’ll need it as your business grows, you should include it in your initial requirements.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pros and cons of traditional software for enterprise use cases
&lt;/h2&gt;

&lt;p&gt;Some commercial software tools claim to be able to cover all of your customer support needs, but using a single tool comes with some risks. You lose choice and flexibility, you’re locked into &lt;em&gt;their&lt;/em&gt; way of doing things, and all of your eggs are in one basket — if the platform experiences a problem, your entire customer support process is dead in the water.&lt;/p&gt;

&lt;p&gt;Enterprises are increasingly eschewing the traditional approach of using a single commercial application to host their data and power their businesses. Instead, the trend is towards using multiple software tools and platforms: a combination of in-house software and best-in-class products to fill the specific role they are best suited for. This creates an ecosystem of business tools tailored to how &lt;em&gt;you&lt;/em&gt; do things, fitting with the best practices that work for your industry, employees, and customers.&lt;/p&gt;

&lt;p&gt;However, integrating multiple customer service tools into one location is much easier said than done. Fortunately, there are tools to help with this.&lt;/p&gt;

&lt;h2&gt;
  
  
  The best way to connect multiple customer support platforms for a single customer view
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--yZxKZOy2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.appsmith.com/_next/image%3Furl%3Dhttps%253A%252F%252Fimages.ctfassets.net%252Flpvian6u6i39%252F4nmtxYhD40tL03BvUNPQCs%252F6723d60fcb6254a72749aab1ab8daf87%252Fimage__27_.png%26w%3D3840%26q%3D75" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--yZxKZOy2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.appsmith.com/_next/image%3Furl%3Dhttps%253A%252F%252Fimages.ctfassets.net%252Flpvian6u6i39%252F4nmtxYhD40tL03BvUNPQCs%252F6723d60fcb6254a72749aab1ab8daf87%252Fimage__27_.png%26w%3D3840%26q%3D75" alt="Unifying customer service tools and platforms with Appsmith" width="800" height="375"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.appsmith.com/"&gt;Appsmith&lt;/a&gt; is a low-code application platform that lets you quickly and easily build your own customer support applications. It provides a click-and-drag interface for placing UI widgets like buttons, tables, and form inputs, and connects to a &lt;a href="https://www.appsmith.com/integration"&gt;wide range of data sources&lt;/a&gt; including popular customer support platforms. By using Appsmith you can choose the customer support tools that work best for you and unify the data they collect into a single customer support interface.&lt;/p&gt;

&lt;p&gt;Applications built with Appsmith can connect to data from your sales, support, helpdesk, and project management software. When a customer request comes in, your customer support team members can find the customer and immediately see all of their interactions with your business across different channels and platforms, as well as the internal status of their enquiry including internal notes. Your agents can then assess, prioritize, and rapidly respond to customer enquiries with up-to-date information.&lt;/p&gt;

&lt;p&gt;If there is functionality that you require that isn't provided by a commercial tool, you can implement it yourself. You can use templates to accelerate the early stages of development, and test your Appsmith apps before deployment to ensure reliability.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://app.appsmith.com/user/signup"&gt;Appsmith is free&lt;/a&gt; and open source with no limitations (you can even &lt;a href="https://docs.appsmith.com/getting-started/setup"&gt;host it yourself&lt;/a&gt;). For mission-critical applications you can sign up to our Business or Enterprise plans for &lt;a href="https://www.appsmith.com/pricing"&gt;additional functionality and support&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to unify and enhance your customer service channels with Appsmith
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.appsmith.com/customers"&gt;Companies&lt;/a&gt; including AWS, Dropbox, and ByteDance are building their own custom apps with Appsmith. Both small and large businesses are benefiting from being able to integrate their data from the best customer service software and &lt;a href="https://www.appsmith.com/case-study/edia"&gt;accelerate their customer support&lt;/a&gt; with automation and streamlined interfaces.&lt;/p&gt;

&lt;p&gt;One popular use case we’ve been assisting our enterprise users with is combining Zendesk and Jira to connect external and internal support tools. This allows support teams to quickly match incoming customer enquiries with actions being taken by their technical teams and provide status updates and problem resolutions with a much shorter turnaround than using the Zendesk and Jira platforms separately.&lt;/p&gt;

&lt;p&gt;If you want to see how Appsmith works in action, we've put together &lt;a href="https://www.youtube.com/live/GnpIcqI9Ei8?feature=shared"&gt;a live coding session&lt;/a&gt; that shows how you can put together your own customer support solution in hours, not weeks.&lt;/p&gt;

</description>
      <category>support</category>
      <category>customersupport</category>
      <category>appsmith</category>
    </item>
    <item>
      <title>Getting Started As a Low-Code Freelancer: 5 Tips to Kickstart Your Career in 2024</title>
      <dc:creator>Joseph Petty</dc:creator>
      <pubDate>Sat, 16 Dec 2023 15:25:21 +0000</pubDate>
      <link>https://forem.com/appsmith/getting-started-as-a-low-code-freelancer-5-tips-to-kickstart-your-career-in-2024-2k1f</link>
      <guid>https://forem.com/appsmith/getting-started-as-a-low-code-freelancer-5-tips-to-kickstart-your-career-in-2024-2k1f</guid>
      <description>&lt;p&gt;With tons of new no-code/low-code platforms, a wide range of new AI tools, and massive changes in freelancing sites, 2023 has led to significant changes in the freelancer landscape. Freelancing in 2024 will be completely different game, which will come with new challenges, and even more new tools to learn to help solve them. &lt;/p&gt;

&lt;p&gt;To be successful in this market as a freelancer, you must adapt and learn to take advantage of change instead of be disrupted by it. But despite all the change, there are some tried and true freelancing techniques that still apply. After working full-time as a freelancer in the no-code/low-code space for almost a decade, and mentoring several other freelancers along the way, I've seen what works and what doesn't, what used to work, and what has changed. Below are my top 5 tips for freelancing in this new landscape. &lt;/p&gt;

&lt;h2&gt;
  
  
  Tip #1 - Create Your Own Niche
&lt;/h2&gt;

&lt;p&gt;Combine a personal skill, hobby or other area of expertise with a specific platform or language. You might not be the best freelancer available for a certain platform, but when combined with that extra skill or hobby, you could quickly become one of the top choices for clients who want that specialty. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Examples&lt;/strong&gt;: Healthcare + Bubble.io, Finance + Airtable, ecommerce APIs + Appsmith, Construction/Manufacturing + AppSheet, etc&lt;/p&gt;

&lt;p&gt;This creates a combo of search terms with much fewer results, allowing your profile and content to rise to the top when you specialize in both. It will also help close the deal when the client knows you understand the platform AND the processes and data structure specific to their use case. &lt;/p&gt;

&lt;h2&gt;
  
  
  Tip #2 - Learn in Public
&lt;/h2&gt;

&lt;p&gt;Document and share your learning journey. Now that you've learned &lt;em&gt;How to do X in Y Platform&lt;/em&gt;, go write a post on their community forums! This is something I have done from the very beginning of my freelancer career. I figured, why not make my notes public and save others the trouble I went through to learn it. &lt;/p&gt;

&lt;p&gt;Also be sure to fill out your profile on these forums, and add links to your blog and freelancer profiles. Get involved in the community, answer questions, comment on other posts, etc. If you want to be successful with a particular tool, it really helps to be tuned in to their community. It also helps you keep up with new feature releases and any technical issues you should be aware of. &lt;/p&gt;

&lt;p&gt;And lastly, this all goes back to adding credibility to your work in this particular platform, and will help you generate leads and close more deals. I've often had leads contact me based on forum posts I wrote. Your previous posts can also be used as example work when applying to jobs. &lt;/p&gt;

&lt;h2&gt;
  
  
  Tip #3 - Create a Highly Specific Blog
&lt;/h2&gt;

&lt;p&gt;Now that you have that niche chosen and forum profile setup, it's time to start working on your own blog. There's no need to build your own site from scratch, but if that's your niche, then by all means, go for it! For &lt;a href="https://blog.greenflux.us/"&gt;mine&lt;/a&gt;, I just used Hashnode, because I'm not a frontend dev, and not trying to land frontend work. &lt;/p&gt;

&lt;p&gt;Whatever you use, don't worry so much about page views or distributing the posts on social. Try to think of the blog as more of a credential to show to existing leads to help close a deal, as opposed to it being a way to generate new leads. &lt;/p&gt;

&lt;p&gt;For me, once I had a decent library of posts built up, I started using them in proposals as a way to show a specific example of my work that was related to the job. At that point, I barely had to write more than a quick intro and closing, then drop in a link to the most relevant blog post. This worked wonders for me on UpWork proposals.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tip #4 - Build a Personal, or Company Brand
&lt;/h2&gt;

&lt;p&gt;Ok, you're blog is set up and you're active on related forums to start getting your name out there. Now it's time to start developing your brand. This can be as simple as using your own name and headshot, or it could mean picking a business name, domain, logo, etc. Either way, make your content easy to recognize across various forums, freelancer profiles, blogs, social, etc, by standardizing on the profile pic, name bio, etc. &lt;/p&gt;

&lt;p&gt;Next, cross-link all of those profiles! Make sure every one has a link back to your blog and freelancer profiles. &lt;/p&gt;

&lt;h2&gt;
  
  
  Tip #5 - Partner Programs &amp;amp; Vendor Listings
&lt;/h2&gt;

&lt;p&gt;Getting listed as a partner or vendor is another great way to generate leads. And it looks good on your profile, and will instill confidence in your prospective clients. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Partner/Affiliate Programs&lt;/strong&gt;: Lots of platforms have partner programs where you can apply to be listed as a service provider from their community. Some are as easy as filling out a form, while others have interviews or exams involved. See what's available for the platforms and services you plan to use, and apply to be a partner or affiliate.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Vendor Listings&lt;/strong&gt;: Government and educational institutions tend to have systems where contractors can apply to be listed as a vendor. See if you can get listed for your local university, or county or city municipality. Even if you never bid on a job, being listed as a vendor is both free advertising, and a credential you can show off. &lt;/p&gt;

&lt;h2&gt;
  
  
  Thoughts on Freelancer Sites for 2024
&lt;/h2&gt;

&lt;p&gt;UpWork and Fiverr have changed a LOT over the last few years, and even more so with the release of ChatGPT. Between the spam and scams on both sides of the job posts, and all the fees involved, these platforms aren't nearly as useful as they once were. However, I still encourage you to create a profile, upload a portfolio, and link to your profiles on your blog and socials. More web presence is better, and it's good to have the profile set up ahead of time in case you find a client who prefers to use it for payment. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Try, but Don't Buy&lt;/strong&gt;: Although I wouldn't recommend putting much effort (or money!) into applying to jobs on freelancer sites in 2024, you still need contracts and payment processing. &lt;/p&gt;

&lt;p&gt;Instead of applying to jobs, focus on building your web presence and establish yourself as an expert in your chosen niche. Then, bring your leads to a freelancer site to manage the contract, payment, and to collect a review. There's still value in those services, so don't write these freelancer sites completely off, just yet. &lt;/p&gt;

&lt;h2&gt;
  
  
  2024, and Beyond!
&lt;/h2&gt;

&lt;p&gt;Freelancing has been an amazing journey for me, and I encourage everyone else who is interested to give it a try. Whether you're already freelancing and looking for ways to expand, or just getting ready to take the first step, I wish you all the best of luck in 2024 and beyond! Feel free to reach out with any questions or comment below to share your freelancer story. &lt;/p&gt;

</description>
      <category>freelance</category>
      <category>nocode</category>
      <category>lowcode</category>
      <category>developer</category>
    </item>
  </channel>
</rss>
