<?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: Alex Norman</title>
    <description>The latest articles on DEV Community by Alex Norman (@alexander_).</description>
    <link>https://dev.to/alexander_</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%2F3219987%2Fe37f3a2a-b814-46ae-a869-a96e197f378c.jpg</url>
      <title>DEV Community: Alex Norman</title>
      <link>https://dev.to/alexander_</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/alexander_"/>
    <language>en</language>
    <item>
      <title>Collective cyber protection: How customer penetration testing boosts Kinde security</title>
      <dc:creator>Alex Norman</dc:creator>
      <pubDate>Fri, 17 Oct 2025 22:21:51 +0000</pubDate>
      <link>https://dev.to/kinde/collective-cyber-protection-how-customer-penetration-testing-boosts-kinde-security-2pg9</link>
      <guid>https://dev.to/kinde/collective-cyber-protection-how-customer-penetration-testing-boosts-kinde-security-2pg9</guid>
      <description>&lt;p&gt;As an authentication provider, we are the front door for our customer’s product and a critical part of their product access and security. So when a customer conducts penetration testing (pen testing) and security testing, and shares the results with us, we reward their efforts. Especially if their testing helps us improve Kinde for other customers.&lt;/p&gt;

&lt;h2&gt;
  
  
  Customer pen tests offer diversified use cases
&lt;/h2&gt;

&lt;p&gt;A lot of our customers operate in highly regulated industries, such as healthcare, finance, and local government, which have a variety of compliance and security requirements to protect user and product data. A common requirement for these business types is to conduct a penetration test at least annually. One part that will always be tested is how users authenticate with the product.&lt;/p&gt;

&lt;p&gt;While using Kinde’s authentication helps streamline testing for our customers, the varied context of their testing gives us a broad test feedback for different cases. For example, each customer implements different SDKs, stores code differently, and handles the application state in various ways. What occurs post-authentication is also varied, giving us perspectives we might otherwise not have.&lt;/p&gt;

&lt;h2&gt;
  
  
  Kinde pen tests and vulnerability detection
&lt;/h2&gt;

&lt;p&gt;At Kinde, we perform a pen test at least annually, and do additional random testing when there’s new major functions or features added to our product. In addition to the penetration test, we also perform weekly vulnerability scans, on-demand scans based on recently published vulnerabilities, and run a &lt;a href="https://docs.kinde.com/trust-center/security/vulnerability-disclosure-policy/" rel="noopener noreferrer"&gt;vulnerability disclosure program&lt;/a&gt;. These all help contribute towards securing customer authentication for ourselves and our customers.&lt;/p&gt;

&lt;p&gt;You can read a bit more about this on our blog at &lt;a href="https://kinde.com/blog/security/fixing-vulnerabilities-and-getting-the-occasional-white-hat-helper/" rel="noopener noreferrer"&gt;Fixing vulnerabilities and getting the occasional white hat helper&lt;/a&gt; and &lt;a href="https://kinde.com/blog/security/using-strike-for-penetration-testing-at-kinde/" rel="noopener noreferrer"&gt;Using Strike for penetration testing at Kinde&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Rewards for combining our pen testing power
&lt;/h2&gt;

&lt;p&gt;The customers who conduct penetration tests throughout the year and share the results deserve more than just a thank you or a virtual high five. By providing critical test data, these highly reputable security companies and organizations, help keep auth secure for everyone who uses Kinde.&lt;/p&gt;

&lt;h3&gt;
  
  
  How to give us test feedback
&lt;/h3&gt;

&lt;p&gt;If you’re a Kinde customer and have completed a penetration test where the authentication was in scope, please reach out to our team via &lt;a href="mailto:support@kinde.com"&gt;support@kinde.com&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;We ask for you to provide details on the tests, as well as any additional info to help us recreate your environment (SDK, active auth methods, etc.), if a vulnerability is found. Here’s the process on our side.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A customer provides a shortened or sanitised version of a pen test report showing evidence of Kinde’s authentication flows being tested and validated.&lt;/li&gt;
&lt;li&gt;The Kinde team analyse and validate, and if vulnerabilities were found, offer quick remediation to address security concerns.&lt;/li&gt;
&lt;li&gt;Any advice or remediation we provide can then be included in your final testing reports.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Kinde credits for a copy of the report
&lt;/h3&gt;

&lt;p&gt;In return for a sanitised or truncated copy of the penetration test report, we offer credits to your Kinde account. We don’t want the full report since it likely contains intellectual property and sensitive data.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;💵&lt;/th&gt;
&lt;th&gt;A credit for one month of your base plan will be applied to your account&lt;/th&gt;
&lt;th&gt;💵&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;A credit for one month of your base plan will be applied to your account. So the Pro plan will be $25, Plus plan $75, and Scale and Enterprise plans $250. We will still apply credits for a penetration test report even if there weren’t any actual findings related to Kinde, just as long as the authentication is in the scope.&lt;/p&gt;

&lt;h2&gt;
  
  
  Maybe some swag too
&lt;/h2&gt;

&lt;p&gt;If the penetration test finds any vulnerabilities that could impact the security of our authentication, we will send the testing company some swag and list them on our &lt;a href="https://docs.kinde.com/trust-center/security/security-wall-of-fame/" rel="noopener noreferrer"&gt;Security wall of fame&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Credits and swag are solely at the discretion of the Kinde team. We will only credit one test per year.&lt;/p&gt;

&lt;h2&gt;
  
  
  Everyone wins from collective cybersecurity
&lt;/h2&gt;

&lt;p&gt;Cybersecurity works best when everyone’s working together. That’s why we openly recognize the customers who contributes to the overall security of Kinde.&lt;/p&gt;

&lt;p&gt;If you’re new to Kinde, check out our &lt;a href="https://github.com/kinde-starter-kits" rel="noopener noreferrer"&gt;starter kits&lt;/a&gt; and &lt;a href="https://github.com/kinde-oss" rel="noopener noreferrer"&gt;SDKs&lt;/a&gt; to get off the ground quickly.&lt;/p&gt;

&lt;p&gt;For advice and feedback, join one of our &lt;a href="https://kinde.com/support/" rel="noopener noreferrer"&gt;public communities&lt;/a&gt; or search for answers in &lt;a href="https://docs.kinde.com/" rel="noopener noreferrer"&gt;our documentation&lt;/a&gt;. Or if you have bigger questions, &lt;a href="https://kinde.com/intro-to-kinde/" rel="noopener noreferrer"&gt;book a demo&lt;/a&gt; with one of our amazing team members.&lt;/p&gt;

</description>
      <category>authentication</category>
      <category>kinde</category>
      <category>pentest</category>
    </item>
    <item>
      <title>Kinde in 60 seconds (ish): Billing</title>
      <dc:creator>Alex Norman</dc:creator>
      <pubDate>Mon, 01 Sep 2025 04:52:08 +0000</pubDate>
      <link>https://dev.to/kinde/kinde-billing-in-60-seconds-ish-35op</link>
      <guid>https://dev.to/kinde/kinde-billing-in-60-seconds-ish-35op</guid>
      <description>&lt;p&gt;Billing without building it yourself.&lt;/p&gt;

&lt;p&gt;Kinde billing is a fully integrated feature with the existing authentication platform that allows developers to manage payments and subscriptions for their SaaS products. Simplify the process by handling a variety of billing models, including both flat-rate and usage-based plans, and provide a hosted customer portal for users to manage their own subscriptions. &lt;/p&gt;

&lt;p&gt;In just 60 seconds (ish), you’ll see how you can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create pricing plans&lt;/li&gt;
&lt;li&gt;Gate features with entitlements&lt;/li&gt;
&lt;li&gt;Handle upgrades, downgrades, and cancellations&lt;/li&gt;
&lt;li&gt;Let users manage their subscriptions via the self-serve portal&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It’s everything you need to go from idea to revenue, fully integrated with your authentication flow.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/yTANgaIWCv4"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>kinde</category>
      <category>stripe</category>
      <category>billing</category>
      <category>authentication</category>
    </item>
    <item>
      <title>It Kinde of works: Part 2 of many</title>
      <dc:creator>Alex Norman</dc:creator>
      <pubDate>Thu, 28 Aug 2025 21:23:57 +0000</pubDate>
      <link>https://dev.to/kinde/it-kinde-of-works-part-2-of-many-2mc4</link>
      <guid>https://dev.to/kinde/it-kinde-of-works-part-2-of-many-2mc4</guid>
      <description>&lt;p&gt;The &lt;code&gt;Kinde of&lt;/code&gt; posts are to highlight how Kinde's authentication can be used in fun and unproductive ways. This series will step through things like using our starter kits, workflows, properties, feature flags, custom UI, and a bunch of other features. The demo website has no real purpose, but we're going to try and get you to like and subscribe to our the company's LinkedIn profile amongst other things.&lt;/p&gt;

&lt;p&gt;This is not a reflection of Kinde and is strictly a fun side project.&lt;/p&gt;

&lt;p&gt;Please comment if there's any parts of Kinde you would like us to bash out or feedback on how to make this demo site more unusable.&lt;/p&gt;

&lt;h2&gt;
  
  
  Kinde of
&lt;/h2&gt;

&lt;p&gt;Go to the site &lt;a href="https://kinde-of.com" rel="noopener noreferrer"&gt;Kinde of&lt;/a&gt; to see the latest iteration, which may have already evolved from the time you've read this post :)&lt;/p&gt;

&lt;p&gt;Here's a quick video taken at the time of this post.&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/iVrDMuCQCfM"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Kinde features used
&lt;/h2&gt;

&lt;p&gt;We leaned almost entirely on Kinde's custom UI with a custom auth domain to create this amazing iteration of our Kinde of masterpiece. &lt;/p&gt;

&lt;p&gt;If you want to try fully customising the auth pages yourself, please refer to the &lt;a href="https://docs.kinde.com/design/customize-with-code/custom-ui-examples/" rel="noopener noreferrer"&gt;custom UI documentation&lt;/a&gt;. We also have some open source starter kits with &lt;a href="https://docs.kinde.com/design/customize-with-code/custom-ui-examples/" rel="noopener noreferrer"&gt;custom UI examples&lt;/a&gt; to help give you some inspiration.&lt;/p&gt;

&lt;p&gt;One of our excellent engineers, Peter, also put together a Youtube video setting up a custom UI with one of our open source starter kits. &lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/7kFgc8rV1Ts"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo highlights
&lt;/h2&gt;

&lt;p&gt;This round has been focused on making an auth page mega game with a retro console homepage glow up, leaving the post-auth page with the blissful look.&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%2Fzosfk6b7qz2r87i7v04a.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%2Fzosfk6b7qz2r87i7v04a.png" alt="Homepage"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The original intention was to use a wheel of fortune type wheel spinner where the selected box would be the auth you were forced to use. Maybe next time :)&lt;/p&gt;

&lt;p&gt;But while hunting for Windows XP inspiration, we came across the classic Minesweeper game. But because this is a full auth mode implementation, our version will be called Kindesweeper.&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%2Fgxvj6itozis6uy1ytwiq.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%2Fgxvj6itozis6uy1ytwiq.png" alt="Kindesweeper intro"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The initial game is mostly working and requires you to find the auth method. Clicking on the emoji will reset the board and make you start again. Other UI elements like the minimise, maximise, and close buttons look nice, but do nothing. &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%2F8zo4r4neqj8n0birvxud.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%2F8zo4r4neqj8n0birvxud.png" alt="Kindesweeper play"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We've also done a full restyling of the Google, Facebook and email OTP buttons to fit our Kindesweeper theme.&lt;/p&gt;

&lt;p&gt;Who knows what's next?&lt;/p&gt;

</description>
      <category>kinde</category>
      <category>authentication</category>
      <category>webdev</category>
      <category>sideprojects</category>
    </item>
    <item>
      <title>Total cost of B2B CIAM: A small enterprise case study in 2025</title>
      <dc:creator>Alex Norman</dc:creator>
      <pubDate>Thu, 28 Aug 2025 00:03:00 +0000</pubDate>
      <link>https://dev.to/kinde/total-cost-of-b2b-ciam-a-small-enterprise-case-study-in-2025-g7c</link>
      <guid>https://dev.to/kinde/total-cost-of-b2b-ciam-a-small-enterprise-case-study-in-2025-g7c</guid>
      <description>&lt;p&gt;In the B2B CIAM (Customer Identity and Access Management) space, it can be hard to compare the full cost of technology choices before you invest. You need to measure them side by side.&lt;/p&gt;

&lt;p&gt;This article explains how Kinde offers the best value for money compared to WorkOS using a common scenario to compare the two.&lt;/p&gt;

&lt;p&gt;Scenario: Your company sells a B2B product to 150 organisations where most of the customers require single sign on (SSO) to their own enterprise directory for roughly 10,000 users total.&lt;/p&gt;

&lt;p&gt;Let’s compare Kinde and WorkOS.&lt;/p&gt;

&lt;h2&gt;
  
  
  Kinde is best value with the right B2B features built-in
&lt;/h2&gt;

&lt;p&gt;Kinde offers a clear and scalable B2B pricing model, which charges for monthly active users (MAU) and monthly active organizations (MAO). With this model, you only pay for the users and organizations that authenticate within your billing month. Enterprise connections to the customer's identity provider (IdP) are free, so go ahead and make as many as you need to suit their identity and security requirements. See Kinde's &lt;a href="https://kinde.com/pricing" rel="noopener noreferrer"&gt;pricing page&lt;/a&gt; for more details.&lt;/p&gt;

&lt;h3&gt;
  
  
  Kinde price calculation
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  150 Organizations (50 included, 100 = $43.00 MAO)&lt;/li&gt;
&lt;li&gt;  75 Enterprise connections (included)&lt;/li&gt;
&lt;li&gt;  10k users (included)&lt;/li&gt;
&lt;li&gt;  Custom domain (included)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Kinde Scale plan for $250 per month + $43.00&lt;/p&gt;

&lt;p&gt;A significant feature of the Kinde Scale plan is that enterprise connections are included at no additional cost, regardless of the number of connections.It is also important to note that a custom domain, which is crucial for brand consistency, is also included in all paid plans at no additional cost.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Total cost of Kinde $293.00 USD per month&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Extras features on the Kinde plan
&lt;/h3&gt;

&lt;p&gt;Kinde Scale plan base price also includes additional B2B features.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Comprehensive design customizations with a &lt;a href="https://docs.kinde.com/build/domains/pointing-your-domain/" rel="noopener noreferrer"&gt;custom domain&lt;/a&gt;, &lt;a href="https://docs.kinde.com/authenticate/custom-configurations/custom-authentication-pages/" rel="noopener noreferrer"&gt;custom sign in pages&lt;/a&gt;, and &lt;a href="https://docs.kinde.com/design/customize-with-code/quick-start-guide/" rel="noopener noreferrer"&gt;custom designs via code&lt;/a&gt; to ensure that the entire experience in on brand.&lt;/li&gt;
&lt;li&gt;  Customize auth tokens, enrich the auth flow with data from third party providers, or provide custom logic using &lt;a href="https://docs.kinde.com/workflows/about-workflows/" rel="noopener noreferrer"&gt;workflows&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  WorkOS is a strong platform with enterprise pricing
&lt;/h2&gt;

&lt;p&gt;A prominent competitor in the B2B CIAM space, WorkOS, offers a different pricing structure, primarily focusing on charging for enterprise connections.&lt;/p&gt;

&lt;p&gt;Their pricing for &lt;code&gt;Single Sign-On Enterprise SAML &amp;amp; OIDC authentication with any identity provider&lt;/code&gt; is volume-based, with the cost per connection decreasing as the number of connections increases. See WorkOS's &lt;a href="https://workos.com/pricing" rel="noopener noreferrer"&gt;pricing page&lt;/a&gt; for more details.&lt;/p&gt;

&lt;h3&gt;
  
  
  WorkOS price calculation
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  150 Organizations (Included)&lt;/li&gt;
&lt;li&gt;  75 Enterprise connections ($88.00 each)&lt;/li&gt;
&lt;li&gt;  10k users (included)&lt;/li&gt;
&lt;li&gt;  Custom domain ($99.00)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For a company with 75 enterprise connections, the price is $88 per connection per month including their volume discount for usage. This means users are paying a premium for each connection per month, plus a fee for a custom domain to align with your brand.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The total monthly price for WorkOS is $6,699.00 USD.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Price summary Kinde and WorkOS
&lt;/h2&gt;

&lt;p&gt;To provide a clear overview, the table below summarizes the monthly costs for both providers based on the needs of a small enterprise with 150 customer organizations and 75 enterprise connections.&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;Kinde&lt;/th&gt;
&lt;th&gt;WorkOS&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Cost for 150 Customer Orgs (MAO)&lt;/td&gt;
&lt;td&gt;$293.00&lt;/td&gt;
&lt;td&gt;$0.00&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cost for 75 Enterprise Connections&lt;/td&gt;
&lt;td&gt;$0.00&lt;/td&gt;
&lt;td&gt;$6,600&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Custom Domain&lt;/td&gt;
&lt;td&gt;$0.00&lt;/td&gt;
&lt;td&gt;$99.00&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Total Monthly Cost&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;$293.00&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;$6,699.00&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

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

&lt;p&gt;The choice between these two pricing models highlights a key difference in pricing philosophy.&lt;/p&gt;

&lt;p&gt;Kinde's platform approach bundles key B2B identity features into a single solution, with pricing that scales based on organizations and users.&lt;/p&gt;

&lt;p&gt;In contrast, WorkOS's model segments services, leading to a much higher cost as more enterprise features are added. For a small enterprise working in the B2B space, the significant cost difference could be a decisive factor in selecting a CIAM solution that not only meets their technical requirements but also aligns with their budget.&lt;/p&gt;

&lt;p&gt;Get started now. Boost security, drive conversion and save money in just a few minutes with Kinde.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://app.kinde.com/register" rel="noopener noreferrer"&gt;Start for Free&lt;/a&gt; - &lt;a href="http://kinde.com/product-demo/" rel="noopener noreferrer"&gt;Watch a demo&lt;/a&gt;&lt;/p&gt;

</description>
      <category>authentication</category>
      <category>ciam</category>
      <category>security</category>
      <category>kinde</category>
    </item>
    <item>
      <title>Kinde in 90 seconds: Customer auth self-serve portal</title>
      <dc:creator>Alex Norman</dc:creator>
      <pubDate>Wed, 27 Aug 2025 00:37:55 +0000</pubDate>
      <link>https://dev.to/kinde/kinde-in-90-seconds-customer-auth-self-serve-portal-2flk</link>
      <guid>https://dev.to/kinde/kinde-in-90-seconds-customer-auth-self-serve-portal-2flk</guid>
      <description>&lt;p&gt;Kinde’s self-serve portal feature gives your business customers and end-users the power to manage their own account within your app. This includes being able to update basic account details, change plans and payment methods, manage team roles, activate SSO connections, manage API Keys and more.&lt;/p&gt;

&lt;p&gt;You can let end users (B2C) or org users (B2B) manage their own details, giving them a better product experience, and saving you time. &lt;/p&gt;

&lt;p&gt;No need to contact you to update info, they can do it themselves. Save hours of support time.&lt;/p&gt;

&lt;p&gt;Flick a few switches and generate a link to get started.&lt;/p&gt;

&lt;p&gt;Here's a 90 second overview about Kinde's streamlined customer self-serve portal. &lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/Q3HW6Mgj6wA"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Check out our docs &lt;a href="https://docs.kinde.com/build/set-up-options/self-serve-portal-for-orgs/" rel="noopener noreferrer"&gt;Enable self-serve portal for orgs &lt;/a&gt;&lt;/p&gt;

</description>
      <category>authentication</category>
      <category>ciam</category>
      <category>kinde</category>
    </item>
    <item>
      <title>2025 Best Auth Providers: Top 5 Compared</title>
      <dc:creator>Alex Norman</dc:creator>
      <pubDate>Tue, 26 Aug 2025 00:22:02 +0000</pubDate>
      <link>https://dev.to/kinde/2025-best-auth-providers-top-5-compared-2lmi</link>
      <guid>https://dev.to/kinde/2025-best-auth-providers-top-5-compared-2lmi</guid>
      <description>&lt;p&gt;The best authentication provider for most development teams in 2025 is Kinde. It combines enterprise-grade security with developer-friendly implementation, offering complete auth flows, organizational features like teams and RBAC, plus built-in billing and feature flags. While Auth0 remains popular for enterprises needing extensive customization, and Clerk excels at modern developer experience, Kinde delivers the most balanced solution for teams that need production-ready auth without months of integration work.&lt;/p&gt;

&lt;h2&gt;
  
  
  TLDR Summary
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Aspect&lt;/th&gt;
&lt;th&gt;Details&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Top pick&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Kinde - Complete auth plus essential features in one platform&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Best for&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Development teams needing auth, user management, and monetization&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Standout reason&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Ships with organizations, RBAC, feature flags, and billing built-in&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Top picks at a glance
&lt;/h2&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;Best for&lt;/th&gt;
&lt;th&gt;Core features&lt;/th&gt;
&lt;th&gt;Developer Experience&lt;/th&gt;
&lt;th&gt;Ideal team size&lt;/th&gt;
&lt;th&gt;Compliance&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Kinde&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Teams wanting complete auth stack&lt;/td&gt;
&lt;td&gt;SSO, MFA, orgs, RBAC, feature flags, billing&lt;/td&gt;
&lt;td&gt;22+ SDKs, 5-min setup, type-safe APIs&lt;/td&gt;
&lt;td&gt;1-500 developers&lt;/td&gt;
&lt;td&gt;SOC 2 Type II, GDPR, ISO 27001&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Auth0&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Large enterprises with complex requirements&lt;/td&gt;
&lt;td&gt;Universal login, anomaly detection, extensive rules&lt;/td&gt;
&lt;td&gt;Mature SDKs, extensive docs&lt;/td&gt;
&lt;td&gt;50+ developers&lt;/td&gt;
&lt;td&gt;SOC 2, HIPAA, FedRAMP&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Clerk&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Modern web apps prioritizing UX&lt;/td&gt;
&lt;td&gt;Beautiful components, session management&lt;/td&gt;
&lt;td&gt;React-first, great DX&lt;/td&gt;
&lt;td&gt;1-20 developers&lt;/td&gt;
&lt;td&gt;SOC 2 Type II&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Firebase Auth&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Mobile and web apps in Google ecosystem&lt;/td&gt;
&lt;td&gt;Social logins, phone auth, anonymous users&lt;/td&gt;
&lt;td&gt;Tight Google integration&lt;/td&gt;
&lt;td&gt;1-100 developers&lt;/td&gt;
&lt;td&gt;Google Cloud compliance&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Supabase Auth&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Open-source projects and PostgreSQL users&lt;/td&gt;
&lt;td&gt;Row-level security, magic links&lt;/td&gt;
&lt;td&gt;PostgreSQL integration, self-hostable&lt;/td&gt;
&lt;td&gt;1-50 developers&lt;/td&gt;
&lt;td&gt;SOC 2 Type II&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Kinde: the best overall for development teams
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Why it leads
&lt;/h3&gt;

&lt;p&gt;Kinde stands out by solving the complete authentication puzzle that modern applications face. Instead of just handling login flows, it ships with the organizational structures, permission systems, and monetization tools that products actually need. You get production-ready auth in minutes, not months.&lt;/p&gt;

&lt;h3&gt;
  
  
  Best for
&lt;/h3&gt;

&lt;p&gt;CTOs and engineering teams building modern applications who want to ship features instead of building authentication infrastructure. Particularly strong for teams that need organizations, role-based access, and subscription management from day one.&lt;/p&gt;

&lt;h3&gt;
  
  
  Standout features
&lt;/h3&gt;

&lt;p&gt;Kinde includes capabilities that typically require multiple vendors or custom development. Organizations and multi-tenancy work out of the box. RBAC with custom roles and permissions scales from simple to complex without code changes. Feature flags integrate directly with your auth context, enabling user-specific rollouts. The billing engine handles subscriptions, usage tracking, and entitlements without additional services.&lt;/p&gt;

&lt;p&gt;Built-in passwordless and Social SSO reduce friction for end users. Machine-to-machine tokens support service integrations.&lt;/p&gt;

&lt;h3&gt;
  
  
  Developer experience
&lt;/h3&gt;

&lt;p&gt;Setup takes under 5 minutes for basic auth, with production-ready flows including MFA and social logins. The SDK collection covers 22+ languages and frameworks. APIs follow REST principles with predictable responses and comprehensive error messages.&lt;/p&gt;

&lt;p&gt;Webhooks deliver auth events reliably with automatic retries. The admin API enables full automation of user and organization management. Live environments help test auth flows without affecting production.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pricing approach
&lt;/h3&gt;

&lt;p&gt;Transparent pricing starts free for up to 10,500 monthly active users. The free tier includes all core features: organizations, custom domains, and standard support. Paid plans scale predictably based on MAU with no surprise overages. Enterprise agreements offer custom rates and SLAs.&lt;/p&gt;

&lt;h3&gt;
  
  
  Quick start
&lt;/h3&gt;

&lt;p&gt;Get started with Kinde in minutes. Create your account, choose your SDK, and implement production auth today. [link]&lt;/p&gt;

&lt;h2&gt;
  
  
  Other strong options
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Auth0: Enterprise customization champion
&lt;/h3&gt;

&lt;p&gt;Auth0 remains the authentication heavyweight for enterprises needing maximum flexibility. The platform handles complex scenarios through its Rules engine and extensive customization options.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Large enterprises with dedicated identity teams and complex compliance requirements.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Core features:&lt;/strong&gt; Universal Login provides consistent auth across applications. Anomaly detection blocks suspicious activity automatically. The Rules pipeline enables custom logic at any authentication stage. Extensive protocol support covers SAML, WS-Fed, and legacy systems.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;  Market leader with proven scale&lt;/li&gt;
&lt;li&gt;  Extensive third-party integrations&lt;/li&gt;
&lt;li&gt;  Comprehensive documentation&lt;/li&gt;
&lt;li&gt;  Global infrastructure&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;  Pricing complexity increases with scale&lt;/li&gt;
&lt;li&gt;  Steep learning curve for advanced features&lt;/li&gt;
&lt;li&gt;  Implementation typically takes weeks&lt;/li&gt;
&lt;li&gt;  Support varies by pricing tier&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;What to watch:&lt;/strong&gt; Auth0's acquisition by Okta brought enterprise capabilities but also enterprise complexity. Teams report frustration with opaque pricing and the time required to implement seemingly simple features.&lt;/p&gt;

&lt;h3&gt;
  
  
  Clerk: Modern developer experience leader
&lt;/h3&gt;

&lt;p&gt;Clerk reimagines authentication with beautiful, customizable components that developers actually enjoy implementing. The platform emphasizes developer experience and modern web standards.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Frontend teams building consumer applications where authentication UX matters most.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Core features:&lt;/strong&gt; Pre-built React components handle complete auth flows. Session management works seamlessly across devices. User profiles include metadata and custom attributes. The dashboard provides clear user insights.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;  Stunning default UI components&lt;/li&gt;
&lt;li&gt;  Exceptional developer documentation&lt;/li&gt;
&lt;li&gt;  Fast implementation for React apps&lt;/li&gt;
&lt;li&gt;  Modern, intuitive API design&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;  Limited organizational features&lt;/li&gt;
&lt;li&gt;  Higher starting price point&lt;/li&gt;
&lt;li&gt;  React-focused ecosystem&lt;/li&gt;
&lt;li&gt;  Missing advanced enterprise features&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;What to watch:&lt;/strong&gt; Clerk excels at consumer authentication but lacks depth for complex organizational scenarios. Teams needing organizations, RBAC, or enterprise SSO should evaluate carefully.&lt;/p&gt;

&lt;h3&gt;
  
  
  Firebase Auth: Google ecosystem integration
&lt;/h3&gt;

&lt;p&gt;Firebase Authentication leverages Google's infrastructure to provide reliable auth for mobile and web applications. Deep integration with other Firebase services creates a cohesive development platform.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Teams already using Firebase or Google Cloud services who need straightforward authentication.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Core features:&lt;/strong&gt; Social provider integration covers all major platforms. Phone authentication works globally with SMS verification. Anonymous auth enables try-before-signup flows. Custom tokens support server-side authentication.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;  Generous free tier to 50K MAU&lt;/li&gt;
&lt;li&gt;  Reliable Google infrastructure&lt;/li&gt;
&lt;li&gt;  Excellent mobile SDKs&lt;/li&gt;
&lt;li&gt;  Simple integration with Firebase services&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;  Vendor lock-in to Google ecosystem&lt;/li&gt;
&lt;li&gt;  Limited organizational features&lt;/li&gt;
&lt;li&gt;  Basic customization options&lt;/li&gt;
&lt;li&gt;  No self-hosting option&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;What to watch:&lt;/strong&gt; Firebase Auth works well for simple authentication needs but lacks features for complex organizational scenarios. Migration away from Firebase requires significant effort.&lt;/p&gt;

&lt;h3&gt;
  
  
  Supabase Auth: Open-source PostgreSQL integration
&lt;/h3&gt;

&lt;p&gt;Supabase Auth brings authentication directly to your database with PostgreSQL row-level security. The open-source approach enables self-hosting and complete control.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Teams comfortable with PostgreSQL who want auth integrated with their database.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Core features:&lt;/strong&gt; Row-level security policies enforce permissions at the database. Magic links provide passwordless authentication. Social logins cover major providers. JWT tokens work with existing infrastructure.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;  Open source with self-hosting option&lt;/li&gt;
&lt;li&gt;  Tight PostgreSQL integration&lt;/li&gt;
&lt;li&gt;  Transparent pricing model&lt;/li&gt;
&lt;li&gt;  Active community support&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;  Requires PostgreSQL expertise&lt;/li&gt;
&lt;li&gt;  Limited enterprise features&lt;/li&gt;
&lt;li&gt;  Smaller ecosystem than alternatives&lt;/li&gt;
&lt;li&gt;  Documentation assumes database knowledge&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;What to watch:&lt;/strong&gt; Supabase Auth shines for teams that understand PostgreSQL and want database-integrated auth. The learning curve steepens quickly for complex permission models.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to choose the right authentication provider
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Decision checklist
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Technical requirements:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Which SDKs and frameworks does your team use?&lt;/li&gt;
&lt;li&gt;Do you need SSO protocols like SAML or OIDC?&lt;/li&gt;
&lt;li&gt;Will you implement passwordless or biometric auth?&lt;/li&gt;
&lt;li&gt;Do you require machine-to-machine authentication?&lt;/li&gt;
&lt;li&gt;Is self-hosting or on-premise deployment necessary?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Organizational capabilities:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Do users belong to organizations or teams?&lt;/li&gt;
&lt;li&gt;Will you implement role-based access control?&lt;/li&gt;
&lt;li&gt;Do enterprise customers need SCIM provisioning?&lt;/li&gt;
&lt;li&gt;Are audit logs and compliance reports required?&lt;/li&gt;
&lt;li&gt;Will you need custom branding per organization?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Scale and performance:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How many monthly active users do you expect?&lt;/li&gt;
&lt;li&gt;What latency requirements exist for auth operations?&lt;/li&gt;
&lt;li&gt;Do you need multi-region deployment?&lt;/li&gt;
&lt;li&gt;What uptime SLA do customers require?&lt;/li&gt;
&lt;li&gt;How will auth scale with your application?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Developer experience:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How quickly must auth be implemented?&lt;/li&gt;
&lt;li&gt;What level of customization is needed?&lt;/li&gt;
&lt;li&gt;Does your team have identity expertise?&lt;/li&gt;
&lt;li&gt;How important is documentation quality?&lt;/li&gt;
&lt;li&gt;What support response time do you need?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Commercial considerations:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What's your budget for authentication?&lt;/li&gt;
&lt;li&gt;How predictable must costs be at scale?&lt;/li&gt;
&lt;li&gt;Do you need transparent pricing?&lt;/li&gt;
&lt;li&gt;Are enterprise agreements required?&lt;/li&gt;
&lt;li&gt;What payment methods are accepted?&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Methodology
&lt;/h2&gt;

&lt;p&gt;We evaluated authentication providers based on real implementation experience and customer feedback. Assessment criteria included time to production, feature completeness, developer experience, scalability, pricing transparency, and customer support quality. We prioritized solutions that solve actual application challenges rather than theoretical capabilities. Providers were tested with common scenarios including user signup, organization creation, permission management, and enterprise SSO configuration.&lt;/p&gt;

&lt;p&gt;Originally published on the &lt;a href="https://kinde.com/blog/compare/top-authentication-providers-2025/" rel="noopener noreferrer"&gt;Kinde blog&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ciam</category>
      <category>authentication</category>
      <category>kinde</category>
    </item>
    <item>
      <title>Use Cursor AI to design Kinde auth UX</title>
      <dc:creator>Alex Norman</dc:creator>
      <pubDate>Wed, 20 Aug 2025 10:11:09 +0000</pubDate>
      <link>https://dev.to/kinde/use-cursor-ai-to-design-kinde-auth-ux-3neh</link>
      <guid>https://dev.to/kinde/use-cursor-ai-to-design-kinde-auth-ux-3neh</guid>
      <description>&lt;p&gt;Kinde's prodigious product manager, Oli &lt;a class="mentioned-user" href="https://dev.to/oliwolff1"&gt;@oliwolff1&lt;/a&gt;, has created a demo using &lt;a href="https://cursor.com" rel="noopener noreferrer"&gt;Cursor&lt;/a&gt; to help him customise the user auth pages with his own styling. &lt;/p&gt;

&lt;h2&gt;
  
  
  Hosted pages
&lt;/h2&gt;

&lt;p&gt;Out of the box, &lt;a href="https://kinde.com" rel="noopener noreferrer"&gt;Kinde&lt;/a&gt; gives you a hosted authentication page for maximum security and minimum fuss. Everything for a straight forward and seamless auth experience is ready to go. For those of you who want to fully customise the auth pages, Kinde supports the ability to bring your own code and styles to the auth pages, which is known as custom UI. &lt;/p&gt;

&lt;h2&gt;
  
  
  Custom UI
&lt;/h2&gt;

&lt;p&gt;You can find more information about custom UI on Kinde's documentation site at &lt;a href="https://docs.kinde.com/design/customize-with-code/customize-with-css-html/" rel="noopener noreferrer"&gt;Customize designs with code&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;Check out Oli's video.&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/cSFpwjY4BE8"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Re-create it yourself
&lt;/h2&gt;

&lt;p&gt;Everything done with Oli's demo can be found online publicly and can be done for free. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Create a Kinde business&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;One of our amazing engineers Peter has a video &lt;a href="https://www.youtube.com/watch?v=ZNuE7CkB6ck" rel="noopener noreferrer"&gt;How to deploy a Kinde Next.js app with Vercel&lt;/a&gt; that would be a great place to start, which uses the &lt;a href="https://github.com/kinde-starter-kits/kinde-nextjs-app-router-starter-kit" rel="noopener noreferrer"&gt;Next.js app router starter kit&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Custom UI template&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The template he used in the video demo can be found on Kinde's starter kits at &lt;a href="https://github.com/kinde-starter-kits/custom-ui-splitscape" rel="noopener noreferrer"&gt;custom-ui-splitscape&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sign in page&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Grab the &lt;a href="https://dribbble.com/shots/24494696-Sign-In-Page" rel="noopener noreferrer"&gt;image&lt;/a&gt; from the sign in page used in the demo. Or you want to live on the wild side, grab an image from another nice looking sign in page.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Prompt used in Cursor&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;And here's the prompt used in the video.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Using the Kinde custom page template and [Kinde official docs](https://docs.kinde.com), I want to update the Kinde login page with the following details:
- Use the attached image as inspiration for updating the login page
- only show email field (no password field or social connections)
- remove all logos

Requirements:
- Use Kinde's CSS custom properties system (--kinde-* variables)
- All inline styles with nonce={getKindeNonce()}
- Use valid hex color values for Kinde properties
- Style only the appearance, not the functionality
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;This quick video just goes to show how easy it is to setup your own look and feel to the authentication flow of your web app. Reach out the team at one of our &lt;a href="https://kinde.com/support/" rel="noopener noreferrer"&gt;support communities&lt;/a&gt; if you have any questions.&lt;/p&gt;

</description>
      <category>authentication</category>
      <category>kinde</category>
      <category>webdev</category>
      <category>ux</category>
    </item>
    <item>
      <title>It Kinde of works: Part 1 of many</title>
      <dc:creator>Alex Norman</dc:creator>
      <pubDate>Mon, 18 Aug 2025 23:41:51 +0000</pubDate>
      <link>https://dev.to/kinde/it-kinde-of-works-part-1-of-many-2lj8</link>
      <guid>https://dev.to/kinde/it-kinde-of-works-part-1-of-many-2lj8</guid>
      <description>&lt;p&gt;The &lt;code&gt;Kinde of&lt;/code&gt; posts are to highlight how Kinde's authentication can be used in fun and unproductive ways. This series will step through things like using our starter kits, workflows, properties, feature flags, custom UI, and a bunch of other features. The demo website has no real purpose, but we're going to try and get you to like and subscribe to our the company's LinkedIn profile amongst other things. &lt;/p&gt;

&lt;p&gt;This is not a reflection of Kinde and is strictly a fun side project. &lt;/p&gt;

&lt;p&gt;Please comment if there's any parts of Kinde you would like us to bash out or feedback on how to make this demo site more unusable. &lt;/p&gt;

&lt;h2&gt;
  
  
  Kinde of
&lt;/h2&gt;

&lt;p&gt;Go to the site &lt;a href="https://kinde-of.com" rel="noopener noreferrer"&gt;Kinde of&lt;/a&gt; to see the latest iteration, which may have already evolved from the time you've read this post :)&lt;/p&gt;

&lt;p&gt;Here's a quick video of the simple login process now. It'll get a lot crazier as we stack more features on it.&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/tuDIBAo89_w"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Tech used
&lt;/h2&gt;

&lt;p&gt;The initial site uses Kinde's &lt;a href="https://github.com/kinde-starter-kits/kinde-nextjs-app-router-starter-kit" rel="noopener noreferrer"&gt;Next.js app router starter kit&lt;/a&gt;, which has auth pre-built into it. More info can be found on the &lt;a href="https://docs.kinde.com/developer-tools/sdks/backend/nextjs-sdk/" rel="noopener noreferrer"&gt;Next.js App Router SDK&lt;/a&gt; documentation. One of our team members Peter also put together a tutorial playing around with this SDK in his &lt;a href="https://www.youtube.com/watch?v=oq3o00E6Xys" rel="noopener noreferrer"&gt;Build an app with Next.js, Kinde and shadcn in 20 minutes&lt;/a&gt; video.&lt;/p&gt;

&lt;p&gt;For the deployment and hosting side of things, we used Vercel since it was nice and easy. &lt;/p&gt;

&lt;h2&gt;
  
  
  Kinde features used
&lt;/h2&gt;

&lt;p&gt;Kinde's &lt;a href="https://github.com/kinde-starter-kits/kinde-nextjs-app-router-starter-kit" rel="noopener noreferrer"&gt;Next.js app router starter kit&lt;/a&gt; and then basically nothing else :) We deployed an empty site, turned on a few authentication options and then just left it vanilla. &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%2Fpirenux2gfdyk4qnqhcb.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%2Fpirenux2gfdyk4qnqhcb.png" alt="Login page"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo highlights
&lt;/h2&gt;

&lt;p&gt;I don't know who came up with the idea, but a decision to use Windows XP styling across the board won out. First up is the classic bliss background for the homepage and an XP desktop layout on the dashboard. &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%2Ffn2ec4ua3llc60ze8fd7.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%2Ffn2ec4ua3llc60ze8fd7.png" alt="XP desktop"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The forced LinkedIn page visit feels a bit malicious with the pop up, so we might reconsider that one in future editions.&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%2Frquib3z9dqwhh7hq3nmc.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%2Frquib3z9dqwhh7hq3nmc.png" alt="Follow our LinkedIn"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;While this first pass has put together the foundation, the next few posts will start utilising features for good.&lt;/p&gt;

</description>
      <category>kinde</category>
      <category>authentication</category>
      <category>webdev</category>
      <category>sideprojects</category>
    </item>
    <item>
      <title>Mixed auth set up with Kinde for B2B and B2C</title>
      <dc:creator>Alex Norman</dc:creator>
      <pubDate>Wed, 13 Aug 2025 12:49:54 +0000</pubDate>
      <link>https://dev.to/kinde/mixed-auth-set-up-with-kinde-for-b2b-and-b2c-19na</link>
      <guid>https://dev.to/kinde/mixed-auth-set-up-with-kinde-for-b2b-and-b2c-19na</guid>
      <description>&lt;p&gt;If you have an app or site that supports a mix of business customers and direct customers, this guide shows you how to set up authentication in Kinde to meet both these needs.&lt;/p&gt;

&lt;p&gt;For example, say you run a finance business and you have separate sign-ins for accounting business partners and direct customers. Accounting businesses sign in with an enterprise identity, e.g. SAML and direct customers sign in with email and an OTP.&lt;/p&gt;

&lt;p&gt;This topic explains how to create a simple, unified experience for both groups.&lt;/p&gt;

&lt;h2&gt;
  
  
  You’ll need the Kinde Scale plan
&lt;/h2&gt;

&lt;p&gt;To set up authentication for a mixed B2B and B2C business that includes multiple enterprise connections, you need to be on the &lt;a href="https://kinde.com/pricing/" rel="noopener noreferrer"&gt;Kinde Scale plan&lt;/a&gt;. This is the only Kinde plan that gives you access to the features you need:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Multiple enterprise connections (e.g. SAML)&lt;/li&gt;
&lt;li&gt;Advanced organizations - for managing users and access for business customers&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You get 5 enterprise connections and 5 advanced organizations included with Kinde Scale. You can add more, but costs apply.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to build a unified sign-in experience
&lt;/h2&gt;

&lt;p&gt;A unified experience is where everyone signs in through the same sign in screen, and they are routed to the relevant workflow for authentication.&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%2Fimagedelivery.net%2FskPPZTHzSlcslvHjesZQcQ%2Fa14aa42c-3c66-45de-dc80-ee7c9df41b00%2Fpublic" 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%2Fimagedelivery.net%2FskPPZTHzSlcslvHjesZQcQ%2Fa14aa42c-3c66-45de-dc80-ee7c9df41b00%2Fpublic" alt="unified sign in" width="2200" height="1974"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This simplifies the sign in experience for all your users, including your enterprise connections.&lt;/p&gt;

&lt;h3&gt;
  
  
  Example of a unified authentication experience
&lt;/h3&gt;

&lt;p&gt;This is what happens behind the scenes with the auth setup.&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%2Fimagedelivery.net%2FskPPZTHzSlcslvHjesZQcQ%2Fff106642-c42f-44cf-4a89-84406a717000%2Fpublic" 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%2Fimagedelivery.net%2FskPPZTHzSlcslvHjesZQcQ%2Fff106642-c42f-44cf-4a89-84406a717000%2Fpublic" alt="image.png" width="2200" height="1936"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1: Set up auth for your B2C users
&lt;/h3&gt;

&lt;p&gt;In this scenario, your direct customers will sign in with email and a one-time-passcode (OTP). To set this up:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;a href="https://docs.kinde.com/authenticate/authentication-methods/passwordless-authentication/" rel="noopener noreferrer"&gt;Enable email + code authentication in your business.&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.kinde.com/authenticate/manage-authentication/organization-auth-experience/" rel="noopener noreferrer"&gt;Set email + code as the sign in method in your default organization.&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;(Optional) &lt;a href="https://docs.kinde.com/build/organizations/allow-user-signup-org/" rel="noopener noreferrer"&gt;Set an organization policy to allow users to sign up to the default org using an email address&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Step 2: Set up auth for your B2B users
&lt;/h3&gt;

&lt;p&gt;Authentication for business customers can be more complex, with additional security considerations and set up time involved. For example, a partner business may require employees to only access your web app using their business email and for authentication to be centralised with their own identity provider via SAML.&lt;/p&gt;

&lt;p&gt;Let’s go through the process for setting up 5 SAML enterprise connections for 5 different business customers.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;a href="https://docs.kinde.com/authenticate/enterprise-connections/about-enterprise-connections/" rel="noopener noreferrer"&gt;Add 5 separate enterprise connections to Kinde&lt;/a&gt;. E.g. EC1, EC2, EC3, and so on.

&lt;ol&gt;
&lt;li&gt;Configure each connection with the domain information, including email domains in the &lt;a href="https://docs.kinde.com/authenticate/enterprise-connections/about-enterprise-connections/#home-realm-discovery" rel="noopener noreferrer"&gt;home realm discovery&lt;/a&gt; field. You may need to ask the customer’s IT team for this information.&lt;/li&gt;
&lt;li&gt;(Recommended) Switch on the &lt;strong&gt;Create user on sign up&lt;/strong&gt; option to &lt;a href="https://docs.kinde.com/authenticate/enterprise-connections/provision-users-enterprise/" rel="noopener noreferrer"&gt;enable JIT provisioning&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;a href="https://docs.kinde.com/build/organizations/add-and-manage-organizations/" rel="noopener noreferrer"&gt;Create 5 organizations&lt;/a&gt;, one for each business customer (and connection), and select only &lt;a href="https://docs.kinde.com/authenticate/manage-authentication/organization-auth-experience/" rel="noopener noreferrer"&gt;the relevant enterprise connection for each organization&lt;/a&gt;.&lt;/li&gt;

&lt;/ol&gt;

&lt;p&gt;For example:&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%2Fwubuv04g88hsphmara19.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%2Fwubuv04g88hsphmara19.png" alt="Org example" width="800" height="461"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;In each organization:

&lt;ol&gt;
&lt;li&gt;Go to &lt;strong&gt;Policies&lt;/strong&gt; and add the relevant domain to the &lt;strong&gt;Allowed domains&lt;/strong&gt; field.&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;Auto-add users from allowed domains&lt;/strong&gt;. This activates JIT provisioning for users signing up from this domain.&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;Save&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;


&lt;/li&gt;

&lt;/ol&gt;

&lt;p&gt;With home realm discovery and allowed domains set, when a user enters an email that matches the domain name they will be routed through that enterprise connection. There is no need for them to self-select which connection they belong to.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 3: Enable authentication for your application
&lt;/h3&gt;

&lt;p&gt;To achieve the above scenario, all the supported sign-in methods need to be switched on in your application. For example, switch on Email + code, EC1, EC2, EC3, EC4, and EC5.&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%2Fimagedelivery.net%2FskPPZTHzSlcslvHjesZQcQ%2Fcf3a393d-b977-4de3-2bd1-dae72ec93f00%2Fpublic" 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%2Fimagedelivery.net%2FskPPZTHzSlcslvHjesZQcQ%2Fcf3a393d-b977-4de3-2bd1-dae72ec93f00%2Fpublic" alt="Auth options to switch on in Kinde" width="2200" height="2090"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Optimize your auth flow
&lt;/h2&gt;

&lt;p&gt;This unified model of authentication can be extended to 10’s or 100’s of organizations, all while maintaining the same sign in screen.&lt;/p&gt;

&lt;p&gt;Other situations you can cater for include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.kinde.com/authenticate/multi-factor-auth/mfa-per-org/" rel="noopener noreferrer"&gt;Adding MFA for an organization's users&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Adding other &lt;a href="https://docs.kinde.com/authenticate/enterprise-connections/about-enterprise-connections/" rel="noopener noreferrer"&gt;enterprise connections&lt;/a&gt; (e.g. &lt;a href="https://docs.kinde.com/authenticate/enterprise-connections/custom-saml-google-workspace/" rel="noopener noreferrer"&gt;Google Workspace&lt;/a&gt; or &lt;a href="https://docs.kinde.com/authenticate/enterprise-connections/azure/" rel="noopener noreferrer"&gt;Microsoft Entra ID&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.kinde.com/manage-users/roles-and-permissions/default-user-roles/" rel="noopener noreferrer"&gt;Auto-assigning user roles&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;Get started with Kinde now - Boost security, drive conversion and save money in just a few minutes.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://app.kinde.com/register?utm_source=devto&amp;amp;utm_content=article_cta" rel="noopener noreferrer"&gt;Start for free&lt;/a&gt; - &lt;a href="https://kinde.com/product-demo/" rel="noopener noreferrer"&gt;Watch a demo&lt;/a&gt;&lt;/p&gt;

</description>
      <category>authentication</category>
      <category>kinde</category>
    </item>
    <item>
      <title>What is AWS Aurora Serverless v2 and why we didn't use it</title>
      <dc:creator>Alex Norman</dc:creator>
      <pubDate>Mon, 11 Aug 2025 03:38:38 +0000</pubDate>
      <link>https://dev.to/kinde/what-is-aws-aurora-serverless-v2-and-why-we-didnt-use-it-102b</link>
      <guid>https://dev.to/kinde/what-is-aws-aurora-serverless-v2-and-why-we-didnt-use-it-102b</guid>
      <description>&lt;p&gt;We’re a big user of RDS Aurora from AWS to run our production workloads because it doesn’t require much infrastructure maintenance and feels like a very durable platform. If you run databases or are using RDS in AWS, then you’ve probably heard of AWS’s &lt;a href="https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/aurora-serverless-v2.html" rel="noopener noreferrer"&gt;Aurora Serverless v2&lt;/a&gt;. In this article, I’m going to touch on what Aurora is, how Aurora Serverless v2 can help with your dynamic loads, and ultimately why we didn’t use it for our product. &lt;/p&gt;

&lt;h2&gt;
  
  
  What is Aurora
&lt;/h2&gt;

&lt;p&gt;Ripped straight from the &lt;a href="https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/CHAP_AuroraOverview.html" rel="noopener noreferrer"&gt;AWS docs&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Amazon Aurora (Aurora) is a fully managed relational database engine that's compatible with MySQL and PostgreSQL&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  What is Aurora Serverless v2
&lt;/h2&gt;

&lt;p&gt;Ripped straight from the &lt;a href="https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/aurora-serverless-v2.html" rel="noopener noreferrer"&gt;AWS docs&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Aurora Serverless v2 is an on-demand, autoscaling configuration for Amazon Aurora. Aurora Serverless v2 helps to automate the processes of monitoring the workload and adjusting the capacity for your databases.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I’m being very specific about what “v2” is because it’s a huge improvement over the product’s v1. So much so that even their own documentation is very clear in that they are 2 different things.&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%2Fbh0gxnazqituzdckcnxg.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%2Fbh0gxnazqituzdckcnxg.png" alt="Different serverless" width="420" height="136"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What problem were we trying to solve
&lt;/h2&gt;

&lt;p&gt;Our product is heavy on the server side, which means quite a lot goes through the database. You can read more about it on a blog post &lt;a href="https://kinde.com/blog/engineering/why-is-kinde-built-the-way-it-is/" rel="noopener noreferrer"&gt;Why is Kinde built the way it is?&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;Keeping on top of database performance and scaling is critical. When an unexpected event occurs, such as a large customer migrating their entire user base &lt;a href="https://kinde.com/customers/migrating-7000-payroll-company-users-to-kinde-in-48-hours/" rel="noopener noreferrer"&gt;in a weekend&lt;/a&gt; or being on the receiving end of a &lt;a href="https://dev.to/kinde/using-rate-limits-and-ja4-fingerprinting-in-aws-waf-27mj"&gt;DDoS&lt;/a&gt;, our infrastructure needs to meet those needs. The default model for RDS Aurora is to provision on-demand instances with a fixed amount of vCPU and memory based on your requirements. You would have an instance size that is larger than your baseline so that unexpected events can be absorbed. If something too large was coming over the hill, then you'd have to provision a larger instance and then fail over to it. This all sounds quite inefficient.&lt;/p&gt;

&lt;p&gt;Enter Aurora Serverless v2. Instead of provisioning based on a static vCPU and memory size, you now set a minimum and maximum threshold of those resources. Aurora Serverless v2 is calculated with ACUs, which stand for Aurora Capacity Unit.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;1 ACU has approximately 2 GiB of memory with corresponding CPU and networking, similar to that used in Aurora provisioned instances.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Using this model, we would only need to set a practical minimum and then set a maximum so that our bill doesn't explode. &lt;/p&gt;

&lt;h2&gt;
  
  
  Setup
&lt;/h2&gt;

&lt;p&gt;We have a synthetics testing system that's used to measure latency for a typical username and password authentication session. This can also be used to measure overall performance of the serverless cluster to learn a bit more about how our product is impacted by the dynamic changes. &lt;/p&gt;

&lt;p&gt;For this test, we're going big since smaller tests all worked really well. We really want to stress this out. Initially we'd provision a big ole db.r8g.8xlarge on-demand instance, then hit it with an extremely large load that is fairly representative of a production baseline. For the serverless, we set a minimum of 64 ACUs and a maximum of 128 ACUs. With the serverless instance as the reader, it would have a chance to warm up by itself. Once things looked to have settled down, we would failover the cluster so that the serverless instance became the writer. Crunch time. &lt;/p&gt;

&lt;h2&gt;
  
  
  Testing good
&lt;/h2&gt;

&lt;p&gt;So how did it go? So so.&lt;/p&gt;

&lt;p&gt;Functionally everything worked as advertised. It was quite cool to see the ACUs automatically adjust based on the load and how it would ebb and flow depending on extra jobs we would add to the database.&lt;/p&gt;

&lt;p&gt;The instance failed over at the same speed as we're used to with a pair of on-demand instances, we experienced no timeouts due to memory pressure, and the ACU scaling could be seen as the database load changed. &lt;/p&gt;

&lt;p&gt;You can see the scaling kicked off when the instance was provisioned with this ACU chart. &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%2Fis8sr6apu4vjjkb2upb4.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%2Fis8sr6apu4vjjkb2upb4.png" alt="ACU metrics" width="800" height="240"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And once the workload settled down after the failover, it landed on about 80 ACUs.&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%2F2m54emu9j2lh6qyyh47t.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%2F2m54emu9j2lh6qyyh47t.png" alt="ACU baseline" width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;One part that was surprising to us was the time it took to provision the ACUs.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;It took 15 minutes to provision 90 ACUs&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;For some reason I was expecting to scale up much faster.&lt;/p&gt;

&lt;h2&gt;
  
  
  Testing bad
&lt;/h2&gt;

&lt;p&gt;What was even more surprising was the poor performance of the cluster once the scaling had settled down after the failover. Everything was a bit slower. The next graph shows the response latency for our synthetics monitoring in milliseconds. While the total transaction is still quite fast, it's noticeably across the board.&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%2Fza33lv5n88d3kersd848.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%2Fza33lv5n88d3kersd848.png" alt="Aurora latency" width="800" height="241"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Not only is the latency baseline slower, it also seems more susceptible to small spikes. This is like moving from SSDs back to those hybrid magnetic HDDs. &lt;/p&gt;

&lt;p&gt;Our baseline was running on an r8g on-demand instance, which is the latest generation available to RDS. I have no proof of this, but I suspect that Aurora Serverless v2 is re-using older hardware, basically giving AWS a longer return on investment for the data centre hardware that isn't being used by current customers. Over the years, we've noticed increasingly better performance and more consistent latency when moving from r6g to r7g and then finally to r8g. &lt;/p&gt;

&lt;p&gt;Using Aurora Serverless v2 seems like a step in the wrong direction for overall performance. I guess in the grand scheme or things, this will need to be a considered trade off in return for dynamically increasing and reducing resource allocations for a system that is traditionally very static. &lt;/p&gt;

&lt;h2&gt;
  
  
  Cost
&lt;/h2&gt;

&lt;p&gt;The pricing is a bit predatory too. Let's take this example we just tested. At the time of writing for the AWS us-west-2 Oregon region:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;1 ACU = $0.12 per hour&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So if we worked out the per hour cost of our serverless baseline:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;80 (160GB memory) x $0.12 = $9.6 per hour&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And then the price we were paying for the on-demand instance that had sufficient overhead already:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;1 db.r8g.8xlarge (256GB memory) = $4.416 per hour&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This makes Aurora Serverless v2 over double the cost at the top end of what we provisioned. The 8xlarge is already over-provisioned so that we could handle the occasional spikes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why it’s not right for us
&lt;/h2&gt;

&lt;p&gt;In the end, the baseline performance and the costs are too far away from our expectations to consider using Aurora Serverless v2. &lt;/p&gt;

&lt;p&gt;The baseline performance really surprised us. I have noticed that AWS don't publish what type of CPUs or the generation of hardware being used. Maybe my older generation hardware conspiracy theory? More likely the extra layers of virtualisation having a performance penalty. &lt;/p&gt;

&lt;p&gt;The pricing wasn't too much of a surprise since you already know that the equivalent ACU to on-demand resourcing has a big delta. But the baseline that our instances sat at was a bit surprising since we were hoping that it would settle at something much closer to the minimum allocated due to the over provisioning already done. &lt;/p&gt;

&lt;p&gt;I think if we were to use this again in the future, it would be for highly highly highly dynamic workloads where the instance could effectively be dropped down to 4 ACUs and then scale up automatically to something like 128 for the necessary period of time. That would likely save a lot compared to keeping a large enough instance available. And also assumes that the database even needs to be online the whole time.&lt;/p&gt;

&lt;p&gt;Anyways, pop a message through or a comment if you've had an experience with Aurora Serverless v2. Good or bad. &lt;/p&gt;

</description>
      <category>aws</category>
      <category>rds</category>
      <category>aurora</category>
    </item>
    <item>
      <title>Adding some AI hints to our documentation</title>
      <dc:creator>Alex Norman</dc:creator>
      <pubDate>Thu, 07 Aug 2025 05:47:01 +0000</pubDate>
      <link>https://dev.to/kinde/adding-some-ai-hints-to-our-documentation-1nhf</link>
      <guid>https://dev.to/kinde/adding-some-ai-hints-to-our-documentation-1nhf</guid>
      <description>&lt;p&gt;In the previous post &lt;a href="https://dev.to/kinde/front-up-with-front-matter-3d95"&gt;Front up with front matter&lt;/a&gt;, I briefly touched on the request of asking AI to offer suggestions to improve SEO and enhance how AI chat bots reference and utilise our &lt;a href="https://docs.kinde.com" rel="noopener noreferrer"&gt;documentation&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The next round of updates relate to making it easier for our customers to directly ingest our documentation into their AI chats. &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%2Fvvika3lcjfdzcimp35h1.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%2Fvvika3lcjfdzcimp35h1.png" alt="AI hints on our docs" width="484" height="290"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Open with ChatGPT
&lt;/h2&gt;

&lt;p&gt;This one was interesting. I've seen this done before, but it turned out to be less obvious than originally dreamed.&lt;/p&gt;

&lt;p&gt;As usual, Cursor provided most of the scaffolding to get a basic integration to send data to OpenAI's ChatGPT. What I didn't bother looking up at the start was whether this can be done and how it would work. &lt;/p&gt;

&lt;p&gt;With ChatGPT, you can send through the chat prompt in the URL as a parameter. With the parameter in the URL, you're restricted by some character types, length, and potentially being blocked by WAFs. What ended up working looked like&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://chat.openai.com/?q=Can%20you%20summarize%20this%20page%3A%20https%3A%2F%2Fdocs.kinde.com%2Fget-started%2Fguides%2Ffirst-things-first%2F
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2F2u4jcrlgcekgt48t0bf3.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%2F2u4jcrlgcekgt48t0bf3.png" alt="ChatGPT prompt" width="800" height="214"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This basically opens up ChatGPT and pre-writes the prompt to &lt;code&gt;Can you summarize this page https://docs.kinde.com/get-started/guides/first-things-first/&lt;/code&gt;. Now when you chat about the documentation, it'll already have the context pre-loaded. &lt;/p&gt;

&lt;h2&gt;
  
  
  Open with other LLMs
&lt;/h2&gt;

&lt;p&gt;What I didn't know was that you can't do the URL parameter trick for other LLMs, such as Claude or Gemini. Neither support this type of pre-written prompt. Honestly I'd say that this is a security feature since you could potentially inject malicious information to a prompt via a link. &lt;/p&gt;

&lt;p&gt;I asked both Claude and Gemini for their own guidance and was pointed to their APIs and other deeper integrations, which are too time consuming for this exercise. So in the end, only ChatGPT gets a mention. &lt;/p&gt;

&lt;h2&gt;
  
  
  Copy for AI
&lt;/h2&gt;

&lt;p&gt;The next part is something I've seen in a lot of documentation sites. Here's an example of what Stripe has on their documentation.&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%2Fck8vvzldnsr4ob8olrsy.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%2Fck8vvzldnsr4ob8olrsy.png" alt="Stripe example" width="800" height="165"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The copy for AI button basically takes the content of the page in markdown and copies it to your clipboard. You can then paste it into whatever LLM or AI service you're using. I guess the irony is that you can simply paste the page URL into the AI chat to get the content, so this method might save you a few tokens by not having to browse the internet for the content.  &lt;/p&gt;

&lt;h2&gt;
  
  
  Metrics
&lt;/h2&gt;

&lt;p&gt;And lastly, it's important (more a curiosity) to know if anyone is using these features. We're a big user of &lt;a href="https://plausible.io/" rel="noopener noreferrer"&gt;Plausible&lt;/a&gt; for our web analytics. Plausible supports &lt;a href="https://plausible.io/docs/custom-event-goals" rel="noopener noreferrer"&gt;custom event goals&lt;/a&gt; to help track when certain things happen on your site. For both the Open with ChatGPT and Copy for AI buttons, we attached a custom event that's recorded with Plausible. This way we can figure out whether this is a quality of life feature worth expanding or if it dies a slow death here. &lt;/p&gt;

&lt;p&gt;Once the custom events are being ingested, you can create dashboard filters for them to see 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%2Fibvpfeig643mfjoorayt.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%2Fibvpfeig643mfjoorayt.png" alt="Plausible filtering for custom events" width="800" height="370"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;As part of the continuing AI-ification for our &lt;a href="https://docs.kinde.com" rel="noopener noreferrer"&gt;documentation&lt;/a&gt;, I think this is a decent practical example of helping customers and users quickly add context to their existing AI chat sessions. I'm sure there will be more to follow.&lt;/p&gt;

</description>
      <category>documentation</category>
      <category>kinde</category>
    </item>
    <item>
      <title>Front up with front matter</title>
      <dc:creator>Alex Norman</dc:creator>
      <pubDate>Thu, 31 Jul 2025 05:15:40 +0000</pubDate>
      <link>https://dev.to/kinde/front-up-with-front-matter-3d95</link>
      <guid>https://dev.to/kinde/front-up-with-front-matter-3d95</guid>
      <description>&lt;p&gt;We recently went through all our &lt;a href="https://docs.kinde.com" rel="noopener noreferrer"&gt;documentation&lt;/a&gt; to help make it more visible to search engines and particularly AI scrapers. Ironically the advice given was provided by an AI LLM, so let’s trust that it’s providing the right information. In this post, I’ll dig into front matter and using &lt;a href="https://cursor.com/" rel="noopener noreferrer"&gt;Cursor&lt;/a&gt; to help us update all our documentation.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is front matter
&lt;/h2&gt;

&lt;p&gt;Front matter is a block of metadata at the top of a document to help describe what’s on the document and how to categorise it. What you put into the front matter is up to you. Some example fields would be title, description, publication date, keywords, and categories. If you’re doing technical documentation, then other helpful fields could include language, sdks, and complexity. &lt;/p&gt;

&lt;p&gt;And apparently it's &lt;a href="https://github.com/jekyll/jekyll/issues/2396" rel="noopener noreferrer"&gt;front&lt;/a&gt; &lt;a href="https://en.wikipedia.org/wiki/Book_design#Front_matter" rel="noopener noreferrer"&gt;matter&lt;/a&gt;, not frontmatter?&lt;/p&gt;

&lt;h2&gt;
  
  
  Updating our front matter
&lt;/h2&gt;

&lt;p&gt;The existing front matter we had on our pages looked something like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;---
page_id: 95d9b022-c6a1-43b0-8924-3026c1337012
title: "This cool page"
sidebar:
  order: 2
relatedArticles:
  - f4e916d4-58e6-4e9b-a8d9-aac74cb2631d
  - 86438027-c3b7-47d0-b295-9ec3d541e0b9
app_context:
  - m: user
    s: details
description: "This is an awesome page with tons of epic information"
featured: false
deprecated: false
---
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;While reviewing our pages, we noticed that a lot of them had a generic description not applicable the page content or were missing a description altogether.&lt;/p&gt;

&lt;p&gt;To handle the onslaught of AI agents and LLMs referencing our documentation in conversations, we wanted to make sure it had more context to respond with. Well, this was at least the AI based recommendation provided.&lt;/p&gt;

&lt;p&gt;So our new front matter ended up looking like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;---
page_id: 95d9b022-c6a1-43b0-8924-3026c1337012
title: "This cool page"
sidebar:
  order: 2
relatedArticles:
  - f4e916d4-58e6-4e9b-a8d9-aac74cb2631d
  - 86438027-c3b7-47d0-b295-9ec3d541e0b9
app_context:
  - m: user
    s: details
description: "This is an awesome page with tons of epic information."
topics:
  - manage-users
sdk:
  - nodejs
languages:
  - javascript
audience:
  - admins
  - developers
complexity: beginner
keywords:
  - multi-organization
  - user management
  - sign in experience
  - enterprise authentication
updated: 2025-07-29
featured: false
deprecated: false
ai-summary: "This is an awesome page with tons of epic information."
---
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;With this added block of text, we’ll be providing a lot more goodies for the crawlers to consume. Particularly important to us was the sdk and keywords, which weren’t there before. These will help people find related docs when working with one our SDKs. And of course more keywords is always good.&lt;/p&gt;

&lt;h2&gt;
  
  
  Mass updates with Cursor
&lt;/h2&gt;

&lt;p&gt;Our &lt;a href="https://docs.kinde.com/" rel="noopener noreferrer"&gt;documentation&lt;/a&gt; site has over 350 pages. Updating each page individually and then populating the related content would be a serious chore. AI and Cursor to the rescue. &lt;/p&gt;

&lt;p&gt;The context used in Cursor was:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Here's a sample template of the full front matter needed for all our documentation. I want to update the front matter for all docs in the documentation folder.&lt;/p&gt;

&lt;p&gt;Keep the existing page_id, title, sidebar.order, app_context, topics, and relatedArticles. Add the others from the context below.&lt;/p&gt;

&lt;p&gt;topics: please use the folder one above in the tree, so in this case it'll be "authenticate"&lt;br&gt;
sdk: if there's mention of an sdk, then include them, otherwise leave it blank&lt;br&gt;
languages: if there's mention of a coding language, then add it, otherwise leave it blank&lt;br&gt;
audience: take your best guess&lt;br&gt;
complexity: make a guess from beginner to expert&lt;br&gt;
keywords: use your judgement based on the article&lt;br&gt;
updated: figure out the commit date for the file&lt;br&gt;
featured: leave as false for all articles&lt;br&gt;
deprecated: leave as false for all articles&lt;br&gt;
ai-summary: create a one line summary used for ai llms to index&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This worked remarkably well and provided an easy diff view for each page to quickly eyeball the change. But based on the volume, I ended up doing the Accept All option. &lt;/p&gt;

&lt;p&gt;The best part was the analysis of the document to write out the metadata, especially for things like the description, ai-summary, sdk, and keywords. Having the AI agent analyse the document and figure out what to put in there saved a lot of human brain power. &lt;/p&gt;

&lt;p&gt;When looking at our Cursor dashboard, I’d guess that preparing and then completing this activity would have used about 10,000 lines of agent edits. Not sure how that converts to requests with Cursor, but I’d wager that at least a few hundred out of the included 500 requests were consumed with this.&lt;/p&gt;

&lt;p&gt;One part that didn’t work too well was actually updating every file. I had to run through this a few times since it would seemingly pick random files throughout the structure, but not all of them. It wasn’t an issue through since it’s easy to see all the modified files in the folder structure and then re-prompt Cursor to grab the missed files. &lt;/p&gt;

&lt;h2&gt;
  
  
  What it looks like on the page
&lt;/h2&gt;

&lt;p&gt;So once deployed, this content gets written to the &lt;code&gt;&amp;lt;head&amp;gt;&lt;/code&gt; section of the HTML files. Here's the relevant parts on our &lt;a href="https://docs.kinde.com/developer-tools/sdks/backend/nextjs-sdk/" rel="noopener noreferrer"&gt;Next.js App Router SDK&lt;/a&gt; page based on this front matter update.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;meta name="ai-summary" content="Complete guide for Next.js App Router SDK including installation, configuration, middleware setup, route protection, and authentication integration for Next.js 13+ applications."/&amp;gt;
&amp;lt;meta name="keywords" content="Next.js SDK, App Router, Server Side Components, middleware, authentication, route protection, environment variables"/&amp;gt;
&amp;lt;meta name="description" content="Complete guide for Next.js App Router SDK including installation, configuration, middleware setup, route protection, and authentication integration for Next.js 13+ applications."/&amp;gt;
&amp;lt;meta name="sdk" content="nextjs"/&amp;gt;
&amp;lt;meta name="languages" content="javascript, typescript, jsx, tsx"/&amp;gt;
&amp;lt;meta name="audience" content="developers"/&amp;gt;
&amp;lt;meta name="complexity" content="intermediate"/&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I think for a future pass, we'll try to optimise the &lt;code&gt;ai-summary&lt;/code&gt; to be something more suitable to the AI LLMs, but this seems good for now.&lt;/p&gt;

&lt;h2&gt;
  
  
  Using AI in our docs already
&lt;/h2&gt;

&lt;p&gt;We currently have an AI agent built into our docs that powers both the search and chat functions, which uses &lt;a href="https://inkeep.com/" rel="noopener noreferrer"&gt;InKeep&lt;/a&gt; under the hood. &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%2F38sr61tk3h3pzuia8xbm.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%2F38sr61tk3h3pzuia8xbm.png" alt="InKeep AI agent for Kinde" width="800" height="597"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When speaking with their team, they said that the AI agent we use won't benefit too much from the extra front matter because they analyse our pages in detail already. The biggest benefit would be breadcrumbs to help provide category context, which we already include on our pages. &lt;/p&gt;

&lt;h2&gt;
  
  
  In summary
&lt;/h2&gt;

&lt;p&gt;Hopefully these changes will have a positive impact with how search engines and the AI chat bots index our documentation. And to be honest, I don't even know how to measure the performance against these changes, but I guess it's better try something rather than do nothing. Using an AI tool to make the changes definitely saved a ton of time and effort providing the summaries and other contextual information.&lt;/p&gt;

</description>
      <category>frontmatter</category>
      <category>documentation</category>
      <category>seo</category>
      <category>aiseo</category>
    </item>
  </channel>
</rss>
