jamauth Preview

JamAuth is magic-link authentication as a service.

Add passwordless login and access control to a website, app, API, or server. Use an approved-email list, Stripe customer status, or your own rules to decide who gets in.

what it does

Two questions, kept separate.

JamAuth proves who someone is, then checks whether they should be allowed in. Magic links answer the first question. Your approved-email list, Stripe account, or application answers the second.

Your code still decides what a signed-in person can see or do. JamAuth gives it a verified identity and an access decision.

what you can use it for

paid members

Put part of a blog, course, community, or website behind paid access.

private tools

Protect an admin area, internal dashboard, client portal, or team-only application.

roles & permissions

Use the verified identity in your own code to give different people different privileges.

protected downloads

Keep files, releases, paid resources, and private documents out of public URLs.

01  paste the login widget

Drop it where the login should appear. JamAuth sends the email, verifies the link, and creates the session.

<div id="jamauth-login"></div>

<script
  src="https://api.jamauth.com/jamauth.js"
  data-client-id="YOUR_CLIENT_ID"
  data-host="https://api.jamauth.com"
  data-target="#jamauth-login"
></script>

02  protect the route

Before the route opens, your server asks one question: is this signed-in person allowed?

/.netlify/functions/protected-page

The starter includes the callback, session check, and protected route as a working reference.

how access is granted

approved emails

available now

Add addresses from the dashboard. No billing setup and no extra code. Good for beta lists, client previews, private tools, and protected files.

stripe customers

in preview

Keep checkout, pricing, and subscriptions in Stripe. JamAuth uses active customer status to decide whether the signed-in email gets access.

your own system

Keep the access rule in your own application. JamAuth calls a webhook you control, and your code answers yes or no — use another payment provider, a role, a plan, a license, or any record you already have.

The login stays the same. Only the source of the access decision changes.

what your users see

Once someone has access, signing in is simple: enter an email, click the magic link, and return signed in. No password to create, remember, reset, or store.

where it runs

The login script goes anywhere you can add a tag. The gate — the part that actually refuses access — runs wherever you can run a small server-side check: Netlify, Vercel, Render, or your own server.

Webflow, WordPress, and plain HTML sites work too, with a serverless route added alongside them. A script on its own can hide a page; it cannot protect one.

why I made it

I kept needing login and access control in my own projects, and I was tired of every project turning into an authentication project. JamAuth is the part I wanted to stop rebuilding.

removing it is three steps

  1. Delete the login widget.
  2. Delete the callback.
  3. Point your protected route somewhere else.

Your content, Stripe account, and access rules stay with you. There is no password database to unwind and no application framework to migrate away from.