<?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: Mark Odera</title>
    <description>The latest articles on DEV Community by Mark Odera (@markodera).</description>
    <link>https://dev.to/markodera</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%2F1668170%2F177473c8-57fb-4fc3-8aba-2e39affd84e6.jpg</url>
      <title>DEV Community: Mark Odera</title>
      <link>https://dev.to/markodera</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/markodera"/>
    <language>en</language>
    <item>
      <title>Most Auth Tools Give You Users and Sessions. HVT Gives You Something Better.</title>
      <dc:creator>Mark Odera</dc:creator>
      <pubDate>Thu, 14 May 2026 09:41:52 +0000</pubDate>
      <link>https://dev.to/markodera/most-auth-tools-give-you-users-and-sessions-hvt-gives-you-something-better-55d</link>
      <guid>https://dev.to/markodera/most-auth-tools-give-you-users-and-sessions-hvt-gives-you-something-better-55d</guid>
      <description>&lt;p&gt;Firebase Auth, Auth0, and Clerk are all solid products. If you need authentication up and running in an afternoon and you never want to think about it again, any of them will do the job.&lt;br&gt;
But there is a problem none of them will tell you about: you do not own any of them.&lt;br&gt;
Your user data lives on their servers. Their pricing teams decide what you pay next year. Their roadmaps decide what features you get. And if any of them go down, change their terms, or get acquired and rebranded into something unrecognisable, which has already happened with Auth0 and Okta, you are along for the ride whether you like it or not.&lt;br&gt;
That is a problem HVT was built to solve.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the alternatives actually cost you
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Firebase&lt;/strong&gt; Auth is the easiest to get started with, which is exactly why so many teams default to it. But it is a Google product, closed-source, and there is no self-hosted option. Your user data sits on Google's infrastructure permanently. If you are building anything in fintech, healthtech, or any space where data residency matters, that is a compliance conversation waiting to happen.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Auth0&lt;/strong&gt; used to be the serious choice for teams that needed more control. Then Okta acquired it, and the pricing has become infamous enough that "Auth0 pricing shock" is practically a genre of developer blog post at this point. It is powerful, but closed-source and expensive at scale.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Clerk&lt;/strong&gt; has arguably the best developer experience of the three. The DX is genuinely good. But it is entirely hosted, there is no self-hosting path at all, and the MAU-based pricing model means your auth bill scales against you as your product grows. For non-US teams, data residency is also a real concern.&lt;br&gt;
The pattern across all three is the same: you are renting infrastructure from a company whose priorities are not necessarily yours.&lt;/p&gt;

&lt;h2&gt;
  
  
  What HVT does differently
&lt;/h2&gt;

&lt;p&gt;HVT is open-source, AGPL v3, and fully self-hostable. You run it on your own infrastructure, your user data never leaves your servers, and because the entire codebase is public, you can audit it, fork it, and modify it.&lt;br&gt;
But self-hosting is not the only differentiator. SuperTokens, Keycloak, and others are also self-hostable. What separates HVT is the access model.&lt;/p&gt;

&lt;p&gt;Most auth tools think in terms of users and sessions. HVT thinks in terms of a hierarchy:&lt;br&gt;
&lt;strong&gt;Org → Project → API key → Runtime token&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You create an organisation. Within it, you create projects. Each project has scoped API keys with explicit permissions. At runtime, those keys exchange for short-lived tokens. Every layer is explicit, auditable, and scoped.&lt;/p&gt;

&lt;p&gt;This matters more than it sounds. When your product grows from one service to ten, when you bring on contractors who need access to one project but not others, when you need to rotate credentials without touching your entire auth layer, a flat user-session model becomes a liability. The hierarchy scales with you.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who HVT is for
&lt;/h2&gt;

&lt;p&gt;HVT is not trying to replace Firebase Auth for the developer spinning up a weekend project. If you need auth in two hours and you will never think about data ownership, Firebase is fine.&lt;br&gt;
HVT is for teams that have been burned before. Developers building in regulated industries. Founders who want infrastructure they actually control. Anyone who has ever had to explain to a client why their user data lives on a third-party server in a country they did not choose.&lt;br&gt;
If that is you, HVT is worth a look&lt;/p&gt;

&lt;h2&gt;
  
  
  Get started
&lt;/h2&gt;

&lt;p&gt;Live platform: &lt;a href="https://hvts.app" rel="noopener noreferrer"&gt;hvts.app&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Documentation: &lt;a href="https://docs.hvts.app" rel="noopener noreferrer"&gt;docs.hvts.app&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/markodera/hvt" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;: Star the repo and follow the project, HVT is actively developed and community feedback shapes the roadmap.&lt;/p&gt;

&lt;p&gt;If you have questions, run into issues, or want to discuss a specific use case, drop a comment below. Always happy to talk through it.&lt;/p&gt;

</description>
      <category>opensource</category>
    </item>
    <item>
      <title>Why I built an open-source alternative to Auth0</title>
      <dc:creator>Mark Odera</dc:creator>
      <pubDate>Tue, 28 Apr 2026 18:14:03 +0000</pubDate>
      <link>https://dev.to/markodera/why-i-built-an-open-source-alternative-to-auth0-143g</link>
      <guid>https://dev.to/markodera/why-i-built-an-open-source-alternative-to-auth0-143g</guid>
      <description>&lt;p&gt;Auth0 is a great product. So is Clerk. But at scale, both get expensive fast. Auth0 can run into hundreds of dollars a month once you cross certain MAU thresholds. Clerk charges per user. If you are building a multi-tenant SaaS, those numbers compound quickly.&lt;br&gt;
I spent a long time looking for an alternative. Something with JWT rotation, RBAC, webhooks, audit logs, and multi-tenancy baked in. I could not find one that covered the full surface, so I built it.&lt;/p&gt;
&lt;h2&gt;
  
  
  What HVT is
&lt;/h2&gt;

&lt;p&gt;HVT is a self-hostable authentication platform. You run it yourself for free, or use the managed cloud version at &lt;a href="https://hvts.app" rel="noopener noreferrer"&gt;hvts.app&lt;/a&gt;. It is licensed under AGPL v3.&lt;/p&gt;

&lt;p&gt;The core model is: &lt;strong&gt;Organisation → Project → API key → Runtime token.&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;Each app or environment gets its own project. Runtime users (your app's end users) are isolated per project. The same email can exist across different projects without collision.&lt;/p&gt;
&lt;h2&gt;
  
  
  What it covers
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;JWT&lt;/strong&gt; with rotation and blacklisting&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Runtime user signup&lt;/strong&gt;, login, social auth (Google, GitHub)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Per-project RBAC&lt;/strong&gt; with custom app roles and permission slugs&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;HMAC-signed webhooks&lt;/strong&gt; with retry and auto-disable&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Full audit logging&lt;/strong&gt; across 21 event types&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;TypeScript SDK&lt;/strong&gt; (&lt;code&gt;@hvt/sdk&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;One-click Railway deploy&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Why AGPL
&lt;/h2&gt;

&lt;p&gt;If you modify HVT and deploy it as a network service, you have to open-source those changes. That is intentional. It keeps the ecosystem honest and ensures improvements flow back to the community.&lt;/p&gt;
&lt;h2&gt;
  
  
  Where it is now
&lt;/h2&gt;

&lt;p&gt;The backend is live at &lt;a href="https://api.hvts.app" rel="noopener noreferrer"&gt;api.hvts.app&lt;/a&gt;. Docs are at &lt;a href="https://docs.hvts.app" rel="noopener noreferrer"&gt;docs.hvts.app&lt;/a&gt;. The SDK is published under &lt;code&gt;@hvt/sdk&lt;/code&gt; on npm. It is early, but it works.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/markodera/hvt" class="crayons-btn crayons-btn--primary" rel="noopener noreferrer"&gt;Check out the HVT GitHub Repository&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;If you have been burned by auth pricing or vendor lock-in, give it a look. Feedback welcome.&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/markodera" rel="noopener noreferrer"&gt;
        markodera
      &lt;/a&gt; / &lt;a href="https://github.com/markodera/hvt" rel="noopener noreferrer"&gt;
        hvt
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      HVT is an open-source authentication infrastructure built for developers, start-ups and teams who want to build fast and take full control of their authentication systems
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;HVT&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;HVT is an open-source authentication platform built with Django and Django REST Framework. It provides a control plane for organizations, projects, API keys, invites, webhooks, and audit logs, plus a runtime auth plane for customer-facing applications.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Current Scope&lt;/h2&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;email and password authentication&lt;/li&gt;
&lt;li&gt;JWT access and refresh tokens&lt;/li&gt;
&lt;li&gt;registration, email verification, and password reset&lt;/li&gt;
&lt;li&gt;Google and GitHub social login&lt;/li&gt;
&lt;li&gt;organizations, projects, and API keys&lt;/li&gt;
&lt;li&gt;project-scoped runtime auth with shared identity across projects&lt;/li&gt;
&lt;li&gt;invitations, project roles, permissions, and audit logs&lt;/li&gt;
&lt;li&gt;webhook delivery for organization events&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Project Model&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;HVT separates two concerns:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;control plane: the dashboard and admin-facing APIs used to manage organizations, projects, API keys, social providers, invites, and webhooks&lt;/li&gt;
&lt;li&gt;runtime plane: project-scoped auth flows that your application uses for sign-up, sign-in, social login, verify-email, and password reset&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;True Multi-Tenant Isolation:&lt;/strong&gt;
User accounts are strictly isolated at the project level. Unlike traditional Django apps where an email must be globally unique…&lt;/p&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/markodera/hvt" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


</description>
      <category>opensource</category>
      <category>auth0challenge</category>
      <category>security</category>
      <category>typescript</category>
    </item>
    <item>
      <title>Django Task Manager: Built in a Day with Django</title>
      <dc:creator>Mark Odera</dc:creator>
      <pubDate>Sat, 18 Jan 2025 23:06:27 +0000</pubDate>
      <link>https://dev.to/markodera/django-task-manager-built-in-a-day-with-django-4ihp</link>
      <guid>https://dev.to/markodera/django-task-manager-built-in-a-day-with-django-4ihp</guid>
      <description>&lt;p&gt;Built in a Day with Django&lt;/p&gt;

&lt;p&gt;Introduction&lt;/p&gt;

&lt;p&gt;Hey Dev.to community! 👋I built a task manager app in one day for the Dev.to Django Challenge. My aim was to explore Django’s capabilities while creating something functional.&lt;/p&gt;

&lt;p&gt;Features ✅&lt;/p&gt;

&lt;p&gt;Authentication &amp;amp; CRUD for tasks&lt;/p&gt;

&lt;p&gt;Prioritization &amp;amp; due dates&lt;/p&gt;

&lt;p&gt;Search and filter options&lt;/p&gt;

&lt;p&gt;Responsive design&lt;/p&gt;

&lt;p&gt;Tech Stack 🛠️&lt;/p&gt;

&lt;p&gt;Django 4.x&lt;/p&gt;

&lt;p&gt;Python 3.x&lt;/p&gt;

&lt;p&gt;Bootstrap 5&lt;/p&gt;

&lt;p&gt;SQLite3&lt;/p&gt;

&lt;p&gt;Setup 🚀&lt;/p&gt;

&lt;p&gt;Clone repo:&lt;/p&gt;

&lt;p&gt;git clone &lt;a href="https://github.com/markodera/freshstart-taskmanager.git" rel="noopener noreferrer"&gt;https://github.com/markodera/freshstart-taskmanager.git&lt;/a&gt;&lt;br&gt;
cd freshstart-taskmanager&lt;/p&gt;

&lt;p&gt;Activate virtual environment:&lt;/p&gt;

&lt;p&gt;python -m venv venv &amp;amp;&amp;amp; source venv/bin/activate&lt;/p&gt;

&lt;p&gt;Install dependencies:&lt;/p&gt;

&lt;p&gt;pip install -r requirements.txt&lt;/p&gt;

&lt;p&gt;Run migrations and server:&lt;/p&gt;

&lt;p&gt;python manage.py migrate &amp;amp;&amp;amp; python manage.py runserver&lt;/p&gt;

&lt;p&gt;Lessons Learned ✍️&lt;/p&gt;

&lt;p&gt;Plan first.&lt;/p&gt;

&lt;p&gt;Focus on essentials.&lt;/p&gt;

&lt;p&gt;Leverage Django’s built-in tools.&lt;/p&gt;

&lt;p&gt;Closing Thoughts&lt;/p&gt;

&lt;p&gt;Django is amazing for quick, powerful builds. Try a similar challenge—you’ll learn a ton!&lt;/p&gt;

&lt;p&gt;GitHub Repo: &lt;a href="https://github.com/markodera/freshstart-taskmanager.git%C2%A0%F0%9F%99%8C" rel="noopener noreferrer"&gt;https://github.com/markodera/freshstart-taskmanager.git 🙌&lt;/a&gt;&lt;/p&gt;

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