<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Gimnath Perera</title>
    <description>The latest articles on Forem by Gimnath Perera (@gimnathperera).</description>
    <link>https://forem.com/gimnathperera</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F339068%2F53bea3f2-cfcb-4050-835e-9e4e62f78ce3.png</url>
      <title>Forem: Gimnath Perera</title>
      <link>https://forem.com/gimnathperera</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/gimnathperera"/>
    <language>en</language>
    <item>
      <title>❄️ frost-react: instant snowfall for React</title>
      <dc:creator>Gimnath Perera</dc:creator>
      <pubDate>Mon, 22 Dec 2025 03:25:55 +0000</pubDate>
      <link>https://forem.com/gimnathperera/frost-react-instant-snowfall-for-react-i9e</link>
      <guid>https://forem.com/gimnathperera/frost-react-instant-snowfall-for-react-i9e</guid>
      <description>&lt;h1&gt;
  
  
  frost-react: instant snowfall for React
&lt;/h1&gt;

&lt;p&gt;Every December, every product launch, every fun landing page — I kept running into the same tiny problem: “I just want a clean snowfall effect in my React app… why is this so complicated?” That frustration is exactly why I built frost-react.&lt;/p&gt;

&lt;p&gt;frost-react is a lightweight, accessible, and customizable snowfall animation component for React — designed to be simple to use, performant, and pleasant for both developers and users.&lt;/p&gt;

&lt;h2&gt;
  
  
  🌨 What is frost-react?
&lt;/h2&gt;

&lt;p&gt;frost-react is an npm package that provides a &lt;code&gt;&amp;lt;Snowfall /&amp;gt;&lt;/code&gt; React component. Drop it into your app and you instantly get a smooth snowfall animation — no canvas setup, no animation math, no performance headaches.&lt;/p&gt;

&lt;p&gt;Built with: &lt;br&gt;
⚛️ React&lt;br&gt;&lt;br&gt;
🧠 TypeScript &lt;br&gt;
⚡ performance-first defaults &lt;br&gt;
♿ accessibility in mind &lt;br&gt;
📦 zero runtime dependencies (besides React)&lt;/p&gt;

&lt;p&gt;👉 GitHub: &lt;a href="https://github.com/gimnathperera/frost-react" rel="noopener noreferrer"&gt;https://github.com/gimnathperera/frost-react&lt;/a&gt;&lt;br&gt;&lt;br&gt;
👉 npm: &lt;a href="https://www.npmjs.com/package/frost-react" rel="noopener noreferrer"&gt;https://www.npmjs.com/package/frost-react&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  🤔 Why I built this library
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1) Existing solutions felt overkill.&lt;/strong&gt; Most animation libraries are either extremely generic (you still have to build snowfall logic yourself) or heavy and over-engineered for something purely visual. I wanted something that feels like &lt;code&gt;&amp;lt;Snowfall /&amp;gt;&lt;/code&gt; — no config required unless you want it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2) Performance matters (especially on mobile).&lt;/strong&gt; Snowfall is purely decorative; it should never make your app feel slow. frost-react automatically reduces flake count on mobile, avoids unnecessary re-renders, and keeps animations smooth on low-powered devices. You still get control, but the defaults are safe.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3) Accessibility should not be optional.&lt;/strong&gt; Many users prefer reduced motion. frost-react respects &lt;code&gt;prefers-reduced-motion&lt;/code&gt;, uses clean layering with &lt;code&gt;z-index&lt;/code&gt;, and ships with non-intrusive defaults that don’t block interaction. Animation should enhance UX — not harm it.&lt;/p&gt;
&lt;h2&gt;
  
  
  🚀 Installation &amp;amp; quick start
&lt;/h2&gt;

&lt;p&gt;Install it like any normal npm package:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install &lt;/span&gt;frost-react
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Use it in your app:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Snowfall&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;frost-react&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;App&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Snowfall&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;main&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Your app content&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;main&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That’s it. You now have snowfall. ❄️&lt;/p&gt;

&lt;h2&gt;
  
  
  🎛 Customization without the pain
&lt;/h2&gt;

&lt;p&gt;Tweak the animation easily via props:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Snowfall&lt;/span&gt;
  &lt;span class="na"&gt;flakeCount&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;120&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
  &lt;span class="na"&gt;wind&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
  &lt;span class="na"&gt;speed&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;14&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
  &lt;span class="na"&gt;size&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;28&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
  &lt;span class="na"&gt;opacity&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mf"&gt;0.5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;0.9&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
  &lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"#ffffff"&lt;/span&gt;
&lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Available props&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Prop&lt;/th&gt;
&lt;th&gt;What it controls&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;enabled&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Turn snowfall on/off&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;flakeCount&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Number of snowflakes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;snowflakeCharacter&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Emoji or character used&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;speed&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Falling speed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;size&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Snowflake size&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;opacity&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Transparency&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;wind&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Horizontal drift&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;color&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Snow color&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;zIndex&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Layer positioning&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;className&lt;/code&gt; / &lt;code&gt;style&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Custom styling&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;All props are fully typed with TypeScript.&lt;/p&gt;

&lt;h2&gt;
  
  
  🧩 Works with modern React frameworks
&lt;/h2&gt;

&lt;p&gt;frost-react plays nicely with modern setups:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Next.js (SSR safe)&lt;/li&gt;
&lt;li&gt;Remix&lt;/li&gt;
&lt;li&gt;Vite&lt;/li&gt;
&lt;li&gt;CRA&lt;/li&gt;
&lt;li&gt;ESM &amp;amp; CommonJS&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No &lt;code&gt;window&lt;/code&gt; crashes on the server. No hacks.&lt;/p&gt;

&lt;h2&gt;
  
  
  🧠 Developer experience matters
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Full TypeScript support and clean internal architecture&lt;/li&gt;
&lt;li&gt;Storybook playground for testing&lt;/li&gt;
&lt;li&gt;Sensible defaults with escape hatches&lt;/li&gt;
&lt;li&gt;Zero unnecessary dependencies&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Small library. Clean responsibility.&lt;/p&gt;

&lt;h2&gt;
  
  
  🎄 When should you use frost-react?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Holiday landing pages or seasonal UI flair&lt;/li&gt;
&lt;li&gt;Marketing sites and fun dashboards&lt;/li&gt;
&lt;li&gt;Temporary events (Xmas, New Year, winter promos)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you want joy without bloat — this fits.&lt;/p&gt;

&lt;h2&gt;
  
  
  🧊 Final thoughts
&lt;/h2&gt;

&lt;p&gt;frost-react exists because I wanted a snowfall effect that looks good, performs well, respects users, and doesn’t fight developers. It’s intentionally small, focused, and opinionated — in a good way. If you try it out, break it, improve it, or build something fun with it — I’d love to see it.&lt;/p&gt;

&lt;p&gt;Happy coding,&lt;br&gt;
Gimnath❄️ &lt;/p&gt;

&lt;h2&gt;
  
  
  🔗 Links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;GitHub: &lt;a href="https://github.com/gimnathperera/frost-react" rel="noopener noreferrer"&gt;https://github.com/gimnathperera/frost-react&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;npm: &lt;a href="https://www.npmjs.com/package/frost-react" rel="noopener noreferrer"&gt;https://www.npmjs.com/package/frost-react&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>webdev</category>
      <category>npm</category>
      <category>frostreact</category>
      <category>snowfall</category>
    </item>
    <item>
      <title>Weekly Tech Discoveries Part - 03</title>
      <dc:creator>Gimnath Perera</dc:creator>
      <pubDate>Mon, 28 Jul 2025 00:18:52 +0000</pubDate>
      <link>https://forem.com/gimnathperera/weekly-tech-discoveries-part-03-31fn</link>
      <guid>https://forem.com/gimnathperera/weekly-tech-discoveries-part-03-31fn</guid>
      <description>&lt;p&gt;Welcome to another edition of Weekly Tech Discoveries, where we dive deep into the most innovative tools reshaping the technology landscape. This week's lineup features groundbreaking solutions that are solving real problems for developers, HR professionals, and remote teams worldwide.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. &lt;a href="https://www.trae.ai/" rel="noopener noreferrer"&gt;Trae&lt;/a&gt;: The AI Revolution in Code Development
&lt;/h2&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%2Fbk2dnfgl8vo11cyb1qhc.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%2Fbk2dnfgl8vo11cyb1qhc.png" alt="trae IDE image" width="800" height="463"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Trae isn't just another IDE—it's a glimpse into the future of software development. This intelligent development environment represents a paradigm shift where artificial intelligence becomes your coding partner rather than just a tool.&lt;/p&gt;

&lt;p&gt;What makes Trae extraordinary is its contextual understanding. Unlike traditional IDEs that offer basic autocomplete, Trae analyzes your entire project architecture to provide meaningful suggestions. It understands not just syntax, but intent—suggesting entire function implementations based on comments, predicting potential bugs before you run tests, and even refactoring code to follow best practices automatically.&lt;/p&gt;

&lt;p&gt;The real magic happens in collaborative scenarios. Trae can analyze pull requests, suggest improvements, and even explain complex code sections to new team members. For startups and enterprises alike, this translates to faster development cycles, reduced debugging time, and improved code quality. Early adopters report up to 40% reduction in routine coding tasks, allowing developers to focus on creative problem-solving rather than boilerplate implementation.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. &lt;a href="https://github.com/QwenLM/Qwen3-Coder" rel="noopener noreferrer"&gt;Qwenve Corder&lt;/a&gt;: Next-Generation Video Processing Excellence
&lt;/h2&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%2Fwu1strangqz7hjvh8kor.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%2Fwu1strangqz7hjvh8kor.png" alt="Image description image" width="800" height="458"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Qwenve Corder emerges as a powerhouse in the video processing domain, offering capabilities that rival proprietary solutions at a fraction of the cost. This library addresses one of the most challenging aspects of modern software development: efficient multimedia handling.&lt;/p&gt;

&lt;p&gt;Traditional video processing often involves complex workflows and multiple tools. Qwenve Corder streamlines this by providing a unified API that handles everything from basic format conversion to advanced real-time effects processing. The library's intelligent encoding algorithms automatically optimize video quality based on target platforms and bandwidth constraints.&lt;/p&gt;

&lt;p&gt;For content creators and streaming platforms, this means delivering superior user experiences with minimal infrastructure overhead. The library's support for hardware acceleration ensures that processing tasks don't become bottlenecks, while its modular architecture allows developers to include only the components they need, reducing application bloat.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. &lt;a href="https://github.com/frappe/hrms" rel="noopener noreferrer"&gt;Frappe HRMS&lt;/a&gt;: Democratizing Enterprise HR Management
&lt;/h2&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%2F5pz8kbikl5e1tgoznb87.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%2F5pz8kbikl5e1tgoznb87.png" alt="Frappe HRMS image" width="800" height="464"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;At &lt;a href="https://github.com/frappe/hrms" rel="noopener noreferrer"&gt;https://github.com/frappe/hrms&lt;/a&gt; , we find something truly special: an open-source HR management system that competes with six-figure enterprise solutions. This isn't just software—it's a movement toward accessible, customizable HR technology.&lt;/p&gt;

&lt;p&gt;Frappe HRMS transforms how organizations handle their most valuable asset: people. The platform's employee lifecycle management covers everything from onboarding to exit interviews, with sophisticated workflows that adapt to different organizational structures. The attendance tracking system integrates with various devices and methods, from traditional打卡 systems to mobile apps and geolocation services.&lt;/p&gt;

&lt;p&gt;The payroll engine deserves special recognition. It handles complex salary structures, statutory compliance across multiple jurisdictions, and tax calculations with remarkable accuracy. Multi-currency support makes it ideal for international organizations, while the built-in reporting dashboard provides insights that would typically require expensive business intelligence tools.&lt;/p&gt;

&lt;p&gt;What sets this apart is its extensibility. Organizations can customize workflows, add fields, create custom reports, and integrate with existing systems without touching core code. The active community contributes plugins and extensions regularly, ensuring the platform continues evolving with changing HR needs.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. &lt;a href="https://github.com/m1k1o/neko" rel="noopener noreferrer"&gt;Neko&lt;/a&gt;: Redefining Remote Browser Access
&lt;/h2&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%2Fmlcl68p8qgracbfvufxm.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%2Fmlcl68p8qgracbfvufxm.png" alt="Neko image" width="800" height="421"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Neko at &lt;a href="https://github.com/m1k1o/neko" rel="noopener noreferrer"&gt;https://github.com/m1k1o/neko&lt;/a&gt; represents a breakthrough in secure, collaborative browsing. This Docker-based virtual browser solution leverages WebRTC to deliver desktop-quality performance through any web browser.&lt;/p&gt;

&lt;p&gt;The implications are profound. Security teams can provide isolated browsing environments for handling suspicious links or sensitive research. Educational institutions can ensure all students have access to identical browser configurations regardless of their personal devices. Support teams can replicate customer issues exactly by sharing the same browser environment.&lt;/p&gt;

&lt;p&gt;Neko's architecture is elegantly simple yet powerful. Each browser instance runs in its own Docker container, completely isolated from the host system and other instances. WebRTC provides sub-second latency, making the experience feel native rather than remote. The system supports multiple concurrent users, enabling collaborative browsing sessions where team members can interact with the same web page simultaneously.&lt;/p&gt;

&lt;p&gt;For enterprises, this eliminates the headaches of browser compatibility testing. Instead of maintaining multiple browser installations across development machines, teams can spin up identical environments on demand. The Docker integration means scaling is as simple as adding more containers, and the entire system can be managed through standard container orchestration tools.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;These four tools represent different aspects of a larger trend: the democratization of sophisticated technology. Where once only large enterprises could afford AI-assisted development tools, comprehensive HR systems, or secure remote access solutions, these capabilities are now available to organizations of all sizes through open-source initiatives and innovative architectures.&lt;/p&gt;

&lt;p&gt;The convergence of containerization, real-time web technologies, and artificial intelligence is creating opportunities that didn't exist even a few years ago. Developers can now build applications that were previously impossible, HR professionals can access enterprise-grade tools without enterprise budgets, and remote teams can collaborate with unprecedented efficiency and security.&lt;/p&gt;

&lt;p&gt;What's particularly exciting is how these tools complement each other. A developer using Trae to build an application might deploy it using container technologies similar to Neko, while the organization uses Frappe HRMS to manage their team. This ecosystem approach creates powerful synergies that amplify the value of each individual tool.&lt;/p&gt;

&lt;p&gt;As we move forward, expect to see more innovations like these—tools that don't just solve problems, but eliminate entire categories of technical challenges. The future of technology lies not in making complex things possible, but in making the previously impossible simple, accessible, and affordable.&lt;/p&gt;

&lt;p&gt;Stay tuned for next week's discoveries, where we'll continue exploring the tools and technologies that are reshaping our digital landscape.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>javascript</category>
      <category>ai</category>
    </item>
    <item>
      <title>Weekly Tech Discoveries Part - 02</title>
      <dc:creator>Gimnath Perera</dc:creator>
      <pubDate>Wed, 25 Jun 2025 15:07:28 +0000</pubDate>
      <link>https://forem.com/gimnathperera/weekly-tech-discoveries-part-02-1eh8</link>
      <guid>https://forem.com/gimnathperera/weekly-tech-discoveries-part-02-1eh8</guid>
      <description>&lt;h1&gt;
  
  
  🧠 Weekly Tech Discovery
&lt;/h1&gt;

&lt;p&gt;Staying up-to-date in the fast-moving world of tech can feel like trying to drink from a firehose — especially if you're a developer constantly balancing learning new tools while shipping features and maintaining codebases.&lt;/p&gt;

&lt;p&gt;That’s where this weekly discovery series comes in. Each week, I’ll curate and explore tools, platforms, libraries, and AI-powered innovations that are making waves across the development community.&lt;/p&gt;

&lt;p&gt;This week, we’re diving into five unique tools that span from mobile-first coding apps to conversational UI builders — all designed to boost your productivity and creativity as a developer.&lt;/p&gt;

&lt;p&gt;Let’s dive in!&lt;/p&gt;




&lt;h3&gt;
  
  
  1. &lt;a href="https://21st.dev/home" rel="noopener noreferrer"&gt;21st.dev&lt;/a&gt;  – Mobile-First Development Gets Real
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;Designed for mobile devices, offering better experience and more features&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Platform&lt;/strong&gt;: Web / Mobile&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Category&lt;/strong&gt;: AI Coding Assistant / Mobile Development  &lt;/p&gt;

&lt;p&gt;While most developers still rely heavily on desktop environments, the trend toward mobile-first workflows is growing. Enter &lt;strong&gt;21st.dev&lt;/strong&gt;, a mobile app tailored specifically for developers who want to interact with code and AI models on the go.&lt;/p&gt;

&lt;p&gt;The app promises a native mobile experience with support for AI-assisted coding, command execution, and even integration with GitHub and other cloud-based tools.&lt;/p&gt;

&lt;p&gt;📱 Whether you're debugging code during a commute or brainstorming ideas between meetings, 21st.dev makes it easier than ever to stay productive outside your laptop.&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%2Fr6q20u4pfxagopzxfmu3.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%2Fr6q20u4pfxagopzxfmu3.png" alt=" " width="800" height="279"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🔗 &lt;a href="https://21st.dev/home" rel="noopener noreferrer"&gt;Visit 21st.dev&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  2. &lt;a href="https://clideo.com/resize-video" rel="noopener noreferrer"&gt;Clideo Resize Video&lt;/a&gt; – Simple, Fast, and Powerful Media Tool
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;Create stunning visuals without the hassle&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Platform&lt;/strong&gt;: Web&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Category&lt;/strong&gt;: Media Editing / UI Components  &lt;/p&gt;

&lt;p&gt;Clideo started out as a simple online video editing suite but has evolved into a broader toolkit for visual content creation. Its &lt;strong&gt;Resize Video&lt;/strong&gt; feature is particularly useful for developers who need to quickly adapt media assets for different platforms — no downloads or installations required.&lt;/p&gt;

&lt;p&gt;🛠️ Bonus: Clideo also offers downloadable UI components and templates that can be integrated directly into web projects, saving time and effort when building landing pages or marketing sites.&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%2Flrfqo8egrvxuydrm6bom.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%2Flrfqo8egrvxuydrm6bom.png" alt=" " width="800" height="398"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🔗 &lt;a href="https://clideo.com/resize-video" rel="noopener noreferrer"&gt;Resize Video Tool&lt;/a&gt; | &lt;a href="https://clideo.com/" rel="noopener noreferrer"&gt;Explore UI Components&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  3. &lt;a href="https://chat.qwen.ai/" rel="noopener noreferrer"&gt;Qwen AI Chat&lt;/a&gt; – Alibaba’s AI-Powered Developer Companion
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;Designed for mobile devices, offering better experience and more features&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Platform&lt;/strong&gt;: Web / Mobile&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Category&lt;/strong&gt;: AI Assistant / Code Generation  &lt;/p&gt;

&lt;p&gt;Developed by Alibaba Cloud, &lt;strong&gt;Qwen&lt;/strong&gt; is one of the leading large language models in the market today. While it's already integrated into many IDEs and tools, the standalone chat interface at &lt;code&gt;chat.qwen.ai&lt;/code&gt; provides a clean, focused environment for developers to interact with the model.&lt;/p&gt;

&lt;p&gt;🤖 Qwen excels at tasks like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Generating boilerplate code&lt;/li&gt;
&lt;li&gt;Debugging snippets&lt;/li&gt;
&lt;li&gt;Writing documentation&lt;/li&gt;
&lt;li&gt;Translating code between languages&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It's especially handy for developers working in multilingual environments or those who want a mobile-friendly assistant that understands both natural language and programming syntax.&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%2Fsrsy85kx2k0dt5cux5bt.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%2Fsrsy85kx2k0dt5cux5bt.png" alt=" " width="800" height="343"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🔗 &lt;a href="https://chat.qwen.ai/" rel="noopener noreferrer"&gt;Try Qwen Chat&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  4. &lt;a href="https://lovable.dev/" rel="noopener noreferrer"&gt;Lovable.dev&lt;/a&gt; – Build Apps &amp;amp; Websites by Talking to AI
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;What do you want to build? Create stunning apps &amp;amp; websites by chatting with AI.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Platform&lt;/strong&gt;: Web&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Category&lt;/strong&gt;: AI Website Builder / No-Code  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Lovable.dev&lt;/strong&gt; is a fascinating experiment in conversational design. Instead of dragging and dropping elements or writing HTML/CSS, you simply describe what you want — and AI builds it for you.&lt;/p&gt;

&lt;p&gt;💬 For example, typing &lt;em&gt;"a homepage for a SaaS product with a pricing table and testimonials"&lt;/em&gt; will generate a complete layout with responsive design and basic interactivity.&lt;/p&gt;

&lt;p&gt;✨ Ideal for MVP builders, designers, and developers looking to speed up early-stage prototyping.&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%2F4laehm3fi6f7hcnp4za9.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%2F4laehm3fi6f7hcnp4za9.png" alt=" " width="800" height="360"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🔗 &lt;a href="https://lovable.dev/" rel="noopener noreferrer"&gt;Visit Lovable.dev&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  5. &lt;a href="https://bolt.new/" rel="noopener noreferrer"&gt;Bolt.new&lt;/a&gt; – AI-Powered Design-to-Code Platform
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;What do you want to build? Create stunning apps &amp;amp; websites by chatting with AI.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Platform&lt;/strong&gt;: Web&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Category&lt;/strong&gt;: AI UI Builder / Code Generator  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bolt.new&lt;/strong&gt; joins the growing list of AI-driven platforms that convert natural language input into functional frontend code. It’s similar to Lovable in concept but focuses more on generating reusable UI components and structured layouts.&lt;/p&gt;

&lt;p&gt;⚡ Whether you're building a dashboard, landing page, or component library, Bolt.new helps accelerate the process by reducing repetitive boilerplate work.&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%2Fq213xlsvtber99qmfox7.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%2Fq213xlsvtber99qmfox7.png" alt=" " width="800" height="384"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🔗 &lt;a href="https://bolt.new/" rel="noopener noreferrer"&gt;Try Bolt.new&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  💡 Why These Tools Matter
&lt;/h2&gt;

&lt;p&gt;What stands out about this week’s picks is how &lt;strong&gt;AI is becoming deeply embedded&lt;/strong&gt; in the everyday tools developers use. From mobile coding assistants to voice-controlled UI builders, these platforms aren’t just gimmicks — they represent real shifts in how we approach problem-solving and prototyping.&lt;/p&gt;

&lt;p&gt;Here’s a quick breakdown:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;th&gt;Use Case&lt;/th&gt;
&lt;th&gt;AI Integration Level&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;21st.dev&lt;/td&gt;
&lt;td&gt;Mobile coding&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Clideo&lt;/td&gt;
&lt;td&gt;Media editing&lt;/td&gt;
&lt;td&gt;Low&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Qwen&lt;/td&gt;
&lt;td&gt;Code generation &amp;amp; help&lt;/td&gt;
&lt;td&gt;Very High&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Lovable&lt;/td&gt;
&lt;td&gt;Conversational UI builder&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bolt.new&lt;/td&gt;
&lt;td&gt;AI-powered UI scaffolding&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;These tools are worth exploring not only because they save time but because they offer glimpses into the future of development — one where human creativity and machine intelligence work hand-in-hand.&lt;/p&gt;




&lt;h2&gt;
  
  
  📌 Final Thoughts
&lt;/h2&gt;

&lt;p&gt;This week’s discoveries show how rapidly the development landscape is evolving. Whether you're a full-stack engineer, a designer, or someone just starting out, there’s something here for everyone.&lt;/p&gt;

&lt;p&gt;If you found this helpful, consider subscribing to get a new list every week 👇&lt;/p&gt;

&lt;p&gt;📌 &lt;strong&gt;Want More Like This?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Follow along next week for more exciting tools, libraries, and AI-powered innovations shaping the future of development.&lt;/p&gt;




&lt;p&gt;*Got feedback or suggestions for next week’s tools? Hit reply or reach out on &lt;a href="mailto:gimnathperera@gmail.com"&gt;gimnathperera@gmail.com&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>ai</category>
      <category>productivity</category>
      <category>news</category>
    </item>
    <item>
      <title>Unlocking the Potential of Convex.dev: Revolutionizing Backend Development</title>
      <dc:creator>Gimnath Perera</dc:creator>
      <pubDate>Fri, 26 Jul 2024 19:07:37 +0000</pubDate>
      <link>https://forem.com/gimnathperera/unlocking-the-potential-of-convexdev-revolutionizing-backend-development-2fpn</link>
      <guid>https://forem.com/gimnathperera/unlocking-the-potential-of-convexdev-revolutionizing-backend-development-2fpn</guid>
      <description>&lt;p&gt;In the ever-evolving landscape of software development, creating robust and scalable backend systems has always been a challenge. From managing databases to handling real-time updates, developers often juggle multiple tools and frameworks to build efficient backends. Enter &lt;a href="https://www.convex.dev/" rel="noopener noreferrer"&gt;Convex.dev&lt;/a&gt;, a cutting-edge platform designed to simplify and enhance backend development. In this article, we'll explore the key features, benefits, and use cases of &lt;a href="https://www.convex.dev/" rel="noopener noreferrer"&gt;Convex.dev&lt;/a&gt;, showcasing how it is revolutionizing the way developers build backends.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Convex.dev?
&lt;/h2&gt;

&lt;p&gt;Convex.dev is a comprehensive backend-as-a-service (BaaS) platform that provides developers with the tools and infrastructure needed to build and deploy scalable backend applications effortlessly. It abstracts away the complexities of traditional backend development, offering a streamlined and efficient approach to handling data, authentication, and real-time updates.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Features of Convex.dev
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. Real-time Data Sync&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://www.convex.dev/" rel="noopener noreferrer"&gt;Convex.dev&lt;/a&gt; excels in providing real-time data synchronization, allowing applications to reflect changes instantly across all connected clients. This feature is particularly useful for collaborative applications, live dashboards, and any scenario requiring immediate data consistency.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Serverless Architecture&lt;/strong&gt;&lt;br&gt;
By adopting a serverless architecture, &lt;a href="https://www.convex.dev/" rel="noopener noreferrer"&gt;Convex.dev&lt;/a&gt; eliminates the need for developers to manage servers, scaling automatically based on demand. This approach not only reduces operational overhead but also ensures that applications remain performant under varying loads.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. GraphQL API&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://www.convex.dev/" rel="noopener noreferrer"&gt;Convex.dev&lt;/a&gt; offers a powerful GraphQL API, enabling developers to query and manipulate data with ease. The flexibility of GraphQL allows for efficient data fetching, minimizing over-fetching or under-fetching of data and improving overall application performance.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Integrated Authentication&lt;/strong&gt;&lt;br&gt;
Security is a critical aspect of any backend system. &lt;a href="https://www.convex.dev/" rel="noopener noreferrer"&gt;Convex.dev&lt;/a&gt; simplifies authentication by providing built-in support for various authentication methods, including OAuth, JWT, and social logins. This integration ensures secure and seamless user authentication without the hassle of implementing it from scratch.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Data Persistence and Storage&lt;/strong&gt;&lt;br&gt;
With &lt;a href="https://www.convex.dev/" rel="noopener noreferrer"&gt;Convex.dev&lt;/a&gt;, developers can leverage its robust data persistence and storage capabilities. The platform supports multiple database options, allowing developers to choose the best fit for their application's needs. Additionally, it offers automated backups and data recovery options, ensuring data integrity and availability.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;6. Custom Logic with Serverless Functions&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://www.convex.dev/" rel="noopener noreferrer"&gt;Convex.dev&lt;/a&gt; allows developers to write custom business logic using serverless functions. These functions can be triggered by various events, such as database changes or API requests, providing a flexible way to implement complex workflows and business rules.&lt;/p&gt;

&lt;h2&gt;
  
  
  Benefits of Using Convex.dev
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;- Rapid Development and Deployment&lt;/strong&gt;&lt;br&gt;
Convex.dev's intuitive interface and comprehensive toolset enable developers to quickly build and deploy backend applications. This rapid development cycle reduces time-to-market, allowing businesses to deliver features and updates faster.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;- Scalability and Performance&lt;/strong&gt;&lt;br&gt;
The serverless architecture of &lt;a href="https://www.convex.dev/" rel="noopener noreferrer"&gt;Convex.dev&lt;/a&gt; ensures that applications can scale effortlessly to handle increased traffic and demand. Developers can focus on building features without worrying about infrastructure scaling issues.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;- Cost Efficiency&lt;/strong&gt;&lt;br&gt;
By abstracting away server management and offering a pay-as-you-go pricing model, Convex.dev helps businesses save on infrastructure costs. The platform's automatic scaling ensures that resources are used efficiently, reducing unnecessary expenses.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;- Enhanced Collaboration&lt;/strong&gt;&lt;br&gt;
The real-time data synchronization feature fosters collaboration among team members, enabling them to work on shared data seamlessly. This is particularly beneficial for remote teams and applications requiring real-time collaboration.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;- Security and Compliance&lt;/strong&gt;&lt;br&gt;
Convex.dev prioritizes security by providing robust authentication mechanisms and ensuring data encryption. The platform also complies with industry standards and regulations, giving businesses peace of mind regarding data protection and privacy.&lt;/p&gt;

&lt;h2&gt;
  
  
  Use Cases of Convex.dev
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;- Collaborative Applications&lt;/strong&gt;&lt;br&gt;
Applications such as project management tools, collaborative document editors, and team communication platforms benefit greatly from Convex.dev's real-time data synchronization and integrated authentication features.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;- E-commerce Platforms&lt;/strong&gt;&lt;br&gt;
E-commerce platforms can leverage Convex.dev's scalability and performance to handle high traffic during peak shopping seasons. The platform's GraphQL API allows for efficient product data querying and management.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;- IoT Applications&lt;/strong&gt;&lt;br&gt;
Convex.dev's real-time data capabilities make it an ideal choice for IoT applications that require instant data updates and device synchronization. The platform's serverless functions enable custom logic for processing and responding to IoT events.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;- Live Dashboards and Analytics&lt;/strong&gt;&lt;br&gt;
Businesses can create live dashboards and analytics applications using &lt;a href="https://www.convex.dev/" rel="noopener noreferrer"&gt;Convex.dev&lt;/a&gt;'s real-time data synchronization. These applications provide up-to-date insights and visualizations, helping businesses make informed decisions.&lt;/p&gt;

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

&lt;p&gt;&lt;a href="https://www.convex.dev/" rel="noopener noreferrer"&gt;Convex.dev&lt;/a&gt; is a game-changer in the world of backend development, offering a comprehensive and efficient solution for building scalable and performant backend systems. With its real-time data synchronization, serverless architecture, and integrated authentication, &lt;a href="https://www.convex.dev/" rel="noopener noreferrer"&gt;Convex.dev&lt;/a&gt; simplifies the complexities of backend development, allowing developers to focus on creating innovative applications. Whether you're building collaborative tools, e-commerce platforms, IoT applications, or live dashboards, &lt;a href="https://www.convex.dev/" rel="noopener noreferrer"&gt;Convex.dev&lt;/a&gt; provides the features and flexibility needed to bring your ideas to life. Embrace the future of backend development with &lt;a href="https://www.convex.dev/" rel="noopener noreferrer"&gt;Convex.dev&lt;/a&gt; and unlock the full potential of your applications.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>convex</category>
      <category>backend</category>
    </item>
    <item>
      <title>Weekly Tech Discoveries Part - 01</title>
      <dc:creator>Gimnath Perera</dc:creator>
      <pubDate>Sat, 10 Feb 2024 18:23:24 +0000</pubDate>
      <link>https://forem.com/gimnathperera/weekly-tech-discoveries-part-01-6k0</link>
      <guid>https://forem.com/gimnathperera/weekly-tech-discoveries-part-01-6k0</guid>
      <description>&lt;h2&gt;
  
  
  01. v0.dev by Vercel
&lt;/h2&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%2Fi9vb0or4ws6jyuss5e82.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%2Fi9vb0or4ws6jyuss5e82.png" alt=" " width="800" height="269"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Introducing &lt;a href="https://v0.dev" rel="noopener noreferrer"&gt;v0.dev&lt;/a&gt; by Vercel, a groundbreaking AI-powered UI generation tool. With v0, users can effortlessly create stunning UI designs based on simple prompts. What sets v0 apart is its unique ability to not only generate UIs but also provide the option to download or copy the source code in HTML and React components. Experience the future of UI design with v0 by Vercel.&lt;/p&gt;

&lt;h2&gt;
  
  
  02. Galeileo.ai
&lt;/h2&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%2Ffm4d7whl8gcnfn5xnmmm.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%2Ffm4d7whl8gcnfn5xnmmm.png" alt=" " width="800" height="362"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Discover &lt;a href="https://www.usegalileo.ai" rel="noopener noreferrer"&gt;Galeileo.ai&lt;/a&gt;, an innovative platform empowering users to effortlessly generate captivating designs for web, mobile, and desktop applications. By simply providing prompts, users can unlock a world of stunning possibilities. What makes &lt;a href="https://www.usegalileo.ai" rel="noopener noreferrer"&gt;Galeileo.ai&lt;/a&gt; stand out is its seamless integration with Figma, offering designers and design enthusiasts an unparalleled level of convenience. Say goodbye to complexity and hello to a smoother design process with &lt;a href="https://www.usegalileo.ai" rel="noopener noreferrer"&gt;Galeileo.ai&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  03. Fig
&lt;/h2&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%2F59gnq4w48i66xganpd34.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%2F59gnq4w48i66xganpd34.png" alt=" " width="800" height="516"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Introducing &lt;a href="https://fig.io" rel="noopener noreferrer"&gt;Fig&lt;/a&gt;, the ultimate terminal autocomplete tool designed to streamline your workflow. With Fig, typing commands becomes a breeze as it anticipates your next move and suggests completions in real-time. Whether you're a seasoned developer or just getting started, Fig enhances your productivity by eliminating guesswork and reducing typing time. Experience the future of terminal navigation with Fig.&lt;/p&gt;

&lt;h2&gt;
  
  
  04. Refine.dev
&lt;/h2&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%2Fvhnf0qg6iy22lt11sya7.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%2Fvhnf0qg6iy22lt11sya7.png" alt=" " width="800" height="390"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://refine.dev" rel="noopener noreferrer"&gt;Refine&lt;/a&gt; is a platform that enables developers to build and manage data-driven applications with ease. It provides a powerful framework and a user-friendly interface for creating custom admin panels, dashboards, and CRUD interfaces. Refine abstracts away much of the complexity involved in backend development, allowing developers to focus on building robust applications quickly and efficiently. With features like data filtering, sorting, and pagination, Refine simplifies the process of working with databases and APIs, making it an invaluable tool for developers looking to accelerate their workflow and deliver exceptional user experiences.&lt;/p&gt;

&lt;h2&gt;
  
  
  05. Convex
&lt;/h2&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%2F42tta8djok1f4vb9sij2.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%2F42tta8djok1f4vb9sij2.png" alt=" " width="800" height="384"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.convex.dev" rel="noopener noreferrer"&gt;Convex&lt;/a&gt; is a Backend-as-a-Service (BaaS) platform similar to Firebase, offering developers a comprehensive set of tools to build and manage their applications. With Convex , developers can easily handle user authentication, database management, file storage, and more, all through a simple and intuitive interface. Whether you're creating a web or mobile app, &lt;a href="https://www.convex.dev" rel="noopener noreferrer"&gt;Convex&lt;/a&gt; simplifies the backend development process, allowing you to focus on building great user experiences without worrying about server management or infrastructure setup. Experience the power of &lt;a href="https://www.convex.dev" rel="noopener noreferrer"&gt;Convex&lt;/a&gt; and accelerate your app development journey today!&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>react</category>
    </item>
    <item>
      <title>Yup vs. Zod vs. Joi: A Comprehensive Comparison of JavaScript Validation Libraries</title>
      <dc:creator>Gimnath Perera</dc:creator>
      <pubDate>Wed, 02 Aug 2023 17:09:40 +0000</pubDate>
      <link>https://forem.com/gimnathperera/yup-vs-zod-vs-joi-a-comprehensive-comparison-of-javascript-validation-libraries-4mhi</link>
      <guid>https://forem.com/gimnathperera/yup-vs-zod-vs-joi-a-comprehensive-comparison-of-javascript-validation-libraries-4mhi</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;When it comes to handling data validation in JavaScript, developers often face the challenge of choosing the right library. Three popular options for validation are Yup, Zod, and Joi. In this article, we will dive into each library's features, code snippets, and compare their strengths and weaknesses to help you make an informed decision for your projects.&lt;/p&gt;

&lt;h2&gt;
  
  
  Yup: Elegant and Easy
&lt;/h2&gt;

&lt;p&gt;Yup is a simple and elegant library for data schema validation. It provides a declarative API, making it easy to read and understand validation rules. Its lightweight nature makes it a great choice for smaller projects or scenarios where performance is critical.&lt;/p&gt;

&lt;p&gt;Example Usage:&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%2Fuht4odsb5i6fr7l6h8s7.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%2Fuht4odsb5i6fr7l6h8s7.png" alt=" " width="800" height="797"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pros:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Declarative syntax for easy-to-read validation rules.&lt;/li&gt;
&lt;li&gt;Lightweight and fast for small to medium-sized projects.&lt;/li&gt;
&lt;li&gt;Good community support and actively maintained.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Lack of complex validation features for more extensive projects.&lt;/li&gt;
&lt;li&gt;Limited ecosystem compared to other libraries.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Zod: Powerful and Type-Safe
&lt;/h2&gt;

&lt;p&gt;Zod is a powerful validation library that shines in its ability to leverage TypeScript's type system. If you're using TypeScript, Zod's type inference will ensure that your validation code is type-safe, providing extra confidence in your data handling.&lt;/p&gt;

&lt;p&gt;Example Usage:&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%2Fhew75kcczwweo6oaa3lc.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%2Fhew75kcczwweo6oaa3lc.png" alt=" " width="800" height="961"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pros:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Strong TypeScript support for type-safe validation.&lt;/li&gt;
&lt;li&gt;Powerful validation capabilities and rich validation API.&lt;/li&gt;
&lt;li&gt;Excellent error messages and error handling.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Learning curve for developers unfamiliar with TypeScript.&lt;/li&gt;
&lt;li&gt;Might add overhead for projects not using TypeScript.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Joi: Feature-Rich and Battle-Tested
&lt;/h2&gt;

&lt;p&gt;Joi is a mature and feature-rich validation library, often used in Node.js applications. It provides a wide range of validation rules and customization options, making it suitable for complex validation scenarios.&lt;/p&gt;

&lt;p&gt;Example Usage:&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%2Fyr246x2keh2bhbzt6vcv.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%2Fyr246x2keh2bhbzt6vcv.png" alt=" " width="800" height="897"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pros:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Battle-tested and widely used in the Node.js ecosystem.&lt;/li&gt;
&lt;li&gt;Extensive set of validation rules and options.&lt;/li&gt;
&lt;li&gt;Robust error handling and customization capabilities.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Bulkier and can add some overhead to smaller projects.&lt;/li&gt;
&lt;li&gt;May require more effort for type safety in TypeScript projects.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;Each validation library, Yup, Zod, and Joi, has its own unique strengths and use cases.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Yup is an excellent choice for simple validation needs, thanks to its simplicity and lightweight nature.&lt;/li&gt;
&lt;li&gt;Zod is a powerful option for TypeScript projects, leveraging type safety and robust validation capabilities.&lt;/li&gt;
&lt;li&gt;Joi is the go-to library for more complex scenarios, offering a wide range of validation rules and customization options.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ultimately, the choice depends on your project's requirements, familiarity with TypeScript, and the level of complexity your data validation demands. Whatever library you choose, these validation tools will undoubtedly enhance the reliability and accuracy of your JavaScript applications. Happy coding!&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>typescript</category>
      <category>yup</category>
      <category>zod</category>
    </item>
    <item>
      <title>Let's dive in to Cross-Origin</title>
      <dc:creator>Gimnath Perera</dc:creator>
      <pubDate>Thu, 13 Jul 2023 03:04:37 +0000</pubDate>
      <link>https://forem.com/gimnathperera/lets-dive-in-to-cross-origin-4bmj</link>
      <guid>https://forem.com/gimnathperera/lets-dive-in-to-cross-origin-4bmj</guid>
      <description>&lt;h1&gt;
  
  
  What is Cors-Origin?
&lt;/h1&gt;

&lt;p&gt;A technique or protocol called &lt;code&gt;Cross-Origin Resource Sharing&lt;/code&gt; (CORS) enables devices on one domain to access resources located on other domains.&lt;/p&gt;

&lt;p&gt;Browsers typically block requests that come from beyond their own domain for security concerns. In some circumstances, you might want to get around this and access resources from different domains, and CORS makes this feasible.&lt;/p&gt;

&lt;h1&gt;
  
  
  What is Same-Origin Policy?
&lt;/h1&gt;

&lt;p&gt;Another notion, called Same-Origin Policy (SOP), permits resource access on related domains. We'll talk about the SOP and how it contributes to website security in this guide. We will also go through how CORS increases the SOP's speed and versatility.&lt;/p&gt;

&lt;p&gt;This means that if two domains want to share resources, their origins must be the same. The domain, port number, and protocol type of two websites must match for their origins to be the same. The sources are regarded as having separate origins if any one of the three qualities is discovered to be different.&lt;/p&gt;

&lt;p&gt;Despite being a restrictive system, SOP is quite secure and prevents potential assaults on websites using cross-domain resources.&lt;/p&gt;

&lt;p&gt;SOP provides protection for websites but may also be used as a meeting place to communicate with external websites.&lt;/p&gt;

&lt;h1&gt;
  
  
  What is Cross-origin Resource Sharing (CORS)?
&lt;/h1&gt;

&lt;p&gt;The introduction of CORS enables rapid and simple access to subdomains and reliable third parties. As was previously mentioned, CORS provides controlled resource sharing between cross-domain origins.&lt;/p&gt;

&lt;p&gt;In accordance with CORS requirements, the browser and the cross-origin website you are attempting to access exchange HTTP headers that specify trustworthy web origins and associated characteristics for access control.&lt;/p&gt;

&lt;p&gt;CORS provides restricted access to websites that span domains and is therefore secure. CORS is typically used to address restrictions brought on by SOP. CORS can, however, pose serious security threats if it is implemented incorrectly. CORS configuration issues could lead to difficulties and mistakes.&lt;/p&gt;

&lt;p&gt;Let's find out more about CORS mistakes and how to prevent them.&lt;/p&gt;

&lt;h1&gt;
  
  
  How to find the error?
&lt;/h1&gt;

&lt;p&gt;You need to determine which request is problematic and why in order to comprehend the underlying problem with the CORS settings. You could do it by following these steps:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Open browser developer tools and click &lt;code&gt;Console&lt;/code&gt; if you see something like this when you are making the api request. You have the Cross origin issue. 
&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%2Fqkjfat3qxi0qio1p9wkr.jpeg" alt=" " width="800" height="86"&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  How to enable CORS in your apps
&lt;/h1&gt;

&lt;p&gt;You can use several steps to prevent this CORS errors ruining your app. &lt;/p&gt;

&lt;h2&gt;
  
  
  Fix 01:
&lt;/h2&gt;

&lt;p&gt;By include the following in &lt;code&gt;a.htaccess&lt;/code&gt; file in your app's web root directory (public), you can allow sending CORS headers from your app:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You can set a specific url by using this Origin: Access-Control-&lt;code&gt;Allow-Origin: http://localhost:3000&lt;/code&gt; or you can make all urls enabled by using this &lt;code&gt;Access-Control-Allow-Origin: *&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Fix 02:
&lt;/h2&gt;

&lt;p&gt;There are plenty of google extensions available to prevent CORS errors from occurring. By installing one of those browser extension can easily solve your problem. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://chrome.google.com/webstore/detail/allow-cors-access-control/lhobafahddgcelffkeicbaginigeejlf?hl=en" 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.amazonaws.com%2Fuploads%2Farticles%2F1std7a7pn7pkxh853cn1.png" alt=" " width="707" height="119"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://chrome.google.com/webstore/detail/cors-unblock/lfhmikememgdcahcdlaciloancbhjino?hl=en" 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.amazonaws.com%2Fuploads%2Farticles%2Fh46z3lm2nyybg7avs4oi.png" alt=" " width="624" height="124"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But keep this in mind, this is not the ideal solution and this is not practical when you deploy your application because can we ask our client to install a browser extension to run our app 😂  &lt;/p&gt;

&lt;h2&gt;
  
  
  Fix 03:
&lt;/h2&gt;

&lt;p&gt;By building a middleware/proxy we can prevent CORS errors. This is the best solution among all the solutions that are mentioned above. Following code snippet is an example how you can use a simple &lt;code&gt;node&lt;/code&gt; middleware to overcome CORS errors.&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%2Fitgx2oilquw7vta9idwg.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%2Fitgx2oilquw7vta9idwg.png" alt=" " width="800" height="798"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;How does that function? Every response from the server receives an &lt;code&gt;Access-Control-Allow-Origin: *&lt;/code&gt; header thanks to the proxy's use of express middleware. The proxy requests a response another server at its own &lt;code&gt;/random&lt;/code&gt; GET endpoint. The request is not blocked by the &lt;code&gt;same-origin policy&lt;/code&gt; despite the fact that the domains are distinct. This is a &lt;code&gt;server-to-server&lt;/code&gt; request, after all. The resultant data and the &lt;code&gt;Access-Control-Allow-Origin: *&lt;/code&gt; header are then created by the proxy and sent back to the original requester (a browser app).&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&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%2Fc12xt3iwm0mrsfuy9gmn.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%2Fc12xt3iwm0mrsfuy9gmn.png" alt=" " width="800" height="458"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The frontend developer may suffer greatly from the CORS error. However, it gets a little more tolerable once you comprehend the underlying same-origin policy that is responsible for the mistake and how it defends against the malicious cross-site request forgery attack.&lt;/p&gt;

&lt;p&gt;Finally, thanks to all these fixes, you won't ever have to worry about running into a red CORS error in your browser console logs. Instead, you'll pull out the plugin or a proxy and declare in its face:&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>react</category>
      <category>cors</category>
      <category>corsoriginerror</category>
    </item>
    <item>
      <title>How To Use Error Boundaries in React ♥</title>
      <dc:creator>Gimnath Perera</dc:creator>
      <pubDate>Sun, 09 Oct 2022 15:17:40 +0000</pubDate>
      <link>https://forem.com/gimnathperera/how-to-use-error-boundaries-in-react-114c</link>
      <guid>https://forem.com/gimnathperera/how-to-use-error-boundaries-in-react-114c</guid>
      <description>&lt;h2&gt;
  
  
  What are Error Boundaries
&lt;/h2&gt;

&lt;p&gt;Error Boundaries were introduced in React v16 as a way to catch tricky errors that occur during the render phase. In the past, this would have caused the app to unmount completely, and the user would just see a blank web page, which is not ideal! &lt;/p&gt;

&lt;p&gt;You can learn more about &lt;a href="https://www.digitalocean.com/community/tutorial_series/how-to-code-in-react-js" rel="noopener noreferrer"&gt;React Error Boundaries&lt;/a&gt; via code snippets and interactive demos.&lt;/p&gt;

&lt;h2&gt;
  
  
  Let's get started
&lt;/h2&gt;

&lt;p&gt;In this article we build a react application from scratch and walk you through Error Boundaries.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Prerequisites&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Node v16.4.2&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;npm v7.19.1&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://code.visualstudio.com" rel="noopener noreferrer"&gt;Visual Studio Code&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Create react application&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Let's create a simple react application using following command. Open terminal in your project directory and run this command.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;npx create-react-app client&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;let's open our project file with visual studio code. &lt;/p&gt;

&lt;p&gt;&lt;code&gt;cd client&lt;/code&gt; &lt;br&gt;
&lt;code&gt;code .&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Cheers! Your folder structure may looks like this at this point.&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%2F9xh0l1gwhlxnilgkbspy.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%2F9xh0l1gwhlxnilgkbspy.png" alt=" " width="800" height="501"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Encountering Errors without Error Boundaries&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Unexpected is expected, We will inevitably occurs unexpected errors in our applications when we develop, test and even in the production. You may trying to loop through an error which doesn't exist or you may trying to access to a nested object property which isn't populated in the moment. Most of the time you have control of the behavior of your application but sometimes you don't. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Simulate the error&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Let's create a file name &lt;code&gt;BugDemo.js&lt;/code&gt;. The following code snippet will be helped you to understand what normally happens without any Error Boundary in react applications.&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%2Fh9b3xfh43nz0pxxjf1ym.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%2Fh9b3xfh43nz0pxxjf1ym.png" alt=" " width="800" height="739"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you import the component in App.js file and run the application using &lt;code&gt;npm start&lt;/code&gt; or &lt;code&gt;yarn start&lt;/code&gt; command you can see the below screen.&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%2Fnu7bdlg7xozm2se3p80j.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%2Fnu7bdlg7xozm2se3p80j.png" alt=" " width="800" height="390"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When we continuously press plus button the counter value of the component button is getting increased. But what happens when the counter value reaches 5 ?&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%2Fb6swe4xlc9uvlnrmvlzd.gif" 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%2Fb6swe4xlc9uvlnrmvlzd.gif" alt=" " width="600" height="338"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Yes! A blank screen the end user can be shocked. Sometimes the whole application can be crashed. It is very important to use Error Boundaries because of this.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Solve the problem with Error Boundaries&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Create a new file in the &lt;code&gt;component/&lt;/code&gt; directory and paste the below code.&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%2Fl8yj1wthvjnvjlhlambt.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%2Fl8yj1wthvjnvjlhlambt.png" alt=" " width="800" height="805"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now, Let's wrap our imported &lt;code&gt;BugDemo&lt;/code&gt; component with this newly created Error Boundary in &lt;code&gt;App.js&lt;/code&gt;, like this;&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%2Fiqwa8raj4zo2y09iqkd8.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%2Fiqwa8raj4zo2y09iqkd8.png" alt=" " width="800" height="555"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The moment of truth&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Let's check what happens now when the user reaches counter value &lt;code&gt;5&lt;/code&gt;. No Blank screens anymore. &lt;br&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%2Fznalyv17swhe7vb4gnwv.gif" 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%2Fznalyv17swhe7vb4gnwv.gif" alt=" " width="600" height="338"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Likewise you can show the error message to the user or you can re-try the task which was failing before if it is possible. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;With the evolution of React 16+. Error Boundaries are generally available to use. The common standard is to use at least a one Error Boundary in the root of your application. This will increase the user-experience (UX) of your application and it will prevent the user seeing a blank or crashed pages throughout your application.&lt;/p&gt;

</description>
      <category>react</category>
      <category>errorboundaries</category>
      <category>javascript</category>
      <category>programming</category>
    </item>
  </channel>
</rss>
