<?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: Cosmin Irimescu</title>
    <description>The latest articles on Forem by Cosmin Irimescu (@cosminirimescu).</description>
    <link>https://forem.com/cosminirimescu</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%2F1767977%2Ff7fdbcc1-2365-4446-aeb9-48bc7829e4a2.jpg</url>
      <title>Forem: Cosmin Irimescu</title>
      <link>https://forem.com/cosminirimescu</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/cosminirimescu"/>
    <language>en</language>
    <item>
      <title>I Deployed a .NET App Without DevOps Headaches — Here's How</title>
      <dc:creator>Cosmin Irimescu</dc:creator>
      <pubDate>Thu, 31 Jul 2025 21:53:42 +0000</pubDate>
      <link>https://forem.com/cosminirimescu/i-deployed-a-net-app-without-devops-headaches-heres-how-1ikj</link>
      <guid>https://forem.com/cosminirimescu/i-deployed-a-net-app-without-devops-headaches-heres-how-1ikj</guid>
      <description>&lt;p&gt;A few weeks ago, I started playing with Blazor — just a small side project to explore the framework.&lt;/p&gt;

&lt;p&gt;When the app started to look decent (thanks to &lt;a href="https://mudblazor.com/" rel="noopener noreferrer"&gt;MudBlazor&lt;/a&gt;), I figured:&lt;br&gt;
“&lt;em&gt;Why not put it online?&lt;/em&gt;”&lt;/p&gt;

&lt;p&gt;That's when I remembered how much I miss the old days of FTP and hitting Refresh.&lt;/p&gt;

&lt;p&gt;I didn’t want to set up Docker, Kubernetes, or a full CI/CD pipeline to deploy a simple .NET app.&lt;br&gt;
So I started looking for something lightweight — and that’s when I discovered Fly.io.&lt;/p&gt;

&lt;p&gt;It took just a few commands to go from &lt;strong&gt;dotnet run&lt;/strong&gt; to a live URL. No configs, no cloud dashboards, no DevOps drama.&lt;/p&gt;

&lt;h2&gt;
  
  
  Curious?
&lt;/h2&gt;

&lt;p&gt;I wrote a whole post about the process (and how surprisingly smooth it was) — including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How to deploy a Blazor or .NET app to Fly.io&lt;/li&gt;
&lt;li&gt;What files get generated automatically&lt;/li&gt;
&lt;li&gt;Why I think we overcomplicate things sometimes&lt;/li&gt;
&lt;li&gt;And how to go from zero to online in 5 minutes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;👉 Read the full article here:&lt;br&gt;
&lt;a href="https://cosminirimescu.com/deploy-blazor-dotnet-flyio/" rel="noopener noreferrer"&gt;Hosting .NET Apps Without DevOps Drama&lt;/a&gt;&lt;/p&gt;

</description>
      <category>devops</category>
      <category>dotnet</category>
      <category>docker</category>
      <category>blazor</category>
    </item>
    <item>
      <title>Real-Time Cross-Tab Notifications with SignalR in ASP.NET Core</title>
      <dc:creator>Cosmin Irimescu</dc:creator>
      <pubDate>Sat, 26 Oct 2024 15:31:33 +0000</pubDate>
      <link>https://forem.com/cosminirimescu/real-time-cross-tab-notifications-with-signalr-in-aspnet-core-3204</link>
      <guid>https://forem.com/cosminirimescu/real-time-cross-tab-notifications-with-signalr-in-aspnet-core-3204</guid>
      <description>&lt;p&gt;Hey dev community! 👋&lt;/p&gt;

&lt;p&gt;I've just published a sample repository demonstrating how to implement real-time notifications with SignalR in ASP.NET Core. I built this while exploring cross-tab communication possibilities, and I thought it might be useful for others too.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's Inside?
&lt;/h2&gt;

&lt;p&gt;The repository contains a clean implementation showing how to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Set up SignalR in ASP.NET Core&lt;/li&gt;
&lt;li&gt;Handle real-time notifications across multiple browser tabs&lt;/li&gt;
&lt;li&gt;Manage automatic reconnection&lt;/li&gt;
&lt;li&gt;Implement animated notifications&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Key Features
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;NotificationHub&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Hub&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;override&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="n"&gt;Task&lt;/span&gt; &lt;span class="nf"&gt;OnConnectedAsync&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;userId&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;User&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;FindFirst&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"uid"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="n"&gt;Value&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;Groups&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;AddToGroup&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ConnectionId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;userId&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="k"&gt;base&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;OnConnectedAsync&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="n"&gt;Task&lt;/span&gt; &lt;span class="nf"&gt;SendNotification&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;Clients&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;All&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;SendAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"ReceiveNotification"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&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;The implementation is straightforward yet powerful. It handles multiple tabs seamlessly, making it perfect for modern web applications.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where to Find It?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;📦 Repository: &lt;a href="https://github.com/irimescucosmin/SignalR.NET" rel="noopener noreferrer"&gt;GitHub - SignalR.NET&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;📝 Detailed Tutorial (Italian): &lt;a href="https://cosminirimescu.com/signalr-in-asp-net-core" rel="noopener noreferrer"&gt;cosminirimescu.com/signalr-in-asp-net-core&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;While the tutorial is in Italian, the code and commit messages are in English. If you're interested in the implementation details, I've written a comprehensive guide on my blog.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tech Stack
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;ASP.NET Core 8.0&lt;/li&gt;
&lt;li&gt;SignalR&lt;/li&gt;
&lt;li&gt;JavaScript&lt;/li&gt;
&lt;li&gt;CSS3 for animations&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Feel free to star the repo if you find it useful or raise issues if you have suggestions for improvements!&lt;/p&gt;

&lt;h1&gt;
  
  
  dotnet #signalr #aspnetcore #webdev #github #opensource
&lt;/h1&gt;

</description>
    </item>
    <item>
      <title>Building an API Gateway with YARP in .NET</title>
      <dc:creator>Cosmin Irimescu</dc:creator>
      <pubDate>Sun, 25 Aug 2024 09:59:08 +0000</pubDate>
      <link>https://forem.com/cosminirimescu/building-an-api-gateway-with-yarp-in-net-nep</link>
      <guid>https://forem.com/cosminirimescu/building-an-api-gateway-with-yarp-in-net-nep</guid>
      <description>&lt;p&gt;Hello, .NET developers! 👋&lt;/p&gt;

&lt;p&gt;Have you ever struggled with creating an efficient API Gateway for your microservices? YARP (Yet Another Reverse Proxy) might be the solution you've been looking for!&lt;/p&gt;

&lt;p&gt;In my latest article, I guide you through implementing an API Gateway using YARP in .NET. Here's a taste of what you'll find:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Why YARP is a solid alternative to Ocelot&lt;/li&gt;
&lt;li&gt;How to configure YARP in a .NET project&lt;/li&gt;
&lt;li&gt;Implementing an example microservice&lt;/li&gt;
&lt;li&gt;Best practices for routing and request handling&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;Here's a small snippet to pique your interest:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;var builder = WebApplication.CreateBuilder(args);

builder.Services.AddReverseProxy()
    .LoadFromConfig(builder.Configuration.GetSection("ReverseProxy"));

var app = builder.Build();

app.MapReverseProxy();

app.Run();
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is just the beginning! In the full article, you'll find detailed explanations and more complex examples in Italian.&lt;/p&gt;

&lt;p&gt;🔗 Read the full article here: &lt;a href="https://cosminirimescu.com/api-gateway-con-yarp-in-net/" rel="noopener noreferrer"&gt;https://cosminirimescu.com/api-gateway-con-yarp-in-net/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;📂 The complete source code is available on GitHub: &lt;a href="https://github.com/irimescucosmin/APIGateway.NET" rel="noopener noreferrer"&gt;https://github.com/irimescucosmin/APIGateway.NET&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Whether you're a beginner or an experienced developer, this article will provide you with valuable insights for your next microservices project.&lt;/p&gt;

&lt;p&gt;Feel free to leave comments or questions below. Happy reading and coding! 🚀&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>dotnet</category>
      <category>programming</category>
      <category>microsoft</category>
    </item>
    <item>
      <title>My Journey in Building a Personal Website</title>
      <dc:creator>Cosmin Irimescu</dc:creator>
      <pubDate>Fri, 26 Jul 2024 19:16:55 +0000</pubDate>
      <link>https://forem.com/cosminirimescu/my-journey-in-building-a-personal-website-278i</link>
      <guid>https://forem.com/cosminirimescu/my-journey-in-building-a-personal-website-278i</guid>
      <description>&lt;p&gt;Hey there, fellow devs! 👋 Cosmin here. I recently embarked on the adventure of creating my own website, and boy, was it a ride! I thought I'd share my experience with you all - maybe it'll save some of you a headache or two.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Developer's Dilemma
&lt;/h2&gt;

&lt;p&gt;Like many of you, I started with the classic developer's hubris: "&lt;strong&gt;&lt;em&gt;I can build this from scratch!&lt;/em&gt;&lt;/strong&gt;" 💪 My first attempt? A full-blown Laravel and Vue.js setup. Fast forward a year, and I had a complex codebase, endless tweaks, and a stark realization: I was spending more time wrestling with code than actually sharing knowledge. Oops.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Plot Twist: Embracing WordPress
&lt;/h2&gt;

&lt;p&gt;After a few more attempts (including a custom WordPress theme that ate up way too much time), I finally saw the light: WordPress with a pre-built ThemeForest theme.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Why did this work so well?&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Quick setup (hello, more time for actual content!)&lt;/li&gt;
&lt;li&gt;Professional look out of the box&lt;/li&gt;
&lt;li&gt;Less time debugging, more time writing&lt;/li&gt;
&lt;li&gt;SEO stuff mostly handled (phew!)&lt;/li&gt;
&lt;li&gt;Easy to customize without diving into the deep end&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;What I Learned&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Don't reinvent the wheel (unless that's your actual goal)&lt;/li&gt;
&lt;li&gt;Focus on why you're building the site, not how&lt;/li&gt;
&lt;li&gt;Sometimes, the simplest solution is the best one (took me a while to accept this)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;What's Next?&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Crafting a killer newsletter&lt;/li&gt;
&lt;li&gt;Building a community (come join us!)&lt;/li&gt;
&lt;li&gt;Becoming a go-to resource in our field&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Check Out My Site and Share Your Story!
&lt;/h2&gt;

&lt;p&gt;I'd love for you to take a peek at my new online home: &lt;a href="//cosminirimescu.com"&gt;cosminirimescu.com&lt;/a&gt;. Click around, explore, and let me know what you think! Your feedback is gold.&lt;/p&gt;

&lt;p&gt;And hey, while you're at it, why not share your own website-building journey in the comments below? I bet we could all learn a thing or two from each other's triumphs and face-palm moments. 😄&lt;/p&gt;

&lt;p&gt;Remember, folks: don't wait for perfect. Start, stumble, learn, repeat. That's the real dev lifecycle! &lt;/p&gt;

</description>
      <category>webdev</category>
      <category>wordpress</category>
      <category>programming</category>
      <category>showdev</category>
    </item>
    <item>
      <title>[Italian] Trasforma le Eccezioni da Incubo a Opportunità con IExceptionHandler in ASP.NET Core!</title>
      <dc:creator>Cosmin Irimescu</dc:creator>
      <pubDate>Thu, 11 Jul 2024 19:47:09 +0000</pubDate>
      <link>https://forem.com/cosminirimescu/trasforma-le-eccezioni-da-incubo-a-opportunita-con-iexceptionhandler-in-aspnet-core-7h4</link>
      <guid>https://forem.com/cosminirimescu/trasforma-le-eccezioni-da-incubo-a-opportunita-con-iexceptionhandler-in-aspnet-core-7h4</guid>
      <description>&lt;p&gt;Quante volte ti sei sentito come gli astronauti dell'Apollo 13 mentre affrontavi eccezioni non gestite nella tua applicazione ASP.NET Core? 🚀&lt;br&gt;
Le eccezioni non gestite possono mandare in tilt i nostri sistemi, generare risposte di errore criptiche e rendere i log incomprensibili. Ma non temere, ASP.NET Core ci fornisce uno strumento potente per gestire queste situazioni: IExceptionHandler!&lt;/p&gt;

&lt;h4&gt;
  
  
  Perché IExceptionHandler?
&lt;/h4&gt;

&lt;p&gt;IExceptionHandler ci consente di centralizzare la gestione delle eccezioni e fornire risposte coerenti e informative. Ecco alcuni vantaggi:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;📝 Risposte di errore strutturate e facili da comprendere per gli utenti.&lt;/li&gt;
&lt;li&gt;🔍 Logging centralizzato delle eccezioni per semplificare il debug.&lt;/li&gt;
&lt;li&gt;🎨 Possibilità di personalizzare la gestione in base al tipo di eccezione.&lt;/li&gt;
&lt;li&gt;✨ Mantenimento di un codice più pulito e leggibile separando la logica di gestione delle eccezioni.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Progetto di Esempio
&lt;/h4&gt;

&lt;p&gt;Per gli sviluppatori impazienti di buttarsi nel codice, ho creato un progetto di esempio completo disponibile su GitHub: &lt;a href="https://github.com/irimescucosmin/ExceptionsHandler.NET" rel="noopener noreferrer"&gt;ExceptionsHandler.NET&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Sentitevi liberi di esplorare il codice, provarlo e usarlo come punto di partenza per le vostre implementazioni!&lt;/p&gt;

&lt;h4&gt;
  
  
  Vuoi Saperne di Più?
&lt;/h4&gt;

&lt;p&gt;Se vuoi approfondire come IExceptionHandler può rivoluzionare il tuo approccio alla gestione delle eccezioni in ASP.NET Core, ti invito a visitare il mio sito web &lt;a href="//cosminirimescu.com"&gt;Cosmin Irimescu&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Troverai articoli dettagliati, tutorial e risorse che ti guideranno attraverso l'implementazione di IExceptionHandler e molte altre best practice per lo sviluppo di software pulito e resiliente.&lt;br&gt;
E se hai domande, suggerimenti o vuoi semplicemente connetterti, non esitare a raggiungermi! Sono sempre entusiasta di interagire con altri sviluppatori e di imparare dalle loro esperienze.&lt;br&gt;
Allora, sei pronto a portare la tua gestione delle eccezioni in ASP.NET Core al livello successivo? 🚀&lt;/p&gt;

&lt;h1&gt;
  
  
  dotnet #aspnetcore #csharp #exceptionhandling #cleancode
&lt;/h1&gt;

</description>
    </item>
  </channel>
</rss>
