<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Malawige Inusha Thathsara Gunasekara</title>
    <description>The latest articles on DEV Community by Malawige Inusha Thathsara Gunasekara (@inushathathsara).</description>
    <link>https://dev.to/inushathathsara</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3688375%2F884c13e5-87d4-49ec-a3d1-a73e5f71b94c.png</url>
      <title>DEV Community: Malawige Inusha Thathsara Gunasekara</title>
      <link>https://dev.to/inushathathsara</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/inushathathsara"/>
    <language>en</language>
    <item>
      <title>AI-Powered Calming Audio &amp; Voice Companion for Dogs Home Alone</title>
      <dc:creator>Malawige Inusha Thathsara Gunasekara</dc:creator>
      <pubDate>Sat, 15 Aug 2026 20:19:59 +0000</pubDate>
      <link>https://dev.to/inushathathsara/ai-powered-calming-audio-voice-companion-for-dogs-home-alone-19d9</link>
      <guid>https://dev.to/inushathathsara/ai-powered-calming-audio-voice-companion-for-dogs-home-alone-19d9</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for &lt;a href="https://dev.to/challenges/weekend-2026-08-13"&gt;Weekend Challenge: Dog Days Edition&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;Over 70% of dogs suffer from some degree of &lt;strong&gt;separation anxiety&lt;/strong&gt; when their owners leave for work, errands, or travel. Symptoms include frantic barking, whining, pacing, destructive chewing, and prolonged stress spikes. Standard pet playlists on streaming platforms are static, repetitive, and lack the familiar reassurance pets crave most: &lt;strong&gt;their human's voice&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Paws &amp;amp; Peace&lt;/strong&gt; is an intelligent, multi-platform sensory comfort system designed to give pets a peaceful home-alone experience. Available as both a modern web app and a native Android application, it combines:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Personalized AI &amp;amp; Owner Voice Loops&lt;/strong&gt;: Using &lt;strong&gt;ElevenLabs AI Voice Synthesis&lt;/strong&gt;, pet parents can generate warm, soothing voice messages with their pet's name, customized reassurance phrases, and fine-tuned stability and clarity. Owners can also record their real voices directly in the built-in Voice Studio.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Layered Procedural Soundscapes&lt;/strong&gt;: Real-time synthesized pink-noise rainfall (to mask sudden doorbell and traffic sounds), a rhythmic maternal heartbeat simulator (60–70 BPM), and 432Hz harmonic drone frequencies scientifically proven to lower canine heart rates.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Intelligent Departure &amp;amp; Interval Loops&lt;/strong&gt;: Paced session scheduler with configurable departure delays (e.g., starts 5 minutes after leaving) and recurring voice reassurance (e.g., repeating loving phrases every 3 minutes).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Biofeedback Breathing Visualizer&lt;/strong&gt;: Luminous multi-ring ripple visualizer paired with live equalizers to create a tranquil visual atmosphere.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;One-Tap Smart Presets&lt;/strong&gt;: Instant audio mixes tailored for &lt;em&gt;Thunder Shield&lt;/em&gt;, &lt;em&gt;Bedtime Lullaby&lt;/em&gt;, &lt;em&gt;Leaving Home&lt;/em&gt;, and &lt;em&gt;Quick Nap&lt;/em&gt;.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Live Web Application&lt;/strong&gt;: &lt;a href="https://weekend-challenge-dog-days-edition-phi.vercel.app" rel="noopener noreferrer"&gt;https://weekend-challenge-dog-days-edition-phi.vercel.app&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Android Native APK&lt;/strong&gt;: &lt;a href="https://github.com/inusha-thathsara/Weekend-Challenge-Dog-Days-Edition---Home-Alone-Playlist/releases/tag/v2.0.0" rel="noopener noreferrer"&gt;Download v2.0.0 APK&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Web &amp;amp; Mobile Experience:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Web App&lt;/strong&gt;: Glassmorphic, dark-mode responsive dashboard with Web Audio API procedural sound synthesis and Web Speech API fallback.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Android App&lt;/strong&gt;: Native Jetpack Compose UI with AndroidX Media3 background foreground service that keeps soothing pets uninterrupted even when the device screen is locked.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;GitHub Repository&lt;/strong&gt;: &lt;a href="https://github.com/inusha-thathsara/Weekend-Challenge-Dog-Days-Edition---Home-Alone-Playlist" rel="noopener noreferrer"&gt;https://github.com/inusha-thathsara/Weekend-Challenge-Dog-Days-Edition---Home-Alone-Playlist&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;p&gt;Building a truly effective sensory companion for dogs required blending canine psychoacoustics with modern cross-platform engineering.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Deep Integration with ElevenLabs AI Voice Synthesis
&lt;/h3&gt;

&lt;p&gt;Voice is the strongest comfort cue for a dog. We integrated ElevenLabs' cutting-edge Text-to-Speech API to craft lifelike, warm voice tracks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Turbo v2.5 Engine (&lt;code&gt;eleven_turbo_v2_5&lt;/code&gt;)&lt;/strong&gt;: Upgraded synthesis to the newest ultra-low latency model (&amp;lt;300ms response time) with high throughput and lower credit usage.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Curated Soothing Voice Models&lt;/strong&gt;: Selected gentle, calming voices (&lt;em&gt;Rachel, Bella, Antoni, Domi, Elli&lt;/em&gt;) with adjustable &lt;strong&gt;Voice Stability&lt;/strong&gt; (0.3 – 1.0) and &lt;strong&gt;Similarity / Clarity Boost&lt;/strong&gt; (0.3 – 1.0) to achieve a soft, motherly or gentle fatherly cadence.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Auto-Retry &amp;amp; Rate Limit Handling&lt;/strong&gt;: Implemented exponential backoff retry logic that catches burst rate limits (&lt;code&gt;HTTP 429&lt;/code&gt;), waits 1.5 seconds, and transparently completes generation without failing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Instant Audio Preview Engine&lt;/strong&gt;: Embedded &lt;code&gt;MediaPlayer&lt;/code&gt; (Android) and &lt;code&gt;AudioContext&lt;/code&gt; (Web) previewers that immediately play synthesized tracks so owners can audit tone and volume before leaving.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Compile-Time Build Bridge&lt;/strong&gt;: On Android, Gradle automatically reads &lt;code&gt;VITE_ELEVENLABS_API_KEY&lt;/code&gt; from &lt;code&gt;.env&lt;/code&gt; and injects it into &lt;code&gt;BuildConfig&lt;/code&gt;, enabling zero-config out-of-the-box synthesis while still allowing user overrides in the Settings dialog.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. Procedural Audio Synthesis (No Internet / No MP3 Loops)
&lt;/h3&gt;

&lt;p&gt;Instead of streaming heavy, looping MP3 audio files:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Web&lt;/strong&gt;: Implemented dynamic Web Audio API nodes with continuous pink noise buffers, a low-pass bi-quad filter, and an LFO oscillator for the rhythmic heartbeat.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Android&lt;/strong&gt;: Engineered a native &lt;code&gt;AudioSynthesizer&lt;/code&gt; using &lt;code&gt;AudioTrack&lt;/code&gt; and direct PCM byte synthesis. This ensures zero network usage, minimal memory footprint, and infinite non-repeating acoustic variation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Canine Acoustic Science&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;Pink Noise&lt;/em&gt;: Has equal energy per octave ($1/f$ spectral density), which matches canine hearing frequency curves and masks sudden acoustic triggers (thunder, sirens).&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Maternal Heartbeat&lt;/em&gt;: Low-pass filtered dual-pulse (lub-dub) at 65 BPM simulating a mother dog's calming presence.&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;432Hz Sine Harmonic&lt;/em&gt;: Calibrated sinusoidal frequency associated with parasympathetic nervous system activation.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. Native Android Architecture (Jetpack Compose &amp;amp; Media3)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;UI &amp;amp; Design System&lt;/strong&gt;: Built with 100% Jetpack Compose and Material 3, featuring glassmorphism, responsive 50/50 segmented tab controls, custom equalizers, and glowing gradient action buttons.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Background Foreground Service&lt;/strong&gt;: Implemented &lt;code&gt;PlaybackService&lt;/code&gt; powered by &lt;code&gt;androidx.media3.exoplayer&lt;/code&gt; and &lt;code&gt;MediaSessionService&lt;/code&gt;. This ensures that even when the owner locks the phone or puts it on the counter, the soothing playlist continues running indefinitely with interactive lock-screen media controls.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;State Management&lt;/strong&gt;: Built on unidirectional Data Flow with &lt;code&gt;HomeViewModel&lt;/code&gt;, Kotlin Coroutines, &lt;code&gt;StateFlow&lt;/code&gt;, and Jetpack Preferences DataStore for instant persistence of pet profiles and voice preferences.&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Built for dogs everywhere who deserve peace and comfort while waiting for their best friends to come home.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>weekendchallenge</category>
    </item>
    <item>
      <title>Production AI Dog Breed Identifier &amp; Care Guide</title>
      <dc:creator>Malawige Inusha Thathsara Gunasekara</dc:creator>
      <pubDate>Sat, 15 Aug 2026 17:38:43 +0000</pubDate>
      <link>https://dev.to/inushathathsara/production-ai-dog-breed-identifier-care-guide-31if</link>
      <guid>https://dev.to/inushathathsara/production-ai-dog-breed-identifier-care-guide-31if</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for &lt;a href="https://dev.to/challenges/weekend-2026-08-13"&gt;Weekend Challenge: Dog Days Edition&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Have you ever looked at a dog at the park or in an adoption shelter and wondered: &lt;em&gt;"What breed is that, and what kind of care does it need?"&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Meet &lt;strong&gt;BreedSnap&lt;/strong&gt;, a production-grade, full-stack canine intelligence web application powered by &lt;strong&gt;Google Gemini Multimodal Vision AI&lt;/strong&gt;. With just a single photo, BreedSnap instantly identifies the dog breed, scores temperament and energy traits, generates a veterinary-grade care guide, and lets you download a verified PDF breeding report with one click.&lt;/p&gt;




&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;BreedSnap&lt;/strong&gt; transforms any canine photo into an actionable, comprehensive genetic and breed profile. &lt;/p&gt;

&lt;p&gt;Instead of returning a simple text label, BreedSnap delivers a complete companion intelligence profile:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Instant Canine Visual Recognition&lt;/strong&gt;: Snap a live photo using your phone's camera, drag and drop files from desktop, or test instantly with one-click canine presets (&lt;em&gt;Golden Retriever&lt;/em&gt;, &lt;em&gt;Siberian Husky&lt;/em&gt;, &lt;em&gt;Pembroke Welsh Corgi&lt;/em&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deep Breed &amp;amp; Heritage Breakdown&lt;/strong&gt;: Pinpoints official breed names, historical origins, and confidence ratings with ~99% match accuracy.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;5-Factor Trait &amp;amp; Temperament Scoring&lt;/strong&gt;: Visual 5-point rating bars for:

&lt;ul&gt;
&lt;li&gt;Energy Level&lt;/li&gt;
&lt;li&gt;Trainability &amp;amp; Intelligence&lt;/li&gt;
&lt;li&gt;Family &amp;amp; Child Friendliness&lt;/li&gt;
&lt;li&gt;Grooming Demand&lt;/li&gt;
&lt;li&gt;Barking Tendency&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Veterinary Care Guide &amp;amp; Health Watchlist&lt;/strong&gt;: Provides tailored daily exercise routines, coat maintenance frequency, dietary guidelines, adult weight/size specs, life expectancy, and a genetic health watchlist (e.g., hip dysplasia, IVDD, cataracts).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Canine Trivia &amp;amp; Heritage&lt;/strong&gt;: Uncovers historical folklore and behavioral facts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Downloadable Official PDF Report&lt;/strong&gt;: Compiles a print-ready, high-resolution PDF certificate containing the dog's photo, visual rating bars, care matrix, and verification seal.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Voice Pronunciation&lt;/strong&gt;: Native audio synthesis of complex breed names using the Web Speech API.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Persistent Scan History&lt;/strong&gt;: Local storage-backed scan drawer allowing users to browse, reload, and re-export past analyses offline.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Live Application&lt;/strong&gt;: &lt;a href="https://weekend-challenge-dog-days-edition-nine.vercel.app" rel="noopener noreferrer"&gt;https://weekend-challenge-dog-days-edition-nine.vercel.app&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Source Code Repository&lt;/strong&gt;: &lt;a href="https://github.com/inusha-thathsara/Weekend-Challenge-Dog-Days-Edition---Breed-Identifier" rel="noopener noreferrer"&gt;https://github.com/inusha-thathsara/Weekend-Challenge-Dog-Days-Edition---Breed-Identifier&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;

&lt;p&gt;The entire codebase is open-source and available on GitHub:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Repository Link&lt;/strong&gt;: &lt;a href="https://github.com/inusha-thathsara/Weekend-Challenge-Dog-Days-Edition---Breed-Identifier" rel="noopener noreferrer"&gt;https://github.com/inusha-thathsara/Weekend-Challenge-Dog-Days-Edition---Breed-Identifier&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Architecture &amp;amp; Tech Stack
&lt;/h3&gt;

&lt;p&gt;BreedSnap was designed with speed, privacy, and visual excellence in mind:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Frontend&lt;/strong&gt;: Lightweight Vanilla HTML5, modern CSS3 (custom glassmorphism design system, Outfit &amp;amp; Plus Jakarta Sans typography, smooth micro-animations), and modular ES6+ JavaScript.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Backend API&lt;/strong&gt;: Node.js &amp;amp; Express with rate-limiting middleware (&lt;code&gt;express-rate-limit&lt;/code&gt;) to prevent API abuse and securely isolate the Gemini API key from the browser.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Serverless Ready&lt;/strong&gt;: Native Vercel Serverless Functions (&lt;code&gt;/api/identify.js&lt;/code&gt;, &lt;code&gt;/api/status.js&lt;/code&gt;) and &lt;code&gt;vercel.json&lt;/code&gt; for 1-click zero-config cloud deployments.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI Vision Engine&lt;/strong&gt;: Google Generative Language API (&lt;strong&gt;Gemini 3.1 Flash / Gemini 3.7 Flash&lt;/strong&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PDF Engine&lt;/strong&gt;: Client-side document compilation with &lt;code&gt;html2pdf.js&lt;/code&gt; and CSS print media stylesheets (&lt;code&gt;@media print&lt;/code&gt;).&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  2. Prompt Engineering &amp;amp; Structured Gemini Vision
&lt;/h3&gt;

&lt;p&gt;To ensure consistent veterinary outputs, Gemini is guided with structured system instructions and &lt;code&gt;responseMimeType: "application/json"&lt;/code&gt;:&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="nx"&gt;prompt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;`You are a world-class veterinarian and canine genetics expert. Analyze this dog photo carefully.
Respond strictly with valid JSON only (no markdown fencing, no backticks, no explanatory comments).

If the image clearly contains a dog, return:
{
  "isDog": true,
  "breed": "Official breed name (e.g. Golden Retriever, French Bulldog)",
  "confidence": "High (98%) / Medium (85%) / Low (60%)",
  "origin": "Country / Region of origin",
  "summary": "Engaging 2-3 sentence overview of this breed's character and heritage.",
  "temperament": ["Trait 1", "Trait 2", "Trait 3", "Trait 4"],
  "size": "Size category and typical adult weight range (lbs &amp;amp; kg)",
  "lifespan": "Typical life expectancy in years",
  "ratings": {
    "energyLevel": 1-5,
    "groomingDemand": 1-5,
    "trainability": 1-5,
    "childFriendliness": 1-5,
    "barkingTendency": 1-5
  },
  "careGuide": {
    "exercise": "Recommended daily exercise schedule and activity types",
    "grooming": "Coat maintenance and grooming frequency",
    "nutrition": "Dietary requirements or sensitivities",
    "healthWatchlist": "Common genetic health conditions to monitor"
  },
  "funFacts": [
    "Fascinating historical or behavioral trivia item 1",
    "Fascinating historical or behavioral trivia item 2"
  ]
}

If the image does NOT contain a dog:
{
  "isDog": false,
  "message": "A friendly, witty description of what is actually visible in the image."
}`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  3. Resilient Multi-Model Fallback Cascade
&lt;/h3&gt;

&lt;p&gt;To guard against high-demand traffic spikes and quota limits, the backend implements an automatic fallback cascade across Gemini models:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;code&gt;gemini-3.1-flash-lite&lt;/code&gt; (ultra-fast latency &amp;amp; high throughput)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;gemini-3.7-flash&lt;/code&gt; (deep multimodal reasoning)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;gemini-3.5-flash&lt;/code&gt; (high-capacity fallback)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If any model encounters high demand or temporary unavailability, the request seamlessly transitions to the next model without failing the user experience.&lt;/p&gt;




&lt;h3&gt;
  
  
  4. Official PDF Report Generation
&lt;/h3&gt;

&lt;p&gt;Rather than a simple screenshot, clicking &lt;strong&gt;Download PDF Report&lt;/strong&gt; dynamically constructs a high-resolution, branded certificate offscreen, formatting:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The analyzed dog's photo&lt;/li&gt;
&lt;li&gt;Official breed title &amp;amp; match badge&lt;/li&gt;
&lt;li&gt;Visual 5-star trait rating bars&lt;/li&gt;
&lt;li&gt;3-column care guide matrix&lt;/li&gt;
&lt;li&gt;Health watchlist alert box&lt;/li&gt;
&lt;li&gt;Official diagnostic verification stamp&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  What's Next for BreedSnap?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Multi-Dog Detection&lt;/strong&gt;: Identifying and segmenting multiple dogs in a single group photo.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mixed Breed Percentage Estimator&lt;/strong&gt;: Estimating heritage percentages for rescue and cross-breed dogs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PWA Support&lt;/strong&gt;: Full offline caching with installable mobile home-screen capabilities.&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Thank you for reading! Feel free to check out the live demo and share your feedback in the comments.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>weekendchallenge</category>
    </item>
    <item>
      <title>Building an Adjarian Khachapuri in Pure CSS</title>
      <dc:creator>Malawige Inusha Thathsara Gunasekara</dc:creator>
      <pubDate>Sat, 15 Aug 2026 15:44:58 +0000</pubDate>
      <link>https://dev.to/inushathathsara/building-an-adjarian-khachapuri-in-pure-css-4e2d</link>
      <guid>https://dev.to/inushathathsara/building-an-adjarian-khachapuri-in-pure-css-4e2d</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for &lt;a href="https://dev.to/challenges/frontend-2026-07-29"&gt;Frontend Challenge - Comfort Food Edition, CSS Art&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Inspiration
&lt;/h2&gt;

&lt;p&gt;My comfort-food inspiration for this project was Adjarian khachapuri, the iconic Georgian cheese bread with a golden crust and a molten egg yolk resting in the center. It feels like a warm, homemade hug: rich, cozy, and deeply comforting. I wanted to recreate not just the look of the dish, but the feeling of it being fresh from the oven.&lt;/p&gt;

&lt;p&gt;I love how food can be a story in itself, and this challenge gave me a chance to turn a favorite comfort dish into a tiny scene built entirely with HTML and CSS. The goal was to capture the softness of the cheese, the warmth of the crust, and the playful glow of the yolk through gradients, shadows, and subtle motion.&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;This project is a pure CSS illustration of an Adjarian khachapuri, built with layered shapes and gradients rather than external images or assets.&lt;/p&gt;

&lt;p&gt;Live demo: &lt;a href="https://github.com/inusha-thathsara/Frontend-Challenge-Comfort-Food-Edition-CSS-Art-Comfort-Food" rel="noopener noreferrer"&gt;GitHub repository&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you want to view it locally, just open the project in a browser and interact with the yolk to trigger the jiggle animation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Journey
&lt;/h2&gt;

&lt;p&gt;This project started as a simple challenge: create a food illustration using only CSS. I quickly realized that the real magic was in the details. The crust needed warmth and depth, the cheese needed softness and texture, and the yolk needed to feel glossy and slightly luxurious without relying on any images.&lt;/p&gt;

&lt;p&gt;I spent most of my time refining the gradients and shadows to give the khachapuri a more realistic, premium look. The crust is built with warm browns and highlights to mimic baked dough, while the cheese uses soft ivory tones and subtle highlight bubbles to create a melted, creamy effect. The yolk is the focal point, and I added a small jiggle animation so the composition feels alive and playful.&lt;/p&gt;

&lt;p&gt;One thing I’m especially proud of is the way the illustration still feels simple and clean even with the detailed shading. It stays very CSS-first, but it has enough contrast and texture to feel like a polished food shot.&lt;/p&gt;

&lt;p&gt;I also learned how much personality can come from small design choices: the steam, the shadow beneath the board, the wobble of the bread, and even the tiny highlights on the cheese. These details make the illustration feel warm and appetizing rather than rigid or flat.&lt;/p&gt;

&lt;p&gt;This project reminded me that CSS art is not just about drawing shapes. It is about crafting emotion. A comfortable, believable composition can do a lot with color, depth, and motion alone.&lt;/p&gt;

&lt;p&gt;I hope to keep exploring more food-themed CSS illustrations in the future, especially ones that focus on texture and storytelling. It has been a really fun way to combine design, illustration, and front-end development.&lt;/p&gt;




&lt;p&gt;Thanks for reading, and if you love warm comfort food as much as I do, I hope this little khachapuri made you smile.&lt;/p&gt;

</description>
      <category>frontendchallenge</category>
      <category>devchallenge</category>
      <category>css</category>
    </item>
    <item>
      <title>Building a 60fps Scroll-Driven Showcase with Vanilla HTML, CSS, and GSAP</title>
      <dc:creator>Malawige Inusha Thathsara Gunasekara</dc:creator>
      <pubDate>Fri, 14 Aug 2026 09:02:05 +0000</pubDate>
      <link>https://dev.to/inushathathsara/building-a-60fps-scroll-driven-showcase-with-vanilla-html-css-and-gsap-5188</link>
      <guid>https://dev.to/inushathathsara/building-a-60fps-scroll-driven-showcase-with-vanilla-html-css-and-gsap-5188</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for &lt;a href="https://dev.to/challenges/frontend-2026-07-29"&gt;Frontend Challenge - Comfort Food Edition, Perfect Landing&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;For this challenge, I built A World of Warmth, an editorial, scroll-driven landing page and mythic codex celebrating comfort food as a universal language of love, nostalgia, and human connection. Rather than creating a standard restaurant site or commercial meal-delivery platform, I wanted to craft an immersive digital publication that treats comfort food not merely as sustenance, but as "history served hot." The experience begins with a full-viewport hero scene bathed in warm candlelight and ambient tones, setting an intimate, candlelit tone that invites visitors to embark on a culinary journey across six continents.&lt;/p&gt;

&lt;p&gt;To capture this spirit, the landing page is structured into six full-bleed chapter stories featuring Japanese Tonkotsu Ramen, American Baked Mac &amp;amp; Cheese, Indian Dal Khichdi, French Pot-au-Feu, West African Party Jollof Rice, and Mexican Pork Tamales. Each chapter weaves together origin lore, flavor profiles, and rich imagery, paired with a word-by-word scroll manifesto and an interactive infographic breaking down the real neuroscience behind why comfort food makes us feel so safe and happy.&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://inusha-thathsara.github.io/Frontend-Challenge-Comfort-Food-Edition---Perfect-Landing/" rel="noopener noreferrer"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fip7f6gjoftf39jf45zit.png" alt="Demo" width="572" height="1024"&gt;&lt;/a&gt;&lt;br&gt;
Click on above image for the Demo. 🔝&lt;/p&gt;

&lt;p&gt;Source Code: &lt;a href="https://github.com/inusha-thathsara/Frontend-Challenge-Comfort-Food-Edition---Perfect-Landing" rel="noopener noreferrer"&gt;Github&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Journey
&lt;/h2&gt;

&lt;p&gt;My journey building A World of Warmth began with a clear goal: to avoid creating a simple minimum viable product and instead engineer a complete, magazine-quality web experience that wows users visually while delivering rock-solid frontend fundamentals. Throughout the development process, I learned invaluable lessons about orchestrating complex scroll-driven animations and balancing hardware-accelerated motion with robust fallback systems. Integrating GSAP ScrollTrigger taught me how to fine-tune scroll scrubbing, word-by-word text color reveals, and multi-layered image parallax without triggering layout thrashing or dropping frames. What I am most proud of in this project is the seamless fusion of high-end visual polish with lighthearted, creative storytelling. Watching the project transform from a visual editorial landing page into an interactive Mythic Recipe Codex where clicking a card reveals absurd data like 4,000-year-old eclipse bones and 420-lightyear cook times brought an unexpected layer of joy and humor to the user experience.&lt;/p&gt;

&lt;p&gt;Thank You!&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>frontendchallenge</category>
      <category>webdev</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Translating Culinary Comfort into Pure CSS Art</title>
      <dc:creator>Malawige Inusha Thathsara Gunasekara</dc:creator>
      <pubDate>Fri, 14 Aug 2026 07:45:45 +0000</pubDate>
      <link>https://dev.to/inushathathsara/translating-culinary-comfort-into-pure-css-art-39gg</link>
      <guid>https://dev.to/inushathathsara/translating-culinary-comfort-into-pure-css-art-39gg</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for &lt;a href="https://dev.to/challenges/frontend-2026-07-29"&gt;Frontend Challenge - Comfort Food Edition, CSS Art&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Inspiration
&lt;/h2&gt;

&lt;p&gt;Ramen is the ultimate universal comfort food: rich, layered, and crafted with meticulous attention to detail. This project set out to translate that directly into front-end architecture. Inspired by the cozy ambience of traditional Japanese ramen counters, Midnight Ramen Bar channels complex CSS gradient math, 3D transform matrices, and keyframe turbulence into a living work of digital art. By replacing every pixel of traditional image assets with native CSS vectors, the artwork bridges the gap between technical precision and pure visual comfort.&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
      &lt;div class="c-embed__body flex items-center justify-between"&gt;
        &lt;a href="https://inusha-thathsara.github.io/Frontend-Challenge-Comfort-Food-Edition---CSS-Art/" rel="noopener noreferrer" class="c-link fw-bold flex items-center"&gt;
          &lt;span class="mr-2"&gt;inusha-thathsara.github.io&lt;/span&gt;
          

        &lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  Journey
&lt;/h2&gt;

&lt;p&gt;Building Midnight Ramen Bar started with a challenge: create a photorealistic artwork using zero raster images. I deconstructed a physical bowl of ramen into distinct optical layers: ceramic bowl geometry, broth depth, submerged noodles, oil beads, artisanal toppings, and rising steam clouds.&lt;/p&gt;

&lt;p&gt;Every texture was constructed using pure CSS primitives. Finally, I added a lightweight JavaScript presentation layer for 3D mouse parallax tracking , dynamic room lighting switches, and a live CSS wireframe inspector.&lt;/p&gt;

&lt;p&gt;I plan to expand this into a full CSS Comfort Food Collection (like a steaming stack of pancakes with melting butter or a hot slice of pie), explore CSS Houdini Paint Worklets for procedural textures, and build an interactive 3D culinary customizer.&lt;/p&gt;

&lt;p&gt;Thank You!&lt;/p&gt;

</description>
      <category>frontendchallenge</category>
      <category>devchallenge</category>
      <category>css</category>
    </item>
    <item>
      <title>Deconstructing the 2026 Maritime Chokepoint Crisis With a Prioritized SWOT Framework</title>
      <dc:creator>Malawige Inusha Thathsara Gunasekara</dc:creator>
      <pubDate>Sat, 18 Jul 2026 18:12:38 +0000</pubDate>
      <link>https://dev.to/inushathathsara/deconstructing-the-2026-maritime-chokepoint-crisis-with-a-prioritized-swot-framework-44gn</link>
      <guid>https://dev.to/inushathathsara/deconstructing-the-2026-maritime-chokepoint-crisis-with-a-prioritized-swot-framework-44gn</guid>
      <description>&lt;p&gt;Geopolitical volatility isn't just a headline—it is a brutal stress test for global supply chains. When critical maritime chokepoints face sudden closure, the cascading disruptions hit transshipment hubs with unforgiving speed.&lt;/p&gt;

&lt;p&gt;As part of our submission for the &lt;strong&gt;INFINITY 7.0 Inter-University Case Study Competition&lt;/strong&gt;, our team, &lt;strong&gt;Case Closed&lt;/strong&gt;, dived deep into a high-stakes scenario: &lt;strong&gt;The 2026 Global Maritime Disruption &amp;amp; Sri Lankan Port Capacity Crisis&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Here is a look at the data, the bottlenecks we uncovered, and the architectural recommendations we proposed to future-proof regional port infrastructure.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. The Anatomy of the Disruption
&lt;/h2&gt;

&lt;p&gt;The baseline architecture of global shipping relies heavily on the hub-and-spoke model. However, the fatal flaw of this model is its vulnerability to single geographic chokepoints.&lt;/p&gt;

&lt;p&gt;When the &lt;strong&gt;Strait of Hormuz&lt;/strong&gt; (which handles roughly 20% of the world's oil and LNG) and the &lt;strong&gt;Red Sea/Suez Canal&lt;/strong&gt; route face severe restrictions or closures, the maritime network experiences immediate systemic shock:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Massive Physical Rerouting:&lt;/strong&gt; Ocean carriers are forced to divert around the Cape of Good Hope, adding &lt;strong&gt;10 to 15 days&lt;/strong&gt; of transit time per voyage.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Asset Stranding:&lt;/strong&gt; These extended transit times trap critical equipment (vessels and empty shipping containers) in transit, triggering an acute global container shortage.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;The Transshipment Influx:&lt;/strong&gt; Rerouted cargo suddenly shifts toward alternative hubs like Colombo, Singapore, and Jebel Ali, pushing their operational capacities to the absolute limit.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  2. The Bottleneck: Colombo's Capacity Crisis
&lt;/h2&gt;

&lt;p&gt;When Middle East chokepoints restricted traffic, the Port of Colombo experienced a massive, sudden demand surge, seeing a &lt;strong&gt;20% volume growth&lt;/strong&gt; within a tight February-to-April window, hitting over &lt;strong&gt;761,000 TEUs&lt;/strong&gt; in a single month.&lt;/p&gt;

&lt;p&gt;This sudden volume spike exposed critical infrastructure vulnerabilities:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[Global Disruptions] ──&amp;gt; [Sudden Rerouting to Colombo]
                                │
                                ▼
               [Transshipment Exceeds 80% of Ops]
                                │
                                ▼
                  [Extreme Yard Overcrowding]
                                │
                                ▼
              [2-3 Day Berthing Delays for ULCVs]
                                │
                                ▼
             [Carriers Begin Bypassing the Port]

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

&lt;/div&gt;



&lt;p&gt;With transshipment exceeding 80% of total operations, the physical yard space reached maximum inelasticity. The resulting 2-to-3-day berthing delays meant global carriers began completely bypassing the port, risking Colombo's long-term competitive position.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. The Analytical Framework: Prioritized SWOT
&lt;/h2&gt;

&lt;p&gt;Instead of relying on a standard, text-heavy SWOT matrix, we utilized a &lt;strong&gt;Prioritized SWOT and Matrix Strategy&lt;/strong&gt; to weigh impacts mathematically and determine which moves yielded the highest strategic ROI.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Matrix Quad&lt;/th&gt;
&lt;th&gt;Strategy Focus&lt;/th&gt;
&lt;th&gt;Implementation Framework&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;SO Strategy&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;em&gt;Expand Land Bridges&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;Leverage global fleet adaptability to scale multi-modal overland routes (e.g., the Saudi Landbridge) to bypass maritime blockades.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;WO Strategy&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;em&gt;Accelerate Green Transition&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;Shift toward sustainable maritime fuels and dual-fuel vessels to buffer against volatile fossil fuel pricing and emergency bunker surcharges.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;ST Strategy&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;em&gt;Agile Fleet Rerouting&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;Permanently optimize Cape of Good Hope alternative routing paths to eliminate total logistical paralysis during multi-chokepoint closures.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;WT Strategy&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;em&gt;Abandon Just-In-Time (JIT)&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;Move aggressively away from lean inventory models, increasing safety stocks and diversifying supply chains away from high-risk zones.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  4. Engineering a Resilient Logistics Ecosystem
&lt;/h2&gt;

&lt;p&gt;To solve physical bottlenecks, a port cannot rely solely on expanding concrete footprint; it must optimize its digital and logical infrastructure. We proposed six core architecture upgrades for the regional maritime ecosystem:&lt;/p&gt;

&lt;h3&gt;
  
  
  ⚡ 1. Fully Digital "Single Window" Customs
&lt;/h3&gt;

&lt;p&gt;Eliminating paper silos by creating a unified API-driven clearing platform. Digitizing documentation removes friction before the cargo even hits the yard.&lt;/p&gt;

&lt;h3&gt;
  
  
  🤖 2. Scale Terminal Automation &amp;amp; AI Scheduling
&lt;/h3&gt;

&lt;p&gt;Implementing AI-driven dynamic scheduling to handle inter-terminal transfers. Automated crane deployments and predictive yard slotting allow the port to maximize its existing footprint even under heavy stress.&lt;/p&gt;

&lt;h3&gt;
  
  
  🌐 3. Build a Multi-Port Ecosystem
&lt;/h3&gt;

&lt;p&gt;Actively diverting excess container and RoRo (Roll-on/Roll-off) traffic south to &lt;strong&gt;Hambantota Port&lt;/strong&gt;. Treating national ports not as isolated competitors, but as a load-balanced network, allows the region to absorb massive volume spikes without failing entirely.&lt;/p&gt;




&lt;h2&gt;
  
  
  Conclusion: Moving Past "Just-In-Time"
&lt;/h2&gt;

&lt;p&gt;The core takeaway from this case study is clear: &lt;strong&gt;Lean inventory systems are incredibly fragile.&lt;/strong&gt; In an era of increasing geopolitical and climate instability, supply chain architecture must pivot from &lt;em&gt;Just-In-Time&lt;/em&gt; efficiency to &lt;em&gt;Just-In-Case&lt;/em&gt; resilience. By embracing terminal automation, regional port collaboration, and data transparency, logistics hubs can convert a global crisis into a massive operational opportunity.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;We are proud to share that this framework secured our team a spot in the upcoming round of **INFINITY 7.0&lt;/em&gt;&lt;em&gt;! If you're working in supply chain tech, logistics optimization, or AI-driven scheduling, I’d love to connect in the comments and hear how you approach system resilience.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;🔗 &lt;strong&gt;&lt;a href="https://drive.google.com/file/d/12u2JfIclG_rCOACvI6VAjUtu1_zxV8KD/view?usp=sharing" rel="noopener noreferrer"&gt;View our full presentation slide deck here&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>architecture</category>
      <category>ai</category>
      <category>management</category>
      <category>analytics</category>
    </item>
    <item>
      <title>Reverse-Engineering an Old Node.js Crossword App into a Modern Next.js Stack</title>
      <dc:creator>Malawige Inusha Thathsara Gunasekara</dc:creator>
      <pubDate>Mon, 22 Jun 2026 15:30:39 +0000</pubDate>
      <link>https://dev.to/inushathathsara/reverse-engineering-an-old-nodejs-crossword-app-into-a-modern-nextjs-stack-2oe0</link>
      <guid>https://dev.to/inushathathsara/reverse-engineering-an-old-nodejs-crossword-app-into-a-modern-nextjs-stack-2oe0</guid>
      <description>&lt;p&gt;As an IT undergrad at the University of Moratuwa, I’ve built my fair share of projects. Recently, I looked back at an old project of mine—a traditional &lt;a href="https://github.com/inusha-thathsara/CrosswordNodeApp" rel="noopener noreferrer"&gt;Node.js Crossword App&lt;/a&gt; and realized it was time for a complete teardown.&lt;/p&gt;

&lt;p&gt;The old app worked, but the architecture felt dated. I wanted to modernize it, improve the performance, and implement a cleaner, editorial-style UI. Instead of just refactoring, I decided to reverse-engineer the core logic of my own app and rebuild it from the ground up using &lt;strong&gt;Next.js 16, Neon PostgreSQL, Better Auth, and v0 by Vercel&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Here is how I broke down the legacy system and engineered the new application, &lt;strong&gt;Crosshatch&lt;/strong&gt;. You can check out the live deployment here: &lt;a href="https://crossword-web-app.vercel.app" rel="noopener noreferrer"&gt;crossword-web-app.vercel.app&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  The Teardown: Reverse-Engineering the Core Loop
&lt;/h3&gt;

&lt;p&gt;When reverse-engineering an existing app—even your own—the goal is to separate the underlying business logic from the legacy plumbing. I ignored the old routing and view layers and focused entirely on the data structures and the game loop.&lt;/p&gt;

&lt;p&gt;I identified three critical systems that needed to be extracted and modernized:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Grid Generation:&lt;/strong&gt; How words intersect and fit into a 10x10 matrix.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;State Management:&lt;/strong&gt; Tracking user input, active cells, and directional navigation (Across vs. Down).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Session &amp;amp; Progress:&lt;/strong&gt; How to persist a user's progress without hammering the database.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Once I had the core logic mapped out, I started the rebuild.&lt;/p&gt;

&lt;h3&gt;
  
  
  Accelerating the UI with v0
&lt;/h3&gt;

&lt;p&gt;I wanted the new app to have a calm, newspaper-inspired light theme. To move fast, I leveraged &lt;strong&gt;v0 by Vercel&lt;/strong&gt; to generate the initial React components.&lt;/p&gt;

&lt;p&gt;By prompting v0 with my required game state constraints (e.g., handling keyboard events like Tab, Shift+Tab, and arrow keys for navigation), I was able to rapidly prototype the 10x10 interactive grid. v0 handled the Tailwind CSS boilerplate, allowing me to focus on wiring up the complex state machine using a custom &lt;code&gt;useCrossword&lt;/code&gt; React hook.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Modern Stack &amp;amp; Architecture
&lt;/h3&gt;

&lt;p&gt;With the UI taking shape, I built out a robust backend architecture to support it.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Framework:&lt;/strong&gt; Next.js 16 (App Router)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Database:&lt;/strong&gt; Neon PostgreSQL with Drizzle ORM&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Authentication:&lt;/strong&gt; Better Auth (handling secure email/password flows and session management)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here are the key technical problems I had to solve during the rebuild:&lt;/p&gt;

&lt;h4&gt;
  
  
  1. Deterministic Puzzle Generation
&lt;/h4&gt;

&lt;p&gt;In the old app, puzzle generation could be unpredictable. For the new build, I implemented a &lt;strong&gt;Seeded RNG algorithm&lt;/strong&gt;. By using the puzzle's ID (e.g., &lt;code&gt;animals-1&lt;/code&gt;) as the seed, the generation is completely deterministic. It shuffles the word list, places the first word at &lt;code&gt;(0,0)&lt;/code&gt;, and maps intersecting cells. If you and a friend both load &lt;code&gt;animals-1&lt;/code&gt;, you are guaranteed to get the exact same layout.&lt;/p&gt;

&lt;p&gt;Because generating a puzzle is CPU-intensive, I implemented a caching layer. The server generates the puzzle once, caches it in a Map, and serves it instantly on subsequent requests.&lt;/p&gt;

&lt;h4&gt;
  
  
  2. Smart Autosave &amp;amp; The Visibility API
&lt;/h4&gt;

&lt;p&gt;Losing crossword progress is frustrating. I built a system that autosaves every 5 seconds. To prevent excessive database writes, I used a PostgreSQL &lt;code&gt;UPSERT&lt;/code&gt; pattern via Drizzle:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;INSERT&lt;/span&gt; &lt;span class="k"&gt;INTO&lt;/span&gt; &lt;span class="n"&gt;puzzle_progress&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;userId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;puzzleId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;entries&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;elapsedSeconds&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;VALUES&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;ON&lt;/span&gt; &lt;span class="n"&gt;CONFLICT&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;userId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;puzzleId&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;DO&lt;/span&gt; &lt;span class="k"&gt;UPDATE&lt;/span&gt; &lt;span class="k"&gt;SET&lt;/span&gt; &lt;span class="n"&gt;entries&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;elapsedSeconds&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;updatedAt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;now&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

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

&lt;/div&gt;



&lt;p&gt;Additionally, the puzzle timer uses the browser's &lt;strong&gt;Visibility API&lt;/strong&gt;. If you switch tabs, the timer automatically pauses, ensuring your "Solve Time" stats remain accurate to your actual active playtime.&lt;/p&gt;

&lt;h4&gt;
  
  
  3. Data Integrity: The "No Double-Credit" Problem
&lt;/h4&gt;

&lt;p&gt;I built a user dashboard to track completions, best times, and average solve times. But what happens if a user submits the same completed puzzle twice?&lt;/p&gt;

&lt;p&gt;Instead of writing complex application-level checks, I let the database handle it. I added a unique constraint on &lt;code&gt;(userId, puzzleId)&lt;/code&gt; in the &lt;code&gt;completion&lt;/code&gt; table and utilized the &lt;code&gt;ON CONFLICT DO NOTHING&lt;/code&gt; clause. If a user solves a puzzle for the first time, it records their time. If they re-submit it, the database ignores the insert, returning a response that acknowledges the correct answers without skewing their dashboard analytics.&lt;/p&gt;

&lt;h3&gt;
  
  
  Final Thoughts
&lt;/h3&gt;

&lt;p&gt;Reverse-engineering an older project and rebuilding it with modern tooling is one of the best ways to measure your growth as a developer. By moving to Next.js and leveraging v0 for rapid UI prototyping, I was able to spend my time solving actual engineering problems (like deterministic generation and state synchronization) rather than wrestling with basic CSS.&lt;/p&gt;

&lt;p&gt;Check out the live app at &lt;a href="https://crossword-web-app.vercel.app" rel="noopener noreferrer"&gt;crossword-web-app.vercel.app&lt;/a&gt; and let me know what you think of the architecture! I’m always open to technical feedback.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>productivity</category>
      <category>devops</category>
    </item>
    <item>
      <title>Stop Funding History: Building a Demand Prediction App to Optimize Trade Spend</title>
      <dc:creator>Malawige Inusha Thathsara Gunasekara</dc:creator>
      <pubDate>Mon, 22 Jun 2026 15:00:24 +0000</pubDate>
      <link>https://dev.to/inushathathsara/stop-funding-history-building-a-demand-prediction-app-to-optimize-trade-spend-4iak</link>
      <guid>https://dev.to/inushathathsara/stop-funding-history-building-a-demand-prediction-app-to-optimize-trade-spend-4iak</guid>
      <description>&lt;p&gt;Let’s be honest: in the FMCG (Fast-Moving Consumer Goods) space, trade marketing budgets are almost always misallocated. Companies tend to fund invoice history rather than actual potential.&lt;/p&gt;

&lt;p&gt;For the DataStorm 7.0 competition, our team, &lt;strong&gt;Stack Kings&lt;/strong&gt;, decided to stop guessing and start modeling latent demand. We built an analytics pipeline and a Next.js field app to optimize a LKR 5M trade spend across 20,000 retail outlets in Sri Lanka. Here is the unvarnished breakdown of how we achieved a +253% lift over a naive budget allocation.&lt;/p&gt;

&lt;h3&gt;
  
  
  The "Empty Shelf" Problem (Right-Censoring)
&lt;/h3&gt;

&lt;p&gt;The core data science issue here is a concept called right-censoring. The monthly sales volumes we observed in the 2.3M transaction records were just a lower bound. If a small shop shows low sales, it might just be under-stocked or credit-constrained, not lacking in customer demand.&lt;/p&gt;

&lt;p&gt;Because of this, standard averages systematically underestimate a shop's true potential. Instead of using standard textbook models like Tobit—which require strict indicators of exactly when a shop ran out of stock (which we didn't have)—we built an ensemble model.&lt;/p&gt;

&lt;p&gt;We took a two-pronged approach:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Lookalike Clustering:&lt;/strong&gt; We clustered similar outlets to see what the top performers in that specific group were achieving, assuming that less-constrained shops reveal the true ceiling.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Upper-Tail Regression:&lt;/strong&gt; We used a specific type of regression (Quantile Regression) designed to estimate the maximum possible demand based on a shop's features, rather than the average.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Taking the maximum of these two estimates ensured we weren't artificially pulling down a shop's potential.&lt;/p&gt;

&lt;h3&gt;
  
  
  Mapping the Real World (Spatial Features)
&lt;/h3&gt;

&lt;p&gt;To give the models a real signal, we engineered spatial features using OpenStreetMap Points of Interest (POIs).&lt;/p&gt;

&lt;p&gt;Rather than using arbitrary "flat disk" counts—like just counting how many shops are within a 3km radius—we implemented a distance-decay model. In plain English: a bus stop 200 meters away matters a lot more to foot traffic than one 2 kilometers away.&lt;/p&gt;

&lt;p&gt;We grouped locations into tiers. Transport and food places have a "fast" drop-off in influence, meaning you need to be right next to them to get the benefit. Meanwhile, schools and temples cast a wider, "slower" net of influence over the entire neighborhood.&lt;/p&gt;

&lt;h3&gt;
  
  
  Squeezing Every Drop of Budget (The Optimizer)
&lt;/h3&gt;

&lt;p&gt;Ranking outlets by potential isn't enough; you need to maximize the incremental liters gained per rupee spent.&lt;/p&gt;

&lt;p&gt;We modeled the volume response to trade spend as a curve with diminishing returns. Simply put, the more you spend on a single shop, the less extra volume you get for your next rupee.&lt;/p&gt;

&lt;p&gt;To solve this efficiently across 9,000 Western Province outlets, we broke that curve into straight-line segments. This allowed us to use a Linear Programming solver to allocate the LKR 5M budget mathematically perfectly. The result? A massive 253% lift compared to the standard gut-feel approach of just splitting the money evenly among top shops.&lt;/p&gt;

&lt;h3&gt;
  
  
  Building Trust with the Field App
&lt;/h3&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
      &lt;div class="c-embed__body flex items-center justify-between"&gt;
        &lt;a href="stackkings.inusha.me" rel="noopener noreferrer" class="c-link fw-bold flex items-center"&gt;
          &lt;span class="mr-2"&gt;stackkings.inusha.me&lt;/span&gt;
          

        &lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;
A complex optimizer is useless if field sales reps don't trust the numbers. They need to know &lt;em&gt;why&lt;/em&gt; a shop is getting a certain budget.

&lt;p&gt;We built a live Outlet Intelligence Web App using Next.js and Postgres. To explain the outputs, we added an Explainable AI (XAI) layer. It uses a local Ollama process (gemma3:1b) running in the browser to generate a structured SWOT summary. If the local AI is offline, it falls back to a Gemini cloud API or a safe deterministic template.&lt;/p&gt;

&lt;p&gt;Crucially, the AI doesn't make the predictions. It simply translates our hard, pre-computed data into plain business language so the sales reps can actually use it on the ground.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Dirty Reality of Data
&lt;/h3&gt;

&lt;p&gt;Data engineering isn't glamorous. We built a strict Medallion architecture. We didn't silently drop messy data. We explicitly quarantined 37,205 records using failure reason codes. We even retained 7,417 "blackout" outlets (shops with zero December transactions), treating them correctly as supply signals rather than zero demand.&lt;br&gt;&lt;br&gt;
Check out the live production app at &lt;a href="//stackkings.inusha.me"&gt;stackkings.inusha.me&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;We don't fund history. We fund potential.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>datascience</category>
      <category>webdev</category>
      <category>productivity</category>
    </item>
    <item>
      <title>I Made Tyre Size Detection App Using Gemma4:e4b</title>
      <dc:creator>Malawige Inusha Thathsara Gunasekara</dc:creator>
      <pubDate>Tue, 19 May 2026 18:21:37 +0000</pubDate>
      <link>https://dev.to/inushathathsara/i-made-tyre-size-detection-app-using-gemma4e4b-490e</link>
      <guid>https://dev.to/inushathathsara/i-made-tyre-size-detection-app-using-gemma4e4b-490e</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/google-gemma-2026-05-06"&gt;Gemma 4 Challenge: Build with Gemma 4&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;NewTyre-AI&lt;/strong&gt; is a secure, localized full-stack web application designed to automate a deceptively complex industrial task: passenger vehicle tyre sidewall size extraction.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Problem
&lt;/h3&gt;

&lt;p&gt;Traditional computer vision pipelines frequently default to cloud-dependent architectures to process visual data. While convenient, this approach introduces persistent operational liabilities for businesses: recurring cloud API bills, data transit latencies, and corporate data privacy exposure. Furthermore, reading alphanumeric characters from a tyre sidewall is difficult for traditional linear Optical Character Recognition (OCR) tools because text printed on rubber is non-linear, low-contrast, heavily textured, and curved.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Solution
&lt;/h3&gt;

&lt;p&gt;NewTyre-AI solves this by shifting the entire visual processing workload onto a local, physical on-premise company server. The system ingests sidewall photos, filters them through a localized multimodal edge model, and returns an un-hallucinated, deterministic 9-character tyre size code (e.g., 205/60R16) to the technician with zero ongoing cloud compute or external API costs.&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;Video Demo(30 sec): &lt;a href="https://drive.google.com/file/d/1sp0odXgkxL9jELnCiXovkT5TY1zEmCjg/view?usp=sharing" rel="noopener noreferrer"&gt;Google Drive&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/inusha-thathsara/NewTyre-AI" rel="noopener noreferrer"&gt;GitHub Repo&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How I Used Gemma 4
&lt;/h2&gt;

&lt;p&gt;For this project, I deliberately selected the Gemma4:e4b (Effective 4B) parameter model rather than scaling up to the massive dense weights or downgrading to the highly lightweight e2b version. 2B model lack the visual cross-attention layer density required to accurately map characters in noisy geometric layouts, while 32B model is a overkill. The e4b model retains the precise structural transformer resolution required to read curved, dirty text on dark rubber cylinders without throwing a wave of false positives.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>gemmachallenge</category>
      <category>gemma</category>
    </item>
    <item>
      <title>Built an AI Study Tool That Refuses to Give You the Answers for UoM</title>
      <dc:creator>Malawige Inusha Thathsara Gunasekara</dc:creator>
      <pubDate>Sun, 01 Mar 2026 17:10:22 +0000</pubDate>
      <link>https://dev.to/inushathathsara/built-an-ai-study-tool-that-refuses-to-give-you-the-answers-for-uom-1eho</link>
      <guid>https://dev.to/inushathathsara/built-an-ai-study-tool-that-refuses-to-give-you-the-answers-for-uom-1eho</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/weekend-2026-02-28"&gt;DEV Weekend Challenge: Community&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Community
&lt;/h2&gt;

&lt;p&gt;I am an IT undergraduate at the &lt;strong&gt;University of Moratuwa&lt;/strong&gt;(UoM), Sri Lanka. In our community, the night before a brutal technical exam is chaotic. When faced with a massive, complicated past-paper question that we don't understand, students often hit a wall of panic and just give up (we call it going "Bora").&lt;/p&gt;

&lt;p&gt;The problem with existing AI study tools is that they just give you the final answer or the raw code. That doesn't help you learn; it just helps you cheat. I wanted to build a tool for my batchmates that acts like a senior student holding a late-night study session(a "Kuppi") guiding you to the answer without actually giving it to you.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;I built &lt;strong&gt;Triage AI&lt;/strong&gt;, a cross-platform (Next.js Web + Flutter Android) tool designed specifically for technical exam preparation. You simply snap a photo of a difficult past paper question, and the app uses AI to break it down.&lt;/p&gt;

&lt;p&gt;Instead of solving the problem, it returns three specific things:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Core Concepts:&lt;/strong&gt; The exact fundamental topics you need to Google to understand the question.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Trap:&lt;/strong&gt; It identifies the subtle pitfall or trick hidden in the question designed to make students fail.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Attack Plan:&lt;/strong&gt; A step-by-step strategic breakdown of how to approach the solution.&lt;/p&gt;

&lt;p&gt;If you are still stuck, Triage AI features a "Practice" mode that generates a similar question, and a "Hint" system that provides progressive, helpful nudges (never the answer) to get you unblocked.&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;Live: &lt;a href="https://bora-quiz-helper.vercel.app" rel="noopener noreferrer"&gt;Vercel&lt;/a&gt;&lt;br&gt;
This weekend sprint proved to me that AI doesn't have to be a shortcut that ruins learning. When built with the right constraints, it can be the ultimate teaching assistant. &lt;/p&gt;

&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;

&lt;p&gt;Source Code: &lt;a href="https://github.com/inusha-thathsara/Bora-Quiz-Helper" rel="noopener noreferrer"&gt;Github&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;p&gt;Balancing this weekend challenge with my strict university workload was tough. As an IT undergraduate, I couldn't afford to ignore my own university assignments to build an app. Because I was juggling coursework and only had the weekend to code, I needed to keep the technical setup extremely lean and fast.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Brain:&lt;/strong&gt; I used the Google Gemini 2.5 Flash API because it can process uploaded images incredibly fast.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Logic:&lt;/strong&gt; I built a Next.js application to handle the requests. I wrote strict prompts and set up Gemini to return structured data, which made it easy to display the results in clean UI cards.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The App:&lt;/strong&gt; The Next.js backend powers both a smooth React web app and a native Flutter Android app(kinda buggy though) at the same time.&lt;/p&gt;

&lt;p&gt;Aside from time management, the hardest technical challenge was the Hint System. To ensure the AI didn't repeat itself or accidentally reveal the answer, the app keeps track of the clues you've already seen. It sends this history back to Gemini so that the next hint is a progressively more specific nudge in the right direction.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Good luck with exams, batchmates!&lt;/em&gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>weekendchallenge</category>
      <category>showdev</category>
    </item>
    <item>
      <title>How I Built a 15,000+ Line Flutter App with Gemini to "Hack" My University Attendance</title>
      <dc:creator>Malawige Inusha Thathsara Gunasekara</dc:creator>
      <pubDate>Wed, 25 Feb 2026 18:55:37 +0000</pubDate>
      <link>https://dev.to/inushathathsara/how-i-built-a-15000-line-flutter-app-with-gemini-to-hack-my-university-attendance-3p2i</link>
      <guid>https://dev.to/inushathathsara/how-i-built-a-15000-line-flutter-app-with-gemini-to-hack-my-university-attendance-3p2i</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/mlh-built-with-google-gemini-02-25-26"&gt;Built with Google Gemini: Writing Challenge&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built with Google Gemini
&lt;/h2&gt;

&lt;p&gt;As an IT undergraduate balancing startup ambitions and a heavy coursework load, missing too many classes can lead to disastrous exam bans. To solve this, I built Attendance Tracker (code-named "The 80%"). It's a cross-platform Flutter application designed to mathematically optimize university attendance using offline-first storage and AI.&lt;/p&gt;

&lt;p&gt;The app features a "Danger Zone Planner" that calculates the exact margin for absences across specific sessions (Lectures, Labs, Tutorials). This allows students to simulate granular scenarios and understand their attendance buffer, ensuring they never accidentally drop below their mandatory academic thresholds.&lt;/p&gt;

&lt;p&gt;Google Gemini played a massive, two-fold role in this project:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;The Architecture (Agentic AI): This project scaled to over 15,000 lines of code. I used the Gemini 3 Pro (High) model inside the Antigravity IDE as an autonomous coding agent to help architect the offline-first database (Hive), manage state (Provider), and handle complex UI animations.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The Core Feature (API Integration): The biggest friction point in attendance apps is manual data entry. I integrated the Gemini 2.5 Flash API to handle multimodal timetable extraction. Users simply upload their official university schedule as a PDF or image, and Gemini intelligently parses the unstructured data into a clean matrix of subjects, times, and session types.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;You can experience the live web app directly in your browser:&lt;/p&gt;

&lt;p&gt;Live Web App: &lt;a href="https://attendance-tracker-5d550.web.app" rel="noopener noreferrer"&gt;Attendance Tracker Web&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Source Code: &lt;a href="https://github.com/inusha-thathsara/attendance-tracker-demo/tree/main" rel="noopener noreferrer"&gt;GitHub Repository&lt;/a&gt; (Only the Demo source code is available with the latest apk releases)&lt;/p&gt;

&lt;p&gt;Screenshot:&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%2Fd3ckfpqsxomhhgv2kqzi.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%2Fd3ckfpqsxomhhgv2kqzi.png" alt="LightMode Statistics Tab" width="800" height="500"&gt;&lt;/a&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%2Fv1ehk6d9lprd9ylgtti1.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%2Fv1ehk6d9lprd9ylgtti1.png" alt="DarkMode Settings" width="800" height="500"&gt;&lt;/a&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%2F4n8fsr91yli8nmahhpnu.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%2F4n8fsr91yli8nmahhpnu.png" alt="Module Details" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Learned
&lt;/h2&gt;

&lt;p&gt;Building a 15,000+ line production app taught me several critical lessons:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Background Asynchronous Processing: Because parsing detail-heavy timetable PDFs via the Gemini API can take time, I had to learn how to run these complex tasks in the background. This ensures the UI doesn't freeze, allowing users to navigate the app while waiting for an in-app "Timetable Ready" notification.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Defensive Engineering: AI isn't perfect. I learned to build a robust "Draft Review" step so users can verify and edit the AI's extracted timetable before committing it to the Firebase database.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;System Design: Implementing an offline-first architecture with Hive local caching and syncing it seamlessly with Firebase Firestore taught me how to handle complex data states across varying network conditions.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Google Gemini Feedback
&lt;/h2&gt;

&lt;p&gt;The Good:&lt;br&gt;
The multimodal capabilities of gemini-2.5-flash are incredible. It flawlessly handled messy, poorly formatted university PDFs and images, turning unstructured visual data into a clean, usable dataset. Using Gemini 3 Pro (High) as an agentic coding partner felt like having a senior engineer on call, saving me weeks of boilerplate coding and UI tweaking.&lt;/p&gt;

&lt;p&gt;The Bad and The Ugly:&lt;br&gt;
When you let an AI agent loose on a 15,000-line codebase, you push context windows to their absolute limits. Occasionally, the IDE agent would lose the thread of the architecture, hallucinating variable names or forgetting how distant files interconnected.&lt;/p&gt;

&lt;p&gt;On the API side, relying heavily on Gemini 2.5 Flash for file parsing introduced the reality of rate limits. To prevent the app from breaking for users during high-traffic periods, I had to engineer a Multi-API Key Support system, allowing the app to rotate through different user-provided Gemini keys to ensure uninterrupted parsing. Additionally, highly non-standard timetable layouts occasionally confused the model, making the manual draft review step an absolute necessity. Overall, it's a powerhouse, but it requires strict guardrails in a production environment.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>geminireflections</category>
      <category>gemini</category>
    </item>
    <item>
      <title>The Shores of Denial – The World that Shouldn't Exist</title>
      <dc:creator>Malawige Inusha Thathsara Gunasekara</dc:creator>
      <pubDate>Fri, 23 Jan 2026 13:23:07 +0000</pubDate>
      <link>https://dev.to/inushathathsara/the-shores-of-denial-the-world-that-shouldnt-exist-3dpb</link>
      <guid>https://dev.to/inushathathsara/the-shores-of-denial-the-world-that-shouldnt-exist-3dpb</guid>
      <description>&lt;h3&gt;
  
  
  &lt;strong&gt;My Voluntary Descent&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;When I first stepped onto the Fort Oasis pier as Tyler, the atmosphere was immediately suffocating. My first instinct wasn't to explore, it was to leave. I was given the functioning boat , then took the exit, and triggered the ending within minutes. But as the credits rolled, I realized I hadn’t actually played the game; I had simply committed a "coward’s move." I chose the "Safe Lie" because the reality of the island was too unsettling. I believe everyone have tried that in their first playthrough. &lt;/p&gt;

&lt;p&gt;On my second run, I refused the boat. I stayed because I wanted the content. By staying, I felt like I was actively validating Tyler’s internal chaos. The game stopped being a survival horror and started feeling like a psychological autopsy I was performing on myself.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Navigating a Broken Mind&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;As I explored Fort Oasis, I realized it isn't just a game with a map; there are some metaphors. Since the game doesn't tell us the direct story, I explored the internet and found that the story explains about the terminal disease and the depression on the character I'm playing. I began to see the environment as a manifestation of Tyler’s isolation:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The Mining Colony:&lt;/strong&gt; This is the skeletal remains of a life once filled with productivity and purpose, now hollowed out.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Rot:&lt;/strong&gt; The black, organic corruption "overwrite" the walls was visceral. It’s the visual language of a terminal illness that doesn't just inhabit the world but replaces it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Permafrost:&lt;/strong&gt; The cold represents an emotional numbness I think Tyler uses to shield himself from the memory of Leda’s love (Leda is Tyler's wife). It is the "Distant Embrace" of a death that has already begun.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;The Realization of the Mission&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;In the beginning, I followed the story believing I was on a rescue mission. However, the deeper I went, the more I felt manipulated. I wasn't there to save a colony; I was there to witness the final shutdown of me(actually the Tyler).&lt;/p&gt;

&lt;p&gt;The most haunting part of my experience was the silence. Before the monsters ever appeared, the weight of being &lt;strong&gt;all alone in a dying world&lt;/strong&gt; was more terrifying than any jump-scare. That silence is the bridge between Tyler’s past and the "Total Chaos" of his current mental state and the void left behind when love is replaced by a diagnosis.&lt;/p&gt;

</description>
      <category>fps</category>
      <category>singleplayer</category>
      <category>strategygames</category>
    </item>
  </channel>
</rss>
