One command
Scaffold with npx @zindua/create-app@latest my-app. Setup wizard runs in the browser after npm run dev.

Scaffold a Next.js app with email and WhatsApp OTP. @zindua/sdk stays on the server. Route Handlers call Zindua. The browser never sees the key.
npx @zindua/create-app@latest my-appScaffold with npx @zindua/create-app@latest my-app. Setup wizard runs in the browser after npm run dev.

ZINDUA_API_KEY lives in .env.local only. Route Handlers call the API, never the browser.

OTP channel (email or whatsapp) and template language are set in .env.local, not in the UI.

Localized pages at /en, /fr, /es with a locale switcher. UI language is separate from OTP template lang.

Quick start
Click a topic — the code updates in place.
1npx @zindua/create-app@latest my-app2cd my-app3npm install4npm run dev5 6# Browser wizard at /setup — API key, channels, template, auth mode7# Restart dev server when setup finishes (Ctrl+C, npm run dev)8 9# Optional Neon after password auth in wizard:10# npm run db:pushUse npx, not npm i. SDK: npm install @zindua/sdk v1.4.1.
Setup
Configure Zindua first, then scaffold. Same template slug for email and WhatsApp.
Create a Zindua project
Sign up at zindua.run, create a project, and copy the API key from Dashboard → Projects. Use a test key locally, live key in production.
Stack
Optional Postgres. Falls back to in-memory OTP when DATABASE_URL is unset.
No DATABASE_URL → in-memory OTP.
Neon Postgres
Optional DATABASE_URL. Persists users, sessions, OTP codes, audit logs, and devices. Required for password register/login.
Security
The SDK throws in the browser. Client Components call your Route Handlers; Route Handlers call Zindua.
Browser
(Client Components)
Cannot call SDK
Route Handlers
app/api/**/route.ts
Zindua API
API key stays on the server
Browser → your API → Zindua

Reference
One panel. Pick a topic, then a row.
Password modes need Neon.
otp
AUTH_MODE=otp
OTP only (default)
Scaffold
The App Router tree @zindua/create-app writes. Open a file in the explorer.
Explorer
Server-only SDK client
Scaffold project
npx @zindua/create-app@latest my-appSwitch UI
npx @zindua/create-app@latest templateSync auth engine
npx @zindua/create-app@latest updateDiagnose setup
npx @zindua/create-app@latest doctor
Scaffold with @zindua/create-app, paste your key in /setup, and send from a Route Handler.