<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/"><channel><title>Projects on Kaveen Rodrigo</title><link>https://ukr.lk/category/projects/</link><description>Recent content in Projects on Kaveen Rodrigo</description><generator>Hugo</generator><language>en-us</language><atom:link href="https://ukr.lk/category/projects/index.xml" rel="self" type="application/rss+xml"/><item><title>Sri Lanka COVID-19 Memorial Site</title><link>https://ukr.lk/posts/sri-lanka-covid-19-memorial/</link><pubDate>Thu, 27 Aug 2026 00:00:00 +0530</pubDate><guid>https://ukr.lk/posts/sri-lanka-covid-19-memorial/</guid><media:thumbnail url="https://ukr.lk/posts/sri-lanka-covid-19-memorial/share_img_hu_4d206a1a8db4721d.webp" width="1200" height="768"/><description>&lt;p&gt;&lt;strong&gt;This is not a new project, This is a recounting of events that took place five years ago.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s late July, amidst the pandemic. We were all home, surviving. I was fortunate that no one close to me succumb to COVID-19, I do remember being shocked one day on Twitter (which I was religiously hooked on back then)&lt;/p&gt;
&lt;p&gt;A Tweep we were following, she was sick from COVID-19 and was tweeting how it sucks and she&amp;rsquo;s quarantining. A day later a friend of her Tweeted how she had passed away&amp;hellip;&lt;/p&gt;
&lt;p&gt;

&lt;figure id="image-1" class="image-figure"&gt;
	
		
		&lt;img src="https://ukr.lk/posts/sri-lanka-covid-19-memorial/share_img_hu_47b9b155bcae5ec3.webp" width="1600" height="1024" class="summary-image" alt="project banner image"&gt;
	
 &lt;figcaption&gt;Image 1: project banner image&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;The project came after, this was not something I spearheaded, a lot of folks were behind it. Full list of contributors and story of the concept can be found on the &lt;a href="https://sl-c19-memorial.github.io/about/"&gt;about page&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I took on the tasks of setting up the website and building data pipelines to process the scanned reports by the government. Group of volunteers checked and help manage the data set. Soon after we started accepting submissions from the public.&lt;/p&gt;
&lt;p&gt;Technical details: All software built was Open Source. Find them in the &lt;a href="https://github.com/sl-c19-memorial"&gt;GitHub Organisation.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Some other websites who reported on this,&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://archive.roar.media/english/life/current-affairs/sri-lanka-covid19-memorial"&gt;&amp;ldquo;A Digital Space For Grief: The Sri Lanka COVID-19 Memorial&amp;rdquo;&lt;/a&gt; by Roar Media, reported on 05-10-2021&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.hirunews.lk/goldfmnews/284035/memorial-created-to-commemorate-covid-deaths-in-sri-lanka"&gt;&amp;ldquo;Memorial created to commemorate COVID deaths in Sri Lanka&amp;rdquo;&lt;/a&gt; by Hiru News (Gold FM News), reported on 04-10-2021&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dailyexpress.lk/hot-topics/covid-19-hot-topics/11373/"&gt;&amp;ldquo;The Sri Lanka COVID-19 Memorial&amp;rdquo;&lt;/a&gt; by Daily Express, reported on 06-10-2021&lt;/li&gt;
&lt;li&gt;&lt;a href="https://technews.lk/group-of-volunteers-launch-sri-lanka-covid-19-memorial-website/"&gt;&amp;ldquo;Group of volunteers launch Sri Lanka COVID-19 memorial website&amp;rdquo;&lt;/a&gt; by TechNews.LK, reported on 05-10-2021&lt;/li&gt;
&lt;li&gt;&lt;a href="https://sinhala.newswire.lk/2021/10/04/%E0%B6%9A%E0%B7%9C%E0%B7%80%E0%B7%92%E0%B6%A9%E0%B7%8A-%E0%B6%B8%E0%B6%BB%E0%B6%AB-%E0%B7%83%E0%B7%92%E0%B7%84%E0%B7%92%E0%B6%9A%E0%B6%BB%E0%B6%B1%E0%B7%8A%E0%B6%B1-%E0%B6%85%E0%B6%B1%E0%B7%8A/"&gt;&amp;ldquo;කොවිඩ් මරණ සිහි කරන්න අන්තර්ජාල අඩවියක්&amp;rdquo;&lt;/a&gt; by NewsWire Sinhala, reported on 04-10-2021&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;2026-08-27 Update:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;It was becoming hard to maintain this website with it&amp;rsquo;s old dependencies. And I had forgotten to renew the domain. Aided with LLM coding tools, I managed to migrate the site to a Hugo static site and host it on GitHub pages. As for the interactive forms I added Google Forms to collect input.&lt;/p&gt;</description></item><item><title>Euclidean Groove Thing</title><link>https://ukr.lk/posts/euclidean-groove-thing/</link><pubDate>Thu, 22 Dec 2022 18:40:04 +0530</pubDate><guid>https://ukr.lk/posts/euclidean-groove-thing/</guid><media:thumbnail url="https://ukr.lk/posts/euclidean-groove-thing/thumb_hu_58863bcb2f211863.webp" width="1200" height="900"/><description>&lt;p&gt;Exploration into Euclidean Distribution and Its Musical Properties.&lt;/p&gt;
&lt;p&gt;I built a four-part sequencer that uses Euclidean distribution to trigger sounds and notes.&lt;/p&gt;
&lt;p&gt;

&lt;figure id="image-1" class="image-figure"&gt;
	
		
		&lt;img src="https://ukr.lk/posts/euclidean-groove-thing/screenshot_hu_361c2a19799c0d10.webp" width="1600" height="1116" class="summary-image" alt="Screenshot of the app"&gt;
	
 &lt;figcaption&gt;Image 1: Screenshot of the app&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;You can play around with it online, &lt;a href="https://euclideangroove.projects.ukr.lk"&gt;euclideangroove.projects.ukr.lk&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;As for the melody, the notes are picked using a &amp;ldquo;Turing machine,&amp;rdquo; a modular staple that uses shift registers and probability to generate musical notes&lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;In concept, I accomplished what I set out to do. However, the web-appification of it is not the best. The randomly generated tunes are, at best, chaotic. I shall revisit this project one day.&lt;/p&gt;
&lt;p&gt;Built using:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://p5js.org"&gt;p5.js&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://tonejs.github.io"&gt;Tone.js&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/bitcraftlab/p5.gui"&gt;p5.gui.js&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="footnotes" role="doc-endnotes"&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id="fn:1"&gt;
&lt;p&gt;Gross simplification, check this video for more information &lt;a href="https://www.youtube.com/watch?v=va2XAdFtmeU&amp;amp;t=2s"&gt;https://www.youtube.com/watch?v=va2XAdFtmeU&amp;amp;t=2s&lt;/a&gt;&amp;#160;&lt;a href="#fnref:1" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</description></item><item><title>Song of Life</title><link>https://ukr.lk/posts/song-of-life/</link><pubDate>Thu, 24 Nov 2022 19:01:47 +0530</pubDate><guid>https://ukr.lk/posts/song-of-life/</guid><media:thumbnail url="https://ukr.lk/posts/song-of-life/thumb_hu_6ee608afdcbc137d.webp" width="1200" height="675"/><description>&lt;p&gt;Song of Life is a piece of software I wrote to explore an idea I had: &amp;ldquo;What would Conway&amp;rsquo;s Game of Life sound like?&amp;rdquo;&lt;/p&gt;
&lt;p&gt;At the time, I was experimenting with p5.js and wrote a simple Game of Life playfield. I turned this world into a sequencer, where the y-axis represents time, and the x-axis represents the musical scale.&lt;/p&gt;
&lt;p&gt;After growing tired of just a single major scale, I decided to introduce some randomness and transform it into a web app.&lt;/p&gt;
&lt;p&gt;

&lt;figure id="image-1" class="image-figure"&gt;
	
		
		&lt;img src="https://ukr.lk/posts/song-of-life/screenshot_hu_61584165155de156.webp" width="1600" height="1210" class="summary-image" alt="Screenshot of the app"&gt;
	
 &lt;figcaption&gt;Image 1: Screenshot of the app&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;You can play around with it online, &lt;a href="https://songoflife.projects.ukr.lk"&gt;songoflife.projects.ukr.lk&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Using a random number as a seed, the web app generates a unique world on load and associates it with a unique scale and key.&lt;/p&gt;
&lt;p&gt;What I found more fascinating than the formation phase is the stabilization of the world, which sometimes yields a pleasing melody.&lt;/p&gt;</description></item><item><title>COVID-19 Vax Locations</title><link>https://ukr.lk/posts/project_notes_vax_center_finder/</link><pubDate>Wed, 13 Oct 2021 16:10:15 +0000</pubDate><guid>https://ukr.lk/posts/project_notes_vax_center_finder/</guid><media:thumbnail url="https://ukr.lk/posts/project_notes_vax_center_finder/vax_site_header_hu_b7a8c10d7f5f940d.webp" width="1200" height="675"/><description>&lt;p&gt;This story is reaching this blog two months late, at present moment I&amp;rsquo;m unable to summarize the status quo when starting this project.&lt;/p&gt;
&lt;p&gt;Apart from just building a website with data, &lt;strong&gt;I&amp;rsquo;d like y&amp;rsquo;all to takeaway the importance of open data availability&lt;/strong&gt;. Which a couple of the projects I&amp;rsquo;ve been tackling have been running into trouble with.&lt;/p&gt;
&lt;p&gt;

&lt;figure id="image-1" class="image-figure"&gt;
	
		
		&lt;img src="https://ukr.lk/posts/project_notes_vax_center_finder/vax_site_header_hu_11a2d3a82c6cbc66.webp" width="1600" height="900" class="summary-image" alt="From a simple PDF to a site"&gt;
	
 &lt;figcaption&gt;Image 1: From a simple PDF to a site&lt;/figcaption&gt;
&lt;/figure&gt;

Enough preamble, let&amp;rsquo;s get into the genesis, development and aftermath of this project.&lt;/p&gt;
&lt;h2 id="inspiration"&gt;Inspiration&lt;/h2&gt;
&lt;p&gt;My parents we&amp;rsquo;re lucky to be vaccinated quite early on, but a lot of folks were having a hard time finding vaccination centers. The present system was that the centers we&amp;rsquo;re decided daily; and published on the &lt;a href="https://www.presidentsoffice.gov.lk/index.php/vaccination-dashboard/"&gt;Presidential Secretariat website&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I was quite disappointed to see that this data was offered as a PDF file. It was clumsy and only offered in English. I got know that this was a shared sentiment across different folks.&lt;/p&gt;
&lt;p&gt;

&lt;figure id="image-6" class="image-figure"&gt;
	
		
		&lt;img src="https://ukr.lk/posts/project_notes_vax_center_finder/vax_site_data_src_hu_b1b116e4174dc566.webp" width="1600" height="1246" class="summary-image" alt=""&gt;
	
 &lt;figcaption&gt;Image 6: &lt;/figcaption&gt;
&lt;/figure&gt;

During the daily doom scroll rounds of Twitter I came across &lt;a href="https://www.nuwan.org"&gt;Nuwan I. Senaratna&lt;/a&gt;&amp;rsquo;s tweet. He had spun up a GitHub repository and auto-scraped the data to TSV (a machine readable format) daily.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://twitter.com/nuuuwan/status/1427214177622450180"&gt;Tweet Link&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This was the enabler for this project, and I&amp;rsquo;d like to thank Nuwan on his contributions for building open datasets!&lt;/p&gt;
&lt;h2 id="requirement"&gt;Requirement&lt;/h2&gt;
&lt;p&gt;With the data-set available, I was ready to get on the development. I wrote down a couple of basic requirements that I want to fulfill with the web-app.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Trilingual Internationalization. Support Sinhala, Tamil and English.&lt;/li&gt;
&lt;li&gt;Find vaccination centers by city.&lt;/li&gt;
&lt;li&gt;Show geo-location details and links for Google Maps.&lt;/li&gt;
&lt;li&gt;Responsive / Mobile First.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Simple, the non-functional ones being,&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Easy To Deploy.&lt;/li&gt;
&lt;li&gt;Easy To Develop. (by myself)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I added some nice to have enhancements down the line as well. Also some &lt;a href="https://github.com/kaveenr/lk-c19-vaccination-site-listing/graphs/contributors"&gt;other folk&lt;/a&gt; did help me out as well.&lt;/p&gt;
&lt;h2 id="development"&gt;Development&lt;/h2&gt;
&lt;p&gt;I&amp;rsquo;m not a good frontend web developer, It&amp;rsquo;s not my day-job. I&amp;rsquo;ve worked with early React, but I have not caught up with developments in the space. But I always do keep my ears up on Twitter to see what&amp;rsquo;s &amp;ldquo;hot&amp;rdquo;. I knew I want to use the following.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://nextjs.org"&gt;Next JS&lt;/a&gt; (Was already comfortable, as this blog was built on Next)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://tailwindcss.com"&gt;Tailwind CSS&lt;/a&gt; (Newcomer, but what a pleasant surprise)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://mapbox.com"&gt;Mapbox&lt;/a&gt; (Just works?)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I started out with the Tailwind &amp;amp; Next JS template and I was ready!&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;npx create-next-app -e with-tailwindcss lk-covid19-open-dash
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;NextJS&amp;rsquo;s &lt;a href="https://nextjs.org/docs/advanced-features/i18n-routing"&gt;Internationalization routing&lt;/a&gt; coupled with &lt;a href="https://github.com/amannn/next-intl"&gt;next-intl&lt;/a&gt; was easy to use. And internationalization was easy. Special mention goes on for &lt;a href="https://marketplace.visualstudio.com/items?itemName=JeffJorczak.auto-translate-json"&gt;Auto Translate JSON&lt;/a&gt; for VSCode, which allowed me to translate the Intl JSON from English to the other languages.&lt;/p&gt;
&lt;p&gt;But the biggest surprise was &lt;a href="http://tailwindcss.com"&gt;Tailwind CSS&lt;/a&gt;. I&amp;rsquo;ve been bitten many times writing CSS from scratch for this website. I didn&amp;rsquo;t want that pain. Tailwind was amazing, I was able to get the design up fast, responsive and compatible super fast.&lt;/p&gt;
&lt;p&gt;

&lt;figure id="image-2" class="image-figure"&gt;
	
		
		&lt;img src="https://ukr.lk/posts/project_notes_vax_center_finder/vax_site_git_contrib_hu_970b5a687bc695f5.webp" width="1600" height="630" class="summary-image" alt=""&gt;
	
 &lt;figcaption&gt;Image 2: &lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;I was able to get the site up and deployed on &lt;a href="http://Netlify.com"&gt;Netlify&lt;/a&gt; in a couple of days. I hosted it on a &lt;a href="https://vax.covid.ukr.lk"&gt;subdomain&lt;/a&gt; on my personal site.&lt;/p&gt;
&lt;p&gt;

&lt;figure id="image-3" class="image-figure"&gt;
	
		
		&lt;img src="https://ukr.lk/posts/project_notes_vax_center_finder/vax_site_screenshot_hu_9c0cba31cdee184a.webp" width="1600" height="1305" class="summary-image" alt=""&gt;
	
 &lt;figcaption&gt;Image 3: &lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 id="aftermath"&gt;Aftermath&lt;/h2&gt;
&lt;p&gt;I shared the link around Twitter and Reddit. It got some &amp;ldquo;decent&amp;rdquo; views and the Analytics showed decent interaction and retention.&lt;/p&gt;
&lt;p&gt;

&lt;figure id="image-4" class="image-figure"&gt;
	
		
		&lt;img src="https://ukr.lk/posts/project_notes_vax_center_finder/vax_site_analytics_1_hu_eec7eecd4788a012.webp" width="1600" height="1188" class="summary-image" alt=""&gt;
	
 &lt;figcaption&gt;Image 4: &lt;/figcaption&gt;
&lt;/figure&gt;



&lt;figure id="image-5" class="image-figure"&gt;
	
		
		&lt;img src="https://ukr.lk/posts/project_notes_vax_center_finder/vax_site_analytics_2_hu_114437380d20b27a.webp" width="1600" height="1183" class="summary-image" alt=""&gt;
	
 &lt;figcaption&gt;Image 5: &lt;/figcaption&gt;
&lt;/figure&gt;

In a day or so, I saw a couple of folks have built something similar and much better &lt;a href="https://vaxsl.com/"&gt;vaxsl.com&lt;/a&gt;. They had contact details and helpful resources. Since I didn&amp;rsquo;t have the bandwidth to expand upon I was happy that there was something better!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;This is ultimately the beauty of open data and APIs. They can serve the public to make informed decisions and allow third parties to build experiences that weren&amp;rsquo;t event initially thought of.&lt;/strong&gt;&lt;/p&gt;</description></item></channel></rss>