PassGate is a passkey (WebAuthn) implementation kit for SaaS teams that want passwordless sign-in: a $49 template pack or a $299 done-for-you install with a 48-hour delivery window. It is implementation help, not a security audit.PassGate 是给想上无密码登录的 SaaS 团队用的通行密钥(WebAuthn)落地套件:$49 模板包,或 $299 代装服务(48 小时交付窗口)。它是实施帮助,不是安全审计。PassGate 是給想導入無密碼登入的 SaaS 團隊用的通行金鑰(WebAuthn)落地套件:$49 範本包,或 $299 代裝服務(48 小時交付窗口)。它是實作協助,不是安全稽核。PassGate は、パスワードレス認証を導入したい SaaS チーム向けのパスキー(WebAuthn)実装キットです。$49 のテンプレートパック、または 48 時間で納品する $299 の導入代行。セキュリティ監査ではなく実装支援です。PassGate는 비밀번호 없는 로그인을 도입하려는 SaaS 팀을 위한 패스키(WebAuthn) 구현 키트입니다. $49 템플릿 팩 또는 48시간 내 납품하는 $299 설치 대행. 보안 감사가 아닌 구현 지원입니다.PassGate ialah kit pelaksanaan passkey (WebAuthn) untuk pasukan SaaS yang mahu log masuk tanpa kata laluan: pek templat $49 atau pemasangan siap $299 dalam tempoh 48 jam. Ia bantuan pelaksanaan, bukan audit keselamatan.PassGate là bộ triển khai passkey (WebAuthn) cho đội SaaS muốn đăng nhập không mật khẩu: gói mẫu $49 hoặc dịch vụ cài đặt trọn gói $299 trong 48 giờ. Đây là hỗ trợ triển khai, không phải kiểm toán bảo mật.PassGate est un kit d’implémentation de passkeys (WebAuthn) pour les équipes SaaS qui veulent une connexion sans mot de passe : un pack de modèles à 49 $ ou une installation clé en main à 299 $ livrée en 48 heures. C’est une aide à l’implémentation, pas un audit de sécurité.PassGate es un kit de implementación de passkeys (WebAuthn) para equipos SaaS que quieren inicio de sesión sin contraseña: un paquete de plantillas de 49 $ o una instalación llave en mano de 299 $ en 48 horas. Es ayuda de implementación, no una auditoría de seguridad.PassGate ist ein Passkey-(WebAuthn-)Umsetzungskit für SaaS-Teams, die passwortlose Anmeldung wollen: ein Template-Paket für 49 $ oder eine Komplettinstallation für 299 $ innerhalb von 48 Stunden. Es ist Umsetzungshilfe, kein Sicherheitsaudit.

← Back to PassGate

Template pack

Everything in the $49 ZIP

Six items, each opened below with what it does and a real excerpt. The archive ships when checkout opens; this page is the spec it is built to.

Version
v0.1 pre-release
Page updated
2026-10-14
Format
ZIP · TS + SQL + Markdown
Free sample
CHECKLIST.md ↓

The interest form is saved only in this browser

Nothing is sent to a server, no order is created and nothing is charged. Checkout opens later through Creem.

Archive layout

Open any item to see its purpose and a short excerpt. Code blocks have a copy button.

templates/nextjs-webauthn/Runnable Next.js App Router example

A small Next.js app you can run locally and copy from: sign-up with a passkey, sign-in, a settings page to list and revoke keys, and recovery codes. Server code uses @simplewebauthn/server; the browser side uses @simplewebauthn/browser.

  • Route handlers for registration and authentication options + verification
  • Challenge store with expiry, plus a session cookie after login
  • Settings screen: list, rename, revoke passkeys
  • Recovery codes: generate, hash, show once, redeem
app/api/passkey/register/options/route.ts
import { generateRegistrationOptions } from "@simplewebauthn/server";

const options = await generateRegistrationOptions({
  rpName: "Acme",
  rpID: process.env.RP_ID!, // e.g. app.acme.com
  userName: user.email,
  excludeCredentials: user.passkeys.map((k) => ({ id: k.credentialId })),
  authenticatorSelection: { residentKey: "preferred", userVerification: "preferred" },
});
localhost:3000 / settings / passkeys
Passkeys
MacBook Pro · Touch IDCreated today · last used 2 min ago
Revoke
iPhone · iCloud KeychainSynced passkey · last used yesterday
Revoke
Recovery codes8 of 10 unused · shown once at creation
Regenerate
Illustrative HTML render of the example app's settings screen, not a product screenshot.
templates/supabase-migration/Password → passkey migration for Supabase

Steps for adding passkeys next to existing Supabase password accounts, so current users keep working while they enrol a passkey.

  1. Create the passkeys table with row-level security
  2. Offer "add a passkey" after a normal password login
  3. Let enrolled users sign in with a passkey first, password as fallback
  4. Optionally hide the password field once a user has two passkeys
migrations/001_passkeys.sql
create table public.passkeys (
  id           text primary key,  -- credential ID, base64url
  user_id      uuid not null references auth.users (id) on delete cascade,
  public_key   bytea not null,
  counter      bigint not null default 0,
  transports   text[],
  created_at   timestamptz not null default now()
);
alter table public.passkeys enable row level security;
templates/clerk-alternative-notes.mdKeep Clerk or move out: a decision note

If you already use Clerk, this note helps you decide whether to keep it and turn on its passkey option, or move auth into your own database.

Keep Clerk if

  • its built-in passkey option covers what you need
  • you rely on its user and organisation management UI

Move out if

  • you must own the credential table and session format
  • pricing per active user no longer fits your plan
clerk-alternative-notes.md
## Decision in one question
Do you need to own the credential table and the session format?
- No  → keep Clerk, turn on its passkey option, stop here.
- Yes → follow supabase-migration/ or the custom-JWT path.

We do not reverse-engineer or bypass Clerk.
CHECKLIST.md30 go-live checks

Thirty checks to run before you turn passkeys on in production, grouped by config, ceremony, storage, UX, recovery and operations.

CHECKLIST.md · 6 / 30
- [ ] 1. RP ID is the registrable domain users sign in on
- [ ] 2. Expected origin lists every production origin explicitly, no wildcards
- [ ] 6. Challenges are random, single-use and expire within 5 minutes
- [ ] 14. Signature counter is compared on each login
- [ ] 18. Users can rename and revoke a passkey
- [ ] 22. Recovery codes are generated with a CSPRNG and stored hashed

Download the full CHECKLIST.md (free)

TEST_PLAN.mdBrowser and device test matrix

A matrix of browsers, operating systems and flows to test by hand, with a column for passkey autofill (conditional UI).

EnvironmentRegisterSign inAutofill
Chrome · Windows 11□□□
Safari · macOS□□□
Safari · iOS□□□
Chrome · Android□□□
Firefox · desktop□□□
Phone as key (QR, cross-device)□□—

The boxes are empty for you to tick. The $499 plan includes a filled-in record for your app.

LICENSECommercial use terms

A short commercial licence: use the code in your own products and client work, but do not resell the template itself.

See the can / cannot summary below ↓

Compatibility

What the example targets. Other stacks can follow the same steps, but these are the versions the code is written for.

PartTarget versionCovered by
Next.js (App Router)14.2+ · 15Runnable example
Node.js20 LTS+Example + CI script
@simplewebauthn/server · browserv13Runnable example
Supabase (Postgres + Auth)supabase-js v2Migration SQL + steps
Custom JWT sessionjose v5Notes + snippet
Clerk—Decision notes only

Targets, not certifications. Versions will be re-checked and noted in the changelog when the ZIP ships.

License in plain words

You can

  • Use the code in any number of your own products, commercial included
  • Use it in client projects you build and hand over
  • Modify it freely; no attribution needed in your product

You cannot

  • Resell, sublicense or share the template itself
  • Ship it inside a boilerplate, starter kit or course
  • Publish the unmodified source in a public repo

Summary only. The LICENSE file in the ZIP is the binding text.

Delivery and refunds

How you get it

After paying through Creem you get a download link for the ZIP and a welcome email with quick start, environment variables and five common errors.

Refunds

Digital goods: refunded only if the ZIP fails to download within 24 hours and we cannot fix it. Upgrading to an install is always possible.

FAQ

Do I need Next.js?

No. The example is Next.js, but the checklist, test plan and Supabase steps apply to any web stack that can run a WebAuthn server library.

Does it work with the Pages Router?

The example uses the App Router. The server logic is plain functions, so moving it into API routes is a small change.

Will the template be updated?

Every change is listed in the changelog below with its date.

Where does the interest form go?

Nowhere. It is saved in this browser's localStorage only. Nothing is sent to us, and it is not an order.

Is this a security audit?

No. PassGate is implementation help and a template. It does not certify your product. Responsibility boundaries are written into the order.

Changelog

  1. Template page rebuilt

    Each file now opens with its purpose and an excerpt, plus a compatibility table, license summary, FAQ, free CHECKLIST.md sample and 10 languages.

  2. PassGate site launched

    Landing page and template page in Simplified Chinese and English. Checkout shown as a placeholder.