<?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: Chilarai</title>
    <description>The latest articles on Forem by Chilarai (@chilarai).</description>
    <link>https://forem.com/chilarai</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%2Fuser%2Fprofile_image%2F432566%2F2432d638-1915-495f-a826-ee907f58d25d.jpeg</url>
      <title>Forem: Chilarai</title>
      <link>https://forem.com/chilarai</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/chilarai"/>
    <language>en</language>
    <item>
      <title>AI can write code. But it still breaks APIs. We built a CLI to fix that!</title>
      <dc:creator>Chilarai</dc:creator>
      <pubDate>Mon, 23 Mar 2026 07:09:13 +0000</pubDate>
      <link>https://forem.com/chilarai/ai-can-write-code-but-it-still-breaks-apis-we-built-a-cli-to-fix-that-ba</link>
      <guid>https://forem.com/chilarai/ai-can-write-code-but-it-still-breaks-apis-we-built-a-cli-to-fix-that-ba</guid>
      <description>&lt;p&gt;AI can write your code faster than ever.&lt;/p&gt;

&lt;p&gt;However, when you ask it to integrate Stripe, Slack, or Google, it becomes unreliable. Auth breaks. Requests fail silently. Rate limits surprise you at 2 AM. Edge cases you never thought of appear in production.&lt;/p&gt;

&lt;p&gt;This isn't an AI problem. It's an execution problem.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Real Trouble With API Integrations
&lt;/h2&gt;

&lt;p&gt;Every developer has been here: you find the endpoint, wire it up, and ship it, then spend the next week firefighting.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;OAuth tokens expiring mid-session&lt;/li&gt;
&lt;li&gt;Retries that hammer the API and trigger rate limits&lt;/li&gt;
&lt;li&gt;Silent failures with no structured error to catch&lt;/li&gt;
&lt;li&gt;A library upgrade that quietly changes a parameter name&lt;/li&gt;
&lt;li&gt;Duplicate sends because retries weren't idempotent&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The standard answer? Write more glue code. Handle it yourself.&lt;/p&gt;

&lt;p&gt;And now, with AI agents writing our code? The glue code looks more polished, but it still breaks the same ways, just faster.&lt;/p&gt;

&lt;p&gt;The root issue is that &lt;strong&gt;integrations are not just code; they're execution&lt;/strong&gt;. And execution needs to be treated as a first-class concern.&lt;/p&gt;




&lt;h2&gt;
  
  
  Introducing Swytchcode CLI
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://cli.swytchcode.com/" rel="noopener noreferrer"&gt;Swytchcode CLI&lt;/a&gt; is an &lt;strong&gt;execution layer for API integrations&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Instead of writing custom integration logic every time, the CLI gives you a controlled, deterministic way to call APIs with retries, auth, error handling, and version-awareness built in.&lt;/p&gt;

&lt;p&gt;Think of it as separating two things that we've always conflated:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Intent&lt;/strong&gt;: what you want to do (&lt;code&gt;send a welcome email&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Execution&lt;/strong&gt;: how it actually happens (auth, retry, response mapping, error codes)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The CLI owns execution. You (or your AI agent) just declare intent.&lt;/p&gt;




&lt;h2&gt;
  
  
  See It in Action
&lt;/h2&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/t9JINspQDpA"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;




&lt;h2&gt;
  
  
  Getting Started as a Developer
&lt;/h2&gt;

&lt;p&gt;Installing is straightforward:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# mac/Linux&lt;/span&gt;
curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://cli.swytchcode.com/install.sh | sh

&lt;span class="c"&gt;# windows&lt;/span&gt;
irm https://cli.swytchcode.com/install.ps1 | iex
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now let's walk through integrating Resend (transactional email) from scratch.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1: Initialize your node.js project
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;swytchcode init
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This creates a &lt;code&gt;.swytchcode/tooling.json&lt;/code&gt; in your project, the file that defines your execution policies, trusted tools, and integration versions. Think of it like a &lt;code&gt;tsconfig.json&lt;/code&gt;, but for integration behavior.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 2: Pull the integration spec
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;swytchcode get resend
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This fetches the Resend integration bundle that contains available methods, full parameter schemas, and endpoint definitions. No more reading through docs to figure out which fields are required or what the exact endpoint path is.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 3: Declare what you want to do
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;swytchcode add emails.email.create
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This adds &lt;code&gt;emails.email.create&lt;/code&gt; to your &lt;code&gt;tooling.json&lt;/code&gt; with its full input schema like &lt;code&gt;from&lt;/code&gt;, &lt;code&gt;to&lt;/code&gt;, &lt;code&gt;subject&lt;/code&gt;, optional &lt;code&gt;html&lt;/code&gt;, &lt;code&gt;attachments&lt;/code&gt;, idempotency key, and all. The CLI knows how to wire it safely.&lt;/p&gt;

&lt;p&gt;Not sure which canonical ID to use? &lt;code&gt;swytchcode list&lt;/code&gt; shows everything available from your fetched integrations.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 4: Execute
&lt;/h3&gt;

&lt;p&gt;For Node.js apps, &lt;code&gt;swytchcode-runtime&lt;/code&gt; is a thin wrapper that calls &lt;code&gt;swytchcode exec&lt;/code&gt; for you, and no shell scripting is required. Install it alongside your app:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install &lt;/span&gt;swytchcode-runtime dotenv
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then call it directly in your code. Credentials are passed per call, never stored in your config files:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;dotenv&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;config&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;exec&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;swytchcode-runtime&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;exec&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;emails.email.create&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// `body` maps to the HTTP request body as defined by the integration spec&lt;/span&gt;
  &lt;span class="na"&gt;body&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;from&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;you@yourdomain.com&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;to&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;user@example.com&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;subject&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Welcome!&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;html&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;&amp;lt;h1&amp;gt;Welcome aboard!&amp;lt;/h1&amp;gt;&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="c1"&gt;// your API key — passed as a request header, never stored in tooling.json&lt;/span&gt;
  &lt;span class="na"&gt;Authorization&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`Bearer &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;RESEND_API_KEY&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="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="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Email sent, id:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The runtime calls &lt;code&gt;swytchcode exec&lt;/code&gt; under the hood, and this is the only place that actually hits the Resend API. Everything before it is set up. The CLI handles:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Auth via your API key&lt;/li&gt;
&lt;li&gt;Retry with backoff&lt;/li&gt;
&lt;li&gt;Structured error parsing&lt;/li&gt;
&lt;li&gt;Deterministic, repeatable output&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No hidden magic. No surprise behavior. Full control.&lt;/p&gt;




&lt;h2&gt;
  
  
  Using Swytchcode CLI With Cursor or Claude Code
&lt;/h2&gt;

&lt;p&gt;This is where it gets interesting.&lt;/p&gt;

&lt;p&gt;IDE agents like Cursor and Claude Code are excellent at understanding your intent and generating code, but they still produce raw API calls that can fail in production. Swytchcode changes the contract: instead of generating HTTP request code, the agent calls the CLI.&lt;/p&gt;

&lt;h3&gt;
  
  
  Setting it up
&lt;/h3&gt;

&lt;p&gt;In your project, add a &lt;code&gt;CLAUDE.md&lt;/code&gt; (for Claude Code) or &lt;code&gt;.cursorrules&lt;/code&gt; (for Cursor) that instructs the agent to use the CLI for integrations:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;.cursorrules&lt;/code&gt; / &lt;code&gt;CLAUDE.md&lt;/code&gt;:&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  API Integrations
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;
Use &lt;span class="sb"&gt;`swytchcode`&lt;/span&gt; CLI for all third-party API calls. Do not write raw HTTP requests or use SDK clients directly.

To add a new integration action:
&lt;span class="p"&gt;1.&lt;/span&gt; Run &lt;span class="sb"&gt;`swytchcode get &amp;lt;provider&amp;gt;`&lt;/span&gt; to fetch the spec
&lt;span class="p"&gt;2.&lt;/span&gt; Run &lt;span class="sb"&gt;`swytchcode add &amp;lt;action&amp;gt;`&lt;/span&gt; to register the action
&lt;span class="p"&gt;3.&lt;/span&gt; In application code, use &lt;span class="sb"&gt;`swytchcode-runtime`&lt;/span&gt; to execute: &lt;span class="sb"&gt;`const { exec } = require('swytchcode-runtime')`&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Never call external APIs directly in application code.&lt;/p&gt;

&lt;p&gt;Now when you ask Cursor or Claude Code to "send a welcome email with Resend", instead of generating fragile SDK code, the agent runs:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;swytchcode get resend
swytchcode add emails.email.create
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And your application calls:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;exec&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;swytchcode-runtime&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;exec&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;emails.email.create&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="na"&gt;body&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;from&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;you@yourdomain.com&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;to&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;user@example.com&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;subject&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Welcome!&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;Authorization&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`Bearer &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;RESEND_API_KEY&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  What this looks like in practice
&lt;/h3&gt;

&lt;p&gt;Say you're pair-programming with Claude Code and you type:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Send a welcome email via Resend when a user signs up"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Without Swytchcode, the agent writes something like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;resend&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Resend&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;RESEND_API_KEY&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;resend&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;emails&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;send&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;from&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;you@yourdomain.com&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;to&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;email&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;subject&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Welcome!&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;html&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;&amp;lt;h1&amp;gt;Welcome aboard!&amp;lt;/h1&amp;gt;&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Looks fine. But: no retry handling, no structured error classification, no idempotency, and no audit trail.&lt;/p&gt;

&lt;p&gt;With Swytchcode, the agent instead runs:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;swytchcode get resend
swytchcode add emails.email.create
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And application code becomes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;exec&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;swytchcode-runtime&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;exec&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;emails.email.create&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="na"&gt;body&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;from&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;you@yourdomain.com&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;to&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;email&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;subject&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Welcome!&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;html&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;&amp;lt;h1&amp;gt;Welcome aboard!&amp;lt;/h1&amp;gt;&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="na"&gt;Authorization&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`Bearer &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;RESEND_API_KEY&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The execution is handled by the CLI. The agent's job is to declare intent—the CLI's job is to execute it safely.&lt;/p&gt;




&lt;h2&gt;
  
  
  How It Works Under the Hood
&lt;/h2&gt;

&lt;p&gt;Two files drive everything:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;tooling.json&lt;/code&gt;&lt;/strong&gt; is your execution policy and trusted tool registry:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"sandbox"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"1.0.11"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"tools"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"emails.email.create"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"method"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"integration"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"resend.resend@v1.5.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"summary"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Send an email"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"inputs"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"body"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"object"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"required"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Idempotency-Key"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"string"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"required"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"integrations"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"resend.resend"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"v1.5.0"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;&lt;code&gt;wrekenfile.yaml&lt;/code&gt;&lt;/strong&gt; is the integration spec fetched automatically by &lt;code&gt;swytchcode get&lt;/code&gt; and stored in &lt;code&gt;.swytchcode/integrations/&lt;/code&gt;. It defines method shapes, endpoints, and validation rules. &lt;strong&gt;&lt;code&gt;manifest.json&lt;/code&gt;&lt;/strong&gt; stores the resolved base URLs per environment (production vs. sandbox).&lt;/p&gt;

&lt;p&gt;&lt;code&gt;swytchcode exec&lt;/code&gt; reads all three locally and no registry calls at runtime, executes deterministically, and returns structured output you can rely on.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why This Matters Now
&lt;/h2&gt;

&lt;p&gt;We are entering an era where AI agents autonomously call APIs on your behalf. That's powerful and dangerous if the execution layer isn't sound.&lt;/p&gt;

&lt;p&gt;Swytchcode gives you a safe boundary: &lt;strong&gt;AI declares intent, and the CLI executes&lt;/strong&gt;. No malformed requests. No silent failures. No agents are going rogue because they guessed a parameter wrong.&lt;/p&gt;

&lt;p&gt;For developers: less glue code, fewer late-night incidents.&lt;br&gt;
For AI-assisted workflows: a reliable, auditable execution layer your agents can trust.&lt;/p&gt;




&lt;h2&gt;
  
  
  Try It
&lt;/h2&gt;

&lt;p&gt;Integrations don't fail because of syntax. They fail because of execution.&lt;/p&gt;

&lt;p&gt;If you're building anything that touches external APIs, give Swytchcode CLI a try and see how much glue code you can delete.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Install&lt;/strong&gt;: &lt;code&gt;curl -fsSL https://cli.swytchcode.com/install.sh | sh&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Website&lt;/strong&gt;: &lt;a href="https://cli.swytchcode.com/" rel="noopener noreferrer"&gt;https://cli.swytchcode.com/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Docs&lt;/strong&gt;: &lt;a href="https://docs.swytchcode.com/cli/commands/" rel="noopener noreferrer"&gt;https://docs.swytchcode.com/cli/commands/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We're actively improving it and would love to hear what integrations you're working with. Drop a comment below or reach out directly.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>api</category>
      <category>cli</category>
      <category>showdev</category>
    </item>
    <item>
      <title>Make Your API AI-Ready: Try Swytchcode's Free Playground</title>
      <dc:creator>Chilarai</dc:creator>
      <pubDate>Fri, 19 Sep 2025 11:40:23 +0000</pubDate>
      <link>https://forem.com/chilarai/make-your-api-ai-ready-try-swytchcodes-free-playground-3mkf</link>
      <guid>https://forem.com/chilarai/make-your-api-ai-ready-try-swytchcodes-free-playground-3mkf</guid>
      <description>&lt;h2&gt;
  
  
  Why This Matters
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The dilemma&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;Last month I spent two days polishing API docs—&lt;br&gt;
…and still got the same questions from developers.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Good docs aren't enough anymore.&lt;br&gt;
Developers want interactive playgrounds, instant code snippets, and even AI agents that can call your API on their own.&lt;/p&gt;

&lt;p&gt;That's what Swytchcode delivers.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Swytchcode Does
&lt;/h2&gt;

&lt;p&gt;Think of it as a 24/7 solutions or support engineer for your API.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Interactive Docs &amp;amp; Demos – Every endpoint and workflow becomes a live playground.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;MCP &amp;amp; AI Agents – Let AI tools discover endpoints, generate code in any language, and test workflows.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Analytics – See exactly how developers and customers are using your API and asking about it.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;📣🆓 &lt;strong&gt;Is your API Open-source? It's free.&lt;/strong&gt; 🎉🥳 &lt;/p&gt;

&lt;h2&gt;
  
  
  How to Try It (3 Steps)
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Open the Playground&lt;/strong&gt;&lt;br&gt;
👉 &lt;a href="https://playground.swytchcode.ai/" rel="noopener noreferrer"&gt;https://playground.swytchcode.ai/&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Explore the Stripe Demo&lt;/strong&gt;&lt;br&gt;
Click through a ready-made workflow, run live methods, and watch how MCP exposes endpoints to AI agents.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Upload Your Own API&lt;/strong&gt;&lt;br&gt;
Drop in an OpenAPI or Postman collection and instantly get interactive docs, live calls, and analytics—no extra code.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fazq8t7xm55rvjugubu5u.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%2Fazq8t7xm55rvjugubu5u.png" alt="Swytchcode Playground demo" width="800" height="430"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Under the Hood
&lt;/h2&gt;

&lt;p&gt;The Swytchcode plugin is built with React and can be implemented as a library in your docs/website or can be hosted as a standalone app.&lt;/p&gt;

&lt;p&gt;The secret sauce is MCP (Model Context Protocol), which makes your endpoints discoverable by AI models and chat-based tools.&lt;/p&gt;

&lt;h2&gt;
  
  
  Use Cases We're Seeing
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;An open-source maintainer hosting docs for 200+ contributors.&lt;/li&gt;
&lt;li&gt;A SaaS startup tracking exactly which endpoints their customers hit most.&lt;/li&gt;
&lt;li&gt;DevRel teams turning dull API references into hands-on demos during workshops.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Ready to Give Your API a Solutions Engineer?
&lt;/h2&gt;

&lt;p&gt;👉 Launch the Playground: &lt;a href="https://playground.swytchcode.ai/" rel="noopener noreferrer"&gt;https://playground.swytchcode.ai/&lt;/a&gt;&lt;br&gt;
👉 Read more on &lt;a href="https://swytchcode.com" rel="noopener noreferrer"&gt;https://swytchcode.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Upload your spec, or just play with the Stripe demo. It's free for open-source projects.&lt;/p&gt;

&lt;h2&gt;
  
  
  Over to You
&lt;/h2&gt;

&lt;p&gt;What's the biggest friction you face when onboarding developers to your API?&lt;br&gt;
Drop a comment below. I'm collecting pain points to shape the next features.&lt;/p&gt;

</description>
      <category>api</category>
      <category>tooling</category>
      <category>ai</category>
      <category>opensource</category>
    </item>
    <item>
      <title>The problem with current API documentation</title>
      <dc:creator>Chilarai</dc:creator>
      <pubDate>Tue, 02 Sep 2025 13:49:41 +0000</pubDate>
      <link>https://forem.com/chilarai/the-problem-with-current-api-documentation-16h</link>
      <guid>https://forem.com/chilarai/the-problem-with-current-api-documentation-16h</guid>
      <description>&lt;p&gt;Although APIs are the foundation of contemporary software, working with them frequently feels more difficult than it needs to be. The explanation, documentation, and support of APIs are the issues, not the APIs themselves. This blog will cover the common problems developers face with APIs and their documentation, the difficulties they encounter when integrating them, and how &lt;a href="https://swytchcode.com" rel="noopener noreferrer"&gt;Swytchcode&lt;/a&gt; is helping our understanding and use of APIs.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Good API Documents Don’t Always Stay Good
&lt;/h2&gt;

&lt;p&gt;Maintaining API documentation is more challenging than it appears. APIs change rapidly. Teams alter data structures, deprecate endpoints, and release new versions. However, updating documents is frequently neglected. Instead of writing instructions, developers are busy creating features. Managers prioritize delivery dates over the caliber of the documentation. Updates are manual and prone to errors even when they do occur. Maintaining accuracy and usefulness is difficult because of the disconnect between slow-moving documents and rapidly evolving APIs.&lt;/p&gt;

&lt;p&gt;The following are the main problems with current API documentation:&lt;/p&gt;

&lt;h3&gt;
  
  
  Outdated or incomplete documents
&lt;/h3&gt;

&lt;p&gt;APIs are dynamic. There are new endpoints. Older ones lose value. However, the documents frequently fall behind. What still functions is left up to the developers’ guesses. Testing endpoints that no longer behave as described is a waste of time. This discrepancy slows down projects and causes confusion.&lt;/p&gt;

&lt;h3&gt;
  
  
  Complex Language
&lt;/h3&gt;

&lt;p&gt;Too many docs sound like they were written for machines, not people. They use jargon, vague terms, and skip key explanations. Developers need clarity, not theory. Without simple language and clear instructions, onboarding becomes slow and frustrating.&lt;/p&gt;

&lt;h3&gt;
  
  
  Error handling
&lt;/h3&gt;

&lt;p&gt;One of the weakest aspects of the majority of API documentation is error handling. Many merely display error codes or ambiguous terms like “Bad Request.” Developers, however, require context. What caused the request to fail? How can it be fixed? Errors become hours of trial and error without solutions.&lt;/p&gt;

&lt;h3&gt;
  
  
  Absence of Practical Use Cases
&lt;/h3&gt;

&lt;p&gt;Documents frequently provide isolated examples. They do not cover entire workflows, but they do explain syntax. For instance, you might come across a data fetch example in one location and an authentication example in another. However, you won’t notice the connection between the two steps. Chaining calls, not a single endpoint, is what real-world tasks entail. Developers must have a broad perspective.&lt;/p&gt;

&lt;h3&gt;
  
  
  Variability Among Endpoints
&lt;/h3&gt;

&lt;p&gt;Certain endpoints provide comprehensive information, illustrations, and unambiguous answers. Others are hardly mentioned. Developers are compelled to invest more time in addressing this discrepancy. A disjointed document structure disrupts the workflow and makes integration more difficult than necessary.&lt;/p&gt;

&lt;h3&gt;
  
  
  No Interactivity or Testing
&lt;/h3&gt;

&lt;p&gt;Many documents are static. They provide examples, but they won’t let you try them. To verify behavior, developers either write test scripts or copy snippets into Postman. That increases friction. Developers could validate their code instantly and save hours with interactive documents that included live testing.&lt;/p&gt;

&lt;h2&gt;
  
  
  How Issues with Documentation Cause Problems with API Integration
&lt;/h2&gt;

&lt;p&gt;Inadequate API documentation impacts developers during integration. Each omitted detail or ambiguous explanation increases the effort required to get an API functioning. They spend hours guessing, testing, and debugging rather than developing features. The following section explains how common documentation issues lead to integration challenges:&lt;/p&gt;

&lt;h3&gt;
  
  
  Outdated or incomplete documents result in malfunctioning integrations.
&lt;/h3&gt;

&lt;p&gt;Developers attempt to use endpoints that are either no longer in use or behave differently from their descriptions. Developers lose time, requests fail, and the resulting brittle code eventually breaks.&lt;/p&gt;

&lt;h3&gt;
  
  
  A steep learning curve
&lt;/h3&gt;

&lt;p&gt;New developers find it difficult to grasp basic usage when documents are overflowing with jargon. Onboarding becomes slower. Teams begin to lose momentum.&lt;/p&gt;

&lt;h3&gt;
  
  
  Inadequate justifications for errors: Interminable trial and error
&lt;/h3&gt;

&lt;p&gt;Without precise instructions on what constitutes an error, developers make educated guesses about solutions. Integration is delayed as minor errors become hours of debugging.&lt;/p&gt;

&lt;h3&gt;
  
  
  Absence of practical use cases: Inadequate workflows
&lt;/h3&gt;

&lt;p&gt;Developers may functionalize individual endpoints, but they may not integrate them into a comprehensive workflow. For instance, authentication functions properly, but it breaks when combined with data retrieval.&lt;/p&gt;

&lt;h3&gt;
  
  
  Endpoint inconsistency: Fragile code
&lt;/h3&gt;

&lt;p&gt;Developers create uneven integrations if some endpoints have adequate documentation while others don’t. They ultimately depend on conjecture, which raises the possibility of production errors.&lt;/p&gt;

&lt;h3&gt;
  
  
  Lack of interaction: Slow validation
&lt;/h3&gt;

&lt;p&gt;Developers copy snippets to Postman or scripts in the absence of live testing tools. The additional time required for each test-and-fix cycle slows down delivery.&lt;/p&gt;

&lt;p&gt;In summary, poor documentation causes erratic, sluggish, and annoying API integration. What ought to be a simple procedure turns into a roadblock that negatively impacts developer output and business results.&lt;/p&gt;

&lt;h2&gt;
  
  
  How Swytchcode Resolves Issues with API Documentation
&lt;/h2&gt;

&lt;p&gt;Swytchcode improves the intelligence, interactivity, and usability of API documentation. It uses a straightforward iframe or plugin to connect straight to your website or documentation. It provides developers with live, AI-powered support for all methods, versions, and workflows in place of static text.&lt;/p&gt;

&lt;p&gt;You can install Swytchcode as an npm package or embed it as an iframe inside your website or documentation. Once added, it works directly with your live SDK code and versioned API specs. This means your code samples and documentation always stay in sync with the latest changes. You don’t need to manually rewrite or update docs every time something changes in the API. Swytchcode ensures your documentation stays accurate, consistent, and up-to-date without extra effort from your team.&lt;/p&gt;

&lt;p&gt;This is how it’s beneficial:&lt;/p&gt;

&lt;h3&gt;
  
  
  Simple-Language Definitions
&lt;/h3&gt;

&lt;p&gt;API schemas are frequently complex and perplexing. They enumerate fields, types, and structures, but they hardly ever provide a human-readable explanation. Swytchcode resolves this issue by using its AI chat to explain any schema or technique in simple terms. With a straightforward, conversational explanation, a developer can ask questions like “What does this field do?” or “How do I use this method?” As a result, new developers and even non-technical managers can more easily access APIs, cutting down on onboarding time.&lt;/p&gt;

&lt;h3&gt;
  
  
  Code Generation in More Than 15 Languages
&lt;/h3&gt;

&lt;p&gt;It takes time to write integration codes by hand, particularly when teams are using different programming languages. In over 15 languages, including Python, JavaScript, Go, Java, and Ruby, Swytchcode automatically creates method-level code. As a result, developers are no longer required to convert examples into their stack. They concentrate on developing features rather than boilerplate and replicate the usable code.&lt;/p&gt;

&lt;h3&gt;
  
  
  Error-proof, self-explanatory code
&lt;/h3&gt;

&lt;p&gt;Error handling is one of the main issues with API code samples. The majority of documents either omit it or include ambiguous notes. Swytchcode resolves this problem by producing self-explanatory code samples. Each block addresses all error specifications, covers edge cases, and contains insightful comments. From the beginning, developers can rely on safer, more reliable integrations because they know what each line does.&lt;/p&gt;

&lt;h3&gt;
  
  
  Simplified Workflows
&lt;/h3&gt;

&lt;p&gt;Developers rarely use a single endpoint in isolation. Steps must be chained together in real-world use cases, such as authentication, data retrieval, error handling, and more. Swytchcode automatically compiles a list of the most popular API workflows and creates the full code for each one. Developers can see how everything works together in practice rather than piecing together fragments from various sections. This increases reliability and reduces integration time.&lt;/p&gt;

&lt;h3&gt;
  
  
  Contextual AI Assistance
&lt;/h3&gt;

&lt;p&gt;What does this error code mean? is a question that developers frequently ask themselves. Which fields are necessary? How can I make this request function? Typically, users would spend hours experimenting or searching forums. With the aid of contextual AI, Swytchcode removes that uncertainty. It foresees these queries and offers straightforward responses within the documents. As a result, developers can concentrate on building while saving time on research.&lt;/p&gt;

&lt;h3&gt;
  
  
  Interactive Testing
&lt;/h3&gt;

&lt;p&gt;Developers are forced to write short test scripts or copy code into Postman when working with static documents. This causes friction and slows feedback. Swytchcode’s integrated interactive testing solves this problem. Within the documentation, developers can test any endpoint or workflow with actual parameters and results. They move more confidently and more quickly after receiving instant validation for their requests.&lt;/p&gt;

&lt;h3&gt;
  
  
  MCP integration
&lt;/h3&gt;

&lt;p&gt;APIs for MCP Server Integration don’t exist in a vacuum. Teams frequently wish to link them to client apps, agents, or tools. This task is made easy by Swytchcode’s MCP server. Developers can extend the reach of their integrations without additional setup by using MCP integration to use APIs in any client that supports the protocol. Because of this, Swytchcode is an integration layer rather than just documentation.&lt;/p&gt;

&lt;p&gt;Test live in the Swytchcode Playground:&lt;br&gt;
&lt;a href="https://playground.swytchcode.ai" rel="noopener noreferrer"&gt;https://playground.swytchcode.ai&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Try Swytchcode for free for the first three months:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://app.swytchcode.com" rel="noopener noreferrer"&gt;https://app.swytchcode.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;API documentation should not hinder the development of a great product. However, these days, API documentation slows down developers due to its omitted details, ambiguous language, and disrupted workflows. By transforming static documentation into an interactive, AI-powered experience, Swytchcode transforms the situation. It provides clear explanations of methods, produces dependable code in any language, responds to frequently asked developer queries, and even enables real-time endpoint testing. APIs are now as user-friendly as they should be thanks to Swytchcode, which helps teams integrate more quickly, spend less time debugging, and produce better software.&lt;/p&gt;

</description>
      <category>devex</category>
      <category>api</category>
      <category>productivity</category>
      <category>documentation</category>
    </item>
    <item>
      <title>List of Programming languages in Html dropdown and Checkboxes (Hacktoberfest)</title>
      <dc:creator>Chilarai</dc:creator>
      <pubDate>Sat, 01 Oct 2022 16:32:24 +0000</pubDate>
      <link>https://forem.com/chilarai/list-of-programming-languages-in-html-dropdown-and-checkboxes-hacktoberfest-nk2</link>
      <guid>https://forem.com/chilarai/list-of-programming-languages-in-html-dropdown-and-checkboxes-hacktoberfest-nk2</guid>
      <description>&lt;p&gt;Very recently, while building an application, I needed a list of programming languages to be displayed for my users to select their programming interests. But, there were no known repositories which had a list of programming languages as html checkboxes/radio buttons/dropdown list. Hence, I had to code in the 50 most frequently used programming languages.&lt;/p&gt;

&lt;p&gt;Turns out, if you Google it (I referred to Wikipedia, &lt;a href="https://en.wikipedia.org/wiki/List_of_programming_languages" rel="noopener noreferrer"&gt;https://en.wikipedia.org/wiki/List_of_programming_languages&lt;/a&gt;), there are more than 300 known languages which people use, and the top 50 doesn't justify what people learn.&lt;/p&gt;

&lt;p&gt;Hence, I decided to use the opportunity provided by Hacktoberfest'2022 to create the list in both dropdowns (html select options) and checkboxes with the help of user contributions.&lt;/p&gt;

&lt;p&gt;Here is my repository: &lt;a href="https://github.com/chilarai/list-of-programming-languages" rel="noopener noreferrer"&gt;https://github.com/chilarai/list-of-programming-languages&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you feel you want to contribute to the list, please reply back to open issues so that I can assign you the particular issue. If you want to use the repo in any of your projects in the future, please feel free to do so. &lt;/p&gt;

&lt;p&gt;List of open issues: &lt;a href="https://github.com/chilarai/list-of-programming-languages/issues" rel="noopener noreferrer"&gt;https://github.com/chilarai/list-of-programming-languages/issues&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Happy Hacking!!!&lt;/p&gt;

</description>
      <category>hacktoberfest</category>
      <category>beginners</category>
      <category>html</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Helping students and freshers build a tech portfolio</title>
      <dc:creator>Chilarai</dc:creator>
      <pubDate>Thu, 04 Aug 2022 16:04:00 +0000</pubDate>
      <link>https://forem.com/clubtechpro/helping-students-and-freshers-build-a-tech-portfolio-48ij</link>
      <guid>https://forem.com/clubtechpro/helping-students-and-freshers-build-a-tech-portfolio-48ij</guid>
      <description>&lt;h1&gt;
  
  
  Introduction
&lt;/h1&gt;

&lt;p&gt;It's been two months since our &lt;strong&gt;version 0.1 release&lt;/strong&gt;. We were constantly developing &lt;a href="https://techpro.club" rel="noopener noreferrer"&gt;Techpro.club&lt;/a&gt; and are happy to launch &lt;strong&gt;version 0.2&lt;/strong&gt; today.&lt;/p&gt;

&lt;p&gt;We launched the platform with the idea of helping open source projects find more contributors and adopters while as a developer you build your live developer portfolio. However, we are changing our approach to the project a little.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;(&lt;strong&gt;Quick Recap&lt;/strong&gt; :&lt;a href="https://dev.to/chilarai/introducing-techproclub-a-platform-to-discover-amazing-opensource-projects-plj"&gt;Introducing techpro.club: A platform to discover amazing open source projects&lt;/a&gt;)&lt;/em&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  What has changed?
&lt;/h1&gt;

&lt;h3&gt;
  
  
  Our Focus 👓
&lt;/h3&gt;

&lt;p&gt;We are completely focusing on onboarding students and freshers who wish to build a career in Tech or are exploring the options. While early in their careers, they have a tremendous opportunity to learn and create fantastic softwares.&lt;/p&gt;

&lt;p&gt;Techpro club is a platform to help them hone their programming skills and learn to collaborate with people early on in their careers. While they contribute to projects, ask questions, and share knowledge, we track them down in one place and help them build a better portfolio.&lt;/p&gt;

&lt;h3&gt;
  
  
  New Features ✨
&lt;/h3&gt;

&lt;p&gt;Our new platform features a lot of new additions. Here is the summary&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Fresh new layouts&lt;/li&gt;
&lt;li&gt;Project bookmarks. You can now bookmark your favorite projects.&lt;/li&gt;
&lt;li&gt;Project reactions help show support and love to projects&lt;/li&gt;
&lt;li&gt;Project preview to see project details&lt;/li&gt;
&lt;li&gt;Feeds for developers to check the latest projects&lt;/li&gt;
&lt;li&gt;Profile management&lt;/li&gt;
&lt;li&gt;Delete account&lt;/li&gt;
&lt;li&gt;Github profile snapshot on your profile to track activities across Github&lt;/li&gt;
&lt;li&gt;Project notifications for developers with matching skillsets.&lt;/li&gt;
&lt;/ol&gt;

&lt;h1&gt;
  
  
  Why the change?
&lt;/h1&gt;

&lt;p&gt;During the past 2 months, while onboarding and interacting with students and freshers individually, we realized that many of them don't learn to code early which inhibits them from choosing the path of software development. While many have good exposure, they don't know where and how to find good projects matching their skills and they lack teamwork.&lt;/p&gt;

&lt;p&gt;In the case of freshers, during their early days of job hunting as a software-developer, they don't have enough to showcase to potential employers.&lt;/p&gt;

&lt;h3&gt;
  
  
  Gist of the story 💪
&lt;/h3&gt;

&lt;p&gt;The gist of the story is for early job hunting, they have a minimal Linkedin profile, Github profile, and other relevant activities which the employers really want to see in a software developer's resume.&lt;/p&gt;

&lt;p&gt;We want to bridge the gap in their job hunting process and their lack of work experience by providing them with good projects to work with to hone their skills. Also, integrating with major platforms (such as, but not limited to, Github, Stackoverflow, Quora, etc) to bring all their activities to one place.&lt;/p&gt;

&lt;h1&gt;
  
  
  Why you should join?
&lt;/h1&gt;

&lt;h3&gt;
  
  
  As a developer
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://techpro.club" rel="noopener noreferrer"&gt;Techpro.club&lt;/a&gt;, provides the means for freshers and students to build their careers early on as software developers. We help you discover open-source projects you want to work with and while you keep working, we bring your day-to-day activities to one place. You can showcase your portfolio and thank us later.  &lt;/p&gt;

&lt;h3&gt;
  
  
  As a project owner
&lt;/h3&gt;

&lt;p&gt;Learn how to start a project and become a maintainer of a project. You will also learn to manage teams, delegate tasks, manage deadlines, releases, and many more. Good projects receive appreciation.&lt;/p&gt;

&lt;h1&gt;
  
  
  Road ahead
&lt;/h1&gt;

&lt;p&gt;We are open-source and our services to the people will always be free. The core team will keep adding new features to make the process easier and save time for you. &lt;/p&gt;

&lt;p&gt;In the next release, we will integrate&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Project searches&lt;/li&gt;
&lt;li&gt;Platform invites&lt;/li&gt;
&lt;li&gt;Sharing on social media&lt;/li&gt;
&lt;li&gt;More social platform profiles&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you want to contribute to our code, we would be glad to accept your help. Here are some important links.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://techpro.club" rel="noopener noreferrer"&gt;Web application&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/ClubTechPro/techpro.club" rel="noopener noreferrer"&gt;Project Github&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/ClubTechpro" rel="noopener noreferrer"&gt;Reach out on Twitter&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Conclusion
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://techpro.club" rel="noopener noreferrer"&gt;Techpro.club&lt;/a&gt; is helping students and freshers build a tech portfolio early on in their careers. We have already started the onboarding process. Do join our platform.&lt;/p&gt;

&lt;p&gt;I am willing to listen to your feedback in the comments below.&lt;/p&gt;

</description>
      <category>programming</category>
      <category>portfolio</category>
      <category>webdev</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Introducing Grafieks: An open-source Analytics tool</title>
      <dc:creator>Chilarai</dc:creator>
      <pubDate>Thu, 28 Jul 2022 11:19:00 +0000</pubDate>
      <link>https://forem.com/chilarai/introducing-grafieks-an-open-source-analytics-tool-4ol4</link>
      <guid>https://forem.com/chilarai/introducing-grafieks-an-open-source-analytics-tool-4ol4</guid>
      <description>&lt;h3&gt;
  
  
  Introduction
&lt;/h3&gt;

&lt;p&gt;Grafieks Analytics Ltd has just released its desktop analytical tool as an open source to the public which enables students, small teams, and organizations to get better insights from their data. &lt;/p&gt;

&lt;p&gt;Let's learn about Grafieks and how it enables you to connect with various data sources and use the available tools to create beautiful graphs and share them with your colleagues.&lt;/p&gt;

&lt;h3&gt;
  
  
  What is Grafieks?
&lt;/h3&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%2F9j8xp1ink4a7iy1tur9f.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%2F9j8xp1ink4a7iy1tur9f.png" alt="Grafieks Features" width="800" height="250"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Grafieks is an open-source, simple Self-Service Business Intelligence tool that allows users to quickly and easily extract meaningful insights from data. With Grafieks, line-of-business professionals can connect to data sources, build data models or write SQL queries, and build reports independently, with minimal IT support.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why Grafieks
&lt;/h3&gt;

&lt;p&gt;Businesses could use &lt;a href="https://grafieks.com" rel="noopener noreferrer"&gt;Grafieks&lt;/a&gt; to create, analyze, and visualize their statistics from their data. Users can easily publish meaningful graphical data to their organizations. However, for viewing published data on our cloud, you need a &lt;a href="https://grafieks.com/pricing" rel="noopener noreferrer"&gt;premium plan&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;Currently, desktop and charts are open sourced under GPL v3 license. You can check the code on &lt;a href="https://github.com/Grafieks-Analytics" rel="noopener noreferrer"&gt;Github&lt;/a&gt;. Grafieks Desktop is available for Windows Desktop only, for the time being.&lt;/p&gt;

&lt;h3&gt;
  
  
  Available data connectors
&lt;/h3&gt;

&lt;p&gt;List of databases, files, and online storage drives that you can connect with Grafieks to analyze. For live connection, you need your data source to be hosted on a server&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;CSV&lt;/li&gt;
&lt;li&gt;JSON&lt;/li&gt;
&lt;li&gt;Microsoft Excel&lt;/li&gt;
&lt;li&gt;Amazon Redshift&lt;/li&gt;
&lt;li&gt;Microsoft Access&lt;/li&gt;
&lt;li&gt;MySql&lt;/li&gt;
&lt;li&gt;PostgresSQL&lt;/li&gt;
&lt;li&gt;Sqlite&lt;/li&gt;
&lt;li&gt;Snowflake&lt;/li&gt;
&lt;li&gt;Micorosft Sql Server&lt;/li&gt;
&lt;li&gt;Teradata&lt;/li&gt;
&lt;li&gt;Mongodb&lt;/li&gt;
&lt;li&gt;Box&lt;/li&gt;
&lt;li&gt;Dropbox&lt;/li&gt;
&lt;li&gt;Google Drive&lt;/li&gt;
&lt;li&gt;Online Services&lt;/li&gt;
&lt;li&gt;Github Gists&lt;/li&gt;
&lt;li&gt;Google Sheets&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Available charts
&lt;/h3&gt;

&lt;p&gt;List of charts available that you can use to create your dashboards using the data sources mentioned above&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Bar Chart

&lt;ul&gt;
&lt;li&gt;Bar Chart &lt;/li&gt;
&lt;li&gt;Grouped Bar Chart&lt;/li&gt;
&lt;li&gt;Stacked Bar Chart &lt;/li&gt;
&lt;li&gt;Horizontal Bar Chart&lt;/li&gt;
&lt;li&gt;Horizontal Grouped Bar Chart&lt;/li&gt;
&lt;li&gt;Horizontal Stacked Bar Chart&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Line Chart

&lt;ul&gt;
&lt;li&gt;Line Chart&lt;/li&gt;
&lt;li&gt;Horizontal Line Chart&lt;/li&gt;
&lt;li&gt;Multiple Line Chart&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Area Chart

&lt;ul&gt;
&lt;li&gt;Area Chart&lt;/li&gt;
&lt;li&gt;Stacked Area Chart&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Pie Chart&lt;/li&gt;
&lt;li&gt;Donut Chart&lt;/li&gt;
&lt;li&gt;Radar Chart&lt;/li&gt;
&lt;li&gt;Scatter Plot&lt;/li&gt;
&lt;li&gt;Funnel&lt;/li&gt;
&lt;li&gt;Gauge&lt;/li&gt;
&lt;li&gt;Heat Map&lt;/li&gt;
&lt;li&gt;Sunburst&lt;/li&gt;
&lt;li&gt;Tree Chart&lt;/li&gt;
&lt;li&gt;Waterfall Chart&lt;/li&gt;
&lt;li&gt;Pivot&lt;/li&gt;
&lt;li&gt;Table&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  How is Grafieks better?
&lt;/h3&gt;

&lt;p&gt;Grafieks Desktop is completely open-source (GPL 3). You can use it to create your analytics for free saving up a lot on your budget. However, Grafieks do offer premium support for its services.&lt;/p&gt;

&lt;p&gt;It seamlessly connects with data sources and lets you build many charts that are normally not available on other BI tools or require a lot of expertise on customizations and incur huge costs. Being open-source, you can easily raise bugs, fix them or speak to the developers for a feature request.&lt;/p&gt;

&lt;p&gt;In short, the overall features have been designed keeping in mind the latest requirements for charts in an organization along with keeping cost consideration on mind.&lt;/p&gt;

&lt;h3&gt;
  
  
  Few Screenshots
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Data connectors screen&lt;/strong&gt;&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%2Fnsgum872hvq7jud55xui.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%2Fnsgum872hvq7jud55xui.png" alt="Data connector screen - Grafieks" width="800" height="272"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Report designer screen&lt;/strong&gt;&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%2Fdkgbj1aqtmpia6ytj34n.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%2Fdkgbj1aqtmpia6ytj34n.png" alt="Report designer screen - Grafieks" width="800" height="416"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Dashboard designer screen&lt;/strong&gt;&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%2Fh7efgtpy9ild2skgx0ng.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%2Fh7efgtpy9ild2skgx0ng.png" alt="Dashboard designer screen - Grafieks" width="800" height="412"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Closing
&lt;/h3&gt;

&lt;p&gt;Grafieks is a simple business intelligence platform for data democratization while being completely open source. You are free to create your data analytics and save them for future analysis locally or live on the server.&lt;/p&gt;

&lt;p&gt;Feel free to check out the code and contribute if you feel comfortable with the code. The code is written with &lt;a href="https://www.qt.io/" rel="noopener noreferrer"&gt;QT5 (C++ 11)&lt;/a&gt;, &lt;a href="https://d3js.org/" rel="noopener noreferrer"&gt;D3.js&lt;/a&gt; and &lt;a href="https://duckdb.org/" rel="noopener noreferrer"&gt;Duckdb&lt;/a&gt; and available on &lt;a href="https://github.com/Grafieks-Analytics/grafieks-desktop" rel="noopener noreferrer"&gt;Github&lt;/a&gt; for anyone to check and build on top of it. The core team constantly keeps adding new features.&lt;/p&gt;

&lt;p&gt;Do let me know in the comments section below. &lt;/p&gt;

</description>
      <category>analytics</category>
      <category>programming</category>
      <category>opensource</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Introducing Techpro.club: A platform to discover amazing opensource projects</title>
      <dc:creator>Chilarai</dc:creator>
      <pubDate>Thu, 16 Jun 2022 04:40:00 +0000</pubDate>
      <link>https://forem.com/clubtechpro/introducing-techproclub-a-platform-to-discover-amazing-opensource-projects-plj</link>
      <guid>https://forem.com/clubtechpro/introducing-techproclub-a-platform-to-discover-amazing-opensource-projects-plj</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;What is common in Linux, VLC player, and MongoDB? Yes, they are all popular open-source softwares. Their source codes are open for anyone to use and make changes. It is the contributions from people which make these projects robust and their adopters make them popular.&lt;/p&gt;

&lt;p&gt;However, managing an open-source project is a difficult task. It requires a lot of technical skills in terms of writing code, fixing issues, managing documentation, writing test cases, deployment, automation, CI/CD, and providing support. Then comes &lt;br&gt;
the product promotion starting with writing blogs, managing social media, and optimizing for SEO. All these can be very draining and an individual cannot do all these alone.&lt;/p&gt;

&lt;p&gt;That's where we come in. &lt;a href="https://techpro.club" rel="noopener noreferrer"&gt;Techpro.club&lt;/a&gt; is an open-source platform for project owners to find the right team to build and manage their projects, however small or big they may be. At the same time, posting a project on our platform reaches out to a vast network of contributors, saving them a lot of effort and money in promotion.&lt;/p&gt;
&lt;h2&gt;
  
  
  Why Techpro.Club?
&lt;/h2&gt;

&lt;p&gt;If you are an open-source project owner, you can take advantage of our extensive network of contributors to post your project details. We will ensure that your contribution request reaches out to the best contributors, matching your project criteria. If a matching contributor finds your project interesting, he/she can directly go to your project repository and start working. Visit &lt;a href="https://techpro.club" rel="noopener noreferrer"&gt;&lt;/a&gt;&lt;a href="https://techpro.club" rel="noopener noreferrer"&gt;https://techpro.club&lt;/a&gt; and register yourself&lt;/p&gt;
&lt;h3&gt;
  
  
  Benefits for Project owners
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Find a great team to build and manage your project.&lt;/li&gt;
&lt;li&gt;Promote your project amongst a vast network of our contributors without the hassle to promote elsewhere.&lt;/li&gt;
&lt;li&gt;Save a lot of money.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;
  
  
  Benefits for contributors
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Opportunity to work on amazing projects.&lt;/li&gt;
&lt;li&gt;Enhance your skills and developer portfolio by contributing to projects.&lt;/li&gt;
&lt;li&gt;Opportunity to earn from paid projects or get hired.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;
  
  
  Features roadmap
&lt;/h2&gt;

&lt;p&gt;We are currently in the beta stage and currently accepting projects and contributors. Here is the list of features and our roadmap for the future.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  [x] &lt;strong&gt;v 0.1&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;  [x] User Authentication&lt;/li&gt;
&lt;li&gt;  [x] Contributor preferences&lt;/li&gt;
&lt;li&gt;  [x] Projects Create, Read, Update&lt;/li&gt;
&lt;li&gt;  [x] Registration welcome email&lt;/li&gt;
&lt;li&gt;  [x] Master templates&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;  [ ] &lt;strong&gt;v 0.2&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;  [ ] Profile management - avatar, delete account, etc.&lt;/li&gt;
&lt;li&gt;  [ ] Project feeds&lt;/li&gt;
&lt;li&gt;  [ ] Feed filters&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;  [ ] &lt;strong&gt;v 0.3&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;  [ ] Notification for contributors&lt;/li&gt;
&lt;li&gt;  [ ] Notification for projects&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;  [ ] &lt;strong&gt;v 0.4&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;  [ ] Project invite members&lt;/li&gt;
&lt;li&gt;  [ ] Project manage members&lt;/li&gt;
&lt;li&gt;  [ ] Share on social media&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;  [ ] &lt;strong&gt;v 0.5&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;  [ ] Project analytics&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;  [ ] &lt;strong&gt;v 0.6&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;  [ ] Badges&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;  [ ] &lt;strong&gt;v 0.7&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;  [ ] Integration with Gitlab&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;  [ ] &lt;strong&gt;v 0.8&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;  [ ] Integration with Bitbucket&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;  [ ] &lt;strong&gt;v 0.9&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;  [ ] Integration with Azure&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;More to follow once these are achieved.&lt;/p&gt;
&lt;h2&gt;
  
  
  Built With
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;a href="https://go.dev/" rel="noopener noreferrer"&gt;Golang&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://www.mongodb.com/" rel="noopener noreferrer"&gt;Mongodb&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://getbootstrap.com" rel="noopener noreferrer"&gt;Bootstrap&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://jquery.com" rel="noopener noreferrer"&gt;JQuery&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;
&lt;h4&gt;
  
  
  Mongodb
&lt;/h4&gt;

&lt;p&gt;Install Mongodb and set the credentials in &lt;code&gt;.env&lt;/code&gt; file described here&lt;/p&gt;
&lt;h4&gt;
  
  
  Github Project
&lt;/h4&gt;

&lt;p&gt;Github project is needed to authenticate users. You may do so by visiting &lt;a href="https://github.com/settings/apps" rel="noopener noreferrer"&gt;https://github.com/settings/apps&lt;/a&gt;. Note the &lt;strong&gt;Client ID&lt;/strong&gt; and &lt;strong&gt;Client secret&lt;/strong&gt;. Also, set two &lt;strong&gt;Callback URLs&lt;/strong&gt; for project and contributor authentication.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt; - Create a &lt;code&gt;Github App&lt;/code&gt; and not an &lt;code&gt;OAuth App&lt;/code&gt; because the latter doesn't permit multiple callback URLs.&lt;/p&gt;
&lt;h2&gt;
  
  
  Running and Deployment
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Clone the repo&lt;br&gt;
&lt;/p&gt;

&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/ClubTechPro/techpro.club.git
&lt;/code&gt;&lt;/pre&gt;




&lt;/li&gt;

&lt;li&gt;&lt;p&gt;Set Environment variables&lt;br&gt;&lt;br&gt;
Rename the &lt;code&gt;src/.env.sample&lt;/code&gt; to &lt;code&gt;src/.env&lt;/code&gt; and replace it with actual credentials obtained from the steps mentioned in Prerequisites.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;Install Golang dependencies&lt;br&gt;
&lt;/p&gt;

&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; /path/to/project
go mod tidy
&lt;/code&gt;&lt;/pre&gt;




&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;Run the project&lt;br&gt;
&lt;/p&gt;

&lt;pre class="highlight shell"&gt;&lt;code&gt;go run main.go
&lt;/code&gt;&lt;/pre&gt;



&lt;p&gt;Open a browser and hit &lt;code&gt;http://localhost:8080&lt;/code&gt;&lt;/p&gt;


&lt;/li&gt;

&lt;/ol&gt;

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

&lt;p&gt;We want to make it easy for project owners to find a contributing team and easily promote their ideas. In the meantime, we are constantly building and similarly looking for contributors to help our community grow. If you want to contribute to us, visit our Github repository mentioned below.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Github Link: &lt;a href="https://github.com/ClubTechPro/techpro.club" rel="noopener noreferrer"&gt;https://github.com/ClubTechPro/techpro.club&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  Application Link : &lt;a href="https://techpro.club" rel="noopener noreferrer"&gt;https://techpro.club&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  Twitter: &lt;a href="https://twitter.com/ClubTechpro" rel="noopener noreferrer"&gt;@ClubTechpro&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>opensource</category>
      <category>discuss</category>
      <category>productivity</category>
      <category>showdev</category>
    </item>
    <item>
      <title>Why dev.to?</title>
      <dc:creator>Chilarai</dc:creator>
      <pubDate>Mon, 13 Jun 2022 16:51:15 +0000</pubDate>
      <link>https://forem.com/chilarai/why-devto-5lc</link>
      <guid>https://forem.com/chilarai/why-devto-5lc</guid>
      <description>&lt;p&gt;Very very off topic. But what is the significance of &lt;strong&gt;.to&lt;/strong&gt; in &lt;strong&gt;dev.to&lt;/strong&gt;? Why not any other TLD or other domain?&lt;/p&gt;

&lt;p&gt;Is it registered in Tonga?&lt;/p&gt;

&lt;p&gt;Just asking anyone for a solid answer.Any specific idea behind this&lt;/p&gt;

&lt;p&gt;Please don't treat me as spam&lt;/p&gt;

</description>
      <category>watercooler</category>
      <category>discuss</category>
      <category>help</category>
    </item>
    <item>
      <title>Reading GitHub secrets from GitHub actions using Golang</title>
      <dc:creator>Chilarai</dc:creator>
      <pubDate>Mon, 06 Jun 2022 07:18:11 +0000</pubDate>
      <link>https://forem.com/chilarai/reading-github-secrets-from-github-actions-using-golang-32l0</link>
      <guid>https://forem.com/chilarai/reading-github-secrets-from-github-actions-using-golang-32l0</guid>
      <description>&lt;p&gt;Sometimes while doing CI/CD with GitHub Actions, you need to read environment variables stored in &lt;code&gt;GitHub Secrets&lt;/code&gt; for your tests. Here I demonstrate how you can access &lt;code&gt;GitHub Secrets&lt;/code&gt; stored in GitHub while doing CI/CD.&lt;/p&gt;

&lt;h2&gt;
  
  
  Steps
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Go to &lt;strong&gt;GitHub Repository &amp;gt; Settings&lt;/strong&gt;. From the left menu, selection &lt;strong&gt;Secrets &amp;gt; Actions&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&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%2F3398tsu97hf4gjne9n05.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%2F3398tsu97hf4gjne9n05.png" alt="Actions link" width="542" height="286"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Select &lt;code&gt;New repository secret&lt;/code&gt; and add a key-value pair. For our example, we have used the key name as &lt;code&gt;T1&lt;/code&gt; and Value as &lt;code&gt;Hello world&lt;/code&gt;. Then save it&lt;/li&gt;
&lt;/ul&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%2Flk46qwzx3b45f7f2by7i.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%2Flk46qwzx3b45f7f2by7i.png" alt="Save actions secret" width="800" height="81"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Once you save it, it should be visible on the screen&lt;/li&gt;
&lt;/ul&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%2Fzbp39ohg04zit3bl04yt.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%2Fzbp39ohg04zit3bl04yt.png" alt="Secrets list" width="800" height="143"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Now you need to add the secret in your GitHub Actions Workflow file. You need to call the secret using
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;env:
    T1: ${{secrets.T1}}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here is my &lt;a href="https://github.com/chilarai/go-env-github-actions/blob/master/.github/workflows/go.yml" rel="noopener noreferrer"&gt;Github Actions workflow&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;name: Go

on:
    push:
        branches: ["master"]
    pull_request:
        branches: ["master"]

env:
    T1: ${{secrets.T1}}

jobs:
    build:
        runs-on: ubuntu-latest
        steps:
            - uses: actions/checkout@v3

            - name: Set up Go
              uses: actions/setup-go@v3
              with:
                  go-version: 1.18

            - name: Build
              run: go build -v ./...

            - name: Test
              run: go test -v ./...

            - name: Environment list
              run: env

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

&lt;/div&gt;



&lt;p&gt;Once you do that, you should access this in your unit tests and code as&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;env1, err1 := os.LookupEnv("T1")
log.Println(env1, err1)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://github.com/chilarai/go-env-github-actions" rel="noopener noreferrer"&gt;Download source code&lt;/a&gt;&lt;/p&gt;

</description>
      <category>go</category>
      <category>github</category>
      <category>tutorial</category>
      <category>testing</category>
    </item>
    <item>
      <title>Why do you still use Php?</title>
      <dc:creator>Chilarai</dc:creator>
      <pubDate>Sun, 01 Nov 2020 16:02:24 +0000</pubDate>
      <link>https://forem.com/chilarai/why-do-you-still-use-php-jg0</link>
      <guid>https://forem.com/chilarai/why-do-you-still-use-php-jg0</guid>
      <description>&lt;p&gt;It's not that I have anything against PHP. I have been a very avid PHP user myself and I like PHP very much. I have used it to create a lot of websites and applications. &lt;/p&gt;

&lt;p&gt;But is it relevant now to learn for new users considering I only see a very few engagement on framework like Laravel/ WordPress? and other programming languages are gaining popularity on terms of ease, convenience on development and app processing speed?&lt;/p&gt;

</description>
      <category>php</category>
    </item>
    <item>
      <title>InMemory, Columnar database - DuckDb integration with Qt for data analytics</title>
      <dc:creator>Chilarai</dc:creator>
      <pubDate>Fri, 30 Oct 2020 06:22:58 +0000</pubDate>
      <link>https://forem.com/chilarai/inmemory-columnar-database-duckdb-integration-with-qt-for-data-analytics-3nej</link>
      <guid>https://forem.com/chilarai/inmemory-columnar-database-duckdb-integration-with-qt-for-data-analytics-3nej</guid>
      <description>&lt;p&gt;For the complete repository download link, visit: &lt;a href="https://github.com/chilarai/qt-duckdb" rel="noopener noreferrer"&gt;https://github.com/chilarai/qt-duckdb&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;How DuckDB fits the role in OLAP processing&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;In data analytics, Columnar databases help with Online Analytical Processing (OLAP) workloads since the queries touch across a subset of columns but a large number of rows for those columns. &lt;/li&gt;
&lt;li&gt;Also often, an embeddable database is needed that can be integrated into the program without any dependencies, just like Sqlite (a dynamic library and a header file are the only things needed to integrate with your application). &lt;/li&gt;
&lt;li&gt;It supports SQL syntax for data query&lt;/li&gt;
&lt;li&gt;Lastly, if the database can reside inside memory (ie, in the system's RAM), a lot of time in I/O ops is saved, and hence it's fast.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Qt5 project integration
&lt;/h2&gt;

&lt;p&gt;This demo project will cover the compilation on &lt;strong&gt;Mac&lt;/strong&gt; only. However, it will not be very difficult to compile on other platforms. All that is needed is to download the required binaries (linked libraries, eg, .dll, .so files) for the respective platforms.&lt;/p&gt;

&lt;p&gt;Link to the required binaries: &lt;a href="https://duckdb.org/docs/installation/" rel="noopener noreferrer"&gt;https://duckdb.org/docs/installation/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The following steps are already done inside the project. This is only required for fresh projects.&lt;/strong&gt; After downloading, the following configuration needs to be done.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Copy the &lt;code&gt;libduckdb.dylib&lt;/code&gt; &amp;amp; &lt;code&gt;duckdb.hpp&lt;/code&gt; files in the Qt project root.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Adjust the &lt;code&gt;.pro&lt;/code&gt; file to add the library. The following line needs to be added in the file for &lt;strong&gt;Mac&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;macx: LIBS += -L$$PWD/./ -lduckdb
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The path can be adjusted in &lt;strong&gt;-L\$\$PWD/./&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;For other platforms, follow the instructions on &lt;a href="https://doc.qt.io/qtcreator/creator-project-qmake-libraries.html" rel="noopener noreferrer"&gt;https://doc.qt.io/qtcreator/creator-project-qmake-libraries.html&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Import &lt;code&gt;duckdb.hpp&lt;/code&gt; file in the project&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The &lt;code&gt;DuckCRUD&lt;/code&gt; class
&lt;/h2&gt;

&lt;p&gt;This class contains all the methods to connect to an InMemory instance of DuckDb and perform CRUD operations&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Import &lt;code&gt;duckdb.hpp&lt;/code&gt; file
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    #include "duckdb.hpp"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Contains &lt;code&gt;Q_INVOKABLE&lt;/code&gt; methods for &lt;strong&gt;CRUD&lt;/strong&gt; operations
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    Q_INVOKABLE void insertData();
    Q_INVOKABLE QStringList readTableData();
    Q_INVOKABLE void updateData();
    Q_INVOKABLE void deleteData();
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;A signal to notify if data is updated in the class. This signal is received on the QML code to update the view
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;signals:
    void dataUpdated();
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Instantiate &lt;code&gt;duckdb&lt;/code&gt; object and a connection
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;private:
    duckdb::DuckDB db;
    duckdb::Connection con;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;In the constructor, default in-memory database, connection are defined. Also, a default table with some data is created
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;DuckCRUD::DuckCRUD(QObject *parent) : QObject(parent),
    db(nullptr), con(db), counter(1)
{

    // Create a table in the constructor and insert some default values

    con.Query("CREATE TABLE people(id INTEGER, name VARCHAR)");
    con.Query("INSERT INTO people VALUES (0,'Mark'), (1, 'Hannes')");
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's it. It was easy, wasn't it?&lt;/p&gt;

</description>
      <category>featureflag</category>
      <category>learning</category>
      <category>career</category>
      <category>devcyclechallenge</category>
    </item>
    <item>
      <title>Spam posts in Dev</title>
      <dc:creator>Chilarai</dc:creator>
      <pubDate>Sun, 04 Oct 2020 15:11:36 +0000</pubDate>
      <link>https://forem.com/chilarai/spam-posts-in-dev-4mpl</link>
      <guid>https://forem.com/chilarai/spam-posts-in-dev-4mpl</guid>
      <description>&lt;p&gt;Suddenly, I see a lot of spam posts here with services promoting their customer care numbers like this one&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/roygorav56/mayra-studio-customer-care-number-7318720711-7384823438-4198"&gt;https://dev.to/roygorav56/mayra-studio-customer-care-number-7318720711-7384823438-4198&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Just because you want SEO ranks, you can post anything. What the heck? &lt;/p&gt;

&lt;p&gt;You are not adding anything meaningful to this community with your customer care numbers&lt;/p&gt;

&lt;p&gt;Cant we do something about this?&lt;/p&gt;

</description>
      <category>spam</category>
      <category>discuss</category>
    </item>
  </channel>
</rss>
