<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Stories by Chamal Senarathna on Medium]]></title>
        <description><![CDATA[Stories by Chamal Senarathna on Medium]]></description>
        <link>https://medium.com/@chamalsena?source=rss-1d65cbd159dd------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/1*vr9qPcH2NXmRZzpQgh2HZQ.jpeg</url>
            <title>Stories by Chamal Senarathna on Medium</title>
            <link>https://medium.com/@chamalsena?source=rss-1d65cbd159dd------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Wed, 04 Nov 2026 23:30:47 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@chamalsena/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com" rel="hub"/>
        <item>
            <title><![CDATA[Deploy Your ASP.NET Core Web API in Minutes with WSO2 Developer Platform]]></title>
            <link>https://chamalsena.medium.com/deploy-your-asp-net-core-web-api-in-minutes-with-wso2-developer-platform-cbf3de038ed5?source=rss-1d65cbd159dd------2</link>
            <guid isPermaLink="false">https://medium.com/p/cbf3de038ed5</guid>
            <category><![CDATA[openchoreo]]></category>
            <category><![CDATA[aspnetcore]]></category>
            <category><![CDATA[deployment]]></category>
            <category><![CDATA[dotnet]]></category>
            <category><![CDATA[wso2]]></category>
            <dc:creator><![CDATA[Chamal Senarathna]]></dc:creator>
            <pubDate>Fri, 28 Aug 2026 17:39:08 GMT</pubDate>
            <atom:updated>2026-08-28T17:39:08.284Z</atom:updated>
            <content:encoded><![CDATA[<p>After building my first few ASP.NET Core Web APIs, I started looking for an easy way to deploy them. While there are many hosting platforms available, most of them require additional configuration, have limited free tiers, or aren’t the easiest to get started with.</p><p>While looking for a simple deployment platform, I came across <a href="https://wso2.com/engineering-platform/developer-platform"><strong>WSO2 Developer Platform</strong> (formerly Choreo)</a>. It is an Internal Developer Platform (IDP) that handles building, deploying, and hosting your applications, allowing you to focus on writing code instead of managing infrastructure.</p><p>In this article, I’ll walk you through the complete process of creating an ASP.NET Core Web API, pushing it to GitHub, and deploying it to WSO2 Developer Platform. By the end of this guide, you’ll have your API running in the cloud in just a few simple steps.</p><h3>Create the ASP.NET Core Web API</h3><p>For this guide, I’ll assume you already have the <strong>.NET SDK</strong> installed on your machine and have a basic understanding of developing applications with ASP.NET Core.</p><p>To get started, open your terminal and create a new ASP.NET Core Web API project by running the following command:</p><pre>dotnet new webapi -n DotNetChoreoDemo</pre><p>This command creates a new ASP.NET Core Web API project named DotNetChoreoDemo.</p><p>Next, navigate into the project directory.</p><pre>cd DotNetChoreoDemo</pre><p>Before deploying the application, it’s always a good idea to verify that everything works correctly on your local machine.</p><p>Although the default project includes Swagger for testing your API, we’ll also add a simple endpoint that we’ll use later to verify the deployment.</p><p>Open <strong>Program.cs</strong> and add the following lines immediately after creating the builder:</p><pre>var urls = builder.Configuration[&quot;ASPNETCORE_URLS&quot;] ?? &quot;http://0.0.0.0:8080&quot;;<br>builder.WebHost.UseUrls(urls);</pre><p>Next, add the following route before app.Run();.</p><pre>app.MapGet(&quot;/health&quot;, () =&gt; Results.Ok(&quot;OK&quot;));</pre><p>Now run the application.</p><pre>dotnet run</pre><p>Once the application starts, you’ll see the local URL in your terminal.</p><p>Open that URL in your browser and navigate to the /health endpoint you created earlier.</p><p>If everything is working correctly, you should see the response as “OK”</p><h3>Push the project to GitHub</h3><p>Create a <strong>public GitHub repository</strong> and push your ASP.NET Core project to it.</p><p>If you’re using the <strong>Free Tier</strong> of WSO2 Developer Platform, make sure the repository is <strong>public</strong>, as the free tier only supports deployments from public GitHub repositories.</p><h3>Deploying the Application</h3><p>Open <strong>WSO2 Developer Platform</strong> by visiting <a href="https://console.choreo.dev"><strong>https://console.choreo.dev</strong></a>. If you don’t already have an account, create one and sign in.</p><p>After logging in, you’ll land on the <strong>Overview</strong> page. Click <strong>Create Project</strong> to create a new project. Once the project has been created, click <strong>Create Component</strong>.</p><p>Since we’re deploying an ASP.NET Core REST API, select the <strong>Service</strong> component type.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*joIg8uR7bkuvD6i-ZX7M6Q.png" /></figure><p>Next, connect the public GitHub repository you created earlier. After selecting the repository, provide a display name for the component and verify the branch and component directory if necessary.</p><p>Scroll down to the <strong>Build Preset</strong> section and select <strong>.NET</strong>. Choose <strong>.NET 8.x</strong> as the runtime version, then set the <strong>Port</strong> to <strong>8080</strong>, which matches the port your application is configured to listen on.</p><p>Once everything is configured, click <strong>Create and Deploy</strong>.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*oAJT9tH-bU9cScre_J_tkw.png" /></figure><p>The platform will immediately start building your application. Open the <strong>Build</strong> page from the left sidebar to monitor the progress. Depending on the size of your project, the build may take anywhere from a few seconds to a couple of minutes. Wait until the build status changes to <strong>Success</strong>.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*u7u6V0UVT8k6anuZcCRFKw.png" /></figure><p>After the build has completed, open the <strong>Deploy</strong> page from the left sidebar. You’ll see three deployment stages: <strong>Set up</strong>, <strong>Development</strong>, and <strong>Production</strong>.</p><p>From the <strong>Set up</strong> card, open the dropdown next to <strong>Deploy</strong> and select <strong>Configure &amp; Deploy</strong>.</p><p>This opens the deployment configuration wizard on the right side.</p><p>In <strong>Step 1/3 -Environment Configurations</strong>, you can add environment variables and secrets such as database connection strings, API keys, or other application configuration.</p><p>For this application, click <strong>Add a Configuration</strong> and create an environment variable named ASPNETCORE_URLS with the value <a href="http://0.0.0.0:8080.">http://0.0.0.0:8080.</a></p><p>This tells ASP.NET Core to listen on port 8080, which is the same port configured for the Service component in WSO2 Developer Platform.</p><p>Once you’ve added the environment variable, click <strong>Next</strong>.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*rt4KA9cMLWlDrDAXhlol4w.png" /></figure><p>In <strong>Step 2/3 -File and Certificate Mount</strong>, no additional configuration is required for this application. Click <strong>Next</strong> to continue.</p><p>In <strong>Step 3/3 -Endpoint Details</strong>, make sure to <strong>disable the OAuth2 endpoint authentication</strong> by unchecking the enabled option, since this sample API doesn’t require authentication. After that, scroll to the bottom of the panel and click <strong>Deploy</strong>.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*8dws17IZFRzQFSkuaeAWtA.png" /></figure><p>Within a few moments, the <strong>Development</strong> card should show the deployment status as <strong>Active</strong>. This indicates that your application has been successfully deployed.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Xqq08obBmc0hWT01RjcyDg.png" /></figure><p>To verify the deployment, click the <strong>Endpoints</strong> icon in the <strong>Development</strong> card. This will display the public endpoint URL for your service. Open the endpoint in your browser and append the /health path to the URL.</p><p>For example:</p><pre>https://f2a60d61-0831-4ddf-bb84-4193bdc79cdb-dev.e1-us-east-azure.choreoapis.dev/dotnetchoreodemo/aspdotnet-service/v1.0/health</pre><p>If everything has been configured correctly, you should receive the OK response from the endpoint, confirming that your ASP.NET Core Web API is running successfully on Developer Platform.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*hT5k7FR9FUcG8YSHT60-og.png" /></figure><p>That’s it! You’ve successfully deployed your first ASP.NET Core Web API to WSO2 Developer Platform. From now on, every time you push changes to your GitHub repository, WSO2 Developer Platform can automatically build (make sure to enable auto build from the build section) and deploy the latest version of your application, making it easy to iterate and share your projects.</p><blockquote>I wouldn’t recommend using the <strong>free tier</strong> of WSO2 Developer Platform for a real production application. It’s a great choice for prototypes, demos, personal projects, or testing new ideas. If you’re building an application for real users, it’s better to use a paid plan that is designed to handle production workloads reliably.</blockquote><p><strong>Happy building, and let WSO2 Developer Platform handle the rest!</strong></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=cbf3de038ed5" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[The Mornings I Still Miss]]></title>
            <link>https://chamalsena.medium.com/the-mornings-i-still-miss-b27f95a68dc8?source=rss-1d65cbd159dd------2</link>
            <guid isPermaLink="false">https://medium.com/p/b27f95a68dc8</guid>
            <dc:creator><![CDATA[Chamal Senarathna]]></dc:creator>
            <pubDate>Fri, 14 Aug 2026 13:04:27 GMT</pubDate>
            <atom:updated>2026-08-14T13:04:27.555Z</atom:updated>
            <content:encoded><![CDATA[<p>Some memories in life are very simple, but they stay in our hearts forever. For me, those memories come from the COVID-19 lockdown days in Sri Lanka.</p><p>During that time the whole country was closed. Schools were closed, roads were empty, and people stayed inside their homes. Many people remember that time as stressful and difficult, but my experience was a little different.</p><p>I live in a village in Kurunegala District(Bamunapotha), so life during the lockdown was quiet and slow. Every day I woke up around 4–5 AM. My alarm was the song “Runaway” by Aurora. In the early morning silence, when that song started playing, I felt completely calm and peaceful</p><p>After waking up, I started watching my A/L online class recordings. At that time I was not very active on social media, so most of my day was simple and focused. I still remember watching the Operating System Paging lesson on Pubudu Wijekoon sir’s IT class. I spent time learning, watching lectures, and also learning to build things on the internet.</p><p>Once the classes and other tasks were done, I usually listened to the Derana Aruna morning program. They talked about the day’s news and the latest COVID-19 updates in Sri Lanka. I still remember how Army Commander General Shavendra Silva used to join the program during that time to give updates on the COVID-19 situation. That was one of the things I looked forward to as well. Listening to those updates became part of my daily routine during the lockdown.</p><p>In front of our house, we have a small coconut land. Sometimes we went there to do a bit of planting vegetables like “nai kochchi”, “karawila” and “bandakka”. It was simple work, but there was something satisfying about spending time on the land and watching things grow.</p><p>At the time, I didn’t realize how special those days were. It just felt like normal life. But looking back now, I understand how meaningful and simple those quiet moments.</p><p>Today I live in a crowded city for my higher studies. There are vehicles everywhere, constant noise, buildings, and concrete. Life moves fast here, and sometimes it feels uncomfortable compared to the peaceful village mornings I once had. But I know I need to be here for now, to build my future :|</p><p>That is why I still remember those lockdown days :)</p><p>Maybe I cannot go back to those exact days again. Life always moves forward. But those memories remind me that happiness is often found in the simplest moments.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=b27f95a68dc8" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Send Data from ESP32 to Supabase]]></title>
            <link>https://chamalsena.medium.com/send-data-from-esp32-to-supabase-bb296bdb8e68?source=rss-1d65cbd159dd------2</link>
            <guid isPermaLink="false">https://medium.com/p/bb296bdb8e68</guid>
            <category><![CDATA[arduino]]></category>
            <category><![CDATA[supabase]]></category>
            <category><![CDATA[esp32]]></category>
            <dc:creator><![CDATA[Chamal Senarathna]]></dc:creator>
            <pubDate>Wed, 20 Nov 2024 22:09:48 GMT</pubDate>
            <atom:updated>2024-11-20T22:29:22.212Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*ifj1h62aIyZaEAtBiFMnFw.png" /></figure><p>These days, I am learning Arduino Stuff because we have a group project in the 1st year Fundamentals of Computing module, where we need to build a hardware product.</p><p>Our team chose the healthcare category for this project. So, we’re going to collect health insights, like body temperature and heart rate, from the user, transmit the data to an ESP32, and display it on a 16x2 LCD.</p><p>However, as a software guy, I feel lonely without adding some software components to this project. So, I suggested to the team that let’s transmit this data into the cloud database and visualize them on a web application.</p><p>Now to get into the topic, we need a platform/database to store these data. Generally, I use Supabase as a database for most of my projects, and I decided to use Supabase for this project too. But when it comes to inserting the data into the DB from ESP32, it’s a bit challenging because there is no official library provided by Supabase for that. So after searching on the internet, I saw a cool library called <a href="https://docs.arduino.cc/libraries/espsupabase/"><strong>ESPSupabase</strong></a><strong> </strong>that connects ESP32/8266 to Supabase via <strong>REST API</strong> and <strong>WebSockets</strong>.</p><p>So, in this article, I am going to do a simple demo of how to send some mock data from Arduino IDE to ESP32 and transmit that data into the supabase database using ESPSupabase library.</p><p>Before start, make sure you have:</p><pre>· ESP32 Microcontroller<br>· Arduino IDE<br>· Supabase Account</pre><p>Now let’s look at how to make this.</p><p>First, go to the Supabase dashboard and create a New project, for this demo I am going to send mock heart rate and body temp data to the database, so in the project go to the table section and create a new table called health_data and add two columns to store the heart rate and body temperature.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/624/1*f6UpxfG_upo-qp1_4B6iEQ.png" /></figure><blockquote><em>Make sure to disable to RLS by clicking the checkbox on the top, because iam not going much deeper in this example.</em></blockquote><p>That is about Supabase. Now let’s go to the Arduino IDE.</p><p>I hope you have worked with ESP32 on Arduino IDE before this, if not just follow this video on how to setup ESP32 with Arduino IDE. <a href="http://I hope you have worked with ESP32 on Arduino IDE before this, if not just follow this video on how to setup ESP32 wth Arduino IDE. https://youtu.be/CD8VJl27n94?si=kWZK5QMFF67o9KZH"><em>https://youtu.be/CD8VJl27n94?si=kWZK5QMFF67o9KZH</em></a></p><p>After setting up ESP32 with Arduino IDE, go to the library manager section search for ESPSupabase, and Click Install.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/624/1*GtmaYtHX1QAm0YX5bliAsA.png" /></figure><p>Now let’s move on to the program.</p><p>I’ve added the full code below and explained the code with comments.</p><blockquote>Make sure to change the <strong>supabase_url</strong> , <strong>anon_key</strong> to your credentials in this code. Also, in the table defining part, add the exact names you used for your <strong>table</strong> and <strong>columns</strong>.</blockquote><blockquote>You will also need to add your <strong>Wi-Fi credentials</strong> before uploading the code to the ESP32</blockquote><pre>// Import WiFi and ESPSupabase Library<br>#include &lt;WiFi.h&gt;<br>#include &lt;ESPSupabase.h&gt;<br><br>// Add you Wi-Fi credentials<br>const char* ssid = &quot;YOUR SSID&quot;;<br>const char* password = &quot;YOUR PASSWORD&quot;;<br><br>// Supabase credentials<br>const char* supabaseUrl = &quot;YOUR SUPABASE URL&quot;;<br>const char* supabaseKey = &quot;SUPABASE ANON KEY&quot;;<br><br>Supabase supabase;<br><br>void setup() {<br>  Serial.begin(115200);<br><br>  // Connect to Wi-Fi<br>  WiFi.begin(ssid, password);<br>  while (WiFi.status() != WL_CONNECTED) {<br>    delay(1000);<br>    Serial.println(&quot;Connecting to Wi-Fi...&quot;);<br>  }<br>  Serial.println(&quot;Wi-Fi connected!&quot;);<br><br>  // Init Supabase<br>  supabase.begin(supabaseUrl, supabaseKey);<br><br>  // Add the table name here<br>  String tableName = &quot;healthdata&quot;;<br>  // change the correct columns names you create in your table<br>  String jsonData = &quot;{\&quot;heartrate\&quot;: \&quot;70\&quot;, \&quot;bodytemp\&quot;: \&quot;37\&quot;}&quot;;<br><br>  // sending data to supabase<br>  int response = supabase.insert(tableName, jsonData, false);<br>  if (response == 200) {<br>    Serial.println(&quot;Data inserted successfully!&quot;);<br>  } else {<br>    Serial.print(&quot;Failed to insert data. HTTP response: &quot;);<br>    Serial.println(response);<br>  }<br>}<br><br>void loop() {<br>}</pre><p>Next, verify the program by pressing the first blue color icon, and It will successfully compile the program.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/624/1*5SqqlQKOI-pWctthmS08vQ.png" /></figure><p>Finally, plug your ESP32 into the Laptop/PC and then select to correct PORT from tools &gt; PORT section and upload the program to the board using the second blue color icon.</p><p>That’s it! Now, if you go to the Supabase database table, you can see that the mock data we added in this program will be displayed in the columns.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*FIB7NUMoha27ygYdU2bPng.png" /></figure><p>I think now you understand how to easily send data from the ESP32 to the Supabase database</p><p>Give it a try, and feel free to expand it with additional features like Row Level Security.</p><p>If you would like to learn more about this, please refer to the following documentation.</p><p><a href="https://github.com/jhagas/ESPSupabase">GitHub - jhagas/ESPSupabase: Connect ESP32/8266 with Supabase. Enhance your IoT project with open-source database service</a></p><p><a href="https://supabase.com/docs">https://supabase.com/docs</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=bb296bdb8e68" width="1" height="1" alt="">]]></content:encoded>
        </item>
    </channel>
</rss>