{
    "version": "https://jsonfeed.org/version/1",
    "title": "iamickdev's Feed",
    "home_page_url": "https://www.iamickdev.com",
    "feed_url": "https://www.iamickdev.com/feed/json",
    "description": "Hello, I'm Arnon Sang-ngern, Just a passionate developer who loves to share experiences.",
    "icon": "https://www.iamickdev.com/images/avatar/ick-avatar-dark.png",
    "author": {
        "name": "Arnon Sang-ngern",
        "url": "https://www.iamickdev.com/#about"
    },
    "items": [
        {
            "id": "https://www.iamickdev.com/blog/trying-agentic-ai-for-customer-support",
            "content_html": "<h1>I&#39;m Trying to Build Customer Support with Agentic AI</h1>\n<p><img src=\"https://maygdwyzbesqjdnnwzew.supabase.co/storage/v1/object/public/webfile/blog/agentic-ai-cs/why-agentic-ai-for-cs.png\" alt=\"Why Agentic AI for customer support\"></p>\n<p>Let me tell you about something that&#39;s been keeping me up at night (in a good way). I&#39;ve been diving deep into building customer support systems with agentic AI, and honestly? It&#39;s been a wild ride.</p>\n<p>You know how traditional chatbots make you want to throw your phone across the room? Those &quot;press 1 for this, press 2 for that&quot; experiences that somehow always end with &quot;please hold while I transfer you to a human&quot;? Yeah, I&#39;m trying to fix that.</p>\n<h2>What Actually Makes Agentic AI Special?</h2>\n<p>Here&#39;s the thing that blew my mind when I first encountered agentic AI: these aren&#39;t your typical chatbots following rigid flowcharts. They&#39;re more like having that one really smart colleague who just <em>gets</em> things done.</p>\n<p>Traditional bots are like following a recipe step-by-step. Agentic AI? It&#39;s more like a chef who improvises based on what&#39;s in the fridge. Here&#39;s what I mean:</p>\n<ul>\n<li><strong>They think ahead</strong> - Instead of waiting for you to ask 47 follow-up questions, they anticipate what you actually need</li>\n<li><strong>They take action</strong> - Want to cancel an order AND update your address? Done. No &quot;let me transfer you to billing&quot; nonsense</li>\n<li><strong>They stay in the loop</strong> - They remember your conversation from last week and pick up right where you left off</li>\n<li><strong>They&#39;re always learning</strong> - Every interaction makes them smarter about your specific business</li>\n</ul>\n<p>I had a customer recently ask: &quot;I bought the wrong size shirt last week, can you help me out?&quot; A regular bot would panic. My agentic system? It pulled up their order history, identified the purchase, offered an exchange, found their size preference from previous orders, and even suggested expedited shipping since they mentioned needing it for an event. All in one conversation.</p>\n<h2>The Magic Behind the Scenes: MCP</h2>\n<p><img src=\"https://maygdwyzbesqjdnnwzew.supabase.co/storage/v1/object/public/webfile/blog/agentic-ai-cs/mcp-flow.webp\" alt=\"How AI connects to external tools with MCP\"></p>\n<p>Okay, let me geek out for a second about Model-Context Protocol (MCP). I like to think of it as the universal translator that lets my AI actually do stuff instead of just talk about doing stuff.</p>\n<p>Before MCP, connecting AI to real systems was like trying to plug a USB-A into a USB-C port with 47 different adapters. Now? It&#39;s like magic.</p>\n<p>Here&#39;s how it works (and why I&#39;m obsessed with it):</p>\n<ol>\n<li>Customer asks for something complex</li>\n<li>My AI agent thinks: &quot;I need to check their order status, inventory levels, and maybe schedule a callback&quot;</li>\n<li>MCP translates that into specific API calls to our order system, warehouse, and calendar</li>\n<li>Everything comes back structured and ready to use</li>\n<li>Customer gets a complete answer in seconds</li>\n</ol>\n<p>The beautiful part? When we add a new tool or service, I don&#39;t need to rebuild the entire system. I just add a new MCP connector and boom — the AI can use it immediately.</p>\n<h2>Why This Actually Matters for My Dev Team</h2>\n<p>I&#39;ll be honest: I was skeptical at first. Another AI buzzword? But here&#39;s what changed my mind:</p>\n<p><strong>Speed of development</strong> - Last month, we needed to integrate with a new shipping API. With traditional systems, that&#39;s a week-long project. With MCP? Two hours.</p>\n<p><strong>Real-time everything</strong> - Customers get answers based on what&#39;s actually happening right now, not cached data from last Tuesday.</p>\n<p><strong>It actually solves problems</strong> - Instead of routing tickets to humans, it handles complex multi-step requests autonomously. My support team can focus on the cases that genuinely need human touch.</p>\n<p><strong>Future-proofing</strong> - As we add more tools and services, the system gets smarter, not more complicated.</p>\n<h2>The Stuff That Actually Works</h2>\n<p>I&#39;m not going to oversell this - there are still moments when I want to debug with a hammer. But when it works (which is most of the time now), it&#39;s incredible:</p>\n<ul>\n<li>Customers ask about orders using natural language, and the system finds exactly what they mean</li>\n<li>Complex requests like &quot;cancel my subscription but keep my discount for when I come back&quot; get handled end-to-end</li>\n<li>The AI discovers and uses new tools without me having to manually map every possible workflow</li>\n<li>Most importantly: customers actually get help instead of getting transferred around in circles</li>\n</ul>\n<h2>The Technical Reality Check</h2>\n<p>Let me get real for a second about the implementation challenges, because Twitter makes this stuff look easier than it actually is.</p>\n<p><strong>The Learning Curve is Steep</strong>\nFirst few weeks? I broke more things than I fixed. Agentic AI doesn&#39;t just plug into your existing systems like a WordPress plugin. You need to rethink how your data flows, how your APIs are structured, and honestly, how your entire support process works.</p>\n<p><strong>Data Quality Matters More Than Ever</strong>\nYour AI is only as good as the data it can access. I spent weeks cleaning up our customer database because - surprise - having three different fields for &quot;customer notes&quot; across different systems doesn&#39;t play well with AI agents.</p>\n<p><strong>The Integration Dance</strong>\nEach tool integration feels like negotiating a peace treaty. Every CRM, ticketing system, and payment processor has its own API quirks. Some days I feel more like a diplomatic translator than a developer.</p>\n<h2>What I Wish I Knew Before Starting</h2>\n<p><strong>Start Small, Think Big</strong>\nDon&#39;t try to replace your entire support team on day one. I started with simple order lookups and gradually expanded. Your AI agent needs to earn trust, one successful interaction at a time.</p>\n<p><strong>Train Your Team First</strong>\nYour support team will be working alongside these agents, not being replaced by them. Make sure they understand what the AI can and can&#39;t do. I learned this the hard way when agents were escalating cases the AI could easily handle.</p>\n<p><strong>Monitor Like Your Life Depends On It</strong>\nSet up dashboards for everything. Response accuracy, escalation rates, customer satisfaction per interaction type. The data tells you where your AI is crushing it and where it&#39;s... less crushing.</p>\n<p><strong>Have Fallback Plans for Everything</strong>\nWhen your AI agent decides 3 AM is the perfect time to start hallucinating order numbers, you better have human backup ready. I&#39;ve got more monitoring alerts than a NASA mission control.</p>\n<h2>The Unexpected Wins</h2>\n<p>Here&#39;s what caught me off guard in the best way:</p>\n<p><strong>Customer Education Happens Naturally</strong>\nThe AI doesn&#39;t just solve problems - it explains how things work. Customers are learning about features they didn&#39;t know existed, just through natural conversations.</p>\n<p><strong>Internal Tool Discovery</strong>\nMy support team started finding and using tools they&#39;d forgotten about because the AI would suggest them during complex cases. It&#39;s like having a really good new hire who actually read all the documentation.</p>\n<p><strong>Data Insights on Steroids</strong>\nEvery interaction generates structured data about what customers actually want. I&#39;m seeing patterns in support requests that were invisible before.</p>\n<h2>Where We&#39;re Headed</h2>\n<p>Look, I&#39;m not saying agentic AI will replace all human support (please don&#39;t send me angry emails, support managers). But for the routine stuff that eats up 80% of tickets? It&#39;s a game-changer.</p>\n<p>I&#39;m building this because I&#39;ve been on both sides - as a frustrated customer and as a developer trying to scale support without losing quality. Agentic AI with MCP feels like the first solution that actually gets both sides right.</p>\n<p>The technology is here, it&#39;s working, and honestly? If you&#39;re still building traditional chatbots, you&#39;re already behind.</p>\n<h2>The Real Talk</h2>\n<p>Building agentic AI for customer support isn&#39;t just about the cool tech (though that part is fun). It&#39;s about fundamentally changing how we think about helping people. Every frustrated customer who gets their issue resolved in one conversation instead of five is a win.</p>\n<p>Every support agent who can focus on complex, interesting problems instead of password resets is a win.</p>\n<p>Every developer who doesn&#39;t have to manually code integrations for every new tool is a win.</p>\n<p>This stuff is hard, sometimes frustrating, but absolutely worth it. And honestly? We&#39;re just getting started.</p>\n<p>Want to chat about implementation? I&#39;m always down to talk shop about making customer support actually helpful again.</p>\n<hr>\n<p><em>Building this stuff is hard, but someone&#39;s got to do it. Might as well be us.</em></p>\n",
            "url": "https://www.iamickdev.com/blog/trying-agentic-ai-for-customer-support",
            "title": "I'm trying to build customer support with Agentic AI!",
            "summary": "I&#39;m Trying to Build Customer Support with Agentic AI\n\nLet me tell you about something that&#39;s been keeping me up at night (in a good way). I&#3...",
            "image": "https://maygdwyzbesqjdnnwzew.supabase.co/storage/v1/object/public/webfile/blog/agentic-ai-cs/why-agentic-ai-for-cs-banner.png",
            "date_modified": "2025-05-10T15:27:01.905Z",
            "date_published": "2025-05-10T15:27:01.905Z",
            "author": {
                "name": "Arnon Sang-ngern"
            },
            "tags": []
        },
        {
            "id": "https://www.iamickdev.com/blog/who-am-i",
            "content_html": "<h1>Who am I?</h1>\n<p>Hello, I&#39;m Arnon Sang-ngern!</p>\n<p><img src=\"https://maygdwyzbesqjdnnwzew.supabase.co/storage/v1/object/public/webfile/ick_logo.png\" alt=\"profile\"></p>\n<p>I&#39;m excited to welcome you to my personal website, where I&#39;ll be sharing my thoughts, experiences, and interests. Let me give you a brief overview of who I am and what you can expect from my blog.</p>\n<h2>About Me</h2>\n<p>I am a hobby web developer, and I&#39;m passionate about coding. I&#39;ve always been intrigued by the endless possibilities and problem-solving aspects of coding..</p>\n<h2>My Journey</h2>\n<p>My journey in the world of web development started when I began exploring coding as a hobby. It all began a few years ago when I was a student. I was fascinated by the idea of creating websites and web applications from scratch. Over time, I&#39;ve had the privilege of honing my coding skills, learning various programming languages, and working on personal projects.</p>\n<p>Though I&#39;m still a student, my passion for web development has led me to achieve notable accomplishments such as creating my own portfolio website, contributing to open-source projects, and even building interactive web applications. I&#39;m excited to continue my journey in the world of web development and see where it takes me in the future.</p>\n<h2>My Stack</h2>\n<table>\n<thead>\n<tr>\n<th>Language</th>\n<th>Level</th>\n</tr>\n</thead>\n<tbody><tr>\n<td>JavaScript</td>\n<td>intermediate</td>\n</tr>\n<tr>\n<td>TypeScript</td>\n<td>intermediate</td>\n</tr>\n<tr>\n<td>C</td>\n<td>intermediate</td>\n</tr>\n<tr>\n<td>Python</td>\n<td>Beginner</td>\n</tr>\n<tr>\n<td>Go</td>\n<td>Beginner</td>\n</tr>\n</tbody></table>\n<table>\n<thead>\n<tr>\n<th>Role</th>\n<th>Stack</th>\n</tr>\n</thead>\n<tbody><tr>\n<td>Front-end</td>\n<td>React, Svelte</td>\n</tr>\n<tr>\n<td>Back-end</td>\n<td>Node.js, Django</td>\n</tr>\n<tr>\n<td>Cross Platform</td>\n<td>Electron</td>\n</tr>\n</tbody></table>\n<h2>What You&#39;ll Find Here</h2>\n<p>This blog is a place for me to express my thoughts and share my knowledge on topics related to web development, coding, and technology. I&#39;ll be writing about web development tutorials, coding best practices, and personal anecdotes from my journey as a hobbyist web developer.</p>\n<h2>Get in Touch</h2>\n<p>I value your feedback and would love to hear from you. Don&#39;t hesitate to connect with me on social media or drop me an email to discuss coding, share your thoughts on my articles, or ask for advice on web development projects.</p>\n<p>Thank you for visiting my website. I hope you&#39;ll find my content interesting and insightful. Stay tuned for more exciting updates and articles. Let&#39;s embark on this coding journey together!</p>\n<p>Happy Coding!</p>\n<p>Arnon Sang-ngern</p>\n",
            "url": "https://www.iamickdev.com/blog/who-am-i",
            "title": "Who am I?",
            "summary": "Who am I?\nHello, I&#39;m Arnon Sang-ngern!\n\nI&#39;m excited to welcome you to my personal website, where I&#39;ll be sharing my thoughts, experiences,...",
            "image": "https://maygdwyzbesqjdnnwzew.supabase.co/storage/v1/object/public/webfile/ick_logo.png",
            "date_modified": "2023-11-03T03:08:33.037Z",
            "date_published": "2023-11-03T03:08:33.037Z",
            "author": {
                "name": "Arnon Sang-ngern"
            },
            "tags": []
        },
        {
            "id": "https://www.iamickdev.com/blog/melodymail-멜로디메일-journey-of-emotions",
            "content_html": "<h1>MelodyMail  멜로디메일: A Journey of Emotions</h1>\n<p>The whole thing started on a rainy Thursday night while I was watching Netflix. (Don&#39;t judge me - we all have those nights.) I stumbled across this Korean film called <em>Melo Movie</em>, and something about it just hit differently. </p>\n<p>It wasn&#39;t just the story - though that was beautiful - it was this ache it left me with. You know that feeling when a movie makes you want to call someone and tell them how much they mean to you? But then you realize a text message feels... cheap? That&#39;s where I was sitting at 2 AM, laptop open, wondering: what if love letters could have soundtracks?</p>\n<p><img src=\"https://maygdwyzbesqjdnnwzew.supabase.co/storage/v1/object/public/webfile/projects/netflix_melomovie_poster.jpg\" alt=\"Melo Movie Poster\">\n<em>The movie that started it all</em> (<a href=\"https://www.netflix.com/th-en/title/81720593\">Watch on Netflix</a>)</p>\n<hr>\n<h2>The 2 AM Epiphany</h2>\n<p>I&#39;ve always been terrible at expressing feelings. Like, really terrible. I&#39;m the guy who writes &quot;Happy Birthday&quot; in a card and then stares at it for ten minutes trying to think of literally anything else to add. But music? Music does what words can&#39;t.</p>\n<p>Remember mix tapes? (Okay, maybe you remember mix CDs, or Spotify playlists if you&#39;re younger than me.) There&#39;s something magical about saying &quot;this song made me think of you.&quot; It&#39;s vulnerable in a way that&#39;s both specific and open to interpretation.</p>\n<p>So there I was, 2 AM, slight Netflix hangover, thinking: what if I could send someone a letter that comes with its own soundtrack? What if the person receiving it could feel the mood I was in when I wrote it?</p>\n<p>That&#39;s how 멜로디메일 (MelodyMail) was born - from insomnia, feelings, and way too much coffee.</p>\n<hr>\n<h2>What This Thing Actually Does</h2>\n<p>Let me break down what I built, because explaining it to my friends has been... interesting.</p>\n<h3>More Than Anonymous Letters</h3>\n<p>You can send completely anonymous letters through MelodyMail. I know what you&#39;re thinking - &quot;great, another platform for creepy messages.&quot; But here&#39;s the thing: anonymity doesn&#39;t have to mean hiding behind cruelty. Sometimes it means having the courage to be vulnerable without the weight of expectation.</p>\n<p>I&#39;ve seen letters that say things like &quot;I noticed you always order the same coffee and I think your dedication to routine is beautiful&quot; or &quot;I&#39;m too scared to tell you in person, but your laugh makes the office bearable.&quot; Real stuff. Human stuff.</p>\n<h3>The Soundtrack Feature (This Is The Cool Part)</h3>\n<p>Every letter comes with music. Not just a random song, but a carefully chosen track from Spotify, Apple Music, or SoundCloud that sets the entire mood. </p>\n<p>Think about it - reading &quot;I miss you&quot; while listening to a melancholy indie track hits different than reading it in silence. Or getting an encouraging message paired with that one song that always pumps you up. The music doesn&#39;t just accompany the words; it becomes part of the message.</p>\n<h3>Time Capsule Magic</h3>\n<p>Here&#39;s my favorite feature: you can schedule letters for the future. Write something today, set it to arrive on your friend&#39;s birthday next year, or send yourself something for when you need encouragement.</p>\n<p>I&#39;ve used this feature to send myself reminders during tough times. &quot;Hey future me, remember you got through last year&#39;s mess? You&#39;ll get through this too.&quot; It&#39;s like having a friend who knows exactly what you need to hear.</p>\n<h3>Social Media Integration (Because It&#39;s 2025)</h3>\n<p>You can share your MelodyMail profile or letters on Instagram stories. I was hesitant about this feature at first - it felt like it might ruin the intimacy. But users convinced me otherwise. Sometimes you want the world to know you received something beautiful, even if you keep the details private.</p>\n<hr>\n<h2>The Building Process (How I Learned to Stop Worrying and Love Debugging)</h2>\n<h3>Choosing the Stack</h3>\n<p>I went with Next.js because I wanted something that could handle both the frontend smoothness and backend complexity without making me write two separate applications. Plus, SEO was important - I wanted people to be able to discover MelodyMail organically.</p>\n<p>Supabase was a no-brainer for the backend. Real-time subscriptions for notifications, built-in auth, and a database that doesn&#39;t make me want to cry. Plus, their free tier is generous enough for a side project that might never make money.</p>\n<h3>The Music Integration Nightmare</h3>\n<p>Oh boy, this was fun. Each music platform has its own API quirks:</p>\n<ul>\n<li><strong>Spotify</strong>: Great docs, but their Web Playback SDK has more moods than a teenager</li>\n<li><strong>Apple Music</strong>: Powerful but picky about authentication</li>\n<li><strong>SoundCloud</strong>: Surprisingly smooth, actually</li>\n</ul>\n<p>Getting preview playback to work consistently across different browsers and devices took weeks. I became intimately familiar with every possible audio error code. Did you know iOS Safari handles audio autoplay differently than desktop Safari? Because I do now. Too well.</p>\n<h3>The Anonymity Challenge</h3>\n<p>Building a truly anonymous system while still preventing abuse was like solving a Rubik&#39;s cube blindfolded. How do you verify users without tracking them? How do you prevent spam without requiring personal information?</p>\n<p>I settled on a system of temporary tokens and rate limiting. Users can send messages without creating accounts, but there are safeguards to prevent the platform from becoming a harassment tool. It&#39;s not perfect, but it&#39;s honest.</p>\n<h3>Time Zone Hell</h3>\n<p>Scheduling future letters across different time zones nearly broke my brain. &quot;Send this on Christmas morning&quot; means different things in Tokyo vs. New York vs. London. </p>\n<p>I ended up storing all dates in UTC and then converting them based on the recipient&#39;s detected timezone (with fallback options). The amount of edge cases involving daylight saving time could fill a small novel.</p>\n<hr>\n<h2>The Unexpected Lessons</h2>\n<h3>People Are Kinder Than We Think</h3>\n<p>I was terrified about launching an anonymous platform. Would it become a cesspool? Surprisingly, most messages are incredibly thoughtful. People use anonymity to be vulnerable, not cruel.</p>\n<p>One user told me they use MelodyMail to send encouragement to themselves during difficult periods. Another sends anonymous compliments to strangers who seem like they&#39;re having bad days. The humanity of it all caught me off guard.</p>\n<h3>Music Is Universal (But Also Personal)</h3>\n<p>I thought certain songs would be obvious choices for certain types of messages. Turns out I was wrong. People choose the most unexpected tracks, and somehow they always work.</p>\n<p>Someone sent a love letter with death metal as the soundtrack. Another person chose a children&#39;s lullaby for a breakup note. The combinations shouldn&#39;t work, but they do because the sender chose them intentionally.</p>\n<h3>Technical Debt Is Real</h3>\n<p>That &quot;quick fix&quot; I made at 3 AM? It came back to haunt me when the platform started getting real traffic. I spent an entire weekend refactoring code I wrote during the initial build because future me hated past me&#39;s shortcuts.</p>\n<p>Note to self: comments aren&#39;t just for other developers. They&#39;re for you, six months from now, when you have no idea why you thought that function was a good idea.</p>\n<hr>\n<h2>The Stories That Keep Me Going</h2>\n<h3>The Long-Distance Friendship</h3>\n<p>Two friends separated by continents use MelodyMail to send weekly letters to each other. They choose songs that represent their week, and reading the letter while listening becomes a ritual that keeps them connected across time zones.</p>\n<h3>The Self-Care Letters</h3>\n<p>A user sends themselves encouraging messages scheduled for random dates throughout the year. &quot;When you read this, remember: you&#39;re stronger than you think&quot; paired with their favorite pump-up song. It&#39;s like having a best friend who knows exactly when you need to hear something good.</p>\n<h3>The Secret Admirer (The Good Kind)</h3>\n<p>Someone has been sending anonymous poetry to their neighbor every month for six months. Each letter comes with a different classical piece. The recipient posted about it on social media - not sharing the content, just expressing joy about receiving beautiful, unexpected messages.</p>\n<hr>\n<h2>What I&#39;ve Learned About Tech and Feelings</h2>\n<p>Building MelodyMail taught me that technology works best when it gets out of the way of human connection. The most successful features are the ones that feel invisible - you don&#39;t think about the code, you just feel the intended emotion.</p>\n<p>I also learned that privacy isn&#39;t just about data protection - it&#39;s about creating safe spaces for vulnerability. When people can share their feelings without fear of immediate judgment or confrontation, they often share more authentically.</p>\n<h3>The Music Discovery Effect</h3>\n<p>An unexpected side benefit: MelodyMail has become a music discovery platform. Users often discover new artists through letters they receive. There&#39;s something special about finding a new favorite song because someone thought it captured their feelings about you.</p>\n<hr>\n<h2>Current Challenges and Future Dreams</h2>\n<h3>Scale vs. Intimacy</h3>\n<p>As more people use MelodyMail, I&#39;m constantly balancing growth with the platform&#39;s intimate nature. How do you scale something that&#39;s fundamentally about personal connection without losing what makes it special?</p>\n<p>I&#39;ve resisted adding social features like follower counts or public message boards. MelodyMail isn&#39;t about building an audience - it&#39;s about connecting two people through music and words.</p>\n<h3>Platform Dependencies</h3>\n<p>Relying on third-party music services is both a blessing and a curse. When Spotify changes their API, I have to scramble to update. When Apple Music updates their pricing, I have to adjust. Building something that depends on big tech companies means dancing to their tune (pun intended).</p>\n<h3>The Sustainability Question</h3>\n<p>Right now, MelodyMail is a passion project funded by my coffee budget. But servers cost money, and APIs have rate limits. I&#39;m exploring ways to sustain the platform without compromising its core values. Maybe premium features for power users? Maybe partnerships with music labels? Still figuring it out.</p>\n<hr>\n<h2>Looking Forward</h2>\n<p>The future of MelodyMail isn&#39;t about adding more features - it&#39;s about deepening the ones that matter. I&#39;m working on:</p>\n<ul>\n<li><strong>Better music integration</strong>: Partnerships with more platforms, higher quality previews</li>\n<li><strong>Enhanced scheduling</strong>: More flexible timing options, recurring messages</li>\n<li><strong>Accessibility improvements</strong>: Making sure everyone can experience music-enhanced messages</li>\n<li><strong>Community features</strong>: Ways for users to share (anonymously) how MelodyMail has impacted them</li>\n</ul>\n<h3>The Bigger Picture</h3>\n<p>I hope MelodyMail becomes a reminder that technology can amplify human connection rather than replace it. In a world of instant notifications and disposable content, sometimes we need platforms that encourage us to slow down and choose our words - and our songs - carefully.</p>\n<hr>\n<h2>The Invitation</h2>\n<p>If you&#39;ve made it this far, you&#39;re probably the kind of person who understands why MelodyMail exists. Maybe you&#39;re someone who believes that the right song at the right moment can change everything. Maybe you&#39;ve wanted to tell someone something important but couldn&#39;t find the words.</p>\n<p>Or maybe you&#39;re just curious about what happens when a developer has too much coffee and too many feelings.</p>\n<p>Either way, I invite you to experience what we&#39;ve built. Send a letter to yourself, to a friend, to someone who doesn&#39;t know they need to hear from you. Choose a song that says what words can&#39;t. Set a date in the future and trust that the message will find its recipient when they need it most.</p>\n<p>Because at the end of the day, we&#39;re all just people trying to connect with other people. Sometimes we need a soundtrack to help us find the courage.</p>\n<p><a href=\"https://melodymail.online\">Try MelodyMail yourself</a></p>\n<p><img src=\"https://maygdwyzbesqjdnnwzew.supabase.co/storage/v1/object/public/webfile/projects/melodymail_home.jpeg\" alt=\"MelodyMail Screenshot\"></p>\n<hr>\n<p><em>P.S. - That Korean movie is still on Netflix. Watch it. Have feelings. Maybe send someone a letter about it.</em></p>\n",
            "url": "https://www.iamickdev.com/blog/melodymail-멜로디메일-journey-of-emotions",
            "title": "MelodyMail 멜로디메일: A Journey of Emotions",
            "summary": "MelodyMail  멜로디메일: A Journey of Emotions\nThe whole thing started on a rainy Thursday night while I was watching Netflix. (Don&#39;t judge me - we all ...",
            "image": "https://maygdwyzbesqjdnnwzew.supabase.co/storage/v1/object/public/webfile/projects/melodymail_home.jpeg",
            "date_modified": "2025-02-22T05:17:29.911Z",
            "date_published": "2025-02-22T05:17:29.911Z",
            "author": {
                "name": "Arnon Sang-ngern"
            },
            "tags": []
        },
        {
            "id": "https://www.iamickdev.com/blog/from-flutter-to-react-native-the-decision",
            "content_html": "<h1>From Flutter to React Native: Why Our Team Came Back to Reality</h1>\n<blockquote>\n<p>Flutter paints the whole app. React Native uses the platform’s own tools.</p>\n</blockquote>\n<p>When you pick a cross-platform framework, you’re not just choosing a language, you’re choosing a philosophy. The key question is simple: <strong>who owns the UI?</strong></p>\n<p>With Flutter, the framework owns it. With React Native, you let the platform do its job.</p>\n<hr>\n<h2>Flutter: Everything Drawn on Its Own Canvas</h2>\n<p>Flutter uses its own rendering engine. Every widget, every button, switch, text field, and pixel is drawn from scratch using Skia (and now Impeller). It doesn’t use UIKit, AppKit, or Android’s native components at all. The result is total control and visual consistency across devices, but at a high cost.</p>\n<p>When Flutter renders the UI, it bypasses the OS entirely. Instead of saying “draw a native button,” it says “give me a canvas and I’ll draw my own.” This approach allows pixel-perfect designs and cross-platform uniformity but it also means:</p>\n<ul>\n<li><p>Accessibility and input behaviors must be reimplemented manually.</p>\n</li>\n<li><p>Platform updates (like iOS visual changes) don’t apply automatically.</p>\n</li>\n<li><p>The app always carries its own rendering engine, increasing size and complexity.</p>\n</li>\n</ul>\n<p>Flutter creates an app <em>world</em> that looks native but isn’t. It’s a sandbox, sealed off from the underlying OS.</p>\n<hr>\n<h2>React Native: Built On the Platform Itself</h2>\n<p>React Native takes the opposite path. Instead of redrawing the universe, it <strong>bridges JavaScript components to native ones</strong>.</p>\n<p>A <code>&lt;Text&gt;</code> component maps to <code>UILabel</code> on iOS and <code>TextView</code> on Android. A <code>&lt;Button&gt;</code> becomes a true <code>UIButton</code> or <code>MaterialButton</code>. Scrolling, input, and gestures are handled by the OS not re-coded in a graphics engine.</p>\n<p>That means React Native apps:</p>\n<ul>\n<li><p>Inherit native accessibility, gestures, and UI behaviors.</p>\n</li>\n<li><p>Automatically reflect OS-level updates and visual changes.</p>\n</li>\n<li><p>Integrate naturally with native modules, SDKs, and system APIs.</p>\n</li>\n</ul>\n<p>React Native doesn’t fight the platform, it <em>extends</em> it. When the OS evolves, your app does too.</p>\n<hr>\n<h2>Why This Difference Matters</h2>\n<h3>1. Maintenance and Longevity</h3>\n<p>React Native’s approach scales better with platform evolution. When Apple or Google changes default UI styles or input rules, React Native adapts. Flutter requires manual catch-up.</p>\n<h3>2. User Experience Consistency</h3>\n<p>Flutter offers identical UI everywhere but sometimes that’s a problem. Users expect apps to feel <em>native</em> to their platform. React Native delivers that naturally because it uses native components.</p>\n<h3>3. Performance and Memory</h3>\n<p>Flutter’s Skia rendering is fast, but it’s also heavy. You’re effectively running a full custom engine per app. React Native delegates UI rendering to the OS, using its optimized pipelines.</p>\n<h3>4. Integration</h3>\n<p>React Native sits closer to the metal. Integrating native SDKs, sensors, or APIs is more straightforward. Flutter, with its canvas-based model, often needs custom platform channels to talk to native layers.</p>\n<hr>\n<h2>The Canvas Tradeoff</h2>\n<p>The canvas model isn’t inherently wrong. It’s powerful for games, complex animations, or fully custom UIs. Flutter excels when you need pixel-perfect control across platforms.</p>\n<p>But if your goal is to build <em>native-feeling mobile apps</em> that evolve with the OS, the canvas becomes an unnecessary middleman.</p>\n<p>React Native trusts the platform. Flutter replaces it.</p>\n<hr>\n<h2>Final Thoughts</h2>\n<p>Flutter is a work of art: elegant, fast, and visually consistent. But React Native is a workhorse: practical, adaptive, and native to its core.</p>\n<p>If you want to build cross-platform apps that feel natural, respond like real mobile apps, and age gracefully with iOS and Android. React Native wins, not by reinventing the UI, but by respecting it.</p>\n<p>Because the best way to be cross-platform isn’t to draw everything yourself.</p>\n<p>It’s to let each platform be what it already is and meet it halfway.</p>\n",
            "url": "https://www.iamickdev.com/blog/from-flutter-to-react-native-the-decision",
            "title": "From Flutter to React Native: Why Our Team Came Back to Reality",
            "summary": "From Flutter to React Native: Why Our Team Came Back to Reality\n\nFlutter paints the whole app. React Native uses the platform’s own tools.\n\nWhen you p...",
            "image": "https://maygdwyzbesqjdnnwzew.supabase.co/storage/v1/object/public/webfile/blog/react-native-vs-flutter/flutter-vs-react-native-the-decision.png",
            "date_modified": "2025-04-23T14:09:45.141Z",
            "date_published": "2025-04-23T14:09:45.141Z",
            "author": {
                "name": "Arnon Sang-ngern"
            },
            "tags": []
        },
        {
            "id": "https://www.iamickdev.com/blog/flutter-web-broke-my-heart",
            "content_html": "<h1>Flutter Web Broke My Heart</h1>\n<p><em>A brutally honest take on why Flutter web left me questioning my life choices</em></p>\n<hr>\n<p><img src=\"https://maygdwyzbesqjdnnwzew.supabase.co/storage/v1/object/public/webfile/blog/flutter-web/flutterlover.png\" alt=\"Flutter lover guy!\"></p>\n<p>And that&#39;s how I learned that sometimes the most expensive words in software development are &quot;how hard could it be?&quot;</p>\n<h2>The Breaking Point: A Government Website Horror Story</h2>\n<p>What finally pushed me over the edge to write this rant? I recently discovered that one of our government&#39;s campaign registration websites was built with Flutter web. Yes, you read that right. A <strong>government website</strong> that citizens need to access for democratic participation was built with Flutter web.</p>\n<p>As a full-stack developer, I nearly threw my laptop across the room.</p>\n<p>Here&#39;s my expectation for a government website that allows citizens to register for campaigns:</p>\n<ul>\n<li>Accessible to users with disabilities</li>\n<li>Fast on any device, from smartphones to ancient desktops</li>\n<li>Responsive and mobile-friendly</li>\n<li>Easy to navigate with a simple, intuitive UI for users of all ages</li>\n<li>Secure, because it&#39;s handling sensitive personal information</li>\n<li>Compatible with every browser under the sun</li>\n<li>Able to handle high traffic over 100,000 concurrent users without breaking a sweat</li>\n</ul>\n<p>And someone decided, <em>&quot;You know what this needs? A 2MB JavaScript bundle that renders everything on a canvas!&quot;</em></p>\n<blockquote>\n<p>Mobile first? but also desktop with mobile UI?</p>\n</blockquote>\n<p>The loading time was so painful I had time to make coffee while waiting for the form to appear. The irony of using a mobile-first framework for a website that government employees probably access from ancient desktop computers was not lost on me.</p>\n<p>This is exactly the kind of project that should use boring, reliable HTML forms with a sprinkle of JavaScript. Instead, we got a digital obstacle course that probably prevented more people from participating in democracy than it enabled.</p>\n<p>If this doesn&#39;t perfectly illustrate why Flutter web is often the wrong choice, I don&#39;t know what does.</p>\n<h2>The Great Performance Betrayal</h2>\n<p>Let&#39;s start with the elephant in the room: <strong>performance</strong>. Flutter web apps feel like they&#39;re running through molasses compared to their native counterparts. That buttery smooth 60fps animation you perfected on mobile? Congratulations, it&#39;s now a slideshow that would make PowerPoint 2003 proud.</p>\n<p>The culprit? Flutter web renders everything on a canvas or uses DOM elements, neither of which were designed for the complex rendering pipeline that Flutter demands. Your users are getting a JavaScript-heavy experience that makes their laptop fans spin up like they&#39;re mining cryptocurrency.</p>\n<p>I&#39;ve watched seasoned developers stare at Chrome DevTools, helplessly watching their beautifully crafted ListView struggle to maintain 30fps while scrolling through a modest list of items. It&#39;s soul-crushing.</p>\n<h2>SEO: The Forgotten Child</h2>\n<p>Remember when you thought your Flutter web app would be discoverable? Think again. Search engines and Flutter web have a relationship that&#39;s more complicated than a soap opera.</p>\n<p>Sure, Google claims to crawl JavaScript-heavy sites, but Flutter web&#39;s rendering approach means your carefully crafted content might as well be invisible to search bots. I&#39;ve seen developers spend weeks implementing server-side rendering workarounds that would make a PHP developer from 2005 laugh.</p>\n<p>The irony? You chose Flutter for its simplicity, but now you&#39;re maintaining separate landing pages in HTML just so Google can understand what your app does.</p>\n<h2>Bundle Size Blues</h2>\n<p>&quot;Why is my simple Flutter web app 2MB?&quot; - A question that haunts developer forums like a ghost seeking closure.</p>\n<p>Flutter web bundles are <em>massive</em>. Even a basic &quot;Hello World&quot; app weighs more than most complete websites. Your users on slower connections are sitting there, watching a loading spinner, while your app downloads more JavaScript than some people use in a month.</p>\n<p>I&#39;ve seen developers implement elaborate loading strategies, code splitting, and caching mechanisms just to get their Flutter web app to load in under 10 seconds. At that point, you&#39;re not building a web app anymore; you&#39;re performing digital archaeology.</p>\n<h2>The Accessibility Afterthought</h2>\n<p>Web accessibility isn&#39;t just a nice-to-have—it&#39;s a legal requirement in many jurisdictions. Flutter web&#39;s relationship with accessibility is... let&#39;s call it &quot;evolving.&quot;</p>\n<p>Screen readers struggle with Flutter web apps because they&#39;re essentially looking at a canvas or a DOM structure that doesn&#39;t follow web standards. Want proper focus management? Semantic HTML? Keyboard navigation that doesn&#39;t feel like it was designed by someone who&#39;s never heard of the Tab key?</p>\n<p>You&#39;ll be writing more workarounds than actual features. I&#39;ve watched developers spend entire sprints trying to make a simple form accessible, something that would take 30 minutes in vanilla HTML.</p>\n<h2>Development Experience: A Mixed Bag of Frustration</h2>\n<p>Flutter&#39;s development experience on mobile is phenomenal. On web? It&#39;s like your favorite restaurant decided to serve their signature dish on a paper plate with plastic cutlery.</p>\n<p>Hot reload works... sometimes. Debugging is an exercise in patience that would make a monk jealous. Browser developer tools don&#39;t understand your Flutter widget tree, so you&#39;re essentially debugging a black box wrapped in JavaScript.</p>\n<p>And don&#39;t get me started on browser differences. That perfect layout on Chrome? It&#39;s broken on Safari. That smooth animation on Firefox? It stutters on Edge. You&#39;re not just fighting Flutter&#39;s quirks anymore; you&#39;re fighting the entire web ecosystem.</p>\n<h2>The Reality Check</h2>\n<p>Here&#39;s the thing: Flutter web isn&#39;t inherently bad. It&#39;s a impressive technical achievement that lets you run Dart code in a browser. The problem is that it&#39;s trying to solve a problem that might not need solving.</p>\n<p>The web already has amazing tools for building web applications. HTML, CSS, and JavaScript (or TypeScript) have evolved into a mature, performant, and accessible platform. When you choose Flutter web, you&#39;re essentially saying &quot;I don&#39;t trust 30 years of web evolution&quot; and rebuilding everything from scratch.</p>\n<h2>When Flutter Web Makes Sense (Spoiler: It&#39;s Rare)</h2>\n<p>Flutter web isn&#39;t completely useless. It shines in specific scenarios:</p>\n<ul>\n<li><strong>Internal tools</strong> where performance and SEO don&#39;t matter</li>\n<li><strong>MVP prototypes</strong> where you need to show something quickly</li>\n<li><strong>Existing Flutter apps</strong> that need a basic web presence for feature parity</li>\n<li><strong>Complex visualizations</strong> where canvas rendering is actually beneficial</li>\n</ul>\n<p>But for most web applications? You&#39;re probably better off with Next.js, SvelteKit, or even vanilla JavaScript.</p>\n<h2>The Verdict</h2>\n<p>Flutter web feels like a solution in search of a problem. It takes the best parts of Flutter—its elegant widget system and rapid development cycle—and filters them through the constraints of web browsers that were never designed for this approach.</p>\n<p>As developers, we sometimes fall into the trap of wanting to use our favorite hammer for every nail. But sometimes, the nail is actually a screw, and you need a screwdriver.</p>\n<p>Flutter web isn&#39;t bad because it&#39;s poorly made—it&#39;s bad because it&#39;s trying to be something the web doesn&#39;t need it to be. The web is already amazing at being the web. Flutter is amazing at being Flutter. When you try to make Flutter be the web, you end up with something that&#39;s not quite either.</p>\n<p>So the next time someone suggests &quot;just deploying to web&quot; with Flutter, maybe take a step back and ask: &quot;Are we solving the right problem, or are we just making our lives more complicated?&quot;</p>\n<p>Trust me, your users (and your sanity) will thank you.</p>\n<hr>\n<p>Choose the right hammer for the right nail &lt;3</p>\n",
            "url": "https://www.iamickdev.com/blog/flutter-web-broke-my-heart",
            "title": "Flutter Web Broke My Heart",
            "summary": "Flutter Web Broke My Heart\nA brutally honest take on why Flutter web left me questioning my life choices\n\n\nAnd that&#39;s how I learned that sometimes...",
            "image": "https://maygdwyzbesqjdnnwzew.supabase.co/storage/v1/object/public/webfile/blog/flutter-web/flutterlover.png",
            "date_modified": "2025-07-03T15:20:48.038Z",
            "date_published": "2025-07-03T15:20:48.038Z",
            "author": {
                "name": "Arnon Sang-ngern"
            },
            "tags": []
        },
        {
            "id": "https://www.iamickdev.com/blog/fascination-of-the-fifteen-puzzle-digital-experience",
            "content_html": "<h1>I Built a Digital Fifteen Puzzle~</h1>\n<h2>Why I Spent My Weekend on This</h2>\n<p>Remember sliding those plastic tiles around as a kid? The satisfying click when a piece fell into place? Well, I got nostalgic and decided to rebuild the Fifteen Puzzle for the web. What started as a &quot;quick afternoon project&quot; turned into a deep dive that consumed my entire weekend (and maybe a few more).</p>\n<p>You can check out what I built at <a href=\"https://15puzzle.games.iamickdev.com\">15puzzle.games.iamickdev.com</a> - but let me tell you the story behind it first.</p>\n<h2>What&#39;s This Puzzle All About?</h2>\n<p>If you&#39;ve never encountered the Fifteen Puzzle (lucky you, you&#39;re about to lose hours of your life), here&#39;s the deal: you&#39;ve got 15 numbered tiles in a 4x4 grid with one empty space. The goal? Get all the numbers in order from 1 to 15.</p>\n<p>Sounds easy, right? </p>\n<p>Hah. </p>\n<p>You can only slide tiles into the empty space, which means you&#39;re constantly moving pieces out of the way to get other pieces where they need to go. It&#39;s like trying to organize your messy room when you can only move one thing at a time and you have nowhere to put anything temporarily.</p>\n<h2>The Tech Stack (Because You Asked)</h2>\n<p>I went with SvelteKit because, honestly, I wanted an excuse to use it more. Plus, it handles state management beautifully, which is crucial when you&#39;re tracking tile positions and animations.</p>\n<p>For the backend, I chose Supabase. I know, I know - it might seem overkill for a puzzle game, but I had bigger plans brewing (spoiler alert: leaderboards and save states).</p>\n<h2>The Development Rabbit Hole</h2>\n<h3>Starting Simple (Famous Last Words)</h3>\n<p>My initial plan was straightforward: create a grid, make tiles clickable, animate movements. Should take a few hours, max.</p>\n<p>Three days later, I&#39;m debugging edge cases like &quot;what happens when someone clicks really fast&quot; and &quot;why does the animation break when you resize the window mid-game?&quot;</p>\n<h3>The Animation Struggle</h3>\n<p>Getting smooth tile animations was harder than I expected. CSS transitions are great until you need to animate multiple tiles moving in sequence, then suddenly you&#39;re dealing with timing functions and transform origins like you&#39;re choreographing a dance.</p>\n<p>I probably rewrote the animation logic four times before settling on something that didn&#39;t make my laptop fans spin up like a jet engine.</p>\n<h3>The &quot;Unsolvable&quot; Problem</h3>\n<p>Here&#39;s something fun I learned: not every scrambled Fifteen Puzzle is actually solvable. There&#39;s this whole mathematical thing about &quot;inversion parity&quot; that determines whether a configuration can be solved.</p>\n<p>I spent an embarrassing amount of time wondering why my random shuffle sometimes created impossible puzzles before discovering this. Now I generate solvable puzzles by starting from the solved state and making random valid moves backwards. Much smarter, right?</p>\n<h2>Features That Made Me Proud</h2>\n<h3>The UI That Doesn&#39;t Suck</h3>\n<p>I&#39;m not a designer, but I tried to make something that doesn&#39;t hurt to look at. Clean, minimal, responsive - the usual web dev buzzwords. The tiles have this subtle shadow and smooth hover effect that makes them feel... tactile? Is that the right word for digital tiles?</p>\n<h3>Supabase Integration (The Fun Part)</h3>\n<p>This is where I got carried away. What started as &quot;maybe I&#39;ll save high scores&quot; became:</p>\n<ul>\n<li><strong>Progress saving</strong> - Start a puzzle on your phone, finish it on your laptop</li>\n<li><strong>Global leaderboards</strong> - Because competitive puzzle solving is apparently a thing I enjoy</li>\n<li><strong>Personal stats</strong> - Track your improvement over time (or watch yourself get worse, like me)</li>\n</ul>\n<p>The Supabase integration was surprisingly smooth. Real-time subscriptions for the leaderboard updates, user authentication, data persistence - it all just worked. Sometimes I love modern web development.</p>\n<h2>What I Learned About Myself</h2>\n<p>Building this reminded me why I love coding in the first place. There&#39;s something satisfying about taking a physical thing you remember from childhood and bringing it into the digital world.</p>\n<p>Also, I discovered I&#39;m terrible at my own puzzle game. I can build the perfect sliding mechanism, but ask me to solve it in under 100 moves? Not happening.</p>\n<h2>The Unexpected Addiction</h2>\n<p>I built this thing, and now I can&#39;t stop playing it. It&#39;s become my go-to &quot;just five minutes&quot; activity that somehow turns into an hour of trying to beat my previous best time.</p>\n<p>My girlfriend walks by and sees me clicking tiles furiously, and I have to explain that yes, I&#39;m &quot;working&quot; on my &quot;project.&quot; She&#39;s not buying it anymore.</p>\n<h2>What&#39;s Next?</h2>\n<p>I&#39;ve got a list of features longer than my actual code:</p>\n<ul>\n<li><strong>Daily challenges</strong> - Same puzzle for everyone, see who solves it fastest</li>\n<li><strong>Different grid sizes</strong> - Because 4x4 isn&#39;t frustrating enough</li>\n<li><strong>Multiplayer races</strong> - Real-time head-to-head puzzle solving</li>\n<li><strong>Custom themes</strong> - Because apparently I want to become a game studio</li>\n</ul>\n<p>Will I actually build all this? Probably not. Will I keep tinkering with it when I should be doing actual work? Absolutely.</p>\n<h2>The Real Motivation</h2>\n<p>Truth is, building this wasn&#39;t really about the Fifteen Puzzle. It was about that feeling you get when you take something from your imagination and make it real. When someone visits your website and spends 20 minutes playing a game you built from scratch.</p>\n<p>It&#39;s about proving to yourself that you can still build things just for the joy of building them.</p>\n<h2>Try It Yourself</h2>\n<p>Go play it at <a href=\"https://15puzzle.games.iamickdev.com\">15puzzle.games.iamickdev.com</a>. See if you can beat my embarrassingly high move count. Or better yet, build your own version - there&#39;s something magical about recreating the toys from your childhood with the tools of today.</p>\n<p>Just don&#39;t blame me when you&#39;re still sliding tiles at 2 AM, convinced you&#39;re &quot;almost done&quot; with this puzzle.</p>\n<hr>\n<p><em>Now if you&#39;ll excuse me, I have a puzzle to solve. Again.</em></p>\n",
            "url": "https://www.iamickdev.com/blog/fascination-of-the-fifteen-puzzle-digital-experience",
            "title": "I Built a Digital Fifteen Puzzle~",
            "summary": "I Built a Digital Fifteen Puzzle~\nWhy I Spent My Weekend on This\nRemember sliding those plastic tiles around as a kid? The satisfying click when a pie...",
            "image": "https://maygdwyzbesqjdnnwzew.supabase.co/storage/v1/object/public/webfile/ick_logo.png",
            "date_modified": "2024-01-10T08:50:48.539Z",
            "date_published": "2024-01-10T08:50:48.539Z",
            "author": {
                "name": "Arnon Sang-ngern"
            },
            "tags": []
        }
    ]
}