Welcome
Start here for Intry developer documentation.
What you will find here
Intry connects visitors at the door with residents on their phones: carrier voice (Twilio/Telnyx), Knock push notifications, approve/deny flows, and a full audit trail. This site documents how the Intry Core API (Express + Prisma + PostgreSQL), admin tooling, mobile (Expo), and resident portal (Next.js + Clerk) fit together.
Architecture
Repo layout, auth, telephony, billing, and domain model.
Admin HTTP API
`/api/admin/*` — tenants, properties, units, users, calls, devices.
Telephony
TelephonyProvider, Twilio/Telnyx webhooks, virtual numbers.
Help center
End-user docs for residents and property managers.
OpenAPI
Import `docs/openapi/admin.yaml` into Postman or codegen tools.
Repository entry points
| Area | Location | Notes |
|---|---|---|
| Core API | src/server.ts, src/routes/ | Voice webhooks + v1 + admin |
| Admin API | src/routes/admin/ | WorkOS/Clerk + Unkey; X-Admin-Env |
| Schema | prisma/schema.prisma | Source of truth for models |
| Admin UI | tools/intry-admin/ | Express proxy + Clerk gateway |
| Portal | tools/intry-portal/ | Next.js + Clerk + i18n |
| Mobile | tools/intry-app/ | Expo / React Native + Clerk |
| MCP | tools/intry-mcp/ | Cursor / agent integration |
| Help center | tools/intry-support/ | Resident/PM support docs |
Conventions
- IDs: UUIDs generated by the database — do not invent IDs on create.
- Lists: Legacy
{ "<entityPlural>": [...], "total", "limit", "offset" }or newer{ data, meta?, error? }. - Field names: Use exact Prisma names (
unitLabel,e164,durationSec).
Living docs
These pages track the intry-mvp monorepo. Deep runbooks live in repo docs/; this site holds curated summaries. When behavior diverges, prefer code and OpenAPI.
Last verified: 2026-06-21 (commit 293c4a7)