Welcome
Start here for Intry developer documentation.
What you will find here
Intry connects visitors at the door with residents on their phones: Twilio voice calls, 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, deploy targets (Railway, Fly.io), and domain model.
Admin HTTP API
`/api/admin/*` — tenants, properties, units, users, calls, devices, analytics.
OpenAPI
Import `docs/openapi/admin.yaml` from the intry-mvp repository into Postman or codegen tools.
Repository entry points
| Area | Location | Notes |
|---|---|---|
| Core API | src/server.ts, src/routes/ | Public + Twilio webhooks + registration |
| Admin API | src/routes/admin/ | WorkOS SSO or Unkey; X-Admin-Env for multi-env |
| Schema | prisma/schema.prisma | Source of truth for models and relations |
| Admin UI proxy | tools/intry-admin/ | Fly.io; proxies to Railway backends |
| Portal | tools/intry-portal/ | Next.js + Clerk |
| Mobile | tools/intry-app/ | Expo / React Native |
| MCP | tools/intry-mcp/ | Cursor / agent integration against admin API |
Conventions
- IDs: UUIDs generated by the database — do not invent IDs on create.
- Lists: Responses typically include
{ "<entityPlural>": [...], "total", "limit", "offset" }. - Field names: Use exact Prisma names in API payloads (e.g.
unitLabel,e164,durationSec).
Living docs
These pages track the intry-mvp monorepo. When behavior diverges between environments, prefer the code and docs/ folder in the repo for the final word.