<?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: Gimhan Rajapaksha</title>
    <description>The latest articles on Forem by Gimhan Rajapaksha (@gimhantharuke4565).</description>
    <link>https://forem.com/gimhantharuke4565</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%2F1714978%2F0e5e5289-c08d-4c84-bdb7-af2f4cf57f50.jpeg</url>
      <title>Forem: Gimhan Rajapaksha</title>
      <link>https://forem.com/gimhantharuke4565</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/gimhantharuke4565"/>
    <language>en</language>
    <item>
      <title>How I Secure APIs — Practical Steps I Use Every Day</title>
      <dc:creator>Gimhan Rajapaksha</dc:creator>
      <pubDate>Tue, 23 Sep 2025 23:32:14 +0000</pubDate>
      <link>https://forem.com/gimhantharuke4565/how-i-secure-apis-practical-steps-i-use-every-day-2e8g</link>
      <guid>https://forem.com/gimhantharuke4565/how-i-secure-apis-practical-steps-i-use-every-day-2e8g</guid>
      <description>&lt;p&gt;When I started building APIs, I often focused only on making features work. Security? That came later.&lt;br&gt;&lt;br&gt;
But the hard truth is — security can’t wait. Over the years, I’ve learned that securing APIs isn’t about one big fix; it’s about layering small but critical practices.&lt;/p&gt;

&lt;p&gt;Here’s my step-by-step approach:&lt;/p&gt;




&lt;h2&gt;
  
  
  1. 🔐 Always Use HTTPS
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;HTTP sends everything in plain text (yes, even your passwords).
&lt;/li&gt;
&lt;li&gt;HTTPS encrypts data during transit, preventing man-in-the-middle attacks.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;👉 Rule I follow: Never send sensitive data over HTTP.  &lt;/p&gt;




&lt;h2&gt;
  
  
  2. 🔑 Authentication &amp;amp; Authorization with OAuth + OIDC
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;OAuth 2.0&lt;/strong&gt; handles authorization.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;OpenID Connect (OIDC)&lt;/strong&gt; adds authentication.
&lt;/li&gt;
&lt;li&gt;I enforce the &lt;strong&gt;principle of least privilege&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;Users only get access to the exact endpoints they need.
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;👉 This keeps the attack surface small and manageable.  &lt;/p&gt;




&lt;h2&gt;
  
  
  3. 🌐 Handle CORS Securely
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Early on, I made the mistake of setting &lt;code&gt;Access-Control-Allow-Origin: *&lt;/code&gt;.
&lt;/li&gt;
&lt;li&gt;Now, I &lt;strong&gt;explicitly whitelist trusted domains&lt;/strong&gt; (e.g., &lt;code&gt;https://myapp.com&lt;/code&gt;).
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;👉 No wildcard &lt;code&gt;*&lt;/code&gt; in production.  &lt;/p&gt;




&lt;h2&gt;
  
  
  4. ⏱️ Rate Limiting to Prevent Abuse
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Rate limiting protects against DDoS, scraping, or accidental overload.
&lt;/li&gt;
&lt;li&gt;I apply limits &lt;strong&gt;per API key&lt;/strong&gt; or &lt;strong&gt;per IP/user&lt;/strong&gt;.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;👉 Example: Free users = 5 requests/sec, Premium users = 15 requests/sec.  &lt;/p&gt;




&lt;h2&gt;
  
  
  ✅ My Security Checklist
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Area&lt;/th&gt;
&lt;th&gt;Technique Used&lt;/th&gt;
&lt;th&gt;Purpose&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Transport Security&lt;/td&gt;
&lt;td&gt;HTTPS&lt;/td&gt;
&lt;td&gt;Encrypt data in transit&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Auth/Authz&lt;/td&gt;
&lt;td&gt;OAuth 2.0 + OIDC&lt;/td&gt;
&lt;td&gt;Secure identity &amp;amp; access&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Access Control&lt;/td&gt;
&lt;td&gt;Principle of Least Privilege&lt;/td&gt;
&lt;td&gt;Minimize exposure&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cross-Origin&lt;/td&gt;
&lt;td&gt;CORS Whitelisting&lt;/td&gt;
&lt;td&gt;Block unauthorized access&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Abuse Prevention&lt;/td&gt;
&lt;td&gt;Rate Limiting&lt;/td&gt;
&lt;td&gt;Maintain availability&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




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

&lt;p&gt;API security isn’t optional — it’s essential.&lt;br&gt;&lt;br&gt;
These practices have become my personal checklist:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Encrypt everything with HTTPS
&lt;/li&gt;
&lt;li&gt;Authenticate and authorize with OAuth + OIDC
&lt;/li&gt;
&lt;li&gt;Lock down access with least privilege
&lt;/li&gt;
&lt;li&gt;Be strict with CORS
&lt;/li&gt;
&lt;li&gt;Protect performance with rate limits
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you’re just starting out, adopt these early. Trust me, it’s a lot harder to patch security holes later.  &lt;/p&gt;




</description>
      <category>api</category>
      <category>security</category>
      <category>node</category>
      <category>backend</category>
    </item>
    <item>
      <title>Load Balancer vs Reverse Proxy vs API Gateway — Explained Simply</title>
      <dc:creator>Gimhan Rajapaksha</dc:creator>
      <pubDate>Sun, 21 Sep 2025 23:51:55 +0000</pubDate>
      <link>https://forem.com/gimhantharuke4565/load-balancer-vs-reverse-proxy-vs-api-gateway-explained-simply-5a3</link>
      <guid>https://forem.com/gimhantharuke4565/load-balancer-vs-reverse-proxy-vs-api-gateway-explained-simply-5a3</guid>
      <description>&lt;p&gt;When you’re working on scalable systems, three terms often pop up: &lt;strong&gt;Load Balancer&lt;/strong&gt;, &lt;strong&gt;Reverse Proxy&lt;/strong&gt;, and &lt;strong&gt;API Gateway&lt;/strong&gt;.&lt;br&gt;&lt;br&gt;
At first, they might sound interchangeable since they all sit between the client and the backend servers. But in reality, each plays a unique role in modern system architecture.  &lt;/p&gt;

&lt;p&gt;Let’s break them down with simple explanations and comparisons.  &lt;/p&gt;




&lt;h2&gt;
  
  
  🔹 1. Load Balancer
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Main Purpose&lt;/strong&gt;: Distributes incoming traffic across multiple servers.  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Why it matters&lt;/strong&gt;: Ensures no single server gets overwhelmed, improves fault tolerance, and boosts availability.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;How it works&lt;/strong&gt;: It checks the health of servers and routes requests to the available ones.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Extra features&lt;/strong&gt;: Can do session persistence, round-robin scheduling, and weighted distribution.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;📌 Think of it like &lt;strong&gt;traffic police directing cars&lt;/strong&gt; into different open lanes so that traffic flows smoothly.  &lt;/p&gt;




&lt;h2&gt;
  
  
  🔹 2. Reverse Proxy
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Main Purpose&lt;/strong&gt;: Acts as an intermediary between clients and backend servers.  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Why it matters&lt;/strong&gt;: Hides the server’s identity and provides an extra security layer.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;How it works&lt;/strong&gt;: Accepts the request on behalf of the server, processes it (like SSL termination), and forwards it internally.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Extra features&lt;/strong&gt;: Caching, compression, centralized logging, security filtering.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;📌 Think of it as a &lt;strong&gt;receptionist at the front desk&lt;/strong&gt; — you never talk directly to the people inside; the receptionist filters and forwards your request.  &lt;/p&gt;




&lt;h2&gt;
  
  
  🔹 3. API Gateway
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Main Purpose&lt;/strong&gt;: A specialized proxy designed for &lt;strong&gt;microservices architectures&lt;/strong&gt;.  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Why it matters&lt;/strong&gt;: Manages APIs and routes requests to the correct microservice.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;How it works&lt;/strong&gt;: Handles cross-cutting concerns like authentication, rate limiting, monitoring, and even API versioning.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Extra features&lt;/strong&gt;: Request aggregation, transformations, policy enforcement.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;📌 Think of it as a &lt;strong&gt;smart security gate&lt;/strong&gt; that not only lets you in but also checks your ID, enforces rules, and guides you to the right department.  &lt;/p&gt;




&lt;h2&gt;
  
  
  ✅ Quick Comparison
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;Load Balancer&lt;/th&gt;
&lt;th&gt;Reverse Proxy&lt;/th&gt;
&lt;th&gt;API Gateway&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Traffic distribution&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅ (for APIs)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SSL termination&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Caching&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Sometimes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Authentication&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Best for&lt;/td&gt;
&lt;td&gt;Scaling apps&lt;/td&gt;
&lt;td&gt;Hiding servers&lt;/td&gt;
&lt;td&gt;Microservices&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  🔹 How They Work Together
&lt;/h2&gt;

&lt;p&gt;These tools aren’t mutually exclusive. In many modern systems, you’ll see them combined:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A &lt;strong&gt;Load Balancer&lt;/strong&gt; distributes traffic to multiple nodes.
&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;Reverse Proxy&lt;/strong&gt; adds security and caching in front of those nodes.
&lt;/li&gt;
&lt;li&gt;An &lt;strong&gt;API Gateway&lt;/strong&gt; manages communication across microservices.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Together, they provide &lt;strong&gt;scalability, security, and manageability&lt;/strong&gt; in distributed architectures.  &lt;/p&gt;




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

&lt;p&gt;If you’re building or maintaining scalable systems, it’s worth understanding the unique role of each:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Load Balancer&lt;/strong&gt; = distributes traffic efficiently
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reverse Proxy&lt;/strong&gt; = hides and protects backend servers
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;API Gateway&lt;/strong&gt; = orchestrates APIs in microservices
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>webdev</category>
      <category>devops</category>
      <category>systemdesign</category>
      <category>apigateway</category>
    </item>
    <item>
      <title>Student vs Startup vs Big Tech: Deployments Explained</title>
      <dc:creator>Gimhan Rajapaksha</dc:creator>
      <pubDate>Fri, 19 Sep 2025 02:11:15 +0000</pubDate>
      <link>https://forem.com/gimhantharuke4565/student-vs-startup-vs-big-tech-deployments-explained-m69</link>
      <guid>https://forem.com/gimhantharuke4565/student-vs-startup-vs-big-tech-deployments-explained-m69</guid>
      <description>&lt;p&gt;Ever wondered how deployment practices evolve as you move from student projects → startups → big tech?&lt;br&gt;&lt;br&gt;
This video breaks it down in the most entertaining way possible. Here’s the technical summary:&lt;/p&gt;




&lt;h2&gt;
  
  
  👨‍🎓 Student: Manual Deployment
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Uploads files directly to production.
&lt;/li&gt;
&lt;li&gt;No CI/CD, no rollback strategy.
&lt;/li&gt;
&lt;li&gt;Tools: &lt;code&gt;scp&lt;/code&gt;, FTP, or manual uploads.
&lt;/li&gt;
&lt;li&gt;Risk: High.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🚀 Startup: Structured but Manual
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Environments: Local → Test → Production.
&lt;/li&gt;
&lt;li&gt;Backend: Node.js + Express.js.
&lt;/li&gt;
&lt;li&gt;Hosting: AWS EC2.
&lt;/li&gt;
&lt;li&gt;Workflow: Code pushed → tested manually → deployed manually.
&lt;/li&gt;
&lt;li&gt;Better than student level, but still fragile.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  💼 Big Tech: Fully Automated
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;CI/CD pipelines&lt;/strong&gt; (GitHub Actions).
&lt;/li&gt;
&lt;li&gt;Every commit triggers automated build + integration tests.
&lt;/li&gt;
&lt;li&gt;Auto-deploy to test, then to production if tests pass.
&lt;/li&gt;
&lt;li&gt;Rollback if deployment fails.
&lt;/li&gt;
&lt;li&gt;Consistent, scalable, reliable.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🔑 Key Concepts
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;CI/CD&lt;/strong&gt; for automation.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Environment separation&lt;/strong&gt; (local, test, prod).
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Testing &amp;amp; rollback&lt;/strong&gt; for reliability.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AWS EC2 + Node.js/Express.js&lt;/strong&gt; for hosting &amp;amp; backend.
&lt;/li&gt;
&lt;/ul&gt;




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

&lt;p&gt;The video is not only hilarious but also a &lt;strong&gt;practical teaching tool&lt;/strong&gt;:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Students see why manual deployments don’t scale.
&lt;/li&gt;
&lt;li&gt;Startups learn why staging environments matter.
&lt;/li&gt;
&lt;li&gt;Developers get a glimpse of how big tech handles deployments at scale.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;👉 As your project grows, automation and testing are no longer optional. They’re essential.  &lt;/p&gt;

</description>
    </item>
    <item>
      <title>⚡ Vercel Edge Functions: APIs with Sub-50ms Latency</title>
      <dc:creator>Gimhan Rajapaksha</dc:creator>
      <pubDate>Thu, 18 Sep 2025 01:05:10 +0000</pubDate>
      <link>https://forem.com/gimhantharuke4565/vercel-edge-functions-apis-with-sub-50ms-latency-1fod</link>
      <guid>https://forem.com/gimhantharuke4565/vercel-edge-functions-apis-with-sub-50ms-latency-1fod</guid>
      <description>&lt;p&gt;Modern web apps live or die by performance—and &lt;strong&gt;Vercel Edge Functions&lt;/strong&gt; are built for speed. Instead of routing every request to a centralized server, your API logic executes at the &lt;em&gt;edge&lt;/em&gt; of the network, geographically close to the user.&lt;/p&gt;




&lt;h2&gt;
  
  
  🔑 Key Concepts
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Ultra-low latency&lt;/strong&gt;: Sub-50ms responses possible
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CDN for code&lt;/strong&gt;: Dynamic execution at the edge (not just static caching)
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Edge-first deployment&lt;/strong&gt;: Code runs near the request origin
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  ✅ Benefits
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Lower latency → faster UX
&lt;/li&gt;
&lt;li&gt;Reduced cold starts (functions kept warm at edge)
&lt;/li&gt;
&lt;li&gt;Auto-scalable across Vercel’s infra
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  ⚠️ Limitations
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Limited runtime (no heavy native modules)
&lt;/li&gt;
&lt;li&gt;Short execution time (~10s)
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🎯 Best Use Cases
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Lightweight APIs
&lt;/li&gt;
&lt;li&gt;Auth &amp;amp; routing
&lt;/li&gt;
&lt;li&gt;Real-time transformations
&lt;/li&gt;
&lt;li&gt;Caching logic / personalization
&lt;/li&gt;
&lt;/ul&gt;




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

&lt;p&gt;&lt;strong&gt;Vercel Edge Functions&lt;/strong&gt; are ideal for fast, frequently-used endpoints where user experience depends on instant feedback. If performance is your priority, building APIs at the edge is a game-changer.&lt;/p&gt;




&lt;p&gt;💡 Curious how they compare to Cloudflare Workers or AWS Lambda@Edge? That’ll be my next deep dive 👀  &lt;/p&gt;

&lt;h1&gt;
  
  
  serverless #edgecomputing #api #vercel #webdev
&lt;/h1&gt;

</description>
    </item>
    <item>
      <title>🚀 Mastering Monorepos with Lerna + Yarn Workspaces</title>
      <dc:creator>Gimhan Rajapaksha</dc:creator>
      <pubDate>Wed, 17 Sep 2025 02:46:53 +0000</pubDate>
      <link>https://forem.com/gimhantharuke4565/mastering-monorepos-with-lerna-yarn-workspaces-597p</link>
      <guid>https://forem.com/gimhantharuke4565/mastering-monorepos-with-lerna-yarn-workspaces-597p</guid>
      <description>&lt;p&gt;Managing multiple apps and libraries can be frustrating. Luckily, Lerna makes monorepos not just possible, but actually enjoyable.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🔹 Why Use Lerna?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Let’s say you have this structure:&lt;/p&gt;

&lt;p&gt;/root&lt;br&gt;
  /app1&lt;br&gt;
  /app2&lt;br&gt;
  /shared-lib&lt;br&gt;
  package.json&lt;br&gt;
  lerna.json&lt;/p&gt;

&lt;p&gt;Your package.json might look like this:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;"workspaces": {&lt;br&gt;
  "packages": ["app1", "app2", "shared-lib"]&lt;br&gt;
}&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Now, add Lerna scripts:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;"scripts": {&lt;br&gt;
  "start": "lerna run --parallel start",&lt;br&gt;
  "build": "lerna run build"&lt;br&gt;
}&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Run npm run start → both app1 and app2 start together. 🎉&lt;/p&gt;

&lt;p&gt;🔹 Monorepo vs Polyrepo&lt;/p&gt;

&lt;p&gt;Monorepo: All apps + libs under one root&lt;/p&gt;

&lt;p&gt;Polyrepo: Each app/lib in its own repo&lt;/p&gt;

&lt;p&gt;With Lerna, the monorepo approach gets easier — single place to manage dependencies, build, and publish.&lt;/p&gt;

&lt;p&gt;🔹 Bonus: Module Federation&lt;/p&gt;

&lt;p&gt;Even though everything lives in one repo, with Webpack Module Federation, you can still load code at runtime across apps. Think: shared components between app1 and app2 without re-building everything.&lt;/p&gt;

&lt;p&gt;🎯 Wrap-up&lt;/p&gt;

&lt;p&gt;Lerna simplifies building, testing, and publishing packages in a monorepo.&lt;/p&gt;

&lt;p&gt;Yarn Workspaces optimize dependency sharing.&lt;/p&gt;

&lt;p&gt;Module Federation keeps things flexible at runtime.&lt;/p&gt;

</description>
      <category>react</category>
      <category>node</category>
      <category>npm</category>
    </item>
    <item>
      <title>Bypassing ISP Content-Based Filters Without HTTP Injectors</title>
      <dc:creator>Gimhan Rajapaksha</dc:creator>
      <pubDate>Tue, 16 Sep 2025 04:08:34 +0000</pubDate>
      <link>https://forem.com/gimhantharuke4565/bypassing-isp-content-based-filters-without-http-injectors-b3f</link>
      <guid>https://forem.com/gimhantharuke4565/bypassing-isp-content-based-filters-without-http-injectors-b3f</guid>
      <description>&lt;p&gt;Many ISPs today offer content-based internet packages — cheap bundles that let you access apps like Facebook, YouTube, or Zoom without worrying about data overages. While attractive, these packages come with a catch: traffic outside the package is filtered, blocked, or charged separately.&lt;/p&gt;

&lt;p&gt;Traditionally, some users have turned to HTTP Injector tools to bypass these restrictions. However, injectors bring significant downsides:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Risk of malware from shady injector apps&lt;/li&gt;
&lt;li&gt;Dependence on free SSH accounts (often unstable, insecure, and short-lived)&lt;/li&gt;
&lt;li&gt;Limited connection speeds and reliability&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;My research explores an alternative approach: SSL/TLS tunneling. Instead of relying on risky injector tools, I tested using Stunnel, which creates secure tunnels to bypass ISP traffic filters.&lt;/p&gt;

&lt;p&gt;Here’s the basic setup:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Configure a Stunnel server on a VPS with a self-signed certificate (e.g., for cdn.zoom.us).&lt;/li&gt;
&lt;li&gt;Add the certificate as a trusted CA on the client device.&lt;/li&gt;
&lt;li&gt;Run Stunnel client locally to accept traffic (on a port like 8080) and re-route it securely through the tunnel.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The result? Traffic looks like normal SSL/TLS encrypted sessions, making it harder for ISPs to filter or block.&lt;/p&gt;

&lt;p&gt;While this is just a proof of concept, it shows that tunneling techniques can offer safer and more stable alternatives to HTTP injectors when dealing with restrictive ISP filtering.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Why Freelancing Can Be the Best Move for a Software Engineer</title>
      <dc:creator>Gimhan Rajapaksha</dc:creator>
      <pubDate>Mon, 15 Sep 2025 01:45:36 +0000</pubDate>
      <link>https://forem.com/gimhantharuke4565/why-freelancing-can-be-the-best-move-for-a-software-engineer-p4g</link>
      <guid>https://forem.com/gimhantharuke4565/why-freelancing-can-be-the-best-move-for-a-software-engineer-p4g</guid>
      <description>&lt;p&gt;Working as a freelancer is more than just picking projects for money. It’s about growth.&lt;/p&gt;

&lt;p&gt;When you freelance, every new client brings a new challenge — different tech stacks, unique business problems, and sometimes very tight deadlines. You can’t sit in your comfort zone for too long. Instead, you’re forced to adapt, learn, and solve real-world problems faster than you would in a fixed role.&lt;/p&gt;

&lt;p&gt;Another big advantage: freedom. You choose what you work on, when, and with whom. That freedom also comes with responsibility — to manage your own time, find your own clients, and constantly level up.&lt;/p&gt;

&lt;p&gt;Most importantly, freelancing exposes you to a diverse range of projects. One week you might be fixing a Flutter app’s performance issues, the next you’re building a Next.js marketplace. That variety keeps your skills sharp and your brain engaged.&lt;/p&gt;

&lt;p&gt;If you’re a software engineer looking to break limits and grow, freelancing isn’t just a career option. It’s a training ground for becoming better every day.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>modular architecture</title>
      <dc:creator>Gimhan Rajapaksha</dc:creator>
      <pubDate>Mon, 16 Jun 2025 10:55:17 +0000</pubDate>
      <link>https://forem.com/gimhantharuke4565/modular-architecture-p31</link>
      <guid>https://forem.com/gimhantharuke4565/modular-architecture-p31</guid>
      <description></description>
      <category>architecture</category>
      <category>softwareengineering</category>
    </item>
  </channel>
</rss>
