RECIPES·Production Architectures
Examples & tutorials
Four production-shaped integration recipes. Each example demonstrates end-to-end access verification across physical hardware and edge software.
Content Paywall (Next.js Edge)
Gate premium routes behind a Day Pass with Edge middleware — zero database queries, sub-15ms checks.
middleware.ts
// Next.js Edge middleware paywall: Day Pass for premium contentimport Passyn from "@passyn/node";import { NextResponse, type NextRequest } from "next/server";const passyn = new Passyn(process.env.PASSYN_API_KEY!);export async function middleware(req: NextRequest) {if (!req.nextUrl.pathname.startsWith("/premium")) return NextResponse.next();const userId = req.cookies.get("uid")?.value;if (!userId) return NextResponse.redirect(new URL("/buy-pass", req.url));const { valid } = await passyn.access.verify({userId,passId: process.env.DAY_PASS_ID!,});return valid? NextResponse.next(): NextResponse.redirect(new URL("/buy-pass", req.url));}
Gym & Fitness Turnstile
Physical optical turnstile verification with usage decrementing and fail-closed security.
turnstile.ts
// Physical gym turnstile: consume 1 entry per scan, fail closedimport Passyn, { PassynError } from "@passyn/node";const passyn = new Passyn(process.env.PASSYN_API_KEY!);export async function onBadgeScan(memberId: string) {try {const check = await passyn.access.verify({userId: memberId,passId: process.env.GYM_DAY_PASS_ID!,consume: true, // atomically decrements remaining uses});if (check.valid) return openTurnstile();return displayScreen(check.reason ?? "Pass expired — renew at desk");} catch (err) {if (err instanceof PassynError) console.error(err.code, err.message);return displayScreen("Turnstile offline. Contact staff.");}}
Exam & LMS Cram Window
Time-bounded access to high-stakes prep material during exam weeks.
exam-platform.ts
// Exam platform: sell a 72-hour cram session windowconst cramPass = await passyn.passes.create({name: "Finals Cram 72h",type: "EXAM",durationHours: 72,price: 19,maxUses: null, // unlimited access during the windowisActive: true,});// Issue access when payment completes:await passyn.access.activate({ userId: student.id, passId: cramPass.id });// Gate question bank:const { valid, expiresAt } = await passyn.access.verify({userId: student.id,passId: cramPass.id,});
Meeting Room Smart Lock
Single-use electronic door unlock credentials for coworking desks and pods.
smart-lock.ts
// Coworking conference room: 4-hour single-entry bookingconst roomPass = await passyn.passes.create({name: "Meeting Room 4h",type: "CUSTOM",durationHours: 4,maxUses: 1, // one single door openingprice: 35,isActive: true,});// Smart lock verifies and consumes on badge or QR scan:const result = await passyn.access.verify({userId: bookerId,passId: roomPass.id,consume: true,});if (result.valid) unlockElectronicDoor();