<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: hazhayder</title>
    <description>The latest articles on DEV Community by hazhayder (@hazhayder).</description>
    <link>https://dev.to/hazhayder</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%2F191139%2Ffce5cd7e-7162-493c-b4ed-54bdaa5a3a94.jpeg</url>
      <title>DEV Community: hazhayder</title>
      <link>https://dev.to/hazhayder</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/hazhayder"/>
    <language>en</language>
    <item>
      <title>🚀 Introducing SaaSLaunchpad: A Next.js Boilerplate Built for Freedom, Not Lock-In</title>
      <dc:creator>hazhayder</dc:creator>
      <pubDate>Fri, 02 May 2025 10:46:22 +0000</pubDate>
      <link>https://dev.to/hazhayder/introducing-saaslaunchpad-a-nextjs-boilerplate-built-for-freedom-not-lock-in-4f13</link>
      <guid>https://dev.to/hazhayder/introducing-saaslaunchpad-a-nextjs-boilerplate-built-for-freedom-not-lock-in-4f13</guid>
      <description>&lt;p&gt;At &lt;a href="https://excelorithm.com" rel="noopener noreferrer"&gt;Excelorithm&lt;/a&gt;, we build custom software solutions for startups, SMEs, and enterprise clients alike. And as the technical head here, I’ve seen a recurring pain point — many teams, including our own, spend way too much time setting up the basics of a SaaS product: authentication, subscriptions, dashboards, role management, notifications...&lt;/p&gt;

&lt;p&gt;Sure, there are tons of SaaS starter kits out there, both free and premium. They promise speed — and often deliver — but usually at a hidden cost: vendor lock-in.&lt;/p&gt;

&lt;p&gt;Many popular boilerplates rely on proprietary services, paid APIs, or tightly coupled ecosystems. That might be fine early on, but over time it limits your freedom, raises your costs, and ties you to someone else’s roadmap.&lt;/p&gt;

&lt;p&gt;That’s why we built &lt;a href="https://github.com/Excelorithm/SaaSLaunchpad" rel="noopener noreferrer"&gt;SaaSLaunchpad&lt;/a&gt; — a free, open-source Next.js SaaS starter kit with zero paid tool dependencies and no vendor lock-in.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🧠 Why SaaSLaunchpad?&lt;/strong&gt;&lt;br&gt;
Our goal was simple: give developers everything they need to launch and scale a SaaS product, without forcing them into a paid ecosystem they can’t outgrow.&lt;/p&gt;

&lt;p&gt;Built with:&lt;br&gt;
✅ Next.js for frontend &amp;amp; routing&lt;br&gt;
✅ Drizzle ORM + PostgreSQL for database management&lt;br&gt;
✅ NextAuth.js for social authentication&lt;br&gt;
✅ Stripe Checkout for billing&lt;br&gt;
✅ Firebase &amp;amp; OneSignal for optional notifications&lt;br&gt;
✅ shadcn/ui for clean, reusable UI components&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🔍 How It Compares&lt;/strong&gt;&lt;br&gt;
Here’s a quick comparison with other popular SaaS starters:&lt;/p&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;&lt;strong&gt;SaaSLaunchpad&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;Vercel SaaS Starter&lt;/th&gt;
&lt;th&gt;SupaStarter&lt;/th&gt;
&lt;th&gt;ShipFast&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Open Source&lt;/td&gt;
&lt;td&gt;✅ Yes (MIT)&lt;/td&gt;
&lt;td&gt;✅ Yes (MIT)&lt;/td&gt;
&lt;td&gt;❌ Paid License&lt;/td&gt;
&lt;td&gt;✅ Partially&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Authentication&lt;/td&gt;
&lt;td&gt;✅ NextAuth.js&lt;/td&gt;
&lt;td&gt;✅ Auth.js&lt;/td&gt;
&lt;td&gt;✅ Supabase Auth&lt;/td&gt;
&lt;td&gt;✅ Clerk/Auth0 (Paid)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Payments (Stripe)&lt;/td&gt;
&lt;td&gt;✅ Full + Portal&lt;/td&gt;
&lt;td&gt;✅ Basic Checkout&lt;/td&gt;
&lt;td&gt;✅ Limited&lt;/td&gt;
&lt;td&gt;✅ With 3rd-party lock-in&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Role-based Access (RBAC)&lt;/td&gt;
&lt;td&gt;✅ Built-in&lt;/td&gt;
&lt;td&gt;❌ No&lt;/td&gt;
&lt;td&gt;✅ With Supabase&lt;/td&gt;
&lt;td&gt;✅ Custom&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Vendor Lock-In&lt;/td&gt;
&lt;td&gt;❌ None&lt;/td&gt;
&lt;td&gt;✅ Vercel/Upstash&lt;/td&gt;
&lt;td&gt;✅ Supabase&lt;/td&gt;
&lt;td&gt;✅ Clerk/Auth0/Vercel&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Email Templates&lt;/td&gt;
&lt;td&gt;✅ Nodemailer&lt;/td&gt;
&lt;td&gt;❌ No&lt;/td&gt;
&lt;td&gt;❌ No&lt;/td&gt;
&lt;td&gt;✅ With restrictions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Notifications&lt;/td&gt;
&lt;td&gt;✅ Firebase/OneSignal&lt;/td&gt;
&lt;td&gt;❌ No&lt;/td&gt;
&lt;td&gt;❌ No&lt;/td&gt;
&lt;td&gt;❌ No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;UI Framework&lt;/td&gt;
&lt;td&gt;✅ shadcn/ui&lt;/td&gt;
&lt;td&gt;✅ Tailwind UI&lt;/td&gt;
&lt;td&gt;✅ Tailwind&lt;/td&gt;
&lt;td&gt;✅ Custom&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Free to Use End-to-End&lt;/td&gt;
&lt;td&gt;✅ 100%&lt;/td&gt;
&lt;td&gt;✅ Mostly&lt;/td&gt;
&lt;td&gt;❌ No (Premium only)&lt;/td&gt;
&lt;td&gt;❌ Some paid features&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;👥 Built by Developers, for Developers&lt;/strong&gt;&lt;br&gt;
SaaSLaunchpad is made for developers, indie hackers, and product teams who want to ship fast — without compromising ownership. You get a clean codebase, complete feature set, and the freedom to swap, scale, or customize anything as you grow.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🧑‍💻 Check it out on GitHub:&lt;/strong&gt;&lt;br&gt;
👉 github.com/Excelorithm/SaaSLaunchpad&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🌐 Learn more about us:&lt;/strong&gt;&lt;br&gt;
👉 &lt;a href="https://excelorithm.com/about-us" rel="noopener noreferrer"&gt;excelorithm.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;💬 Let’s Talk&lt;/strong&gt;&lt;br&gt;
This is a developer-first project, and we’re constantly improving it based on real-world needs. We’d love your feedback, contributions, or just a quick hello.&lt;/p&gt;

&lt;p&gt;💡 Got a feature idea or found a bug? &lt;a href="https://github.com/Excelorithm/SaaSLaunchpad/issues" rel="noopener noreferrer"&gt;Open an issue or discussion.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let’s build SaaS the open way — no lock-ins, no nonsense.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Integrating Azure OpenAI with .NET Applications Using Microsoft.Extensions.AI</title>
      <dc:creator>hazhayder</dc:creator>
      <pubDate>Wed, 15 Jan 2025 09:21:26 +0000</pubDate>
      <link>https://dev.to/hazhayder/integrating-azure-openai-with-net-applications-using-microsoftextensionsai-17j2</link>
      <guid>https://dev.to/hazhayder/integrating-azure-openai-with-net-applications-using-microsoftextensionsai-17j2</guid>
      <description>&lt;h1&gt;
  
  
  Integrating Azure OpenAI with .NET Applications Using Microsoft.Extensions.AI
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Introduction to LLMs and Azure OpenAI
&lt;/h2&gt;

&lt;p&gt;Large Language Models (LLMs) are at the forefront of AI innovation, enabling sophisticated natural language processing capabilities. Azure OpenAI, Microsoft's cloud-based service, provides access to OpenAI models like GPT-3 and GPT-4, tailored for enterprise use. By integrating Azure OpenAI with .NET applications, developers can leverage Azure's infrastructure to build powerful AI-driven solutions.&lt;/p&gt;

&lt;h2&gt;
  
  
  Understanding the Building Blocks
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Azure OpenAI
&lt;/h3&gt;

&lt;p&gt;Azure OpenAI offers scalable, secure, and reliable AI capabilities, integrated with Azure's ecosystem. It provides access to advanced models for enterprise applications, ensuring high performance and reliability.&lt;/p&gt;

&lt;h3&gt;
  
  
  Microsoft.Extensions.AI
&lt;/h3&gt;

&lt;p&gt;This library simplifies AI service integration into .NET applications, offering a unified interface for various AI providers, including Azure OpenAI. It abstracts away the complexities of different AI providers, making it easier to switch between them.&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting Started
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Prerequisites
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;An Azure account with access to Azure OpenAI services.&lt;/li&gt;
&lt;li&gt;Azure OpenAI resource set up and an API key obtained.&lt;/li&gt;
&lt;li&gt;.NET 6 or later installed.&lt;/li&gt;
&lt;li&gt;Necessary NuGet packages installed.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Setting up Azure OpenAI
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Create an Azure OpenAI resource in the Azure portal.&lt;/li&gt;
&lt;li&gt;Deploy a model and obtain the API key and endpoint URL for authentication.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Installing NuGet Packages
&lt;/h3&gt;

&lt;p&gt;Install the following packages via the NuGet Package Manager:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;Install-Package Microsoft.Extensions.AI.AzureOpenAI
Install-Package Microsoft.Extensions.Hosting
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Basic Integration Example
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;builder&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Host&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;CreateApplicationBuilder&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="n"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Services&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;AddAzureOpenAIClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;AzureOpenAIClientOptions&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;Endpoint&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;Uri&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"https://your-openai-endpoint.azure.com"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="n"&gt;ApiKey&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"your-api-key"&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;app&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Build&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Services&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;GetRequiredService&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;IAzureOpenAIClient&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;();&lt;/span&gt;

&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;completion&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;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;GetCompletionAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"What is the capital of France?"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"text-davinci-003"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;completion&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Choices&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;Text&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Advanced Usage
&lt;/h2&gt;

&lt;p&gt;Maintain chat history for context-aware interactions:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;messages&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;ChatMessage&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;ChatMessage&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ChatRole&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"You are a helpful assistant."&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;ChatMessage&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ChatRole&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="s"&gt;"What is the capital of France?"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;chat&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;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;GetChatCompletionsAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"gpt-3.5-turbo"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Choices&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="m"&gt;0&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="n"&gt;Content&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Practical Applications
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Building a Q&amp;amp;A Bot for Documentation
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;documentation&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;File&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ReadAllText&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"documentation.txt"&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;userQuery&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"What are the company's core values?"&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;prompt&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;$"Given the following documentation:\n&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;documentation&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s"&gt;\n\nAnswer the question: &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;userQuery&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;completion&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;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;GetCompletionAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"text-davinci-003"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;completion&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Choices&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;Text&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Flexibility and Scalability
&lt;/h2&gt;

&lt;p&gt;Switching AI providers is easy with Microsoft.Extensions.AI. For example, switching to OpenAI requires only configuration changes without altering application code.&lt;/p&gt;

&lt;h2&gt;
  
  
  Best Practices and Considerations
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Error Handling&lt;/strong&gt;: Gracefully handle exceptions and errors.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cost Management&lt;/strong&gt;: Be mindful of API rate limits and costs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Security&lt;/strong&gt;: Ensure secure storage and handling of API keys.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ethical Guidelines&lt;/strong&gt;: Adhere to ethical guidelines and model usage policies.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;Integrating Azure OpenAI with .NET applications using Microsoft.Extensions.AI is straightforward, offering vast possibilities for AI-driven features. By following the steps outlined, developers can quickly build intelligent applications. Experiment with different models, enhance applications with sophisticated AI features, and optimize for performance and scalability.&lt;/p&gt;

&lt;p&gt;Feel free to share your projects or experiences in the comments!&lt;/p&gt;

</description>
      <category>openai</category>
      <category>azure</category>
      <category>csharp</category>
      <category>llm</category>
    </item>
    <item>
      <title>Discussion: Amazon S3 Storage Access</title>
      <dc:creator>hazhayder</dc:creator>
      <pubDate>Mon, 30 Mar 2020 13:35:04 +0000</pubDate>
      <link>https://dev.to/hazhayder/discussion-amazon-s3-storage-access-3pl5</link>
      <guid>https://dev.to/hazhayder/discussion-amazon-s3-storage-access-3pl5</guid>
      <description>&lt;p&gt;Hello, I have just started taking a look at Amazon S3 storage. I have a few case scenarios in my mind and how would you achieve them based on the pros and cons of the approach.&lt;/p&gt;

&lt;p&gt;Case 1:&lt;br&gt;
I am uploading the image to S3 and all those images are public no restrictions access:&lt;br&gt;
Solution: Set the access level of the bucket public.&lt;/p&gt;

&lt;p&gt;Case 2:&lt;br&gt;
The uploaded data is only meant to be shown to specific users in my web app. &lt;br&gt;
Solution: I would simply create a controller upon checking whether the user trying to access the file has required permissions or not. If yes, I would simply call the AWS API will retrieve the object on the server and then stream it to the client.&lt;/p&gt;

&lt;p&gt;Case 3:&lt;br&gt;
User is required to access the file but for one time only. &lt;br&gt;
Solution: Don't know.&lt;/p&gt;

&lt;p&gt;I am seeking more solution for Case 2 and Case 3&lt;/p&gt;

</description>
      <category>aws</category>
      <category>discuss</category>
      <category>askdev</category>
    </item>
  </channel>
</rss>
